grammar-inference-engine/experiments/results/fastapi_gbnf.json
tobjend e62fffc6e0 feat: grammar_structure_score + min_structure filter
Quantifies how structured a SORE is (0.0=flat bag, 1.0=fully structured).
Flat bags are CRX over-approximations — they list symbols without ordering.

With min_structure=0.2:
  Flask:   2 kept (was 5),  9 dropped
  RAGSAK: 10 kept (was 19), 114 dropped
  FastAPI: 47 kept (was 106), 95 dropped
  Total: 59 useful grammars, 218 noise removed

CLI: --min-structure 0.2 (default: 0, keep all)
2026-07-12 03:02:50 +02:00

1144 lines
No EOL
39 KiB
JSON

[
{
"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
}
]