Skip to content

Separate inline provider discovery from scope propagation - #741

Merged
lesnik512 merged 1 commit into
mainfrom
refactor/inline-scope-discovery
Nov 3, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
refactor/inline-scope-discovery

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Extract inline graph discovery and preserve discovery-order tie-breaking for equal-valued scopes. Add an identity-based regression test.

Local checks passed 1,128 tests at 100% coverage, plus Ruff and ty. Median stamping time fell from 3.20 ms to 2.95 ms on a local graph with 8,192 shared edges.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: 2546d42 Previous: 6f2fbfe Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 6832726.518924468 iter/sec (stddev: 4.963557635167553e-9) 5077330.278823607 iter/sec (stddev: 7.55436049526812e-9) 0.74
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 6910561.577052609 iter/sec (stddev: 6.151695116399471e-9) 5141244.642889801 iter/sec (stddev: 6.046444816854142e-9) 0.74
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 28968.788742873992 iter/sec (stddev: 0.000031932608150863685) 22120.217478755156 iter/sec (stddev: 0.00003962345736838338) 0.76
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 23495.25411983656 iter/sec (stddev: 0.0001247738051357269) 18064.3857432313 iter/sec (stddev: 0.00011308679544906829) 0.77
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 883.3273483983934 iter/sec (stddev: 0.000021294022786665583) 663.2071197339667 iter/sec (stddev: 0.00007721751071773372) 0.75
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 855.9586126972415 iter/sec (stddev: 0.000020062286021468935) 650.1468893120472 iter/sec (stddev: 0.000022698857327619953) 0.76
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 795.2385303300639 iter/sec (stddev: 0.00006730093062169477) 618.8345316233573 iter/sec (stddev: 0.000030292421619313078) 0.78
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 23780.779265028646 iter/sec (stddev: 0.000005655716376392802) 19835.27465554979 iter/sec (stddev: 0.000006475458707494782) 0.83
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 10913.946623052614 iter/sec (stddev: 0.00001551043697623885) 9469.175387917148 iter/sec (stddev: 0.00003809909862343328) 0.87
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 6131.41586246382 iter/sec (stddev: 0.000022058087759928815) 4965.674362163872 iter/sec (stddev: 0.00003461963143911917) 0.81
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 16883.49054903993 iter/sec (stddev: 0.00003832118653796406) 15350.56271962902 iter/sec (stddev: 0.000007781172382551884) 0.91
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 8736.60341970358 iter/sec (stddev: 0.00001760016694348608) 6365.753941312758 iter/sec (stddev: 0.000013846458217463492) 0.73
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 3652.8643997163595 iter/sec (stddev: 0.00004782335557894379) 2978.6210220818853 iter/sec (stddev: 0.00006048426402098576) 0.82
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 49956.26745143379 iter/sec (stddev: 0.0000017408680525753116) 50012.56565879625 iter/sec (stddev: 0.000003074432659178213) 1.00
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 29928.61277635978 iter/sec (stddev: 0.00000914551396744805) 21643.561563392832 iter/sec (stddev: 0.000009694910979211385) 0.72
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 11483.145899676862 iter/sec (stddev: 0.000022601144790207458) 8346.09938779021 iter/sec (stddev: 0.00002358344481883111) 0.73
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 2372461.2292439304 iter/sec (stddev: 9.251991434102582e-8) 2173990.905436161 iter/sec (stddev: 3.3897796615241804e-8) 0.92
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 3255547.717823836 iter/sec (stddev: 1.6875154486959e-8) 2342649.092184802 iter/sec (stddev: 1.500888984864835e-8) 0.72
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 5545.483417255216 iter/sec (stddev: 0.00005704035207340103) 4659.783129963655 iter/sec (stddev: 0.000006140854849229854) 0.84
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 89761.79044697786 iter/sec (stddev: 0.00001072053338333431) 75852.87780313949 iter/sec (stddev: 0.0000011963932776962248) 0.85
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 512783.842201346 iter/sec (stddev: 6.823559158114663e-7) 601715.346039723 iter/sec (stddev: 5.409961584624612e-8) 1.17
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 72754.70056638418 iter/sec (stddev: 0.00001869001098300153) 91663.38045000099 iter/sec (stddev: 0.0000010000272334711053) 1.26
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 824.497593838833 iter/sec (stddev: 0.0032948059215279833) 813.8905308876851 iter/sec (stddev: 0.001032018780135722) 0.99
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 4050543.081617562 iter/sec (stddev: 2.181330833104331e-8) 2961285.1207448766 iter/sec (stddev: 2.7262926631991528e-8) 0.73
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 6815875.728595492 iter/sec (stddev: 3.145552715013306e-9) 5116393.082015457 iter/sec (stddev: 5.241330495191092e-9) 0.75
benchmarks/test_guard_resolve.py::test_g3_deep_chain 1532449.1510387778 iter/sec (stddev: 3.526218044735672e-8) 1117120.9736963147 iter/sec (stddev: 4.470065606538694e-8) 0.73
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 874669.1017493532 iter/sec (stddev: 3.372316339026502e-7) 598760.6253802265 iter/sec (stddev: 3.2461528441626e-7) 0.68
benchmarks/test_guard_resolve.py::test_g5_cross_scope 3639405.848767993 iter/sec (stddev: 1.633732753142003e-8) 2670215.2046834333 iter/sec (stddev: 2.071193356508275e-8) 0.73
benchmarks/test_guard_resolve.py::test_g9_context_resolve 2739685.870344853 iter/sec (stddev: 1.1692335542516656e-7) 2023191.0295035017 iter/sec (stddev: 1.0446236757466905e-7) 0.74
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 1553769.9976040225 iter/sec (stddev: 3.08146414863006e-8) 1089956.7461589396 iter/sec (stddev: 4.900556105818441e-8) 0.70
benchmarks/test_guard_resolve.py::test_g18_alias_hop 6476294.689040137 iter/sec (stddev: 8.475919005286849e-9) 5095047.343947224 iter/sec (stddev: 9.986743644765253e-9) 0.79
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 81398.57954004573 iter/sec (stddev: 0.000004831070449707068) 62912.5886197799 iter/sec (stddev: 0.00000482914401406931) 0.77
benchmarks/test_guard_validate.py::test_g11_validate_wide 49118.22954329102 iter/sec (stddev: 0.0000015455987949330207) 37462.512668528456 iter/sec (stddev: 0.000002271057228571476) 0.76
benchmarks/test_guard_validate.py::test_g11b_validate_shared_alias_chain 5074.534182968584 iter/sec (stddev: 0.00000960040431870764) 3832.5586942281443 iter/sec (stddev: 0.000012882178941992052) 0.76

This comment was automatically generated by workflow using github-action-benchmark.

@lesnik512
lesnik512 merged commit 1176ac8 into main Nov 3, 2026
12 checks passed
@lesnik512
lesnik512 deleted the refactor/inline-scope-discovery branch November 3, 2026 04:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant