Skip to content

Add caches to speed up Parameter initialization#1124

Merged
philippjfr merged 9 commits into
mainfrom
optimization_caches
Apr 16, 2026
Merged

Add caches to speed up Parameter initialization#1124
philippjfr merged 9 commits into
mainfrom
optimization_caches

Conversation

@philippjfr
Copy link
Copy Markdown
Member

@philippjfr philippjfr commented Apr 1, 2026

This sets up some caches storing which parameters have to be instantiated, deepcopied etc. which speeds up subsequent instantiations of the parameters.

| Change   | Before [6f3eea86]    | After [11ab448d]    | Ratio   | Benchmark (Parameter)                                                                      |
|----------|----------------------|---------------------|---------|--------------------------------------------------------------------------------------------|
|          | 32.3±0.8ms           | 34.1±1ms            | 1.06    | benchmarks.ImportSuite.timeraw_import_param                                                |
|          | 2.04±0.04μs          | 2.07±0.03μs         | 1.01    | benchmarks.ParameterSuite.time_instantiation                                               |
|          | 3.10±0.03μs          | 3.01±0.02μs         | 0.97    | benchmarks.ParameterTypeInstantiationSuite.time_boolean                                    |
|          | 3.75±0.02μs          | 3.82±0.1μs          | 1.02    | benchmarks.ParameterTypeInstantiationSuite.time_bytes_with_regex                           |
|          | 4.00±0.1μs           | 3.92±0.08μs         | 0.98    | benchmarks.ParameterTypeInstantiationSuite.time_classselector                              |
|          | 4.72±0.2μs           | 4.51±0.08μs         | 0.96    | benchmarks.ParameterTypeInstantiationSuite.time_color                                      |
|          | 6.49±0.2μs           | 6.60±0.08μs         | 1.02    | benchmarks.ParameterTypeInstantiationSuite.time_date                                       |
|          | 5.80±0.03μs          | 5.93±0.07μs         | 1.02    | benchmarks.ParameterTypeInstantiationSuite.time_integer                                    |
|          | 5.02±0.06μs          | 5.01±0.03μs         | 1.00    | benchmarks.ParameterTypeInstantiationSuite.time_list                                       |
|          | 5.42±0.04μs          | 5.46±0.02μs         | 1.01    | benchmarks.ParameterTypeInstantiationSuite.time_number                                     |
|          | 10.7±1μs             | 10.2±0.07μs         | 0.95    | benchmarks.ParameterTypeInstantiationSuite.time_selector                                   |
|          | 3.80±0.03μs          | 3.81±0.04μs         | 1.00    | benchmarks.ParameterTypeInstantiationSuite.time_string_with_regex                          |
| -        | 13.6±0.3μs           | 8.04±0.1μs          | 0.59    | benchmarks.ParameterizedDependsInstantiateSuite.time_declarative_10_parameters_separate_cb |
| -        | 13.2±0.06μs          | 8.16±0.1μs          | 0.62    | benchmarks.ParameterizedDependsInstantiateSuite.time_declarative_10_parameters_shared_cb   |
| -        | 9.17±0.07μs          | 8.33±0.2μs          | 0.91    | benchmarks.ParameterizedDependsInstantiateSuite.time_declarative_1_parameter               |
|          | 583±7μs              | 619±20μs            | 1.06    | benchmarks.ParameterizedDependsInstantiateSuite.time_watch_10_parameters_separate_cb       |
|          | 535±3μs              | 563±9μs             | 1.05    | benchmarks.ParameterizedDependsInstantiateSuite.time_watch_10_parameters_shared_cb         |
|          | 66.6±0.8μs           | 70.2±2μs            | 1.05    | benchmarks.ParameterizedDependsInstantiateSuite.time_watch_1_parameter                     |
|          | 693±9μs              | 732±10μs            | 1.06    | benchmarks.ParameterizedDependsSuite.time_declarative_10_parameters_separate_cb            |
|          | 654±20μs             | 670±10μs            | 1.02    | benchmarks.ParameterizedDependsSuite.time_declarative_10_parameters_shared_cb              |
|          | 132±3μs              | 136±2μs             | 1.03    | benchmarks.ParameterizedDependsSuite.time_declarative_1_parameter                          |
|          | 698±20μs             | 727±10μs            | 1.04    | benchmarks.ParameterizedDependsSuite.time_watch_10_parameters_separate_cb                  |
|          | 658±7μs              | 666±8μs             | 1.01    | benchmarks.ParameterizedDependsSuite.time_watch_10_parameters_shared_cb                    |
|          | 130±2μs              | 135±0.9μs           | 1.04    | benchmarks.ParameterizedDependsSuite.time_watch_1_parameter                                |
| -        | 51.7±0.4μs           | 8.06±0.04μs         | 0.16    | benchmarks.ParameterizedInstantiateSuite.time_100_parameters                               |
| -        | 13.2±0.2μs           | 8.04±0.08μs         | 0.61    | benchmarks.ParameterizedInstantiateSuite.time_10_parameters                                |
| -        | 9.18±0.08μs          | 8.14±0.1μs          | 0.89    | benchmarks.ParameterizedInstantiateSuite.time_1_parameters                                 |
| -        | 9.13±0.1μs           | 8.05±0.07μs         | 0.88    | benchmarks.ParameterizedInstantiateTypeSuite.time_boolean                                  |
| -        | 9.28±0.2μs           | 7.93±0.1μs          | 0.85    | benchmarks.ParameterizedInstantiateTypeSuite.time_bytes_with_regex                         |
| -        | 10.5±0.3μs           | 9.51±0.07μs         | 0.91    | benchmarks.ParameterizedInstantiateTypeSuite.time_classselector                            |
| -        | 9.28±0.09μs          | 8.01±0.1μs          | 0.86    | benchmarks.ParameterizedInstantiateTypeSuite.time_color                                    |
|          | 9.24±0.2μs           | 8.12±0.09μs         | ~0.88   | benchmarks.ParameterizedInstantiateTypeSuite.time_date                                     |
| -        | 9.06±0.06μs          | 8.08±0.05μs         | 0.89    | benchmarks.ParameterizedInstantiateTypeSuite.time_integer                                  |
|          | 11.0±0.2μs           | 10.1±0.1μs          | 0.92    | benchmarks.ParameterizedInstantiateTypeSuite.time_list                                     |
| -        | 9.05±0.07μs          | 8.03±0.1μs          | 0.89    | benchmarks.ParameterizedInstantiateTypeSuite.time_number                                   |
| -        | 9.15±0.08μs          | 8.28±0.2μs          | 0.90    | benchmarks.ParameterizedInstantiateTypeSuite.time_selector                                 |
| -        | 9.14±0.08μs          | 8.26±0.3μs          | 0.90    | benchmarks.ParameterizedInstantiateTypeSuite.time_string_with_regex                        |
|          | 111±2ns              | 111±0.6ns           | 1.00    | benchmarks.ParameterizedParamAccessSuite.time_class                                        |
|          | 147±3ns              | 148±2ns             | 1.00    | benchmarks.ParameterizedParamAccessSuite.time_instance                                     |
| +        | 292±2ns              | 347±40ns            | 1.19    | benchmarks.ParameterizedParamContainsSuite.time_class                                      |
|          | 352±5ns              | 364±2ns             | 1.04    | benchmarks.ParameterizedParamContainsSuite.time_instance                                   |
| +        | 3.35±0.02μs          | 3.85±0.07μs         | 1.15    | benchmarks.ParameterizedSetattrSuite.time_class                                            |
|          | 2.67±0.02μs          | 2.61±0.04μs         | 0.98    | benchmarks.ParameterizedSetattrSuite.time_instance                                         |
|          | 58.0±0.6μs           | 61.5±0.9μs          | 1.06    | benchmarks.ParameterizedSuite.time_class_bare                                              |
|          | 5.42±0.06ms          | 5.55±0.03ms         | 1.02    | benchmarks.ParameterizedSuite.time_class_with_100_parameter                                |
|          | 608±10μs             | 625±10μs            | 1.03    | benchmarks.ParameterizedSuite.time_class_with_10_parameter                                 |
|          | 116±1μs              | 124±3μs             | 1.07    | benchmarks.ParameterizedSuite.time_class_with_1_parameter                                  |
|          | 11.1±0.1μs           | 11.4±0.5μs          | 1.02    | benchmarks.WatcherSuite.time_trigger                                                       |

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 1, 2026

Codecov Report

❌ Patch coverage is 92.30769% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.73%. Comparing base (7698658) to head (e304422).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
param/parameterized.py 92.30% 7 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1124      +/-   ##
==========================================
+ Coverage   86.51%   86.73%   +0.22%     
==========================================
  Files           9        9              
  Lines        5241     5285      +44     
==========================================
+ Hits         4534     4584      +50     
+ Misses        707      701       -6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@philippjfr philippjfr changed the title cOptimization caches Add caches to speed up Parameter initialization Apr 2, 2026
@philippjfr philippjfr marked this pull request as ready for review April 2, 2026 15:13
@hoxbro hoxbro self-requested a review April 15, 2026 15:05
Copy link
Copy Markdown
Member

@hoxbro hoxbro left a comment

Choose a reason for hiding this comment

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

some small comments, but otherwise LGTM.

Comment thread param/parameterized.py Outdated
Comment thread param/parameterized.py
Comment thread param/parameterized.py
@philippjfr philippjfr merged commit d82d219 into main Apr 16, 2026
29 of 31 checks passed
@philippjfr philippjfr deleted the optimization_caches branch April 16, 2026 10:10
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.

2 participants