[
  {
    "package": "docs/en/docs/js",
    "ext": ".js",
    "methods": 49,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "(other)",
    "ext": ".js",
    "methods": 1,
    "skip": "",
    "structure_score": 0
  },
  {
    "package": "docs_src",
    "ext": ".py",
    "methods": 45,
    "skip": "low_structure",
    "structure_score": 0.15841584158415842
  },
  {
    "package": "docs_src/additional_responses",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.40540540540540543,
    "sore": "if.(img+item_id).(FileResponse+else+media_type+return)+.JSONResponse+?.status_code?.content?",
    "gbnf": "root ::= \"if\" (\"img\" | \"item_id\") (\"FileResponse\" | \"else\" | \"media_type\" | \"return\")+ \"JSONResponse\"* \"status_code\"? \"content\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/advanced_middleware",
    "ext": ".py",
    "methods": 3,
    "skip": "low_structure",
    "structure_score": 0.0
  },
  {
    "package": "docs_src/app_testing",
    "ext": ".py",
    "methods": 14,
    "skip": "",
    "structure_score": 0.34285714285714286,
    "sore": "return?.(TestClient+app+client+get+items+json+response+status_code+yield)+?.websocket_connect+?.(clear+item_id)+?.(accept+await+data+receive_json+send_json+websocket)+?.close+?",
    "gbnf": "root ::= \"return\"? (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"items\" | \"json\" | \"response\" | \"status_code\" | \"yield\")* \"websocket_connect\"* (\"clear\" | \"item_id\")* (\"accept\" | \"await\" | \"data\" | \"receive_json\" | \"send_json\" | \"websocket\")* \"close\"*",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/app_testing/app_b_an_py310",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.02142857142857143
  },
  {
    "package": "docs_src/app_testing/app_b_py310",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.02142857142857143
  },
  {
    "package": "docs_src/background_tasks",
    "ext": ".py",
    "methods": 8,
    "skip": "",
    "structure_score": 0.3142857142857143,
    "sore": "if?.open+?.mode?.log+?.(add_task+background_tasks+content+email+email_file+message+q+return+write+write_log+write_notification)+",
    "gbnf": "root ::= \"if\"? \"open\"* \"mode\"? \"log\"* (\"add_task\" | \"background_tasks\" | \"content\" | \"email\" | \"email_file\" | \"message\" | \"q\" | \"return\" | \"write\" | \"write_log\" | \"write_notification\")+",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/behind_a_proxy",
    "ext": ".py",
    "methods": 5,
    "skip": "",
    "structure_score": 1.0,
    "sore": "return.request?.scope?.get+?",
    "gbnf": "root ::= \"return\" \"request\"? \"scope\"? \"get\"*",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/bigger_applications/app_an_py310",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.7636363636363636,
    "sore": "if?.return?.(token+x_token)?.raise?.HTTPException+?.status_code?.detail?",
    "gbnf": "root ::= \"if\"? \"return\"? (\"token\" | \"x_token\")? \"raise\"? \"HTTPException\"* \"status_code\"? \"detail\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/bigger_applications/app_an_py310/routers",
    "ext": ".py",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.18292682926829268
  },
  {
    "package": "docs_src/body",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/body_multiple_params",
    "ext": ".py",
    "methods": 9,
    "skip": "low_structure",
    "structure_score": 0.06382978723404255
  },
  {
    "package": "docs_src/body_nested_models",
    "ext": ".py",
    "methods": 9,
    "skip": "",
    "structure_score": 0.21428571428571427,
    "sore": "(item+item_id+results+return)+.(images+offer+weights)?",
    "gbnf": "root ::= (\"item\" | \"item_id\" | \"results\" | \"return\")+ (\"images\" | \"offer\" | \"weights\")?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/body_updates",
    "ext": ".py",
    "methods": 4,
    "skip": "low_structure",
    "structure_score": 0.019230769230769232
  },
  {
    "package": "docs_src/configure_swagger_ui",
    "ext": ".py",
    "methods": 3,
    "skip": "",
    "structure_score": 0.21428571428571427,
    "sore": "return.username",
    "gbnf": "root ::= \"return\" \"username\"",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/cookie_param_models",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.23076923076923078,
    "sore": "return.cookies",
    "gbnf": "root ::= \"return\" \"cookies\"",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/custom_docs_ui",
    "ext": ".py",
    "methods": 8,
    "skip": "",
    "structure_score": 0.2670157068062827,
    "sore": "return.(get_swagger_ui_oauth2_redirect_html+username)+?.(get_redoc_html+get_swagger_ui_html)+?.(app+oauth2_redirect_url+openapi_url+title)+?.swagger_ui_oauth2_redirect_url?.redoc_js_url?.swagger_js_url?.swagger_css_url?",
    "gbnf": "root ::= \"return\" (\"get_swagger_ui_oauth2_redirect_html\" | \"username\")* (\"get_redoc_html\" | \"get_swagger_ui_html\")* (\"app\" | \"oauth2_redirect_url\" | \"openapi_url\" | \"title\")* \"swagger_ui_oauth2_redirect_url\"? \"redoc_js_url\"? \"swagger_js_url\"? \"swagger_css_url\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/custom_request_and_route",
    "ext": ".py",
    "methods": 18,
    "skip": "low_structure",
    "structure_score": 0.05844155844155844
  },
  {
    "package": "docs_src/custom_response",
    "ext": ".py",
    "methods": 19,
    "skip": "",
    "structure_score": 0.24,
    "sore": "def?.for?.i?.in?.range+?.(FileResponse+HTMLResponse+StreamingResponse+content+dumps+file_like+from+html_content+is+is not+iterfile+mode+not+open+option+orjson+return+some_file_path+yield)+.await?.(OPT_INDENT_2+ORJSONResponse+RedirectResponse+fake_video_streamer+generate_html_response+media_type+status_code)+?.anyio?.sleep+?",
    "gbnf": "root ::= \"def\"? \"for\"? \"i\"? \"in\"? \"range\"* (\"FileResponse\" | \"HTMLResponse\" | \"StreamingResponse\" | \"content\" | \"dumps\" | \"file_like\" | \"from\" | \"html_content\" | \"is\" | \"is not\" | \"iterfile\" | \"mode\" | \"not\" | \"open\" | \"option\" | \"orjson\" | \"return\" | \"some_file_path\" | \"yield\")+ \"await\"? (\"OPT_INDENT_2\" | \"ORJSONResponse\" | \"RedirectResponse\" | \"fake_video_streamer\" | \"generate_html_response\" | \"media_type\" | \"status_code\")* \"anyio\"? \"sleep\"*",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/dataclasses_",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.75,
    "sore": "return.author_id?.item?.items?",
    "gbnf": "root ::= \"return\" \"author_id\"? \"item\"? \"items\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/dependencies",
    "ext": ".py",
    "methods": 82,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "docs_src/dependency_testing",
    "ext": ".py",
    "methods": 14,
    "skip": "",
    "structure_score": 0.8181818181818181,
    "sore": "(client+get+response+status_code)+?.return?.json+?.q?.commons?.skip?.limit?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"response\" | \"status_code\")* \"return\"? \"json\"* \"q\"? \"commons\"? \"skip\"? \"limit\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/events",
    "ext": ".py",
    "methods": 7,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/extra_models",
    "ext": ".py",
    "methods": 9,
    "skip": "low_structure",
    "structure_score": 0.15328467153284672
  },
  {
    "package": "docs_src/generate_clients",
    "ext": ".py",
    "methods": 9,
    "skip": "",
    "structure_score": 0.7894736842105263,
    "sore": "return.(route+tags)+?.name?",
    "gbnf": "root ::= \"return\" (\"route\" | \"tags\")* \"name\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/handling_errors",
    "ext": ".py",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/header_param_models",
    "ext": ".py",
    "methods": 6,
    "skip": "",
    "structure_score": 0.23076923076923078,
    "sore": "return.headers",
    "gbnf": "root ::= \"return\" \"headers\"",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/header_params",
    "ext": ".py",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.08108108108108109
  },
  {
    "package": "docs_src/json_base64_bytes",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/metadata",
    "ext": ".py",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.0
  },
  {
    "package": "docs_src/path_operation_advanced_configuration",
    "ext": ".py",
    "methods": 9,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "docs_src/path_operation_configuration",
    "ext": ".py",
    "methods": 12,
    "skip": "",
    "structure_score": 0.6000000000000001,
    "sore": "return.item?",
    "gbnf": "root ::= \"return\" \"item\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/path_params",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.140625
  },
  {
    "package": "docs_src/path_params_numeric_validations",
    "ext": ".py",
    "methods": 12,
    "skip": "low_structure",
    "structure_score": 0.09090909090909091
  },
  {
    "package": "docs_src/pydantic_v1_in_v2",
    "ext": ".py",
    "methods": 3,
    "skip": "",
    "structure_score": 0.30000000000000004,
    "sore": "return.item",
    "gbnf": "root ::= \"return\" \"item\"",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/python_types",
    "ext": ".py",
    "methods": 13,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/query_param_models",
    "ext": ".py",
    "methods": 4,
    "skip": "low_structure",
    "structure_score": 0.16666666666666666
  },
  {
    "package": "docs_src/query_params",
    "ext": ".py",
    "methods": 6,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/query_params_str_validations",
    "ext": ".py",
    "methods": 31,
    "skip": "low_structure",
    "structure_score": 0.02702702702702703
  },
  {
    "package": "docs_src/request_files",
    "ext": ".py",
    "methods": 24,
    "skip": "",
    "structure_score": 0.4576271186440678,
    "sore": "if?.not?.(HTMLResponse+content+else+file+filename+for+len+return)+.in?.files?",
    "gbnf": "root ::= \"if\"? \"not\"? (\"HTMLResponse\" | \"content\" | \"else\" | \"file\" | \"filename\" | \"for\" | \"len\" | \"return\")+ \"in\"? \"files\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/request_form_models",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.30000000000000004,
    "sore": "return.data",
    "gbnf": "root ::= \"return\" \"data\"",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/response_model",
    "ext": ".py",
    "methods": 16,
    "skip": "",
    "structure_score": 0.6551724137931034,
    "sore": "if?.teleport?.(RedirectResponse+return+url)+.(item+user)?.(Item+name+price)+?.items?.JSONResponse+?.item_id?.content?",
    "gbnf": "root ::= \"if\"? \"teleport\"? (\"RedirectResponse\" | \"return\" | \"url\")+ (\"item\" | \"user\")? (\"Item\" | \"name\" | \"price\")* \"items\"? \"JSONResponse\"* \"item_id\"? \"content\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/schema_extra_example",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.125
  },
  {
    "package": "docs_src/security",
    "ext": ".py",
    "methods": 70,
    "skip": "low_structure",
    "structure_score": 0.014285714285714287
  },
  {
    "package": "docs_src/separate_openapi_schemas",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.5172413793103449,
    "sore": "return.(Item+description+name)+?.item?",
    "gbnf": "root ::= \"return\" (\"Item\" | \"description\" | \"name\")* \"item\"?",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/server_sent_events",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.05732484076433121
  },
  {
    "package": "docs_src/settings",
    "ext": ".py",
    "methods": 5,
    "skip": "",
    "structure_score": 0.4918032786885246,
    "sore": "return.(admin_email+app_name+settings)+?.config?.items_per_user?.Settings+?",
    "gbnf": "root ::= \"return\" (\"admin_email\" | \"app_name\" | \"settings\")* \"config\"? \"items_per_user\"? \"Settings\"*",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/settings/app02_an_py310",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/settings/app02_py310",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "docs_src/sql_databases",
    "ext": ".py",
    "methods": 30,
    "skip": "low_structure",
    "structure_score": 0.1946564885496183
  },
  {
    "package": "docs_src/stream_data",
    "ext": ".py",
    "methods": 14,
    "skip": "",
    "structure_score": 0.4945054945054945,
    "sore": "return?.read_image+?.BytesIO+?.(chunk+for+from+image_file+in+line+message+splitlines+yield)+?.binary_image?.encode+?",
    "gbnf": "root ::= \"return\"? \"read_image\"* \"BytesIO\"* (\"chunk\" | \"for\" | \"from\" | \"image_file\" | \"in\" | \"line\" | \"message\" | \"splitlines\" | \"yield\")* \"binary_image\"? \"encode\"*",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/stream_json_lines",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.3157894736842105,
    "sore": "for.(in+item+items+yield)+",
    "gbnf": "root ::= \"for\" (\"in\" | \"item\" | \"items\" | \"yield\")+",
    "gbnf_ok": true
  },
  {
    "package": "docs_src/websockets_",
    "ext": ".py",
    "methods": 15,
    "skip": "low_structure",
    "structure_score": 0.13157894736842105
  },
  {
    "package": "fastapi",
    "ext": ".py",
    "methods": 239,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "fastapi/_compat",
    "ext": ".py",
    "methods": 45,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "fastapi/dependencies",
    "ext": ".py",
    "methods": 38,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "fastapi/openapi",
    "ext": ".py",
    "methods": 19,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "fastapi/security",
    "ext": ".py",
    "methods": 34,
    "skip": "low_structure",
    "structure_score": 0.014814814814814815
  },
  {
    "package": "scripts",
    "ext": ".py",
    "methods": 132,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "scripts/playwright",
    "ext": ".py",
    "methods": 7,
    "skip": "low_structure",
    "structure_score": 0.022727272727272728
  },
  {
    "package": "scripts/playwright/separate_openapi_schemas",
    "ext": ".py",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "scripts/tests/test_translation_fixer",
    "ext": ".py",
    "methods": 12,
    "skip": "low_structure",
    "structure_score": 0.10852713178294573
  },
  {
    "package": "scripts/tests/test_translation_fixer/test_code_blocks",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.02830188679245283
  },
  {
    "package": "scripts/tests/test_translation_fixer/test_header_permalinks",
    "ext": ".py",
    "methods": 4,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "tests",
    "ext": ".py",
    "methods": 2036,
    "skip": "low_structure",
    "structure_score": 0.10344827586206896
  },
  {
    "package": "tests/benchmarks",
    "ext": ".py",
    "methods": 48,
    "skip": "",
    "structure_score": 0.34800000000000003,
    "sore": "(LARGE_PAYLOAD+_bench_get+_bench_post_json+benchmark+body+bytes+client+content+def+do_request+get+int+json+path+post+response+return+status_code+tuple+warmup)+.ItemOut+?.LargeOut+?.len+?._expected_large_payload_json_bytes+?.(item+name+value)+?.payload?.dep+?.items?.LARGE_ITEMS?.metadata?.LARGE_METADATA?",
    "gbnf": "root ::= (\"LARGE_PAYLOAD\" | \"_bench_get\" | \"_bench_post_json\" | \"benchmark\" | \"body\" | \"bytes\" | \"client\" | \"content\" | \"def\" | \"do_request\" | \"get\" | \"int\" | \"json\" | \"path\" | \"post\" | \"response\" | \"return\" | \"status_code\" | \"tuple\" | \"warmup\")+ \"ItemOut\"* \"LargeOut\"* \"len\"* \"_expected_large_payload_json_bytes\"* (\"item\" | \"name\" | \"value\")* \"payload\"? \"dep\"* \"items\"? \"LARGE_ITEMS\"? \"metadata\"? \"LARGE_METADATA\"?",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_modules_same_name_body",
    "ext": ".py",
    "methods": 5,
    "skip": "",
    "structure_score": 0.515625,
    "sore": "(client+data+get+json+path+post+response+status_code+text)+?.return?.snapshot+?.a?.b?",
    "gbnf": "root ::= (\"client\" | \"data\" | \"get\" | \"json\" | \"path\" | \"post\" | \"response\" | \"status_code\" | \"text\")* \"return\"? \"snapshot\"* \"a\"? \"b\"?",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_body",
    "ext": ".py",
    "methods": 113,
    "skip": "",
    "structure_score": 0.27522935779816515,
    "sore": "(TestClient+app+body_model_name+client+get_body_model_name+json+openapi+path+post+response+status_code+text)+?.IsOneOf+?.return?.p+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"body_model_name\" | \"client\" | \"get_body_model_name\" | \"json\" | \"openapi\" | \"path\" | \"post\" | \"response\" | \"status_code\" | \"text\")* \"IsOneOf\"* \"return\"? \"p\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_cookie",
    "ext": ".py",
    "methods": 48,
    "skip": "",
    "structure_score": 0.5217391304347826,
    "sore": "(TestClient+app+client+cookies+get+openapi+path+response+set+status_code+text)+?.return?.snapshot+?.json+?.p+?.IsOneOf+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"cookies\" | \"get\" | \"openapi\" | \"path\" | \"response\" | \"set\" | \"status_code\" | \"text\")* \"return\"? \"snapshot\"* \"json\"* \"p\"* \"IsOneOf\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_file",
    "ext": ".py",
    "methods": 97,
    "skip": "",
    "structure_score": 0.3488372093023256,
    "sore": "(TestClient+app+body_model_name+client+files+get_body_model_name+openapi+path+post+response+status_code+text)+?.json+?.return?.len+?.(file+for+if+in+p+size)+?.else?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"body_model_name\" | \"client\" | \"files\" | \"get_body_model_name\" | \"openapi\" | \"path\" | \"post\" | \"response\" | \"status_code\" | \"text\")* \"json\"* \"return\"? \"len\"* (\"file\" | \"for\" | \"if\" | \"in\" | \"p\" | \"size\")* \"else\"?",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_form",
    "ext": ".py",
    "methods": 97,
    "skip": "",
    "structure_score": 0.34513274336283184,
    "sore": "(TestClient+app+body_model_name+client+data+get_body_model_name+openapi+path+post+response+status_code+text)+?.json+?.return?.IsOneOf+?.p+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"body_model_name\" | \"client\" | \"data\" | \"get_body_model_name\" | \"openapi\" | \"path\" | \"post\" | \"response\" | \"status_code\" | \"text\")* \"json\"* \"return\"? \"IsOneOf\"* \"p\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_header",
    "ext": ".py",
    "methods": 96,
    "skip": "",
    "structure_score": 0.5727272727272728,
    "sore": "(TestClient+app+client+get+headers+openapi+path+response+status_code+text)+?.return?.snapshot+?.json+?.p+?.IsOneOf+?.AnyThing?.IsPartialDict+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"headers\" | \"openapi\" | \"path\" | \"response\" | \"status_code\" | \"text\")* \"return\"? \"snapshot\"* \"json\"* \"p\"* \"IsOneOf\"* \"AnyThing\"? \"IsPartialDict\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_path",
    "ext": ".py",
    "methods": 6,
    "skip": "",
    "structure_score": 0.4903846153846154,
    "sore": "(TestClient+app+client+get+openapi+path+response+status_code+text)+?.return?.snapshot+?.json+?.p?.(Is+expected_title)+?.expected_name?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"openapi\" | \"path\" | \"response\" | \"status_code\" | \"text\")* \"return\"? \"snapshot\"* \"json\"* \"p\"? (\"Is\" | \"expected_title\")* \"expected_name\"?",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_request_params/test_query",
    "ext": ".py",
    "methods": 96,
    "skip": "",
    "structure_score": 0.5853658536585367,
    "sore": "(TestClient+app+client+get+openapi+path+response+status_code+text)+?.return?.snapshot+?.json+?.p+?.IsOneOf+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"openapi\" | \"path\" | \"response\" | \"status_code\" | \"text\")* \"return\"? \"snapshot\"* \"json\"* \"p\"* \"IsOneOf\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial",
    "ext": ".py",
    "methods": 16,
    "skip": "low_structure",
    "structure_score": 0.1267605633802817
  },
  {
    "package": "tests/test_tutorial/test_additional_responses",
    "ext": ".py",
    "methods": 14,
    "skip": "",
    "structure_score": 0.40714285714285714,
    "sore": "shutil?.copy+?.(TestClient+app+clear+client+get+headers+import_module+importlib+len+mod+param+request+response+return+status_code+text)+.json+?.content?.snapshot+?.os?.remove+?",
    "gbnf": "root ::= \"shutil\"? \"copy\"* (\"TestClient\" | \"app\" | \"clear\" | \"client\" | \"get\" | \"headers\" | \"import_module\" | \"importlib\" | \"len\" | \"mod\" | \"param\" | \"request\" | \"response\" | \"return\" | \"status_code\" | \"text\")+ \"json\"* \"content\"? \"snapshot\"* \"os\"? \"remove\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_additional_status_codes",
    "ext": ".py",
    "methods": 3,
    "skip": "low_structure",
    "structure_score": 0.03260869565217391
  },
  {
    "package": "tests/test_tutorial/test_advanced_middleware",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_authentication_error_status_code",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_background_tasks",
    "ext": ".py",
    "methods": 3,
    "skip": "",
    "structure_score": 0.375,
    "sore": "(Path+if+is_file+log+os+remove)+?.(TestClient+app+client+import_module+importlib+mod+param+post+request+response+return+status_code+text)+.json+?.open+?.(f+in)+?.read+?",
    "gbnf": "root ::= (\"Path\" | \"if\" | \"is_file\" | \"log\" | \"os\" | \"remove\")* (\"TestClient\" | \"app\" | \"client\" | \"import_module\" | \"importlib\" | \"mod\" | \"param\" | \"post\" | \"request\" | \"response\" | \"return\" | \"status_code\" | \"text\")+ \"json\"* \"open\"* (\"f\" | \"in\")* \"read\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_behind_a_proxy",
    "ext": ".py",
    "methods": 10,
    "skip": "",
    "structure_score": 0.574468085106383,
    "sore": "(client+get+response+status_code)+.json+?.headers?.snapshot+?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"response\" | \"status_code\")+ \"json\"* \"headers\"? \"snapshot\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_bigger_applications",
    "ext": ".py",
    "methods": 26,
    "skip": "low_structure",
    "structure_score": 0.18421052631578946
  },
  {
    "package": "tests/test_tutorial/test_body",
    "ext": ".py",
    "methods": 32,
    "skip": "",
    "structure_score": 0.2236024844720497,
    "sore": "patch+?.side_effect?.Exception+?.(TestClient+app+client+content+data+get+headers+import_module+importlib+json+mod+param+params+post+price+put+request+response+return+status_code+text)+.snapshot+?",
    "gbnf": "root ::= \"patch\"* \"side_effect\"? \"Exception\"* (\"TestClient\" | \"app\" | \"client\" | \"content\" | \"data\" | \"get\" | \"headers\" | \"import_module\" | \"importlib\" | \"json\" | \"mod\" | \"param\" | \"params\" | \"post\" | \"price\" | \"put\" | \"request\" | \"response\" | \"return\" | \"status_code\" | \"text\")+ \"snapshot\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_body_fields",
    "ext": ".py",
    "methods": 5,
    "skip": "low_structure",
    "structure_score": 0.11650485436893203
  },
  {
    "package": "tests/test_tutorial/test_body_multiple_params",
    "ext": ".py",
    "methods": 35,
    "skip": "low_structure",
    "structure_score": 0.11009174311926606
  },
  {
    "package": "tests/test_tutorial/test_body_nested_models",
    "ext": ".py",
    "methods": 44,
    "skip": "low_structure",
    "structure_score": 0.12162162162162163
  },
  {
    "package": "tests/test_tutorial/test_body_updates",
    "ext": ".py",
    "methods": 9,
    "skip": "low_structure",
    "structure_score": 0.1111111111111111
  },
  {
    "package": "tests/test_tutorial/test_conditional_openapi",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_configure_swagger_ui",
    "ext": ".py",
    "methods": 6,
    "skip": "",
    "structure_score": 0.2553191489361702,
    "sore": "(client+get+in+not+not in+response+status_code+text)+.json+?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"in\" | \"not\" | \"not in\" | \"response\" | \"status_code\" | \"text\")+ \"json\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_cookie_param_models",
    "ext": ".py",
    "methods": 12,
    "skip": "low_structure",
    "structure_score": 0.18918918918918917
  },
  {
    "package": "tests/test_tutorial/test_cookie_params",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_custom_docs_ui",
    "ext": ".py",
    "methods": 10,
    "skip": "low_structure",
    "structure_score": 0.07185628742514971
  },
  {
    "package": "tests/test_tutorial/test_custom_request_and_route",
    "ext": ".py",
    "methods": 10,
    "skip": "low_structure",
    "structure_score": 0.06060606060606061
  },
  {
    "package": "tests/test_tutorial/test_custom_response",
    "ext": ".py",
    "methods": 25,
    "skip": "low_structure",
    "structure_score": 0.0473186119873817
  },
  {
    "package": "tests/test_tutorial/test_dataclasses",
    "ext": ".py",
    "methods": 11,
    "skip": "low_structure",
    "structure_score": 0.10714285714285714
  },
  {
    "package": "tests/test_tutorial/test_debugging",
    "ext": ".py",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_dependencies",
    "ext": ".py",
    "methods": 51,
    "skip": "low_structure",
    "structure_score": 0.03883495145631068
  },
  {
    "package": "tests/test_tutorial/test_encoder",
    "ext": ".py",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_events",
    "ext": ".py",
    "methods": 8,
    "skip": "",
    "structure_score": 0.47663551401869153,
    "sore": "pytest?.warns+?.DeprecationWarning+?.from?.docs_src+?.events+?.(tutorial001_py310+tutorial002_py310)+?.import?.(TestClient+app+client+fake_answer_to_everything_ml_model+get+json+ml_models+not+params+response+status_code+text+yield)+.snapshot+?.open+?.(in+log)+?.read+?",
    "gbnf": "root ::= \"pytest\"? \"warns\"* \"DeprecationWarning\"* \"from\"? \"docs_src\"* \"events\"* (\"tutorial001_py310\" | \"tutorial002_py310\")* \"import\"? (\"TestClient\" | \"app\" | \"client\" | \"fake_answer_to_everything_ml_model\" | \"get\" | \"json\" | \"ml_models\" | \"not\" | \"params\" | \"response\" | \"status_code\" | \"text\" | \"yield\")+ \"snapshot\"* \"open\"* (\"in\" | \"log\")* \"read\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_extra_data_types",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_extra_models",
    "ext": ".py",
    "methods": 13,
    "skip": "",
    "structure_score": 0.2231404958677686,
    "sore": "(TestClient+app+client+get+import_module+importlib+json+mod+param+post+request+response+return+status_code+text)+.snapshot+?.IsList+?.check_order?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"import_module\" | \"importlib\" | \"json\" | \"mod\" | \"param\" | \"post\" | \"request\" | \"response\" | \"return\" | \"status_code\" | \"text\")+ \"snapshot\"* \"IsList\"* \"check_order\"?",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_first_steps",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_generate_clients",
    "ext": ".py",
    "methods": 13,
    "skip": "low_structure",
    "structure_score": 0.05504587155963303
  },
  {
    "package": "tests/test_tutorial/test_graphql",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_handling_errors",
    "ext": ".py",
    "methods": 20,
    "skip": "low_structure",
    "structure_score": 0.17142857142857143
  },
  {
    "package": "tests/test_tutorial/test_header_param_models",
    "ext": ".py",
    "methods": 19,
    "skip": "",
    "structure_score": 0.25210084033613445,
    "sore": "(TestClient+app+clear+client+get+headers+import_module+importlib+mod+param+request+response+return+status_code+text)+.json+?.snapshot+?.IsOneOf+?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"clear\" | \"client\" | \"get\" | \"headers\" | \"import_module\" | \"importlib\" | \"mod\" | \"param\" | \"request\" | \"response\" | \"return\" | \"status_code\" | \"text\")+ \"json\"* \"snapshot\"* \"IsOneOf\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_header_params",
    "ext": ".py",
    "methods": 9,
    "skip": "low_structure",
    "structure_score": 0.1510791366906475
  },
  {
    "package": "tests/test_tutorial/test_json_base64_bytes",
    "ext": ".py",
    "methods": 5,
    "skip": "low_structure",
    "structure_score": 0.11538461538461539
  },
  {
    "package": "tests/test_tutorial/test_metadata",
    "ext": ".py",
    "methods": 14,
    "skip": "",
    "structure_score": 0.4565217391304348,
    "sore": "(client+get+in+response+status_code+text)+.json+?.snapshot+?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"in\" | \"response\" | \"status_code\" | \"text\")+ \"json\"* \"snapshot\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_openapi_callbacks",
    "ext": ".py",
    "methods": 5,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_openapi_webhooks",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_path_operation_advanced_configurations",
    "ext": ".py",
    "methods": 18,
    "skip": "malformed_grammar",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_path_operation_configurations",
    "ext": ".py",
    "methods": 20,
    "skip": "low_structure",
    "structure_score": 0.1340782122905028
  },
  {
    "package": "tests/test_tutorial/test_path_params",
    "ext": ".py",
    "methods": 18,
    "skip": "",
    "structure_score": 0.4444444444444444,
    "sore": "(client+content+get+item_id+print+response+status_code+text+user_id)+?.asyncio?.json+?.run+?.(expected_response+snapshot)+?.read_users2+?",
    "gbnf": "root ::= (\"client\" | \"content\" | \"get\" | \"item_id\" | \"print\" | \"response\" | \"status_code\" | \"text\" | \"user_id\")* \"asyncio\"? \"json\"* \"run\"* (\"expected_response\" | \"snapshot\")* \"read_users2\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_path_params_numeric_validations",
    "ext": ".py",
    "methods": 29,
    "skip": "",
    "structure_score": 0.3223140495867769,
    "sore": "(TestClient+import_module+importlib+mod+param+request+return)+?.(client+get+path+response+status_code+text)+?.app?.json+?.(expected_response+snapshot)+?",
    "gbnf": "root ::= (\"TestClient\" | \"import_module\" | \"importlib\" | \"mod\" | \"param\" | \"request\" | \"return\")* (\"client\" | \"get\" | \"path\" | \"response\" | \"status_code\" | \"text\")* \"app\"? \"json\"* (\"expected_response\" | \"snapshot\")*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_python_types",
    "ext": ".py",
    "methods": 15,
    "skip": "",
    "structure_score": 0.3529411764705882,
    "sore": "(import_module+importlib+mod+param+request+return)+?.(get_items+res)+?.get_person_name+?.pytest?.patch+?.say_hello+?.Person+?.raises+?.(arg+args+call_args+call_args_list+call_count+for+in+items_s+items_t+mock_print+module+module_name+process_item+process_items+run_module+run_name+runpy+say_hi+str)+?.TypeError+?.assert_called_with+?.get_name_with_age+?",
    "gbnf": "root ::= (\"import_module\" | \"importlib\" | \"mod\" | \"param\" | \"request\" | \"return\")* (\"get_items\" | \"res\")* \"get_person_name\"* \"pytest\"? \"patch\"* \"say_hello\"* \"Person\"* \"raises\"* (\"arg\" | \"args\" | \"call_args\" | \"call_args_list\" | \"call_count\" | \"for\" | \"in\" | \"items_s\" | \"items_t\" | \"mock_print\" | \"module\" | \"module_name\" | \"process_item\" | \"process_items\" | \"run_module\" | \"run_name\" | \"runpy\" | \"say_hi\" | \"str\")* \"TypeError\"* \"assert_called_with\"* \"get_name_with_age\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_query_param_models",
    "ext": ".py",
    "methods": 12,
    "skip": "low_structure",
    "structure_score": 0.19811320754716982
  },
  {
    "package": "tests/test_tutorial/test_query_params",
    "ext": ".py",
    "methods": 19,
    "skip": "low_structure",
    "structure_score": 0.18421052631578946
  },
  {
    "package": "tests/test_tutorial/test_query_params_str_validations",
    "ext": ".py",
    "methods": 81,
    "skip": "low_structure",
    "structure_score": 0.1926605504587156
  },
  {
    "package": "tests/test_tutorial/test_request_files",
    "ext": ".py",
    "methods": 31,
    "skip": "low_structure",
    "structure_score": 0.06521739130434782
  },
  {
    "package": "tests/test_tutorial/test_request_form_models",
    "ext": ".py",
    "methods": 15,
    "skip": "low_structure",
    "structure_score": 0.1111111111111111
  },
  {
    "package": "tests/test_tutorial/test_request_forms",
    "ext": ".py",
    "methods": 7,
    "skip": "low_structure",
    "structure_score": 0.1111111111111111
  },
  {
    "package": "tests/test_tutorial/test_request_forms_and_files",
    "ext": ".py",
    "methods": 8,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_response_directly",
    "ext": ".py",
    "methods": 6,
    "skip": "low_structure",
    "structure_score": 0.09523809523809523
  },
  {
    "package": "tests/test_tutorial/test_response_model",
    "ext": ".py",
    "methods": 35,
    "skip": "low_structure",
    "structure_score": 0.17098445595854922
  },
  {
    "package": "tests/test_tutorial/test_response_status_code",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_schema_extra_example",
    "ext": ".py",
    "methods": 15,
    "skip": "low_structure",
    "structure_score": 0.11650485436893203
  },
  {
    "package": "tests/test_tutorial/test_security",
    "ext": ".py",
    "methods": 73,
    "skip": "low_structure",
    "structure_score": 0.05797101449275362
  },
  {
    "package": "tests/test_tutorial/test_separate_openapi_schemas",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.11538461538461539
  },
  {
    "package": "tests/test_tutorial/test_server_sent_events",
    "ext": ".py",
    "methods": 17,
    "skip": "low_structure",
    "structure_score": 0.06091370558375634
  },
  {
    "package": "tests/test_tutorial/test_settings",
    "ext": ".py",
    "methods": 16,
    "skip": "low_structure",
    "structure_score": 0.10891089108910892
  },
  {
    "package": "tests/test_tutorial/test_sql_databases",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.16612377850162866
  },
  {
    "package": "tests/test_tutorial/test_static_files",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_stream_data",
    "ext": ".py",
    "methods": 7,
    "skip": "low_structure",
    "structure_score": 0.18881118881118883
  },
  {
    "package": "tests/test_tutorial/test_stream_json_lines",
    "ext": ".py",
    "methods": 3,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_strict_content_type",
    "ext": ".py",
    "methods": 4,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_tutorial/test_sub_applications",
    "ext": ".py",
    "methods": 4,
    "skip": "",
    "structure_score": 0.40909090909090906,
    "sore": "(client+get+response+status_code+text)+.json+.snapshot+?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"response\" | \"status_code\" | \"text\")+ \"json\"+ \"snapshot\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_testing",
    "ext": ".py",
    "methods": 10,
    "skip": "",
    "structure_score": 0.360655737704918,
    "sore": "(client+get+response+status_code+text)+?.(ModuleType+import_module+importlib+mod+param+request+return)+?.(test_create_existing_item+test_create_item+test_create_item_bad_token+test_main+test_module+test_read_item+test_read_nonexistent_item)+?.pytest?.(test_read_main+test_websocket)+?.json+?.test_read_item_bad_token+?.warns+?.snapshot+?.DeprecationWarning+?.from?.docs_src+?.app_testing+?.tutorial003_py310+?.import?.test_read_items+?",
    "gbnf": "root ::= (\"client\" | \"get\" | \"response\" | \"status_code\" | \"text\")* (\"ModuleType\" | \"import_module\" | \"importlib\" | \"mod\" | \"param\" | \"request\" | \"return\")* (\"test_create_existing_item\" | \"test_create_item\" | \"test_create_item_bad_token\" | \"test_main\" | \"test_module\" | \"test_read_item\" | \"test_read_nonexistent_item\")* \"pytest\"? (\"test_read_main\" | \"test_websocket\")* \"json\"* \"test_read_item_bad_token\"* \"warns\"* \"snapshot\"* \"DeprecationWarning\"* \"from\"? \"docs_src\"* \"app_testing\"* \"tutorial003_py310\"* \"import\"? \"test_read_items\"*",
    "gbnf_ok": true
  },
  {
    "package": "tests/test_tutorial/test_testing_dependencies",
    "ext": ".py",
    "methods": 8,
    "skip": "low_structure",
    "structure_score": 0.11538461538461539
  },
  {
    "package": "tests/test_tutorial/test_websockets",
    "ext": ".py",
    "methods": 14,
    "skip": "too_diverse",
    "structure_score": 0
  },
  {
    "package": "tests/test_validate_response_recursive",
    "ext": ".py",
    "methods": 3,
    "skip": "",
    "structure_score": 0.21818181818181817,
    "sore": "(TestClient+app+client+get+json+response+status_code+text)+?.return?",
    "gbnf": "root ::= (\"TestClient\" | \"app\" | \"client\" | \"get\" | \"json\" | \"response\" | \"status_code\" | \"text\")* \"return\"?",
    "gbnf_ok": true
  }
]