Skip to content

Conversation

@trexfeathers
Copy link
Contributor

🚀 Pull Request

Description


Consult Iris pull request check list


Add any of the below labels to trigger actions on this PR:

  • benchmark_this Request that this pull request be benchmarked to check if it introduces performance shifts

@github-actions github-actions bot added the benchmark_this Request that this pull request be benchmarked to check if it introduces performance shifts label May 1, 2025
@trexfeathers trexfeathers changed the title Adapt to Dask changes to delayed and internals Lockfile updates plus adapt to Dask changes to delayed and internals May 1, 2025
@codecov
Copy link

codecov bot commented May 1, 2025

Codecov Report

Attention: Patch coverage is 50.00000% with 1 line in your changes missing coverage. Please review.

Project coverage is 89.80%. Comparing base (7e3c921) to head (d76a9d8).

Files with missing lines Patch % Lines
lib/iris/fileformats/netcdf/saver.py 50.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #6438   +/-   ##
=======================================
  Coverage   89.80%   89.80%           
=======================================
  Files          90       90           
  Lines       23752    23752           
  Branches     4418     4418           
=======================================
  Hits        21331    21331           
  Misses       1672     1672           
  Partials      749      749           

☔ 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.

@github-actions
Copy link
Contributor

github-actions bot commented May 2, 2025

⏱️ Performance Benchmark Report: 755a7cd

Performance shifts
| Change   | Before [7e3c921e]    | After [755a7cd0]    |   Ratio | Benchmark (Parameter)                                           |
|----------|----------------------|---------------------|---------|-----------------------------------------------------------------|
| +        | 2.96±0.04ms          | 3.58±0.07ms         |    1.21 | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'NetCDF') |
| +        | 1.60±0.05ms          | 2.25±0.04ms         |    1.4  | load.LoadAndRealise.time_realise((50, 50, 2), False, 'FF')      |
| +        | 1.60±0.04ms          | 2.16±0.06ms         |    1.35 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'PP')      |
| +        | 1.62±0.05ms          | 2.23±0.1ms          |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'FF')       |
| +        | 1.61±0.06ms          | 2.16±0.09ms         |    1.34 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'PP')       |
| +        | 4.49±0.1ms           | 6.64±0.2ms          |    1.48 | load.ugrid.DataRealisation.time_realise_data(200000)            |
Full benchmark results

Benchmarks that have stayed the same:

| Change   | Before [7e3c921e]    | After [755a7cd0]    |   Ratio | Benchmark (Parameter)                                                                       |
|----------|----------------------|---------------------|---------|---------------------------------------------------------------------------------------------|
|          | 20.7±0.1ms           | 21.2±0.4ms          |    1.02 | aggregate_collapse.Aggregation.time_aggregated_by_COUNT(False)                              |
|          | 52.4±0.5ms           | 54.4±0.5ms          |    1.04 | aggregate_collapse.Aggregation.time_aggregated_by_COUNT(True)                               |
|          | 34.4±0.2ms           | 35.4±0.2ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_FAST_PERCENTILE(False)                    |
|          | 162±1ms              | 171±2ms             |    1.05 | aggregate_collapse.Aggregation.time_aggregated_by_FAST_PERCENTILE(True)                     |
|          | 23.0±0.2ms           | 23.1±0.3ms          |    1    | aggregate_collapse.Aggregation.time_aggregated_by_GMEAN(False)                              |
|          | 31.3±0.3ms           | 32.8±0.5ms          |    1.05 | aggregate_collapse.Aggregation.time_aggregated_by_GMEAN(True)                               |
|          | 22.9±0.1ms           | 23.5±0.2ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_HMEAN(False)                              |
|          | 30.8±0.3ms           | 32.6±0.3ms          |    1.06 | aggregate_collapse.Aggregation.time_aggregated_by_HMEAN(True)                               |
|          | 21.0±0.4ms           | 20.7±0.3ms          |    0.98 | aggregate_collapse.Aggregation.time_aggregated_by_MAX(False)                                |
|          | 43.7±0.3ms           | 46.0±0.5ms          |    1.05 | aggregate_collapse.Aggregation.time_aggregated_by_MAX(True)                                 |
|          | 122±0.7ms            | 129±0.8ms           |    1.06 | aggregate_collapse.Aggregation.time_aggregated_by_MAX_RUN(False)                            |
|          | 126±1ms              | 130±1ms             |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_MAX_RUN(True)                             |
|          | 22.1±0.3ms           | 22.0±0.1ms          |    1    | aggregate_collapse.Aggregation.time_aggregated_by_MEAN(False)                               |
|          | 48.0±0.9ms           | 49.5±0.6ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_MEAN(True)                                |
|          | 23.5±0.2ms           | 23.4±0.2ms          |    0.99 | aggregate_collapse.Aggregation.time_aggregated_by_MEDIAN(False)                             |
|          | 57.0±0.6ms           | 59.6±0.6ms          |    1.05 | aggregate_collapse.Aggregation.time_aggregated_by_MEDIAN(True)                              |
|          | 20.7±0.2ms           | 20.9±0.2ms          |    1.01 | aggregate_collapse.Aggregation.time_aggregated_by_MIN(False)                                |
|          | 44.3±0.4ms           | 46.4±0.6ms          |    1.05 | aggregate_collapse.Aggregation.time_aggregated_by_MIN(True)                                 |
|          | 1.08±0.01s           | 1.10±0.01s          |    1.02 | aggregate_collapse.Aggregation.time_aggregated_by_PEAK(False)                               |
|          | 1.08±0.01s           | 1.11±0.01s          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_PEAK(True)                                |
|          | 216±2ms              | 216±0.9ms           |    1    | aggregate_collapse.Aggregation.time_aggregated_by_PERCENTILE(False)                         |
|          | 339±4ms              | 346±7ms             |    1.02 | aggregate_collapse.Aggregation.time_aggregated_by_PERCENTILE(True)                          |
|          | 22.2±0.1ms           | 22.4±0.3ms          |    1.01 | aggregate_collapse.Aggregation.time_aggregated_by_PROPORTION(False)                         |
|          | 29.3±0.3ms           | 31.2±0.4ms          |    1.06 | aggregate_collapse.Aggregation.time_aggregated_by_PROPORTION(True)                          |
|          | 22.2±0.2ms           | 22.2±0.3ms          |    1    | aggregate_collapse.Aggregation.time_aggregated_by_RMS(False)                                |
|          | 58.5±0.4ms           | 60.7±0.6ms          |    1.04 | aggregate_collapse.Aggregation.time_aggregated_by_RMS(True)                                 |
|          | 23.2±0.2ms           | 23.0±0.3ms          |    0.99 | aggregate_collapse.Aggregation.time_aggregated_by_STD_DEV(False)                            |
|          | 61.1±0.6ms           | 63.2±0.6ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_STD_DEV(True)                             |
|          | 22.7±0.3ms           | 23.3±0.3ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_VARIANCE(False)                           |
|          | 57.4±0.5ms           | 59.2±0.7ms          |    1.03 | aggregate_collapse.Aggregation.time_aggregated_by_VARIANCE(True)                            |
|          | 7.75±0.06ms          | 7.86±0.2ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_COUNT(False)                               |
|          | 21.2±0.2ms           | 22.0±0.2ms          |    1.04 | aggregate_collapse.Aggregation.time_collapsed_by_COUNT(True)                                |
|          | 19.4±0.2ms           | 19.7±0.2ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_FAST_PERCENTILE(False)                     |
|          | 119±2ms              | 129±2ms             |    1.09 | aggregate_collapse.Aggregation.time_collapsed_by_FAST_PERCENTILE(True)                      |
|          | 8.19±0.09ms          | 8.21±0.1ms          |    1    | aggregate_collapse.Aggregation.time_collapsed_by_GMEAN(False)                               |
|          | 19.7±0.2ms           | 20.8±0.4ms          |    1.05 | aggregate_collapse.Aggregation.time_collapsed_by_GMEAN(True)                                |
|          | 8.07±0.1ms           | 8.18±0.08ms         |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_HMEAN(False)                               |
|          | 19.7±0.5ms           | 20.7±0.2ms          |    1.05 | aggregate_collapse.Aggregation.time_collapsed_by_HMEAN(True)                                |
|          | 7.79±0.1ms           | 7.60±0.1ms          |    0.98 | aggregate_collapse.Aggregation.time_collapsed_by_MAX(False)                                 |
|          | 20.3±0.2ms           | 21.1±0.4ms          |    1.04 | aggregate_collapse.Aggregation.time_collapsed_by_MAX(True)                                  |
|          | 23.1±0.2ms           | 24.2±0.2ms          |    1.05 | aggregate_collapse.Aggregation.time_collapsed_by_MAX_RUN(False)                             |
|          | 34.3±0.3ms           | 35.1±0.4ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_MAX_RUN(True)                              |
|          | 8.00±0.1ms           | 7.96±0.07ms         |    0.99 | aggregate_collapse.Aggregation.time_collapsed_by_MEAN(False)                                |
|          | 20.5±0.2ms           | 21.6±0.2ms          |    1.05 | aggregate_collapse.Aggregation.time_collapsed_by_MEAN(True)                                 |
|          | 9.30±0.1ms           | 9.37±0.2ms          |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_MEDIAN(False)                              |
|          | 23.3±0.4ms           | 23.9±0.3ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_MEDIAN(True)                               |
|          | 7.77±0.05ms          | 7.62±0.1ms          |    0.98 | aggregate_collapse.Aggregation.time_collapsed_by_MIN(False)                                 |
|          | 20.3±0.3ms           | 20.8±0.2ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_MIN(True)                                  |
|          | 527±2ms              | 530±2ms             |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_PEAK(False)                                |
|          | 537±4ms              | 537±2ms             |    1    | aggregate_collapse.Aggregation.time_collapsed_by_PEAK(True)                                 |
|          | 45.2±0.4ms           | 45.8±0.6ms          |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_PERCENTILE(False)                          |
|          | 128±1ms              | 138±1ms             |    1.08 | aggregate_collapse.Aggregation.time_collapsed_by_PERCENTILE(True)                           |
|          | 7.91±0.08ms          | 7.95±0.08ms         |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_PROPORTION(False)                          |
|          | 19.4±0.2ms           | 20.1±0.2ms          |    1.04 | aggregate_collapse.Aggregation.time_collapsed_by_PROPORTION(True)                           |
|          | 8.20±0.1ms           | 8.09±0.1ms          |    0.99 | aggregate_collapse.Aggregation.time_collapsed_by_RMS(False)                                 |
|          | 22.2±0.3ms           | 22.7±0.2ms          |    1.02 | aggregate_collapse.Aggregation.time_collapsed_by_RMS(True)                                  |
|          | 8.14±0.03ms          | 8.15±0.1ms          |    1    | aggregate_collapse.Aggregation.time_collapsed_by_STD_DEV(False)                             |
|          | 21.7±0.2ms           | 22.7±0.3ms          |    1.04 | aggregate_collapse.Aggregation.time_collapsed_by_STD_DEV(True)                              |
|          | 8.23±0.1ms           | 8.30±0.1ms          |    1.01 | aggregate_collapse.Aggregation.time_collapsed_by_VARIANCE(False)                            |
|          | 21.2±0.4ms           | 21.8±0.3ms          |    1.03 | aggregate_collapse.Aggregation.time_collapsed_by_VARIANCE(True)                             |
|          | 22.1±0.1ms           | 22.5±0.4ms          |    1.02 | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_MEAN(False)                     |
|          | 82.0±0.9ms           | 85.3±0.8ms          |    1.04 | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_MEAN(True)                      |
|          | 22.7±0.3ms           | 22.6±0.3ms          |    1    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_RMS(False)                      |
|          | 94.5±1ms             | 97.2±1ms            |    1.03 | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_RMS(True)                       |
|          | 21.3±0.2ms           | 21.4±0.3ms          |    1    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_SUM(False)                      |
|          | 55.4±0.7ms           | 56.9±0.7ms          |    1.03 | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_SUM(True)                       |
|          | 8.25±0.04ms          | 8.41±0.06ms         |    1.02 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_MEAN(False)                      |
|          | 26.7±0.6ms           | 27.2±0.6ms          |    1.02 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_MEAN(True)                       |
|          | 8.20±0.08ms          | 8.08±0.1ms          |    0.99 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_RMS(False)                       |
|          | 27.7±0.4ms           | 28.9±0.3ms          |    1.04 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_RMS(True)                        |
|          | 7.98±0.1ms           | 7.89±0.1ms          |    0.99 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_SUM(False)                       |
|          | 22.9±0.5ms           | 22.9±0.3ms          |    1    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_SUM(True)                        |
|          | 216±3ms              | 216±3ms             |    1    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_WPERCENTILE(False)               |
|          | 267±3ms              | 278±3ms             |    1.04 | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_WPERCENTILE(True)                |
|          | 1.15±0.03ms          | 1.13±0.02ms         |    0.98 | cube.CubeCreation.time_create(False, 'construct')                                           |
|          | 397±5μs              | 405±6μs             |    1.02 | cube.CubeCreation.time_create(False, 'instantiate')                                         |
|          | 966±9μs              | 971±10μs            |    1.01 | cube.CubeCreation.time_create(True, 'construct')                                            |
|          | 586±6μs              | 571±5μs             |    0.97 | cube.CubeCreation.time_create(True, 'instantiate')                                          |
|          | 83.4±1ms             | 86.6±1ms            |    1.04 | cube.CubeEquality.time_equality(False, False, 'all_equal')                                  |
|          | 24.7±0.6ms           | 25.4±0.7ms          |    1.03 | cube.CubeEquality.time_equality(False, False, 'coord_inequality')                           |
|          | 98.4±1ms             | 101±2ms             |    1.02 | cube.CubeEquality.time_equality(False, False, 'data_inequality')                            |
|          | 17.8±0.3μs           | 17.4±0.2μs          |    0.98 | cube.CubeEquality.time_equality(False, False, 'metadata_inequality')                        |
|          | 83.7±0.9ms           | 86.1±0.9ms          |    1.03 | cube.CubeEquality.time_equality(False, True, 'all_equal')                                   |
|          | 24.9±0.4ms           | 25.8±1ms            |    1.03 | cube.CubeEquality.time_equality(False, True, 'coord_inequality')                            |
|          | 98.0±1ms             | 99.1±1ms            |    1.01 | cube.CubeEquality.time_equality(False, True, 'data_inequality')                             |
|          | 17.6±0.3μs           | 17.2±0.3μs          |    0.98 | cube.CubeEquality.time_equality(False, True, 'metadata_inequality')                         |
|          | 168±2ms              | 175±2ms             |    1.04 | cube.CubeEquality.time_equality(True, False, 'all_equal')                                   |
|          | 64.5±0.4ms           | 69.2±0.6ms          |    1.07 | cube.CubeEquality.time_equality(True, False, 'coord_inequality')                            |
|          | 195±1ms              | 205±1ms             |    1.05 | cube.CubeEquality.time_equality(True, False, 'data_inequality')                             |
|          | 54.2±0.7μs           | 53.3±0.7μs          |    0.98 | cube.CubeEquality.time_equality(True, False, 'metadata_inequality')                         |
|          | 232±1ms              | 248±1ms             |    1.07 | cube.CubeEquality.time_equality(True, True, 'all_equal')                                    |
|          | 129±1ms              | 140±1ms             |    1.09 | cube.CubeEquality.time_equality(True, True, 'coord_inequality')                             |
|          | 259±2ms              | 278±2ms             |    1.07 | cube.CubeEquality.time_equality(True, True, 'data_inequality')                              |
|          | 56.1±1μs             | 55.7±0.7μs          |    0.99 | cube.CubeEquality.time_equality(True, True, 'metadata_inequality')                          |
|          | 805±6μs              | 816±10μs            |    1.01 | import_iris.Iris.time__concatenate                                                          |
|          | 186±4μs              | 184±1μs             |    0.99 | import_iris.Iris.time__constraints                                                          |
|          | 113±0.6μs            | 115±2μs             |    1.02 | import_iris.Iris.time__data_manager                                                         |
|          | 91.3±0.7μs           | 93.2±0.9μs          |    1.02 | import_iris.Iris.time__deprecation                                                          |
|          | 163±2μs              | 165±2μs             |    1.02 | import_iris.Iris.time__lazy_data                                                            |
|          | 909±4μs              | 917±3μs             |    1.01 | import_iris.Iris.time__merge                                                                |
|          | 73.3±0.5μs           | 77.2±7μs            |    1.05 | import_iris.Iris.time__representation                                                       |
|          | 613±4μs              | 618±5μs             |    1.01 | import_iris.Iris.time_analysis                                                              |
|          | 143±4μs              | 140±2μs             |    0.98 | import_iris.Iris.time_analysis__area_weighted                                               |
|          | 107±2μs              | 107±3μs             |    1    | import_iris.Iris.time_analysis__grid_angles                                                 |
|          | 247±2μs              | 248±2μs             |    1    | import_iris.Iris.time_analysis__interpolation                                               |
|          | 191±2μs              | 193±2μs             |    1.01 | import_iris.Iris.time_analysis__regrid                                                      |
|          | 109±0.8μs            | 111±2μs             |    1.01 | import_iris.Iris.time_analysis__scipy_interpolate                                           |
|          | 135±2μs              | 135±1μs             |    1    | import_iris.Iris.time_analysis_calculus                                                     |
|          | 325±2μs              | 326±6μs             |    1    | import_iris.Iris.time_analysis_cartography                                                  |
|          | 91.5±1μs             | 92.1±1μs            |    1.01 | import_iris.Iris.time_analysis_geomerty                                                     |
|          | 212±2μs              | 212±1μs             |    1    | import_iris.Iris.time_analysis_maths                                                        |
|          | 94.6±1μs             | 95.6±0.7μs          |    1.01 | import_iris.Iris.time_analysis_stats                                                        |
|          | 169±1μs              | 173±1μs             |    1.02 | import_iris.Iris.time_analysis_trajectory                                                   |
|          | 310±4μs              | 322±6μs             |    1.04 | import_iris.Iris.time_aux_factory                                                           |
|          | 81.2±0.4μs           | 83.3±2μs            |    1.03 | import_iris.Iris.time_common                                                                |
|          | 157±2μs              | 159±5μs             |    1.01 | import_iris.Iris.time_common_lenient                                                        |
|          | 1.37±0.01ms          | 1.38±0.01ms         |    1.01 | import_iris.Iris.time_common_metadata                                                       |
|          | 168±1μs              | 169±2μs             |    1    | import_iris.Iris.time_common_mixin                                                          |
|          | 1.18±0.01ms          | 1.17±0ms            |    0.99 | import_iris.Iris.time_common_resolve                                                        |
|          | 198±1μs              | 196±1μs             |    0.99 | import_iris.Iris.time_config                                                                |
|          | 124±2μs              | 127±2μs             |    1.03 | import_iris.Iris.time_coord_categorisation                                                  |
|          | 385±3μs              | 386±5μs             |    1    | import_iris.Iris.time_coord_systems                                                         |
|          | 771±6μs              | 771±10μs            |    1    | import_iris.Iris.time_coords                                                                |
|          | 669±30μs             | 656±6μs             |    0.98 | import_iris.Iris.time_cube                                                                  |
|          | 243±4μs              | 246±7μs             |    1.01 | import_iris.Iris.time_exceptions                                                            |
|          | 74.8±0.4μs           | 75.3±2μs            |    1.01 | import_iris.Iris.time_experimental                                                          |
|          | 178±1μs              | 182±2μs             |    1.02 | import_iris.Iris.time_fileformats                                                           |
|          | 253±4μs              | 258±1μs             |    1.02 | import_iris.Iris.time_fileformats__ff                                                       |
|          | 2.62±0.03ms          | 2.66±0.02ms         |    1.02 | import_iris.Iris.time_fileformats__ff_cross_references                                      |
|          | 75.8±0.4μs           | 76.7±1μs            |    1.01 | import_iris.Iris.time_fileformats__pp_lbproc_pairs                                          |
|          | 114±1μs              | 114±2μs             |    1    | import_iris.Iris.time_fileformats_abf                                                       |
|          | 427±3μs              | 432±8μs             |    1.01 | import_iris.Iris.time_fileformats_cf                                                        |
|          | 4.71±0.02ms          | 4.74±0.04ms         |    1.01 | import_iris.Iris.time_fileformats_dot                                                       |
|          | 71.9±0.3μs           | 74.1±1μs            |    1.03 | import_iris.Iris.time_fileformats_name                                                      |
|          | 252±1μs              | 251±1μs             |    1    | import_iris.Iris.time_fileformats_name_loaders                                              |
|          | 113±0.9μs            | 114±1μs             |    1.01 | import_iris.Iris.time_fileformats_netcdf                                                    |
|          | 119±0.8μs            | 120±1μs             |    1.01 | import_iris.Iris.time_fileformats_nimrod                                                    |
|          | 207±2μs              | 206±1μs             |    1    | import_iris.Iris.time_fileformats_nimrod_load_rules                                         |
|          | 814±20μs             | 804±9μs             |    0.99 | import_iris.Iris.time_fileformats_pp                                                        |
|          | 177±4μs              | 185±2μs             |    1.04 | import_iris.Iris.time_fileformats_pp_load_rules                                             |
|          | 133±1μs              | 136±2μs             |    1.02 | import_iris.Iris.time_fileformats_pp_save_rules                                             |
|          | 553±9μs              | 548±2μs             |    0.99 | import_iris.Iris.time_fileformats_rules                                                     |
|          | 221±1μs              | 222±2μs             |    1.01 | import_iris.Iris.time_fileformats_structured_array_identification                           |
|          | 81.4±0.4μs           | 81.4±1μs            |    1    | import_iris.Iris.time_fileformats_um                                                        |
|          | 158±1μs              | 157±2μs             |    0.99 | import_iris.Iris.time_fileformats_um__fast_load                                             |
|          | 139±0.7μs            | 140±0.8μs           |    1.01 | import_iris.Iris.time_fileformats_um__fast_load_structured_fields                           |
|          | 74.4±0.7μs           | 74.2±0.9μs          |    1    | import_iris.Iris.time_fileformats_um__ff_replacement                                        |
|          | 79.0±0.4μs           | 79.9±1μs            |    1.01 | import_iris.Iris.time_fileformats_um__optimal_array_structuring                             |
|          | 962±10μs             | 975±6μs             |    1.01 | import_iris.Iris.time_fileformats_um_cf_map                                                 |
|          | 138±0.9μs            | 139±1μs             |    1.01 | import_iris.Iris.time_io                                                                    |
|          | 176±2μs              | 178±5μs             |    1.01 | import_iris.Iris.time_io_format_picker                                                      |
|          | 211±1μs              | 212±2μs             |    1.01 | import_iris.Iris.time_iris                                                                  |
|          | 125±2μs              | 128±1μs             |    1.02 | import_iris.Iris.time_iterate                                                               |
|          | 8.19±0.09ms          | 8.34±0.06ms         |    1.02 | import_iris.Iris.time_palette                                                               |
|          | 1.79±0.01ms          | 1.78±0.04ms         |    1    | import_iris.Iris.time_plot                                                                  |
|          | 218±2μs              | 217±0.6μs           |    1    | import_iris.Iris.time_quickplot                                                             |
|          | 2.11±0.05ms          | 2.21±0.01ms         |    1.05 | import_iris.Iris.time_std_names                                                             |
|          | 1.82±0.01ms          | 1.87±0.06ms         |    1.03 | import_iris.Iris.time_symbols                                                               |
|          | 88.5±8ms             | 88.8±2ms            |    1    | import_iris.Iris.time_tests                                                                 |
|          | 251±2μs              | 254±1μs             |    1.01 | import_iris.Iris.time_third_party_cartopy                                                   |
|          | 5.11±0.08ms          | 5.11±0.05ms         |    1    | import_iris.Iris.time_third_party_cf_units                                                  |
|          | 117±0.9μs            | 119±0.9μs           |    1.01 | import_iris.Iris.time_third_party_cftime                                                    |
|          | 2.72±0.01ms          | 2.73±0.01ms         |    1    | import_iris.Iris.time_third_party_matplotlib                                                |
|          | 1.30±0.01ms          | 1.31±0.02ms         |    1    | import_iris.Iris.time_third_party_numpy                                                     |
|          | 166±4μs              | 170±0.8μs           |    1.02 | import_iris.Iris.time_third_party_scipy                                                     |
|          | 97.8±0.9μs           | 98.8±0.8μs          |    1.01 | import_iris.Iris.time_time                                                                  |
|          | 351±3μs              | 351±4μs             |    1    | import_iris.Iris.time_util                                                                  |
|          | 70.9±2μs             | 73.5±0.4μs          |    1.04 | iterate.IZip.time_izip                                                                      |
|          | 9.39±0.04ms          | 9.36±0.06ms         |    1    | load.LoadAndRealise.time_load((1280, 960, 5), False, 'FF')                                  |
|          | 15.7±0.2ms           | 16.1±0.2ms          |    1.02 | load.LoadAndRealise.time_load((1280, 960, 5), False, 'NetCDF')                              |
|          | 9.48±0.05ms          | 9.43±0.04ms         |    1    | load.LoadAndRealise.time_load((1280, 960, 5), False, 'PP')                                  |
|          | 9.50±0.05ms          | 9.41±0.03ms         |    0.99 | load.LoadAndRealise.time_load((1280, 960, 5), True, 'FF')                                   |
|          | 12.9±0.1ms           | 12.8±0.07ms         |    0.99 | load.LoadAndRealise.time_load((1280, 960, 5), True, 'NetCDF')                               |
|          | 9.52±0.04ms          | 9.43±0.03ms         |    0.99 | load.LoadAndRealise.time_load((1280, 960, 5), True, 'PP')                                   |
|          | 1.45±0.01s           | 1.46±0.02s          |    1    | load.LoadAndRealise.time_load((2, 2, 1000), False, 'FF')                                    |
|          | 11.7±0.06ms          | 11.8±0.08ms         |    1.01 | load.LoadAndRealise.time_load((2, 2, 1000), False, 'NetCDF')                                |
|          | 1.45±0.01s           | 1.46±0.01s          |    1.01 | load.LoadAndRealise.time_load((2, 2, 1000), False, 'PP')                                    |
|          | 1.45±0.01s           | 1.44±0.01s          |    1    | load.LoadAndRealise.time_load((2, 2, 1000), True, 'FF')                                     |
|          | 11.8±0.2ms           | 11.7±0.1ms          |    0.99 | load.LoadAndRealise.time_load((2, 2, 1000), True, 'NetCDF')                                 |
|          | 1.47±0.01s           | 1.47±0.02s          |    1    | load.LoadAndRealise.time_load((2, 2, 1000), True, 'PP')                                     |
|          | 4.93±0.03ms          | 4.96±0.05ms         |    1.01 | load.LoadAndRealise.time_load((50, 50, 2), False, 'FF')                                     |
|          | 11.4±0.2ms           | 11.4±0.2ms          |    1    | load.LoadAndRealise.time_load((50, 50, 2), False, 'NetCDF')                                 |
|          | 4.93±0.02ms          | 4.90±0.03ms         |    0.99 | load.LoadAndRealise.time_load((50, 50, 2), False, 'PP')                                     |
|          | 4.93±0.01ms          | 4.98±0.06ms         |    1.01 | load.LoadAndRealise.time_load((50, 50, 2), True, 'FF')                                      |
|          | 11.4±0.1ms           | 11.5±0.2ms          |    1.01 | load.LoadAndRealise.time_load((50, 50, 2), True, 'NetCDF')                                  |
|          | 4.94±0.03ms          | 4.95±0.06ms         |    1    | load.LoadAndRealise.time_load((50, 50, 2), True, 'PP')                                      |
|          | 22.3±0.9ms           | 25.0±1ms            |    1.12 | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'FF')                               |
|          | 27.7±0.3ms           | 28.4±0.4ms          |    1.02 | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'NetCDF')                           |
|          | 11.4±0.7ms           | 13.0±1ms            |    1.14 | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'PP')                               |
|          | 27.0±0.7ms           | 29.4±2ms            |    1.09 | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'FF')                                |
|          | 70.8±0.9ms           | 71.4±3ms            |    1.01 | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'NetCDF')                            |
|          | 26.4±0.5ms           | 28.4±2ms            |    1.07 | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'PP')                                |
|          | 507±3ms              | 553±3ms             |    1.09 | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'FF')                                 |
|          | 510±2ms              | 553±2ms             |    1.08 | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'PP')                                 |
|          | 520±2ms              | 568±3ms             |    1.09 | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'FF')                                  |
|          | 2.99±0.02ms          | 3.46±0.07ms         |    1.16 | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'NetCDF')                              |
|          | 517±3ms              | 560±2ms             |    1.08 | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'PP')                                  |
|          | 3.01±0.1ms           | 3.54±0.09ms         |    1.18 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'NetCDF')                              |
|          | 3.13±0.07ms          | 3.66±0.1ms          |    1.17 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'NetCDF')                               |
|          | 341±2ms              | 343±3ms             |    1    | load.ManyCubes.time_many_cube_load                                                          |
|          | 84.8±0.6ms           | 88.2±2ms            |    1.04 | load.ManyVars.time_many_var_load                                                            |
|          | 9.56±0.06ms          | 9.58±0.1ms          |    1    | load.STASHConstraint.time_stash_constraint((1280, 960, 5), 'FF')                            |
|          | 9.55±0.04ms          | 9.53±0.05ms         |    1    | load.STASHConstraint.time_stash_constraint((1280, 960, 5), 'PP')                            |
|          | 1.45±0.01s           | 1.47±0.01s          |    1.01 | load.STASHConstraint.time_stash_constraint((2, 2, 1000), 'FF')                              |
|          | 1.46±0.01s           | 1.49±0.01s          |    1.02 | load.STASHConstraint.time_stash_constraint((2, 2, 1000), 'PP')                              |
|          | 4.99±0.03ms          | 5.04±0.03ms         |    1.01 | load.STASHConstraint.time_stash_constraint((2, 2, 2), 'FF')                                 |
|          | 4.96±0.08ms          | 5.07±0.2ms          |    1.02 | load.STASHConstraint.time_stash_constraint((2, 2, 2), 'PP')                                 |
|          | 8.58±0.07ms          | 8.57±0.07ms         |    1    | load.StructuredFF.time_structured_load((1280, 960, 5), False)                               |
|          | 5.61±0.09ms          | 5.56±0.07ms         |    0.99 | load.StructuredFF.time_structured_load((1280, 960, 5), True)                                |
|          | 1.43±0.01s           | 1.42±0.01s          |    1    | load.StructuredFF.time_structured_load((2, 2, 1000), False)                                 |
|          | 440±6ms              | 432±5ms             |    0.98 | load.StructuredFF.time_structured_load((2, 2, 1000), True)                                  |
|          | 4.18±0.03ms          | 4.18±0.07ms         |    1    | load.StructuredFF.time_structured_load((2, 2, 2), False)                                    |
|          | 4.13±0.03ms          | 4.17±0.05ms         |    1.01 | load.StructuredFF.time_structured_load((2, 2, 2), True)                                     |
|          | 162±1ms              | 159±1ms             |    0.98 | load.TimeConstraint.time_time_constraint(20, 'FF')                                          |
|          | 14.8±0.07ms          | 14.8±0.1ms          |    1    | load.TimeConstraint.time_time_constraint(20, 'NetCDF')                                      |
|          | 163±2ms              | 160±2ms             |    0.98 | load.TimeConstraint.time_time_constraint(20, 'PP')                                          |
|          | 31.9±0.3ms           | 31.7±0.4ms          |    0.99 | load.TimeConstraint.time_time_constraint(3, 'FF')                                           |
|          | 14.3±0.1ms           | 14.3±0.1ms          |    1    | load.TimeConstraint.time_time_constraint(3, 'NetCDF')                                       |
|          | 32.5±0.4ms           | 31.6±0.2ms          |    0.97 | load.TimeConstraint.time_time_constraint(3, 'PP')                                           |
|          | 13.0±0.2ms           | 15.1±0.2ms          |    1.16 | load.ugrid.BasicLoading.time_load_file(1)                                                   |
|          | 44.7±0.7ms           | 46.4±0.7ms          |    1.04 | load.ugrid.BasicLoading.time_load_file(200000)                                              |
|          | 8.29±0.09ms          | 8.99±0.2ms          |    1.08 | load.ugrid.BasicLoading.time_load_mesh(1)                                                   |
|          | 15.6±0.3ms           | 17.3±0.7ms          |    1.11 | load.ugrid.BasicLoading.time_load_mesh(200000)                                              |
|          | 13.4±0.3ms           | 15.3±0.3ms          |    1.14 | load.ugrid.BasicLoadingTime.time_load_file(1)                                               |
|          | 14.7±0.4ms           | 15.7±0.3ms          |    1.06 | load.ugrid.BasicLoadingTime.time_load_file(200000)                                          |
|          | 8.53±0.4ms           | 9.02±0.3ms          |    1.06 | load.ugrid.BasicLoadingTime.time_load_mesh(1)                                               |
|          | 11.0±0.4ms           | 12.1±0.5ms          |    1.11 | load.ugrid.BasicLoadingTime.time_load_mesh(200000)                                          |
|          | 14.1±0.3ms           | 16.0±0.2ms          |    1.14 | load.ugrid.Callback.time_load_file_callback(1)                                              |
|          | 55.1±0.9ms           | 56.8±0.8ms          |    1.03 | load.ugrid.Callback.time_load_file_callback(200000)                                         |
|          | 14.1±0.3ms           | 16.6±0.3ms          |    1.18 | load.ugrid.CallbackTime.time_load_file_callback(1)                                          |
|          | 16.2±0.6ms           | 17.2±0.4ms          |    1.06 | load.ugrid.CallbackTime.time_load_file_callback(200000)                                     |
|          | 3.15±0.1ms           | 3.58±0.2ms          |    1.14 | load.ugrid.DataRealisation.time_realise_data(10000)                                         |
|          | 38.8±1ms             | 40.2±1ms            |    1.04 | load.ugrid.DataRealisationTime.time_realise_data(10000)                                     |
|          | 795±10ms             | 799±6ms             |    1.01 | load.ugrid.DataRealisationTime.time_realise_data(200000)                                    |
|          | 1.61±0.02s           | 1.60±0.04s          |    1    | merge_concat.Concatenate.time_concatenate(False)                                            |
|          | 433±3ms              | 434±5ms             |    1    | merge_concat.Concatenate.time_concatenate(True)                                             |
|          | 2.42±0G              | 2.42±0G             |    1    | merge_concat.Concatenate.tracemalloc_concatenate(False)                                     |
|          | 121±5M               | 112±5M              |    0.93 | merge_concat.Concatenate.tracemalloc_concatenate(True)                                      |
|          | 35.9±0.7ms           | 37.4±3ms            |    1.04 | merge_concat.Merge.time_merge                                                               |
|          | 126±0.02M            | 126±0.02M           |    1    | merge_concat.Merge.tracemalloc_merge                                                        |
|          | 352±2ns              | 370±2ns             |    1.05 | mesh.utils.regions_combine.CombineRegionsComputeRealData.time_compute_data(50)              |
|          | 197±8ms              | 198±2ms             |    1    | mesh.utils.regions_combine.CombineRegionsComputeRealData.time_compute_data(500)             |
|          | 741±0.3k             | 769±0.3k            |    1.04 | mesh.utils.regions_combine.CombineRegionsComputeRealData.tracemalloc_compute_data(50)       |
|          | 60.1±0M              | 60.2±0M             |    1    | mesh.utils.regions_combine.CombineRegionsComputeRealData.tracemalloc_compute_data(500)      |
|          | 17.2±0.09ms          | 17.0±0.4ms          |    0.99 | mesh.utils.regions_combine.CombineRegionsCreateCube.time_create_combined_cube(50)           |
|          | 20.3±0.4ms           | 21.1±0.4ms          |    1.04 | mesh.utils.regions_combine.CombineRegionsCreateCube.time_create_combined_cube(500)          |
|          | 1.29±0.05M           | 1.29±0.01M          |    1    | mesh.utils.regions_combine.CombineRegionsCreateCube.tracemalloc_create_combined_cube(50)    |
|          | 25.1±0.05M           | 25.1±0.01M          |    1    | mesh.utils.regions_combine.CombineRegionsCreateCube.tracemalloc_create_combined_cube(500)   |
|          | 107±0.6ms            | 119±2ms             |    1.11 | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.time_stream_file2file(50)         |
|          | 580±10ms             | 585±5ms             |    1.01 | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.time_stream_file2file(500)        |
|          | 1.34±0.05M           | 1.51±0.03M          |    1.12 | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.tracemalloc_stream_file2file(50)  |
|          | 96.4±0.05M           | 96.6±0.03M          |    1    | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.tracemalloc_stream_file2file(500) |
|          | 67.3±0.8ms           | 77.6±0.5ms          |    1.15 | mesh.utils.regions_combine.CombineRegionsSaveData.time_save(50)                             |
|          | 533±7ms              | 540±7ms             |    1.01 | mesh.utils.regions_combine.CombineRegionsSaveData.time_save(500)                            |
|          | 1.23±0.03M           | 1.44±0.03M          |    1.18 | mesh.utils.regions_combine.CombineRegionsSaveData.tracemalloc_save(50)                      |
|          | 96.3±0.02M           | 96.5±0.03M          |    1    | mesh.utils.regions_combine.CombineRegionsSaveData.tracemalloc_save(500)                     |
|          | 2.1752849999999997   | 2.1752849999999997  |    1    | mesh.utils.regions_combine.CombineRegionsSaveData.track_filesize_saved(50)                  |
|          | 216.01528499999998   | 216.01528499999998  |    1    | mesh.utils.regions_combine.CombineRegionsSaveData.track_filesize_saved(500)                 |
|          | 6.77±0.05ms          | 6.78±0.06ms         |    1    | plot.AuxSort.time_aux_sort                                                                  |
|          | 81.8±2ms             | 80.4±5ms            |    0.98 | regridding.CurvilinearRegridding.time_regrid_pic                                            |
|          | 136±3M               | 136±3M              |    1    | regridding.CurvilinearRegridding.tracemalloc_regrid_pic                                     |
|          | 109±1ms              | 108±6ms             |    0.99 | regridding.HorizontalChunkedRegridding.time_regrid_area_w                                   |
|          | 59.1±5ms             | 59.5±0.9ms          |    1.01 | regridding.HorizontalChunkedRegridding.time_regrid_area_w_new_grid                          |
|          | 107±0.01M            | 107±0.09M           |    1    | regridding.HorizontalChunkedRegridding.tracemalloc_regrid_area_w                            |
|          | 147±0.04M            | 147±0.02M           |    1    | regridding.HorizontalChunkedRegridding.tracemalloc_regrid_area_w_new_grid                   |
|          | 4.39±0.06ms          | 4.85±0.08ms         |    1.1  | save.NetcdfSave.time_netcdf_save_cube(50, False)                                            |
|          | 74.1±0.5ms           | 83.5±0.5ms          |    1.13 | save.NetcdfSave.time_netcdf_save_cube(50, True)                                             |
|          | 41.8±0.6ms           | 42.5±0.4ms          |    1.02 | save.NetcdfSave.time_netcdf_save_cube(600, False)                                           |
|          | 481±5ms              | 490±4ms             |    1.02 | save.NetcdfSave.time_netcdf_save_cube(600, True)                                            |
|          | 87.4±0.4ns           | 87.8±1ns            |    1    | save.NetcdfSave.time_netcdf_save_mesh(50, False)                                            |
|          | 56.1±0.4ms           | 66.5±0.9ms          |    1.19 | save.NetcdfSave.time_netcdf_save_mesh(50, True)                                             |
|          | 88.3±1ns             | 88.0±1ns            |    1    | save.NetcdfSave.time_netcdf_save_mesh(600, False)                                           |
|          | 423±4ms              | 433±4ms             |    1.02 | save.NetcdfSave.time_netcdf_save_mesh(600, True)                                            |
|          | 29.6±0.2k            | 32.4±0.4k           |    1.09 | save.NetcdfSave.tracemalloc_netcdf_save(50, False)                                          |
|          | 1.66±0.2M            | 1.81±0.2M           |    1.09 | save.NetcdfSave.tracemalloc_netcdf_save(50, True)                                           |
|          | 29.7±0.2k            | 32.5±0.4k           |    1.1  | save.NetcdfSave.tracemalloc_netcdf_save(600, False)                                         |
|          | 208±20M              | 191±20M             |    0.92 | save.NetcdfSave.tracemalloc_netcdf_save(600, True)                                          |
|          | 38.8±0.5ms           | 39.7±0.4ms          |    1.02 | stats.PearsonR.time_lazy                                                                    |
|          | 9.36±0.2ms           | 9.23±0.2ms          |    0.99 | stats.PearsonR.time_real                                                                    |
|          | 29.4±1M              | 29.5±0.8M           |    1    | stats.PearsonR.tracemalloc_lazy                                                             |
|          | 18.4±0.01M           | 18.4±0.01M          |    1    | stats.PearsonR.tracemalloc_real                                                             |
|          | 22.9±0.5ms           | 25.9±0.6ms          |    1.13 | trajectory.TrajectoryInterpolation.time_trajectory_linear                                   |
|          | 61.0±0.7ms           | 62.5±0.9ms          |    1.03 | trajectory.TrajectoryInterpolation.time_trajectory_nearest                                  |
|          | 17.6±0.02M           | 17.6±0.02M          |    1    | trajectory.TrajectoryInterpolation.tracemalloc_trajectory_linear                            |
|          | 7.74±0.01M           | 7.75±0.02M          |    1    | trajectory.TrajectoryInterpolation.tracemalloc_trajectory_nearest                           |

Benchmarks that have got worse:

| Change   | Before [7e3c921e]    | After [755a7cd0]    |   Ratio | Benchmark (Parameter)                                           |
|----------|----------------------|---------------------|---------|-----------------------------------------------------------------|
| +        | 2.96±0.04ms          | 3.58±0.07ms         |    1.21 | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'NetCDF') |
| +        | 1.60±0.05ms          | 2.25±0.04ms         |    1.4  | load.LoadAndRealise.time_realise((50, 50, 2), False, 'FF')      |
| +        | 1.60±0.04ms          | 2.16±0.06ms         |    1.35 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'PP')      |
| +        | 1.62±0.05ms          | 2.23±0.1ms          |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'FF')       |
| +        | 1.61±0.06ms          | 2.16±0.09ms         |    1.34 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'PP')       |
| +        | 4.49±0.1ms           | 6.64±0.2ms          |    1.48 | load.ugrid.DataRealisation.time_realise_data(200000)            |

Generated by GHA run 14792324046

Comment on lines +115 to +140
def is_pp_layer(obj):
result = False
if hasattr(obj, "values"):
if len(obj) == 1:
(result,) = [hasattr(v, "_lbpack") for v in obj.values()]
return result

# Find the single reference to the PPDataProxy within the dask graph.
(layer,) = [
lay for lay in lazy_mask_array.dask.layers.values() if is_pp_layer(lay)
]
((layer_key, proxy),) = layer.items()
# Replace the PPDataProxy with a mock.
# By replacing directly within the dask graph, we can prove whether an
# operation is relying on the graph in the expected way.
mock_proxy = mock.MagicMock(spec=pp.PPDataProxy, wraps=proxy)
layer.mapping[layer_key] = mock_proxy

self.assertFalse(mock_proxy.__getitem__.called)
with contextlib.suppress(TypeError):
# Expect this to crash - data realisation is complex, and it is not
# worth mocking this fully.
_ = lazy_soildata_array.compute()
# Proves that the soil data graph includes the mask graph - computing
# the soil data has accessed the mask graph object which we mocked.
self.assertTrue(mock_proxy.__getitem__.called)
Copy link
Contributor Author

@trexfeathers trexfeathers May 5, 2025

Choose a reason for hiding this comment

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

(see previous thread)

This change in approach is more agnostic to Dask's internals (although still somewhat vulnerable). It successfully runs, only failing in a classic test failure rather than falling over.

But all I have managed to do is prove that Dask >=2025.4.0 breaks this test on a philosophical level - not just because the structures have changed.

Results of updated test

fileformats/pp.py Dask version Pass/Fail what this proves
v2.2.0 2025.3.0 Fail ❌
#3255 2025.3.0 Pass ✔ The updated test still detects the case it was designed for
main 2025.3.0 Pass ✔
main 2025.4.0 Fail ❌ The Dask graph for the data payload no longer incorporates the mask graph

Understanding if this is cause for concern - and if so, how to fix things - will be complex. The development team are fully booked on other projects for the foreseeable, so I would suggest a patch release with a dask < 2025.4 pin. @SciTools/iris-devs what are your thoughts?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Discussed at length with @pp-mo, who explained that this test was not written to demonstrate the other changes in #3255, but because there was a concern about something else similar happening again.

Our increased experience with Dask in the 6 years since has given us the confidence that:

  1. We now write code that is much less vulnerable to things like Don't nest compute calls #3237
  2. Dask itself has matured, and is less vulnerable to unexpected corner cases

It looks like the refactoring that made this test fail (dask/dask#11736) was technical debt work to make Dask safer and more robust, and is NOT evidence that we have become vulnerable to nested compute() calls.

Based on all of this, we have decided to remove the test.

@github-actions
Copy link
Contributor

github-actions bot commented May 5, 2025

⏱️ Performance Benchmark Report: 2df2034

Performance shifts
| Change   | Before [7e3c921e]    | After [2df20347]    |   Ratio | Benchmark (Parameter)                                      |
|----------|----------------------|---------------------|---------|------------------------------------------------------------|
| +        | 1.54±0.03ms          | 2.14±0.07ms         |    1.39 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'FF') |
| +        | 1.55±0.05ms          | 2.14±0.06ms         |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'PP') |
| +        | 1.56±0.03ms          | 2.16±0.03ms         |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'FF')  |
| +        | 1.65±0.03ms          | 2.26±0.06ms         |    1.37 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'PP')  |
Full benchmark results

Benchmarks that have stayed the same:

| Change   | Before [7e3c921e]    | After [2df20347]    | Ratio   | Benchmark (Parameter)                                                                       |
|----------|----------------------|---------------------|---------|---------------------------------------------------------------------------------------------|
|          | 20.7±0.3ms           | 21.1±0.1ms          | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_COUNT(False)                              |
|          | 51.6±0.8ms           | 53.6±1ms            | 1.04    | aggregate_collapse.Aggregation.time_aggregated_by_COUNT(True)                               |
|          | 34.0±0.3ms           | 35.9±0.4ms          | 1.06    | aggregate_collapse.Aggregation.time_aggregated_by_FAST_PERCENTILE(False)                    |
|          | 160±2ms              | 172±4ms             | 1.08    | aggregate_collapse.Aggregation.time_aggregated_by_FAST_PERCENTILE(True)                     |
|          | 22.9±0.2ms           | 23.3±0.4ms          | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_GMEAN(False)                              |
|          | 30.5±0.4ms           | 32.5±0.8ms          | 1.06    | aggregate_collapse.Aggregation.time_aggregated_by_GMEAN(True)                               |
|          | 22.5±0.09ms          | 22.8±0.4ms          | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_HMEAN(False)                              |
|          | 31.0±0.4ms           | 32.4±0.4ms          | 1.05    | aggregate_collapse.Aggregation.time_aggregated_by_HMEAN(True)                               |
|          | 20.8±0.3ms           | 20.7±0.2ms          | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_MAX(False)                                |
|          | 44.3±1ms             | 45.2±1ms            | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_MAX(True)                                 |
|          | 124±1ms              | 129±0.8ms           | 1.04    | aggregate_collapse.Aggregation.time_aggregated_by_MAX_RUN(False)                            |
|          | 126±2ms              | 129±1ms             | 1.03    | aggregate_collapse.Aggregation.time_aggregated_by_MAX_RUN(True)                             |
|          | 21.8±0.2ms           | 22.0±0.09ms         | 1.01    | aggregate_collapse.Aggregation.time_aggregated_by_MEAN(False)                               |
|          | 48.2±0.7ms           | 49.4±0.5ms          | 1.03    | aggregate_collapse.Aggregation.time_aggregated_by_MEAN(True)                                |
|          | 23.3±0.3ms           | 23.3±0.2ms          | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_MEDIAN(False)                             |
|          | 57.4±0.7ms           | 59.0±0.8ms          | 1.03    | aggregate_collapse.Aggregation.time_aggregated_by_MEDIAN(True)                              |
|          | 20.9±0.2ms           | 20.6±0.4ms          | 0.99    | aggregate_collapse.Aggregation.time_aggregated_by_MIN(False)                                |
|          | 45.1±1ms             | 46.6±0.5ms          | 1.03    | aggregate_collapse.Aggregation.time_aggregated_by_MIN(True)                                 |
|          | 1.09±0.01s           | 1.09±0.01s          | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_PEAK(False)                               |
|          | 1.09±0.01s           | 1.08±0.01s          | 0.99    | aggregate_collapse.Aggregation.time_aggregated_by_PEAK(True)                                |
|          | 219±0.8ms            | 219±2ms             | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_PERCENTILE(False)                         |
|          | 341±7ms              | 340±10ms            | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_PERCENTILE(True)                          |
|          | 21.9±0.2ms           | 21.8±0.4ms          | 1.00    | aggregate_collapse.Aggregation.time_aggregated_by_PROPORTION(False)                         |
|          | 29.7±0.5ms           | 30.9±0.4ms          | 1.04    | aggregate_collapse.Aggregation.time_aggregated_by_PROPORTION(True)                          |
|          | 22.3±0.3ms           | 22.1±0.3ms          | 0.99    | aggregate_collapse.Aggregation.time_aggregated_by_RMS(False)                                |
|          | 59.2±0.7ms           | 60.0±0.6ms          | 1.01    | aggregate_collapse.Aggregation.time_aggregated_by_RMS(True)                                 |
|          | 22.8±0.2ms           | 22.9±0.3ms          | 1.01    | aggregate_collapse.Aggregation.time_aggregated_by_STD_DEV(False)                            |
|          | 61.5±0.6ms           | 62.9±0.4ms          | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_STD_DEV(True)                             |
|          | 23.0±0.4ms           | 22.6±0.4ms          | 0.98    | aggregate_collapse.Aggregation.time_aggregated_by_VARIANCE(False)                           |
|          | 58.2±0.7ms           | 59.2±0.7ms          | 1.02    | aggregate_collapse.Aggregation.time_aggregated_by_VARIANCE(True)                            |
|          | 7.99±0.1ms           | 7.68±0.1ms          | 0.96    | aggregate_collapse.Aggregation.time_collapsed_by_COUNT(False)                               |
|          | 21.7±0.3ms           | 22.2±0.5ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_COUNT(True)                                |
|          | 19.4±0.2ms           | 19.9±0.3ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_FAST_PERCENTILE(False)                     |
|          | 119±4ms              | 129±2ms             | 1.08    | aggregate_collapse.Aggregation.time_collapsed_by_FAST_PERCENTILE(True)                      |
|          | 8.19±0.1ms           | 8.26±0.1ms          | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_GMEAN(False)                               |
|          | 20.0±0.5ms           | 20.0±0.4ms          | 1.00    | aggregate_collapse.Aggregation.time_collapsed_by_GMEAN(True)                                |
|          | 8.03±0.05ms          | 8.10±0.07ms         | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_HMEAN(False)                               |
|          | 19.9±0.2ms           | 20.2±0.2ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_HMEAN(True)                                |
|          | 7.63±0.05ms          | 7.76±0.1ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_MAX(False)                                 |
|          | 20.4±0.5ms           | 20.6±0.1ms          | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_MAX(True)                                  |
|          | 23.4±0.2ms           | 24.1±0.3ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_MAX_RUN(False)                             |
|          | 34.2±0.7ms           | 35.0±0.5ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_MAX_RUN(True)                              |
|          | 7.93±0.09ms          | 8.15±0.1ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_MEAN(False)                                |
|          | 20.7±0.2ms           | 21.0±0.2ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_MEAN(True)                                 |
|          | 9.46±0.1ms           | 9.40±0.1ms          | 0.99    | aggregate_collapse.Aggregation.time_collapsed_by_MEDIAN(False)                              |
|          | 23.3±0.4ms           | 23.7±0.3ms          | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_MEDIAN(True)                               |
|          | 7.63±0.1ms           | 7.66±0.05ms         | 1.00    | aggregate_collapse.Aggregation.time_collapsed_by_MIN(False)                                 |
|          | 20.0±0.4ms           | 20.7±0.4ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_MIN(True)                                  |
|          | 531±3ms              | 528±4ms             | 1.00    | aggregate_collapse.Aggregation.time_collapsed_by_PEAK(False)                                |
|          | 537±5ms              | 538±4ms             | 1.00    | aggregate_collapse.Aggregation.time_collapsed_by_PEAK(True)                                 |
|          | 45.1±0.6ms           | 45.8±0.4ms          | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_PERCENTILE(False)                          |
|          | 126±0.8ms            | 136±3ms             | 1.08    | aggregate_collapse.Aggregation.time_collapsed_by_PERCENTILE(True)                           |
|          | 8.14±0.06ms          | 8.01±0.1ms          | 0.98    | aggregate_collapse.Aggregation.time_collapsed_by_PROPORTION(False)                          |
|          | 19.3±0.1ms           | 19.9±0.3ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_PROPORTION(True)                           |
|          | 7.97±0.09ms          | 8.03±0.1ms          | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_RMS(False)                                 |
|          | 22.0±0.4ms           | 22.6±0.3ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_RMS(True)                                  |
|          | 8.11±0.05ms          | 8.30±0.09ms         | 1.02    | aggregate_collapse.Aggregation.time_collapsed_by_STD_DEV(False)                             |
|          | 21.5±0.1ms           | 22.2±0.5ms          | 1.03    | aggregate_collapse.Aggregation.time_collapsed_by_STD_DEV(True)                              |
|          | 8.17±0.06ms          | 8.23±0.08ms         | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_VARIANCE(False)                            |
|          | 21.5±0.2ms           | 21.8±0.5ms          | 1.01    | aggregate_collapse.Aggregation.time_collapsed_by_VARIANCE(True)                             |
|          | 22.4±0.3ms           | 22.2±0.1ms          | 0.99    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_MEAN(False)                     |
|          | 80.8±0.6ms           | 83.5±0.8ms          | 1.03    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_MEAN(True)                      |
|          | 22.5±0.4ms           | 22.5±0.3ms          | 1.00    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_RMS(False)                      |
|          | 94.5±1ms             | 96.2±1ms            | 1.02    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_RMS(True)                       |
|          | 20.9±0.2ms           | 21.2±0.2ms          | 1.01    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_SUM(False)                      |
|          | 55.4±1ms             | 56.8±1ms            | 1.03    | aggregate_collapse.WeightedAggregation.time_w_aggregated_by_SUM(True)                       |
|          | 8.32±0.1ms           | 8.36±0.2ms          | 1.00    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_MEAN(False)                      |
|          | 25.3±0.5ms           | 27.2±0.7ms          | 1.08    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_MEAN(True)                       |
|          | 8.00±0.06ms          | 8.20±0.08ms         | 1.02    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_RMS(False)                       |
|          | 27.5±0.9ms           | 28.2±0.5ms          | 1.03    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_RMS(True)                        |
|          | 7.86±0.1ms           | 7.78±0.03ms         | 0.99    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_SUM(False)                       |
|          | 22.2±0.5ms           | 22.8±0.4ms          | 1.03    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_SUM(True)                        |
|          | 217±4ms              | 216±2ms             | 1.00    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_WPERCENTILE(False)               |
|          | 264±4ms              | 276±3ms             | 1.05    | aggregate_collapse.WeightedAggregation.time_w_collapsed_by_WPERCENTILE(True)                |
|          | 1.14±0.01ms          | 1.16±0.01ms         | 1.02    | cube.CubeCreation.time_create(False, 'construct')                                           |
|          | 402±5μs              | 398±6μs             | 0.99    | cube.CubeCreation.time_create(False, 'instantiate')                                         |
|          | 959±20μs             | 957±5μs             | 1.00    | cube.CubeCreation.time_create(True, 'construct')                                            |
|          | 572±8μs              | 571±4μs             | 1.00    | cube.CubeCreation.time_create(True, 'instantiate')                                          |
|          | 81.2±2ms             | 84.0±2ms            | 1.03    | cube.CubeEquality.time_equality(False, False, 'all_equal')                                  |
|          | 24.9±0.3ms           | 24.8±0.6ms          | 1.00    | cube.CubeEquality.time_equality(False, False, 'coord_inequality')                           |
|          | 95.9±1ms             | 98.3±1ms            | 1.03    | cube.CubeEquality.time_equality(False, False, 'data_inequality')                            |
|          | 17.7±0.2μs           | 17.2±0.6μs          | 0.97    | cube.CubeEquality.time_equality(False, False, 'metadata_inequality')                        |
|          | 83.2±3ms             | 87.1±1ms            | 1.05    | cube.CubeEquality.time_equality(False, True, 'all_equal')                                   |
|          | 25.3±0.4ms           | 25.4±0.4ms          | 1.00    | cube.CubeEquality.time_equality(False, True, 'coord_inequality')                            |
|          | 96.9±2ms             | 98.3±1ms            | 1.01    | cube.CubeEquality.time_equality(False, True, 'data_inequality')                             |
|          | 17.8±0.2μs           | 17.2±0.6μs          | 0.96    | cube.CubeEquality.time_equality(False, True, 'metadata_inequality')                         |
|          | 166±4ms              | 171±3ms             | 1.03    | cube.CubeEquality.time_equality(True, False, 'all_equal')                                   |
|          | 64.5±3ms             | 67.6±1ms            | 1.05    | cube.CubeEquality.time_equality(True, False, 'coord_inequality')                            |
|          | 194±6ms              | 199±3ms             | 1.03    | cube.CubeEquality.time_equality(True, False, 'data_inequality')                             |
|          | 53.8±1μs             | 52.7±0.4μs          | 0.98    | cube.CubeEquality.time_equality(True, False, 'metadata_inequality')                         |
|          | 228±3ms              | 235±3ms             | 1.03    | cube.CubeEquality.time_equality(True, True, 'all_equal')                                    |
|          | 128±4ms              | 135±4ms             | 1.06    | cube.CubeEquality.time_equality(True, True, 'coord_inequality')                             |
|          | 257±3ms              | 268±5ms             | 1.04    | cube.CubeEquality.time_equality(True, True, 'data_inequality')                              |
|          | 55.5±0.9μs           | 55.6±0.8μs          | 1.00    | cube.CubeEquality.time_equality(True, True, 'metadata_inequality')                          |
|          | 819±20μs             | 821±20μs            | 1.00    | import_iris.Iris.time__concatenate                                                          |
|          | 184±1μs              | 184±2μs             | 1.00    | import_iris.Iris.time__constraints                                                          |
|          | 115±2μs              | 119±2μs             | 1.04    | import_iris.Iris.time__data_manager                                                         |
|          | 93.2±0.8μs           | 92.8±2μs            | 1.00    | import_iris.Iris.time__deprecation                                                          |
|          | 165±2μs              | 163±4μs             | 0.99    | import_iris.Iris.time__lazy_data                                                            |
|          | 936±10μs             | 923±30μs            | 0.99    | import_iris.Iris.time__merge                                                                |
|          | 76.0±0.8μs           | 75.0±0.7μs          | 0.99    | import_iris.Iris.time__representation                                                       |
|          | 630±20μs             | 626±9μs             | 0.99    | import_iris.Iris.time_analysis                                                              |
|          | 144±4μs              | 141±3μs             | 0.98    | import_iris.Iris.time_analysis__area_weighted                                               |
|          | 108±0.5μs            | 106±0.8μs           | 0.99    | import_iris.Iris.time_analysis__grid_angles                                                 |
|          | 248±3μs              | 247±2μs             | 0.99    | import_iris.Iris.time_analysis__interpolation                                               |
|          | 193±2μs              | 189±2μs             | 0.98    | import_iris.Iris.time_analysis__regrid                                                      |
|          | 112±2μs              | 111±0.6μs           | 0.99    | import_iris.Iris.time_analysis__scipy_interpolate                                           |
|          | 138±1μs              | 143±4μs             | 1.04    | import_iris.Iris.time_analysis_calculus                                                     |
|          | 327±1μs              | 323±9μs             | 0.99    | import_iris.Iris.time_analysis_cartography                                                  |
|          | 90.2±0.6μs           | 92.2±2μs            | 1.02    | import_iris.Iris.time_analysis_geomerty                                                     |
|          | 212±4μs              | 208±3μs             | 0.98    | import_iris.Iris.time_analysis_maths                                                        |
|          | 95.5±0.5μs           | 95.8±0.6μs          | 1.00    | import_iris.Iris.time_analysis_stats                                                        |
|          | 171±0.9μs            | 172±2μs             | 1.01    | import_iris.Iris.time_analysis_trajectory                                                   |
|          | 325±9μs              | 317±5μs             | 0.98    | import_iris.Iris.time_aux_factory                                                           |
|          | 82.4±0.4μs           | 80.9±0.3μs          | 0.98    | import_iris.Iris.time_common                                                                |
|          | 161±3μs              | 159±3μs             | 0.99    | import_iris.Iris.time_common_lenient                                                        |
|          | 1.39±0.02ms          | 1.36±0.01ms         | 0.98    | import_iris.Iris.time_common_metadata                                                       |
|          | 168±2μs              | 168±2μs             | 1.00    | import_iris.Iris.time_common_mixin                                                          |
|          | 1.17±0.01ms          | 1.18±0.01ms         | 1.01    | import_iris.Iris.time_common_resolve                                                        |
|          | 200±2μs              | 196±1μs             | 0.98    | import_iris.Iris.time_config                                                                |
|          | 126±1μs              | 125±0.6μs           | 0.99    | import_iris.Iris.time_coord_categorisation                                                  |
|          | 387±4μs              | 385±10μs            | 0.99    | import_iris.Iris.time_coord_systems                                                         |
|          | 762±6μs              | 769±7μs             | 1.01    | import_iris.Iris.time_coords                                                                |
|          | 647±6μs              | 644±7μs             | 0.99    | import_iris.Iris.time_cube                                                                  |
|          | 236±1μs              | 246±2μs             | 1.04    | import_iris.Iris.time_exceptions                                                            |
|          | 76.0±1μs             | 75.0±0.3μs          | 0.99    | import_iris.Iris.time_experimental                                                          |
|          | 180±0.5μs            | 182±4μs             | 1.01    | import_iris.Iris.time_fileformats                                                           |
|          | 256±2μs              | 256±0.9μs           | 1.00    | import_iris.Iris.time_fileformats__ff                                                       |
|          | 2.58±0.01ms          | 2.68±0.03ms         | 1.04    | import_iris.Iris.time_fileformats__ff_cross_references                                      |
|          | 76.0±0.3μs           | 76.2±0.4μs          | 1.00    | import_iris.Iris.time_fileformats__pp_lbproc_pairs                                          |
|          | 113±0.9μs            | 112±0.7μs           | 0.99    | import_iris.Iris.time_fileformats_abf                                                       |
|          | 432±4μs              | 427±10μs            | 0.99    | import_iris.Iris.time_fileformats_cf                                                        |
|          | 4.77±0.06ms          | 4.70±0.04ms         | 0.99    | import_iris.Iris.time_fileformats_dot                                                       |
|          | 72.5±1μs             | 72.0±0.3μs          | 0.99    | import_iris.Iris.time_fileformats_name                                                      |
|          | 251±1μs              | 250±2μs             | 1.00    | import_iris.Iris.time_fileformats_name_loaders                                              |
|          | 114±3μs              | 113±2μs             | 0.99    | import_iris.Iris.time_fileformats_netcdf                                                    |
|          | 120±1μs              | 121±3μs             | 1.01    | import_iris.Iris.time_fileformats_nimrod                                                    |
|          | 209±4μs              | 207±2μs             | 0.99    | import_iris.Iris.time_fileformats_nimrod_load_rules                                         |
|          | 804±6μs              | 809±10μs            | 1.01    | import_iris.Iris.time_fileformats_pp                                                        |
|          | 182±2μs              | 178±2μs             | 0.98    | import_iris.Iris.time_fileformats_pp_load_rules                                             |
|          | 135±1μs              | 134±0.9μs           | 0.99    | import_iris.Iris.time_fileformats_pp_save_rules                                             |
|          | 541±4μs              | 544±2μs             | 1.01    | import_iris.Iris.time_fileformats_rules                                                     |
|          | 221±2μs              | 222±0.6μs           | 1.00    | import_iris.Iris.time_fileformats_structured_array_identification                           |
|          | 81.1±0.8μs           | 81.5±0.5μs          | 1.00    | import_iris.Iris.time_fileformats_um                                                        |
|          | 157±3μs              | 158±5μs             | 1.01    | import_iris.Iris.time_fileformats_um__fast_load                                             |
|          | 136±1μs              | 140±3μs             | 1.03    | import_iris.Iris.time_fileformats_um__fast_load_structured_fields                           |
|          | 72.7±0.3μs           | 72.8±0.6μs          | 1.00    | import_iris.Iris.time_fileformats_um__ff_replacement                                        |
|          | 78.1±0.4μs           | 78.7±0.3μs          | 1.01    | import_iris.Iris.time_fileformats_um__optimal_array_structuring                             |
|          | 948±6μs              | 984±3μs             | 1.04    | import_iris.Iris.time_fileformats_um_cf_map                                                 |
|          | 137±2μs              | 137±2μs             | 1.00    | import_iris.Iris.time_io                                                                    |
|          | 175±2μs              | 194±10μs            | 1.11    | import_iris.Iris.time_io_format_picker                                                      |
|          | 207±0.6μs            | 211±2μs             | 1.02    | import_iris.Iris.time_iris                                                                  |
|          | 125±2μs              | 125±0.6μs           | 1.00    | import_iris.Iris.time_iterate                                                               |
|          | 8.16±0.05ms          | 8.12±0.1ms          | 1.00    | import_iris.Iris.time_palette                                                               |
|          | 1.79±0.01ms          | 1.77±0.02ms         | 0.99    | import_iris.Iris.time_plot                                                                  |
|          | 216±2μs              | 220±2μs             | 1.02    | import_iris.Iris.time_quickplot                                                             |
|          | 2.12±0.02ms          | 2.23±0.05ms         | 1.05    | import_iris.Iris.time_std_names                                                             |
|          | 1.83±0.01ms          | 1.82±0.03ms         | 0.99    | import_iris.Iris.time_symbols                                                               |
|          | 35.2±0.7ms           | 35.3±0.9ms          | 1.00    | import_iris.Iris.time_tests                                                                 |
|          | 259±3μs              | 255±4μs             | 0.99    | import_iris.Iris.time_third_party_cartopy                                                   |
|          | 5.18±0.08ms          | 5.11±0.1ms          | 0.99    | import_iris.Iris.time_third_party_cf_units                                                  |
|          | 119±1μs              | 117±3μs             | 0.98    | import_iris.Iris.time_third_party_cftime                                                    |
|          | 2.71±0.01ms          | 2.74±0.06ms         | 1.01    | import_iris.Iris.time_third_party_matplotlib                                                |
|          | 1.30±0.01ms          | 1.29±0.01ms         | 0.99    | import_iris.Iris.time_third_party_numpy                                                     |
|          | 169±0.7μs            | 168±0.7μs           | 0.99    | import_iris.Iris.time_third_party_scipy                                                     |
|          | 98.5±0.8μs           | 97.9±0.7μs          | 0.99    | import_iris.Iris.time_time                                                                  |
|          | 351±2μs              | 349±2μs             | 0.99    | import_iris.Iris.time_util                                                                  |
|          | 71.3±0.8μs           | 71.8±0.5μs          | 1.01    | iterate.IZip.time_izip                                                                      |
|          | 9.70±0.1ms           | 9.36±0.4ms          | 0.96    | load.LoadAndRealise.time_load((1280, 960, 5), False, 'FF')                                  |
|          | 15.7±0.7ms           | 16.5±0.9ms          | 1.05    | load.LoadAndRealise.time_load((1280, 960, 5), False, 'NetCDF')                              |
|          | 9.64±0.1ms           | 9.71±0.5ms          | 1.01    | load.LoadAndRealise.time_load((1280, 960, 5), False, 'PP')                                  |
|          | 9.53±0.1ms           | 9.34±0.3ms          | 0.98    | load.LoadAndRealise.time_load((1280, 960, 5), True, 'FF')                                   |
|          | 12.9±0.3ms           | 12.9±0.4ms          | 1.00    | load.LoadAndRealise.time_load((1280, 960, 5), True, 'NetCDF')                               |
|          | 9.77±0.2ms           | 9.71±0.1ms          | 0.99    | load.LoadAndRealise.time_load((1280, 960, 5), True, 'PP')                                   |
|          | 1.45±0.01s           | 1.45±0.02s          | 1.00    | load.LoadAndRealise.time_load((2, 2, 1000), False, 'FF')                                    |
|          | 12.3±0.3ms           | 12.0±0.4ms          | 0.98    | load.LoadAndRealise.time_load((2, 2, 1000), False, 'NetCDF')                                |
|          | 1.46±0.01s           | 1.47±0.02s          | 1.01    | load.LoadAndRealise.time_load((2, 2, 1000), False, 'PP')                                    |
|          | 1.46±0.01s           | 1.43±0.01s          | 0.98    | load.LoadAndRealise.time_load((2, 2, 1000), True, 'FF')                                     |
|          | 11.7±0.05ms          | 11.7±0.07ms         | 1.00    | load.LoadAndRealise.time_load((2, 2, 1000), True, 'NetCDF')                                 |
|          | 1.46±0.02s           | 1.44±0s             | 0.99    | load.LoadAndRealise.time_load((2, 2, 1000), True, 'PP')                                     |
|          | 5.00±0.01ms          | 4.92±0.2ms          | 0.98    | load.LoadAndRealise.time_load((50, 50, 2), False, 'FF')                                     |
|          | 11.4±0.1ms           | 11.4±0.5ms          | 1.01    | load.LoadAndRealise.time_load((50, 50, 2), False, 'NetCDF')                                 |
|          | 5.01±0.08ms          | 4.89±0.1ms          | 0.98    | load.LoadAndRealise.time_load((50, 50, 2), False, 'PP')                                     |
|          | 4.99±0.01ms          | 4.94±0.2ms          | 0.99    | load.LoadAndRealise.time_load((50, 50, 2), True, 'FF')                                      |
|          | 11.5±0.3ms           | 11.4±0.5ms          | 0.99    | load.LoadAndRealise.time_load((50, 50, 2), True, 'NetCDF')                                  |
|          | 4.90±0.1ms           | 4.94±0.2ms          | 1.01    | load.LoadAndRealise.time_load((50, 50, 2), True, 'PP')                                      |
|          | 23.0±1ms             | 24.3±1ms            | 1.06    | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'FF')                               |
|          | 28.5±0.3ms           | 29.0±0.1ms          | 1.02    | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'NetCDF')                           |
|          | 10.7±0.9ms           | 12.1±1ms            | 1.14    | load.LoadAndRealise.time_realise((1280, 960, 5), False, 'PP')                               |
|          | 26.6±0.8ms           | 28.4±1ms            | 1.07    | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'FF')                                |
|          | 71.4±0.7ms           | 70.6±3ms            | 0.99    | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'NetCDF')                            |
|          | 26.2±0.6ms           | 27.6±1ms            | 1.05    | load.LoadAndRealise.time_realise((1280, 960, 5), True, 'PP')                                |
|          | 513±5ms              | 543±4ms             | 1.06    | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'FF')                                 |
|          | 3.08±0.2ms           | 3.44±0.1ms          | 1.12    | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'NetCDF')                             |
|          | 513±3ms              | 542±2ms             | 1.06    | load.LoadAndRealise.time_realise((2, 2, 1000), False, 'PP')                                 |
|          | 518±2ms              | 552±7ms             | 1.06    | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'FF')                                  |
|          | 3.03±0.2ms           | 3.68±0.2ms          | ~1.21   | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'NetCDF')                              |
|          | 517±5ms              | 546±6ms             | 1.06    | load.LoadAndRealise.time_realise((2, 2, 1000), True, 'PP')                                  |
|          | 2.99±0.1ms           | 3.35±0.08ms         | 1.12    | load.LoadAndRealise.time_realise((50, 50, 2), False, 'NetCDF')                              |
|          | 2.97±0.1ms           | 3.44±0.09ms         | 1.16    | load.LoadAndRealise.time_realise((50, 50, 2), True, 'NetCDF')                               |
|          | 339±2ms              | 338±3ms             | 1.00    | load.ManyCubes.time_many_cube_load                                                          |
|          | 84.3±0.9ms           | 86.2±1ms            | 1.02    | load.ManyVars.time_many_var_load                                                            |
|          | 9.65±0.1ms           | 9.50±0.3ms          | 0.98    | load.STASHConstraint.time_stash_constraint((1280, 960, 5), 'FF')                            |
|          | 9.51±0.07ms          | 9.58±0.1ms          | 1.01    | load.STASHConstraint.time_stash_constraint((1280, 960, 5), 'PP')                            |
|          | 1.46±0.01s           | 1.44±0.02s          | 0.99    | load.STASHConstraint.time_stash_constraint((2, 2, 1000), 'FF')                              |
|          | 1.47±0.02s           | 1.46±0.02s          | 0.99    | load.STASHConstraint.time_stash_constraint((2, 2, 1000), 'PP')                              |
|          | 5.05±0.1ms           | 4.98±0.07ms         | 0.99    | load.STASHConstraint.time_stash_constraint((2, 2, 2), 'FF')                                 |
|          | 4.99±0.03ms          | 5.08±0.1ms          | 1.02    | load.STASHConstraint.time_stash_constraint((2, 2, 2), 'PP')                                 |
|          | 8.53±0.03ms          | 8.54±0.1ms          | 1.00    | load.StructuredFF.time_structured_load((1280, 960, 5), False)                               |
|          | 5.56±0.02ms          | 5.51±0.04ms         | 0.99    | load.StructuredFF.time_structured_load((1280, 960, 5), True)                                |
|          | 1.42±0.01s           | 1.42±0.02s          | 1.00    | load.StructuredFF.time_structured_load((2, 2, 1000), False)                                 |
|          | 438±6ms              | 440±5ms             | 1.00    | load.StructuredFF.time_structured_load((2, 2, 1000), True)                                  |
|          | 4.14±0.02ms          | 4.13±0.03ms         | 1.00    | load.StructuredFF.time_structured_load((2, 2, 2), False)                                    |
|          | 4.16±0.03ms          | 4.14±0.01ms         | 1.00    | load.StructuredFF.time_structured_load((2, 2, 2), True)                                     |
|          | 159±1ms              | 157±1ms             | 0.99    | load.TimeConstraint.time_time_constraint(20, 'FF')                                          |
|          | 14.9±0.3ms           | 14.6±0.2ms          | 0.98    | load.TimeConstraint.time_time_constraint(20, 'NetCDF')                                      |
|          | 165±2ms              | 159±0.8ms           | 0.96    | load.TimeConstraint.time_time_constraint(20, 'PP')                                          |
|          | 31.8±0.2ms           | 31.4±0.4ms          | 0.99    | load.TimeConstraint.time_time_constraint(3, 'FF')                                           |
|          | 14.4±0.3ms           | 14.3±0.1ms          | 0.99    | load.TimeConstraint.time_time_constraint(3, 'NetCDF')                                       |
|          | 32.0±0.3ms           | 31.3±0.4ms          | 0.98    | load.TimeConstraint.time_time_constraint(3, 'PP')                                           |
|          | 13.4±0.4ms           | 15.2±0.3ms          | 1.13    | load.ugrid.BasicLoading.time_load_file(1)                                                   |
|          | 45.0±0.4ms           | 46.0±1ms            | 1.02    | load.ugrid.BasicLoading.time_load_file(200000)                                              |
|          | 8.90±0.4ms           | 8.71±0.3ms          | 0.98    | load.ugrid.BasicLoading.time_load_mesh(1)                                                   |
|          | 15.6±0.4ms           | 16.0±0.8ms          | 1.02    | load.ugrid.BasicLoading.time_load_mesh(200000)                                              |
|          | 13.4±0.2ms           | 15.1±0.7ms          | 1.13    | load.ugrid.BasicLoadingTime.time_load_file(1)                                               |
|          | 14.8±0.4ms           | 16.1±1ms            | 1.09    | load.ugrid.BasicLoadingTime.time_load_file(200000)                                          |
|          | 8.40±0.3ms           | 8.98±0.5ms          | 1.07    | load.ugrid.BasicLoadingTime.time_load_mesh(1)                                               |
|          | 11.4±0.9ms           | 12.2±0.7ms          | 1.07    | load.ugrid.BasicLoadingTime.time_load_mesh(200000)                                          |
|          | 14.0±0.8ms           | 16.4±0.5ms          | 1.17    | load.ugrid.Callback.time_load_file_callback(1)                                              |
|          | 54.3±2ms             | 56.1±0.6ms          | 1.03    | load.ugrid.Callback.time_load_file_callback(200000)                                         |
|          | 14.5±0.8ms           | 16.2±0.3ms          | 1.12    | load.ugrid.CallbackTime.time_load_file_callback(1)                                          |
|          | 16.7±1ms             | 17.2±0.4ms          | 1.03    | load.ugrid.CallbackTime.time_load_file_callback(200000)                                     |
|          | 3.34±0.1ms           | 3.45±0.2ms          | 1.03    | load.ugrid.DataRealisation.time_realise_data(10000)                                         |
|          | 4.65±0.3ms           | 6.24±1ms            | ~1.34   | load.ugrid.DataRealisation.time_realise_data(200000)                                        |
|          | 38.5±4ms             | 34.9±1ms            | 0.91    | load.ugrid.DataRealisationTime.time_realise_data(10000)                                     |
|          | 810±30ms             | 780±6ms             | 0.96    | load.ugrid.DataRealisationTime.time_realise_data(200000)                                    |
|          | 1.58±0.02s           | 1.55±0.02s          | 0.98    | merge_concat.Concatenate.time_concatenate(False)                                            |
|          | 426±10ms             | 428±6ms             | 1.00    | merge_concat.Concatenate.time_concatenate(True)                                             |
|          | 2.42±0G              | 2.42±0G             | 1.00    | merge_concat.Concatenate.tracemalloc_concatenate(False)                                     |
|          | 120±6M               | 118±5M              | 0.98    | merge_concat.Concatenate.tracemalloc_concatenate(True)                                      |
|          | 35.9±2ms             | 34.1±2ms            | 0.95    | merge_concat.Merge.time_merge                                                               |
|          | 126±0.02M            | 126±0.02M           | 1.00    | merge_concat.Merge.tracemalloc_merge                                                        |
|          | 348±1ns              | 367±3ns             | 1.05    | mesh.utils.regions_combine.CombineRegionsComputeRealData.time_compute_data(50)              |
|          | 197±1ms              | 199±10ms            | 1.01    | mesh.utils.regions_combine.CombineRegionsComputeRealData.time_compute_data(500)             |
|          | 741±0.4k             | 769±0.2k            | 1.04    | mesh.utils.regions_combine.CombineRegionsComputeRealData.tracemalloc_compute_data(50)       |
|          | 60.1±0M              | 60.2±0M             | 1.00    | mesh.utils.regions_combine.CombineRegionsComputeRealData.tracemalloc_compute_data(500)      |
|          | 17.0±0.3ms           | 16.7±0.3ms          | 0.98    | mesh.utils.regions_combine.CombineRegionsCreateCube.time_create_combined_cube(50)           |
|          | 20.1±0.3ms           | 20.2±0.4ms          | 1.01    | mesh.utils.regions_combine.CombineRegionsCreateCube.time_create_combined_cube(500)          |
|          | 1.29±0.05M           | 1.29±0.01M          | 1.00    | mesh.utils.regions_combine.CombineRegionsCreateCube.tracemalloc_create_combined_cube(50)    |
|          | 25.1±0.05M           | 25.1±0.01M          | 1.00    | mesh.utils.regions_combine.CombineRegionsCreateCube.tracemalloc_create_combined_cube(500)   |
|          | 105±0.5ms            | 118±1ms             | 1.13    | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.time_stream_file2file(50)         |
|          | 568±5ms              | 582±8ms             | 1.02    | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.time_stream_file2file(500)        |
|          | 1.36±0.03M           | 1.52±0.06M          | 1.12    | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.tracemalloc_stream_file2file(50)  |
|          | 96.4±0.04M           | 96.6±0.04M          | 1.00    | mesh.utils.regions_combine.CombineRegionsFileStreamedCalc.tracemalloc_stream_file2file(500) |
|          | 65.8±1ms             | 77.4±2ms            | 1.18    | mesh.utils.regions_combine.CombineRegionsSaveData.time_save(50)                             |
|          | 522±4ms              | 537±4ms             | 1.03    | mesh.utils.regions_combine.CombineRegionsSaveData.time_save(500)                            |
|          | 1.22±0.02M           | 1.44±0.02M          | 1.18    | mesh.utils.regions_combine.CombineRegionsSaveData.tracemalloc_save(50)                      |
|          | 96.3±0.03M           | 96.5±0.01M          | 1.00    | mesh.utils.regions_combine.CombineRegionsSaveData.tracemalloc_save(500)                     |
|          | 2.1752849999999997   | 2.1752849999999997  | 1.00    | mesh.utils.regions_combine.CombineRegionsSaveData.track_filesize_saved(50)                  |
|          | 216.01528499999998   | 216.01528499999998  | 1.00    | mesh.utils.regions_combine.CombineRegionsSaveData.track_filesize_saved(500)                 |
|          | 6.84±0.2ms           | 6.73±0.04ms         | 0.98    | plot.AuxSort.time_aux_sort                                                                  |
|          | 72.4±6ms             | 80.3±3ms            | 1.11    | regridding.CurvilinearRegridding.time_regrid_pic                                            |
|          | 136±3M               | 136±3M              | 1.00    | regridding.CurvilinearRegridding.tracemalloc_regrid_pic                                     |
|          | 107±0.8ms            | 106±6ms             | 0.99    | regridding.HorizontalChunkedRegridding.time_regrid_area_w                                   |
|          | 51.3±1ms             | 56.4±2ms            | 1.10    | regridding.HorizontalChunkedRegridding.time_regrid_area_w_new_grid                          |
|          | 107±0.01M            | 107±0.09M           | 1.00    | regridding.HorizontalChunkedRegridding.tracemalloc_regrid_area_w                            |
|          | 147±0.04M            | 147±0.02M           | 1.00    | regridding.HorizontalChunkedRegridding.tracemalloc_regrid_area_w_new_grid                   |
|          | 4.34±0.1ms           | 4.69±0.09ms         | 1.08    | save.NetcdfSave.time_netcdf_save_cube(50, False)                                            |
|          | 72.7±2ms             | 81.2±1ms            | 1.12    | save.NetcdfSave.time_netcdf_save_cube(50, True)                                             |
|          | 41.9±0.7ms           | 41.2±0.3ms          | 0.98    | save.NetcdfSave.time_netcdf_save_cube(600, False)                                           |
|          | 477±4ms              | 480±4ms             | 1.01    | save.NetcdfSave.time_netcdf_save_cube(600, True)                                            |
|          | 86.3±0.4ns           | 87.1±1ns            | 1.01    | save.NetcdfSave.time_netcdf_save_mesh(50, False)                                            |
|          | 57.2±1ms             | 63.3±3ms            | 1.11    | save.NetcdfSave.time_netcdf_save_mesh(50, True)                                             |
|          | 86.9±0.9ns           | 87.6±0.6ns          | 1.01    | save.NetcdfSave.time_netcdf_save_mesh(600, False)                                           |
|          | 418±3ms              | 428±6ms             | 1.02    | save.NetcdfSave.time_netcdf_save_mesh(600, True)                                            |
|          | 29.6±0.2k            | 32.4±0.4k           | 1.09    | save.NetcdfSave.tracemalloc_netcdf_save(50, False)                                          |
|          | 1.73±0.2M            | 1.87±0.1M           | 1.08    | save.NetcdfSave.tracemalloc_netcdf_save(50, True)                                           |
|          | 29.7±0.3k            | 32.4±0.3k           | 1.09    | save.NetcdfSave.tracemalloc_netcdf_save(600, False)                                         |
|          | 208±20M              | 225±20M             | 1.08    | save.NetcdfSave.tracemalloc_netcdf_save(600, True)                                          |
|          | 38.4±0.5ms           | 40.2±0.6ms          | 1.05    | stats.PearsonR.time_lazy                                                                    |
|          | 8.89±0.1ms           | 9.30±0.2ms          | 1.05    | stats.PearsonR.time_real                                                                    |
|          | 29.5±1M              | 29.5±0.8M           | 1.00    | stats.PearsonR.tracemalloc_lazy                                                             |
|          | 18.4±0.01M           | 18.4±0.01M          | 1.00    | stats.PearsonR.tracemalloc_real                                                             |
|          | 21.8±0.5ms           | 25.1±0.4ms          | 1.15    | trajectory.TrajectoryInterpolation.time_trajectory_linear                                   |
|          | 60.2±0.8ms           | 61.3±0.9ms          | 1.02    | trajectory.TrajectoryInterpolation.time_trajectory_nearest                                  |
|          | 17.6±0.02M           | 17.6±0.02M          | 1.00    | trajectory.TrajectoryInterpolation.tracemalloc_trajectory_linear                            |
|          | 7.74±0.01M           | 7.75±0.02M          | 1.00    | trajectory.TrajectoryInterpolation.tracemalloc_trajectory_nearest                           |

Benchmarks that have got worse:

| Change   | Before [7e3c921e]    | After [2df20347]    |   Ratio | Benchmark (Parameter)                                      |
|----------|----------------------|---------------------|---------|------------------------------------------------------------|
| +        | 1.54±0.03ms          | 2.14±0.07ms         |    1.39 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'FF') |
| +        | 1.55±0.05ms          | 2.14±0.06ms         |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), False, 'PP') |
| +        | 1.56±0.03ms          | 2.16±0.03ms         |    1.38 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'FF')  |
| +        | 1.65±0.03ms          | 2.26±0.06ms         |    1.37 | load.LoadAndRealise.time_realise((50, 50, 2), True, 'PP')  |

Generated by GHA run 14842086870

@trexfeathers
Copy link
Contributor Author

The performance shifts are most pronounced with smaller data sizes, becoming smaller as the data gets larger. This indicates increased overhead in setting up objects - perhaps dask/dask#11736 - but not something any part of the code that scales with data size. The impact will therefore remain in the milliseconds, even for very large data payloads, and is not a concern (agreed with @pp-mo).

@trexfeathers
Copy link
Contributor Author

Note I am now targetting the changes for a patch release (#6451), which we can then merge back that should unblock future lock-file PRs

@trexfeathers
Copy link
Contributor Author

Closed by #6412

@scitools-ci scitools-ci bot removed this from 🚴 Peloton Jun 7, 2025
@trexfeathers trexfeathers deleted the fix-delayed branch August 22, 2025 13:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmark_this Request that this pull request be benchmarked to check if it introduces performance shifts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

issue with iris saver with delayed and dask==2025.4.0

2 participants