From bf7c62e3bc0ef50a6a26bed9db307999e0267dc1 Mon Sep 17 00:00:00 2001 From: David Orme Date: Wed, 24 Apr 2024 14:36:25 +0100 Subject: [PATCH 1/9] Comparing profiling implementations --- .../pyrealm_profiling_after_push.yaml | 79 +++++++++++++++++++ ...yaml => pyrealm_profiling_on_approve.yaml} | 27 ++++--- 2 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/pyrealm_profiling_after_push.yaml rename .github/workflows/{pyrealm_profiling.yaml => pyrealm_profiling_on_approve.yaml} (67%) diff --git a/.github/workflows/pyrealm_profiling_after_push.yaml b/.github/workflows/pyrealm_profiling_after_push.yaml new file mode 100644 index 00000000..69430b67 --- /dev/null +++ b/.github/workflows/pyrealm_profiling_after_push.yaml @@ -0,0 +1,79 @@ +name: Profiling + +# This runs when code is pushed to main or develop +on: + push: + branches: [main, develop] + +jobs: + test: + uses: ./.github/workflows/pyrealm_ci.yaml + secrets: inherit + + profiling: + needs: test + runs-on: ubuntu-latest + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install Poetry + uses: abatilo/actions-poetry@v2.1.6 + with: + poetry-version: 1.2.2 + + - name: Install dependencies and add env vars + run: | + poetry install + sudo apt-get install graphviz + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Run the profiling test suite, using time to get peak memory usage + id: profiling + run: poetry run /usr/bin/time -v pytest -m "profiling" --profile-svg + + # This step only runs if the profiling succeeds + - name: Benchmark performance + id: benchmarking + if: ${{steps.profiling.outcome == 'success'}} + run: poetry run python profiling/run_benchmarking.py prof/combined.prof profiling/profiling-database.csv profiling/benchmark-fails.csv ${{ env.COMMIT_SHORT_SHA }} --update-on-pass --plot-path profiling/performance-plot.png + + # This step copies over the updated call graph + - name: Copy call graph + id: update-call-graph + if: always() && steps.benchmarking.outcome != 'skipped' + run: cp prof/combined.svg profiling/call-graph.svg + + # Creates a PR to update the profiling stats if the benchmark passes or fails and + # skips if the profiling step fails. + - name: Create pull request + id: cpr + if: always() && steps.benchmarking.outcome != 'skipped' + uses: peter-evans/create-pull-request@v6 + with: + commit-message: Updating profiling stats for ${{ env.COMMIT_SHORT_SHA }} + title: Updating profiling stats for ${{ env.COMMIT_SHORT_SHA }} + add-paths: profiling/* + body: | + Automatic update of profiling stats. + + - Profiling update for merge of ${{ env.COMMIT_SHORT_SHA }} into ${{ github.head_ref }} + - Updated call graph, benchmark plot and profiling stats database. + - Auto-generated by `pyrealm_profiling.yaml` workflow + + ${{ steps.benchmarking.outcome != 'passed' && 'Benchmarking passed' || 'Benchmarking **failed**: review failures.' }} + + - name: Check outputs + if: ${{ steps.cpr.outputs.pull-request-number }} + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" \ No newline at end of file diff --git a/.github/workflows/pyrealm_profiling.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml similarity index 67% rename from .github/workflows/pyrealm_profiling.yaml rename to .github/workflows/pyrealm_profiling_on_approve.yaml index b630f698..b8fa69c8 100644 --- a/.github/workflows/pyrealm_profiling.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -1,12 +1,13 @@ -name: Profiling +name: Profiling on approve -# This runs when code is pushed to main or develop +# This runs when a pull request is submitted on: - push: - branches: [main, develop] + pull_request_review: + types: [submitted] jobs: test: + if: github.event.review.state == 'APPROVED' uses: ./.github/workflows/pyrealm_ci.yaml secrets: inherit @@ -30,25 +31,25 @@ jobs: with: poetry-version: 1.2.2 - - name: Install dependencies - run: poetry install - - - name: Run the profiling test suite - id: profiling + - name: Install dependencies and add env vars run: | + poetry install sudo apt-get install graphviz - poetry run pytest -m "profiling" --profile-svg calculatedSha=$(git rev-parse --short ${{ github.sha }}) echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + - name: Run the profiling test suite, using time to get peak memory usage + id: profiling + run: poetry run /usr/bin/time -v pytest -m "profiling" --profile-svg + # This step only runs if the profiling succeeds - - name: Benchmark performance and copy call graph + - name: Benchmark performance id: benchmarking if: ${{steps.profiling.outcome == 'success'}} - run: poetry run /usr/bin/time -v python profiling/run_benchmarking.py prof/combined.prof profiling/profiling-database.csv profiling/benchmark-fails.csv ${{ env.COMMIT_SHORT_SHA }} --update-on-pass --plot-path profiling/performance-plot.png + run: poetry run python profiling/run_benchmarking.py prof/combined.prof profiling/profiling-database.csv profiling/benchmark-fails.csv ${{ env.COMMIT_SHORT_SHA }} --update-on-pass --plot-path profiling/performance-plot.png # This step copies over the updated call graph - - name: Benchmark performance and copy call graph + - name: Copy call graph id: update-call-graph if: always() && steps.benchmarking.outcome != 'skipped' run: cp prof/combined.svg profiling/call-graph.svg From cd90a2baedf9cf23177995ec7608e9f7d2d3272d Mon Sep 17 00:00:00 2001 From: David Orme Date: Wed, 24 Apr 2024 18:32:18 +0100 Subject: [PATCH 2/9] Naming profile workflow more clearly --- .github/workflows/pyrealm_profiling_after_push.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pyrealm_profiling_after_push.yaml b/.github/workflows/pyrealm_profiling_after_push.yaml index 69430b67..7ea298bd 100644 --- a/.github/workflows/pyrealm_profiling_after_push.yaml +++ b/.github/workflows/pyrealm_profiling_after_push.yaml @@ -1,4 +1,4 @@ -name: Profiling +name: Profiling after push # This runs when code is pushed to main or develop on: From 3e79bb4adab7612c2a1a16819a20442154693176 Mon Sep 17 00:00:00 2001 From: David Orme Date: Tue, 30 Apr 2024 19:35:46 +0100 Subject: [PATCH 3/9] Update pyrealm_profiling_on_approve.yaml to fix ref --- .github/workflows/pyrealm_profiling_on_approve.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pyrealm_profiling_on_approve.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml index b8fa69c8..9ac8bfe6 100644 --- a/.github/workflows/pyrealm_profiling_on_approve.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -19,8 +19,8 @@ jobs: steps: - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} + # with: + # ref: ${{ github.head_ref }} - uses: actions/setup-python@v5 with: From ceed750daf99b39b6ac5df288865310b125d0e2f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 17:45:48 +0000 Subject: [PATCH 4/9] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 24.4.0 → 24.4.2](https://github.com/psf/black/compare/24.4.0...24.4.2) - [github.com/pre-commit/mirrors-mypy: v1.9.0 → v1.10.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.9.0...v1.10.0) - [github.com/igorshubovych/markdownlint-cli: v0.39.0 → v0.40.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.39.0...v0.40.0) --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 518b5157..2c4f12f3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: - id: isort additional_dependencies: [toml] - repo: https://github.com/psf/black - rev: "24.4.0" + rev: "24.4.2" hooks: - id: black - repo: https://github.com/PyCQA/flake8 @@ -24,14 +24,14 @@ repos: - id: flake8 additional_dependencies: [flake8-docstrings] - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.9.0" + rev: "v1.10.0" hooks: - id: mypy additional_dependencies: [numpy, types-tabulate, pandas-stubs] exclude: "pyrealm_build_data/splash/splash_py_version/.*\\.py" # https://stackoverflow.com/a/75447331/3401916 - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.39.0 + rev: v0.40.0 hooks: - id: markdownlint From 099582d5bd65c1c522250c6e46a16601beb1130a Mon Sep 17 00:00:00 2001 From: Amy Pike Date: Tue, 7 May 2024 16:03:42 +0100 Subject: [PATCH 5/9] Attempted fix for profiling autocommit step failing. --- .github/workflows/pyrealm_profiling_on_approve.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pyrealm_profiling_on_approve.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml index b8fa69c8..1cb7442b 100644 --- a/.github/workflows/pyrealm_profiling_on_approve.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -61,3 +61,4 @@ jobs: with: commit_message: Auto-generated profiling results [skip actions] file_pattern: 'profiling/*' + branch: ${{ github.head_ref }} From 02e9af16445ddc2960e1c23fc0cc55af76a55997 Mon Sep 17 00:00:00 2001 From: Amy Pike Date: Tue, 7 May 2024 16:42:06 +0100 Subject: [PATCH 6/9] attempting fix on profiling autocommit step --- .github/workflows/pyrealm_profiling_on_approve.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pyrealm_profiling_on_approve.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml index 5bf3df71..f9e56821 100644 --- a/.github/workflows/pyrealm_profiling_on_approve.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -19,8 +19,8 @@ jobs: steps: - uses: actions/checkout@v4 - # with: - # ref: ${{ github.head_ref }} + with: + ref: ${{ github.ref }} - uses: actions/setup-python@v5 with: @@ -61,4 +61,4 @@ jobs: with: commit_message: Auto-generated profiling results [skip actions] file_pattern: 'profiling/*' - branch: ${{ github.head_ref }} + branch: ${{ github.ref }} From 6b2fc2a303b64a9a2ed90134ac8d79dafe3b0f0c Mon Sep 17 00:00:00 2001 From: Amy Pike Date: Tue, 7 May 2024 16:59:44 +0100 Subject: [PATCH 7/9] attempting fix on profiling autocommit step --- .github/workflows/pyrealm_profiling_on_approve.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pyrealm_profiling_on_approve.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml index f9e56821..e2b2d776 100644 --- a/.github/workflows/pyrealm_profiling_on_approve.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -61,4 +61,4 @@ jobs: with: commit_message: Auto-generated profiling results [skip actions] file_pattern: 'profiling/*' - branch: ${{ github.ref }} + branch: ${{ github.ref_name }} From f810269a964d241f3f8a7480e93cf27f9a589f62 Mon Sep 17 00:00:00 2001 From: Amy Pike Date: Tue, 7 May 2024 17:14:59 +0100 Subject: [PATCH 8/9] attempting fix on profiling autocommit step --- .github/workflows/pyrealm_profiling_on_approve.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pyrealm_profiling_on_approve.yaml b/.github/workflows/pyrealm_profiling_on_approve.yaml index e2b2d776..975dc7d9 100644 --- a/.github/workflows/pyrealm_profiling_on_approve.yaml +++ b/.github/workflows/pyrealm_profiling_on_approve.yaml @@ -61,4 +61,4 @@ jobs: with: commit_message: Auto-generated profiling results [skip actions] file_pattern: 'profiling/*' - branch: ${{ github.ref_name }} + branch: ${{ github.event.pull_request.head.ref }} From 359c9ce8ce02039b8fd4b84316960bbff08bd849 Mon Sep 17 00:00:00 2001 From: AmyOctoCat Date: Tue, 7 May 2024 16:26:28 +0000 Subject: [PATCH 9/9] Auto-generated profiling results [skip actions] --- profiling/call-graph.svg | 3518 +++++++++++++----------------- profiling/profiling-database.csv | 78 + 2 files changed, 1581 insertions(+), 2015 deletions(-) create mode 100644 profiling/profiling-database.csv diff --git a/profiling/call-graph.svg b/profiling/call-graph.svg index 7c605702..77248d40 100644 --- a/profiling/call-graph.svg +++ b/profiling/call-graph.svg @@ -4,2394 +4,1882 @@ - - + + %3 - - + + -1 - - -~:0:<built-in method builtins.exec> -0.63% -(0.12%) -30× +73 + + +utilities:113:summarize_attrs +6.55% +(0.71%) + - + -7 - - -~:0:<built-in method _operator.getitem> -1.01% -(0.92%) -31× +885 + + +nanfunctions:236:nanmin +1.07% +(0.00%) +47× - + + +73->885 + + +0.65% +38× + + -50 - - -utilities:52:check_input_shapes -0.58% -(0.48%) -2971× +886 + + +nanfunctions:952:nanmean +4.41% +(0.12%) +38× - + + +73->886 + + +4.41% +38× + + -51 - - -functions:257:calc_gammastar -0.79% -(0.33%) - +891 + + +nanfunctions:369:nanmax +0.63% +(0.00%) +40× - - -134 - - -functions:15:calc_ftemp_arrh -3.74% -(3.74%) -16× + + +73->891 + + +0.63% +38× + + + +971 + + +~:0:<method 'reduce' of 'numpy.ufunc' objects> +2.90% +(2.90%) +3271× - - -51->134 - - -0.46% - + + +885->971 + + +1.06% +45× - - -52 - - -functions:355:calc_kmm -2.10% -(0.48%) - + + +884 + + +nanfunctions:68:_replace_nan +3.16% +(1.33%) +40× - - -52->134 - - -1.61% - + + +886->884 + + +3.16% +38× - - -53 - - -water:67:calc_density_h2o_fisher -1.24% -(0.19%) - + + +1009 + + +fromnumeric:2177:sum +1.12% +(0.00%) +76× - - -74 - - -utilities:339:evaluate_horner_polynomial -1.19% -(1.09%) -23× - - + + +886->1009 + + +1.12% +76× - - -53->74 - - -1.06% -18× + + +891->971 + + +0.63% +40× - - -54 - - -water:126:calc_density_h2o -1.45% -(0.01%) - + + +91 + + +functions:14:calc_ftemp_arrh +1.82% +(1.82%) +13× - - -54->53 - - -1.24% - - - - -55 - - -water:181:calc_viscosity_h2o -42.51% -(41.20%) - + + +92 + + +functions:119:calc_ftemp_inst_vcmax +3.73% +(2.94%) + - - -55->54 - - -1.30% - + + +92->91 + + +0.79% + - - -56 - - -isotopes:42:__init__ -1.48% -(1.06%) - + + +93 + + +functions:256:calc_gammastar +0.80% +(0.64%) + - - -57 - - -pmodel:358:estimate_productivity -10.81% -(3.39%) - - - + + +93->91 + + +0.16% + - - -135 - - -functions:120:calc_ftemp_inst_vcmax -4.21% -(2.84%) - + + +94 + + +functions:354:calc_kmm +1.36% +(0.79%) + - + -57->135 - - -4.21% - +94->91 + + +0.56% + - - -990 - - -numeric:2170:allclose -2.82% -(0.05%) - + + +95 + + +subdaily:218:__init__ +5.15% +(1.12%) + - + -57->990 - - -2.82% - - - - -135->134 - - -1.37% - - - - -956 - - -numeric:2249:isclose -2.81% -(2.10%) -15× - +95->91 + + +0.31% + - - - -990->956 - - -2.76% - - - - -58 - - -jmax_limitation:75:__init__ -5.92% -(0.00%) - - - - - - -157 - - -jmax_limitation:127:wang17 -5.92% -(5.92%) - + + +97 + + +pmodel:358:estimate_productivity +9.30% +(3.00%) + - + -58->157 - - -5.92% - +95->97 + + +0.14% + - - -59 - - -optimal_chi:95:__init__ -3.44% -(0.00%) - - - - - - -63 - - -optimal_chi:253:estimate_chi -3.63% -(3.63%) - + + +98 + + +functions:197:calc_ftemp_kphio +1.69% +(1.57%) + - + -59->63 - - -2.68% - +95->98 + + +0.58% + - - -161 - - -optimal_chi:385:estimate_chi -0.75% -(0.67%) - + + +99 + + +pmodel:186:__init__ +8.13% +(1.12%) + - + -59->161 - - -0.75% - +95->99 + + +0.12% + - - -60 - - -pmodel_environment:76:__init__ -46.22% -(0.01%) - + + +100 + + +pmodel_environment:76:__init__ +23.00% +(0.02%) + - + -60->51 - - -0.79% - - - - -60->52 - - -2.10% - +95->100 + + +0.54% + - - -140 - - -functions:311:calc_ns_star -42.53% -(0.03%) - + + +127 + + +optimal_chi:95:__init__ +3.39% +(0.00%) + - - -60->140 - - -42.53% - - - - -140->55 - - -42.51% - + + +95->127 + + +1.23% + - - -61 - - -competition:182:__init__ -1.96% -(0.39%) - + + +130 + + +optimal_chi:253:estimate_chi +3.38% +(3.38%) + - - -232 - - -competition:14:convert_gpp_advantage_to_c4_fraction -0.54% -(0.54%) - - - + + +95->130 + + +0.91% + - + -61->232 - - -0.54% - +97->92 + + +3.73% + - - -233 - - -competition:62:calculate_tree_proportion -1.00% -(0.85%) - + + +96 + + +functions:77:calc_ftemp_inst_rd +1.19% +(1.19%) + - + -61->233 - - -1.00% - - - - -995 - - -fromnumeric:2100:clip -1.62% -(0.18%) -4399× - +97->96 + + +1.19% + - - - -233->995 - - -0.15% - - - - -62 - - -competition:249:estimate_isotopic_discrimination -0.63% -(0.63%) - - - - - - -64 - - -splash:58:__init__ -1.70% -(0.00%) - - - - - - -65 - - -splash:224:estimate_daily_water_balance -7.43% -(1.05%) -1463× + + +996 + + +numeric:2170:allclose +1.37% +(0.02%) + - + -65->50 - - -0.29% -1463× +97->996 + + +1.37% + - - -66 - - -evap:109:estimate_aet -4.87% -(3.85%) -1463× + + +1001 + + +fromnumeric:2100:clip +1.85% +(0.02%) +4398× - + -65->66 - - -4.87% -1463× +98->1001 + + +0.12% + - + -65->995 - - -0.78% -2926× +99->98 + + +1.12% + - - -1004 - - -fromnumeric:2322:any -0.75% -(0.14%) -2950× + + +99->127 + + +2.16% + + + + +124 + + +jmax_limitation:75:__init__ +3.73% +(0.00%) + - + -65->1004 - - -0.39% -1463× +99->124 + + +3.73% + - - -66->50 - - -0.26% -1463× + + +100->885 + + +0.31% + - + -66->995 - - -0.40% -1463× +100->93 + + +0.80% + - + -66->1004 - - -0.33% -1463× +100->94 + + +1.36% + - - -904 - - -fromnumeric:53:_wrapfunc -1.51% -(0.15%) -4529× + + +101 + + +functions:310:calc_ns_star +17.46% +(0.04%) + - - -995->904 - - -1.45% -4399× + + +100->101 + + +17.46% + - - -901 - - -fromnumeric:71:_wrapreduction -2.53% -(0.26%) -3062× + + +102 + + +functions:644:calc_co2_to_ca +0.55% +(0.55%) + - - -1004->901 - - -0.61% -2950× + + +100->102 + + +0.55% + - - -67 - - -solar:71:__post_init__ -1.26% -(1.22%) - + + +147 + + +utilities:213:bounds_checker +3.17% +(3.14%) +13× - - -68 - - -utilities:113:summarize_attrs -9.10% -(0.56%) - - + + +100->147 + + +2.51% + + + +127->130 + + +2.47% + - - -886 - - -nanfunctions:236:nanmin -1.08% -(0.02%) -51× + + +132 + + +optimal_chi:385:estimate_chi +0.91% +(0.79%) + - - -68->886 - - -0.97% -38× + + +127->132 + + +0.91% + - - -887 - - -nanfunctions:952:nanmean -6.34% -(0.18%) -38× + + +953 + + +numeric:2249:isclose +1.35% +(0.95%) + - - -68->887 - - -6.34% -38× + + +996->953 + + +1.35% + - - -892 - - -nanfunctions:369:nanmax -0.59% -(0.01%) -40× + + +897 + + +fromnumeric:53:_wrapfunc +1.83% +(0.02%) +4526× - - -68->892 - - -0.59% -38× + + +1001->897 + + +1.82% +4398× - - -973 - - -~:0:<method 'reduce' of 'numpy.ufunc' objects> -3.81% -(3.81%) -3303× + + +125 + + +jmax_limitation:127:wang17 +3.73% +(3.73%) + - - -886->973 - - -1.03% -48× + + +124->125 + + +3.73% + - - -885 - - -nanfunctions:68:_replace_nan -4.17% -(2.81%) -41× + + +105 + + +water:181:calc_viscosity_h2o +17.42% +(14.61%) + - - -887->885 - - -4.17% -38× + + +101->105 + + +17.42% + - - -1003 - - -fromnumeric:2177:sum -1.91% -(0.01%) -76× + + +104 + + +water:126:calc_density_h2o +7.25% +(0.02%) + - - -887->1003 - - -1.91% -76× - - - -892->973 - - -0.58% -40× + + +105->104 + + +2.81% + - - -69 - - -isotopes:226:summarize -2.85% -(0.00%) - + + +103 + + +water:67:calc_density_h2o_fisher +2.73% +(0.43%) + - - -69->68 - - -2.85% - - - - -70 - - -pmodel:456:summarize -3.69% -(0.00%) - + + +148 + + +utilities:339:evaluate_horner_polynomial +6.63% +(6.17%) +17× - - -70->68 - - -3.69% - - - - -71 - - -competition:289:summarize -2.57% -(0.00%) - - + + +103->148 + + +2.30% +12× + + +104->885 + + +0.11% + - - -71->68 - - -2.57% - + + +104->103 + + +2.73% + - - -136 - - -subdaily:218:__init__ -5.77% -(0.82%) - + + +150 + + +water:12:calc_density_h2o_chen +4.40% +(0.89%) + - - -136->134 - - -0.30% - - - + -136->57 - - -0.15% - +104->150 + + +4.40% + + + + +150->148 + + +3.51% + + + + +106 + + +evap:74:__post_init__ +8.06% +(1.16%) + + - - -136->59 - - -1.49% - - + -136->63 - - -0.95% - +106->104 + + +4.44% + - - -136->60 - - -0.96% - + + +1866 + + +hygro:188:calc_saturation_vapour_pressure_slope +0.65% +(0.65%) + + - - -139 - - -pmodel:186:__init__ -8.83% -(0.70%) - + + + +106->1866 + + +0.65% + + + + +1867 + + +hygro:210:calc_enthalpy_vaporisation +0.58% +(0.58%) + - + -136->139 - - -0.17% - +106->1867 + + +0.29% + - - -1013 - - -subdaily:39:memory_effect -0.63% -(0.61%) - + + +1868 + + +hygro:259:calc_psychrometric_constant +1.51% +(0.24%) + - + -136->1013 - - -0.63% - +106->1868 + + +1.51% + - - -139->58 - - -5.92% - - - - -139->59 - - -1.95% - + + +1868->1867 + + +0.29% + - - -143 - - -test_profiling_pmodel:63:test_profiling_example -32.64% -(0.13%) - + + +149 + + +hygro:227:calc_specific_heat +0.98% +(0.03%) + - - -143->56 - - -1.48% - + + +1868->149 + + +0.98% + - - -143->57 - - -10.67% - + + +107 + + +isotopes:42:__init__ +1.07% +(0.75%) + + - - -143->61 - - -1.96% - - - -143->62 - - -0.63% - + + +108 + + +test_profiling_pmodel:7:test_profiling_pmodel +26.82% +(0.17%) + + - - -143->69 - - -2.85% - - - -143->70 - - -3.69% - + + +108->97 + + +9.16% + - - -143->71 - - -2.57% - + + +108->99 + + +8.01% + - - -143->139 - - -8.66% - + + +108->107 + + +1.07% + - - -162 - - -test_profiling_pmodel:20:setup -50.16% -(0.01%) - + + +113 + + +isotopes:226:summarize +2.01% +(0.00%) + - - -162->60 - - -45.26% - - - - -162->995 - - -0.14% - + + +108->113 + + +2.01% + - - -226 - - -api:256:load_dataset -4.05% -(0.00%) - + + +123 + + +pmodel:456:summarize +2.72% +(0.00%) + - - -162->226 - - -3.51% - + + +108->123 + + +2.72% + - - -212 - - -api:392:open_dataset -2.95% -(0.00%) - + + +136 + + +competition:182:__init__ +1.45% +(0.38%) + - - -226->212 - - -2.95% - + + +108->136 + + +1.45% + - - -243 - - -dataset:826:load -1.07% -(0.00%) - + + +140 + + +competition:289:summarize +1.81% +(0.00%) + - - -226->243 - - -1.07% - + + +108->140 + + +1.81% + - - -164 - - -netCDF4_:353:open -0.87% -(0.00%) - - + + +113->73 + + +2.01% + + + +123->73 + + +2.72% + - - -1615 - - -<frozen importlib:1022:_find_and_load -0.82% -(0.00%) -16× + + +137 + + +competition:62:calculate_tree_proportion +0.61% +(0.53%) + - - -164->1615 - - -0.39% - - - - -1634 - - -<frozen importlib:987:_find_and_load_unlocked -0.81% -(0.00%) -14× - - - - - -1615->1634 - - -0.81% - - - - -167 - - -~:0:<built-in method builtins.next> -0.60% -(0.02%) -457× - + + +136->137 + + +0.61% + + + +140->73 + + +1.81% + - - -183 - - -netCDF4_:104:_getitem -1.06% -(0.01%) -31× + + +126 + + +conftest:11:pmodel_profile_data +22.90% +(0.00%) + - - -183->7 - - -1.01% -31× + + +126->100 + + +22.46% + - - -191 - - -netCDF4_:99:__getitem__ -1.12% -(0.00%) -31× + + +142 + + +evap:109:estimate_aet +12.72% +(12.31%) +1463× - - -193 - - -indexing:833:explicit_indexing_adapter -1.12% -(0.01%) -31× + + +142->1001 + + +0.34% +1463× + + + +143 + + +solar:71:__post_init__ +19.46% +(18.96%) + - + -191->193 - - -1.12% -31× +143->1001 + + +0.49% + - - -193->183 - - -1.06% -31× - - - -192 - - -indexing:553:get_duck_array -1.23% -(0.00%) -35× + + +144 + + +splash:58:__init__ +29.74% +(0.00%) + - + -192->191 - - -1.12% -31× +144->147 + + +0.66% + - - -195 - - -netCDF4_:402:_acquire -0.52% -(0.01%) -71× + + +1863 + + +pressure:10:calc_patm +1.56% +(1.56%) + - - -1593 - - -contextlib:130:__enter__ -0.51% -(0.01%) -179× - - + + +144->1863 + + +1.56% + - - -195->1593 - - -0.50% -71× - - - -1593->167 - - -0.50% -108× - - - -197 - - -netCDF4_:572:open_dataset -2.07% -(0.00%) - + + +145 + + +splash:224:estimate_daily_water_balance +14.17% +(0.67%) +1463× - + -197->164 - - -0.87% - +145->1001 + + +0.68% +2926× - - -208 - - -store:29:open_dataset -1.18% -(0.00%) - - + + +145->142 + + +12.72% +1463× + + +149->1001 + + +0.12% + - + -197->208 - - -1.18% - +149->148 + + +0.83% + - - -290 - - -conventions:395:decode_cf_variables -0.54% -(0.01%) - + + +187 + + +conftest:11:splash_profile_data +0.51% +(0.00%) + - - -208->290 - - -0.54% - - - - -289 - - -conventions:214:decode_cf_variable -0.53% -(0.02%) -25× + + +188 + + +python:187:pytest_pyfunc_call +76.48% +(0.19%) + - - -290->289 - - -0.53% -25× - - - -211 - - -plugins:147:guess_engine -0.85% -(0.00%) - - - + + +188->108 + + +26.82% + - - -221 - - -plugins:119:list_engines -0.84% -(0.00%) - + + +1663 + + +test_profiling_subdaily:7:test_profiling_subdaily +5.21% +(0.01%) + - - -211->221 - - -0.84% - + + +188->1663 + + +5.21% + - - -1287 - - -__init__:999:entry_points -0.70% -(0.00%) - + + +1664 + + +test_profiling_splash:6:test_profile_splash +44.26% +(0.00%) + - + -221->1287 - - -0.70% - +188->1664 + + +44.26% + - - -212->197 - - -2.07% - + + +1663->95 + + +5.15% + - - -212->211 - - -0.85% - - - - -1286 - - -__init__:456:load -0.67% -(0.00%) - - - - - - -1287->1286 - - -0.67% - - - - -515 - - -variable:501:load -1.03% -(0.00%) -16× + + +1664->144 + + +29.74% + + + + +890 + + +splash:110:estimate_initial_soil_moisture +7.12% +(0.01%) + - - -243->515 - - -1.03% -16× + + +1664->890 + + +7.12% + - - -227 - - -test_profiling_splash:32:setup -2.29% -(0.00%) - + + +991 + + +splash:287:calculate_soil_moisture +7.40% +(0.11%) + - - -227->64 - - -1.70% - - - - -227->226 - - -0.54% - + + +1664->991 + + +7.40% + - - -228 - - -fixtures:886:call_fixture_func -52.46% -(0.01%) - + + +231 + + +~:0:<built-in method builtins.next> +23.42% +(0.00%) +337× - - -228->162 - - -50.16% - + + +231->126 + + +22.90% + - - -228->227 - - -2.29% - + + +231->187 + + +0.51% + - - -229 - - -python:187:pytest_pyfunc_call -47.01% -(0.42%) - + + +648 + + +fixtures:592:_get_active_fixturedef +23.19% +(0.00%) +18× - - -229->143 - - -32.64% - - - - -1643 - - -test_profiling_pmodel:123:test_profiling_subdaily -6.31% -(0.00%) - + + +1203 + + +fixtures:620:_compute_fixture_value +23.19% +(0.00%) + - - -229->1643 - - -6.31% - + + +648->1203 + + +23.19% + - - -1836 - - -test_profiling_splash:48:test_profiling_calculate_soil_moisture -7.63% -(0.00%) - + + +1119 + + +fixtures:1041:execute +23.19% +(0.00%) + - - -229->1836 - - -7.63% - - - - -1643->136 - - -5.77% - - - - -910 - - -scaler:70:__init__ -0.53% -(0.52%) - + + +1203->1119 + + +23.19% + + + + +928 + + +~:0:<built-in method numpy.array> +1.83% +(1.83%) +96× - - -1643->910 - - -0.53% - + + +884->928 + + +1.83% +40× - - -891 - - -splash:110:estimate_initial_soil_moisture -3.78% -(0.05%) - - - - - - -1836->891 - - -3.78% - - - - -985 - - -splash:287:calculate_soil_moisture -3.85% -(0.14%) - - - - - - -1836->985 - - -3.85% - - - - -635 - - -indexing:698:get_duck_array -1.00% -(0.00%) -16× + + +894 + + +fromnumeric:71:_wrapreduction +1.24% +(0.03%) +3043× - - -515->635 - - -1.00% -16× + + +1009->894 + + +1.11% +76× - - -303 - - -merge:646:merge_core -0.70% -(0.01%) - - + + +890->145 + + +7.12% +732× + + +894->971 + + +1.20% +3027× - - -647 - - -indexing:692:_ensure_cached -0.99% -(0.00%) -16× + + +907 + + +~:0:<method 'clip' of 'numpy.ndarray' objects> +1.80% +(0.01%) +4401× - - -635->647 - - -0.99% -16× + + +897->907 + + +1.80% +4398× - - -643 - - -indexing:666:get_duck_array -0.98% -(0.00%) -16× + + +1026 + + +_methods:90:_clip +1.79% +(1.79%) +4401× - - -647->643 - - -0.98% -16× + + +907->1026 + + +1.79% +4401× - - -643->192 - - -0.98% -16× + + +991->145 + + +7.05% +731× - - -934 - - -~:0:<built-in method numpy.array> -1.37% -(1.37%) -111× + + +1059 + + +_callers:52:_multicall +99.98% +(0.05%) +57× - + -885->934 - - -1.36% -41× +1059->188 + + +76.48% + - - -1003->901 - - -1.89% -76× + + +1200 + + +fixtures:1108:pytest_fixture_setup +23.19% +(0.00%) + + - - -891->65 - - -3.73% -732× - - -901->973 - - -2.16% -3032× + + +1059->1200 + + +23.19% + - - -914 - - -~:0:<method 'clip' of 'numpy.ndarray' objects> -1.27% -(0.09%) -4402× + + +1213 + + +runner:155:pytest_runtest_setup +23.19% +(0.00%) + - - -904->914 - - -1.27% -4399× + + +1059->1213 + + +23.19% + - - -1020 - - -_methods:90:_clip -1.18% -(1.18%) -4402× + + +1214 + + +runner:160:pytest_runtest_call +76.53% +(0.00%) + - - -914->1020 - - -1.18% -4402× + + +1059->1214 + + +76.53% + - - -992 - - -numeric:2330:within_tol -0.61% -(0.32%) -15× + + +1207 + + +fixtures:886:call_fixture_func +23.19% +(0.00%) + - - -956->992 - - -0.61% -15× - - - -985->65 - - -3.70% -731× + + +1200->1207 + + +23.19% + - - -1049 - - -_callers:52:_multicall -99.89% -(0.15%) -54× + + +1168 + + +runner:478:setup +23.19% +(0.00%) + - - -1049->229 - - -47.01% - + + +1213->1168 + + +23.19% + - - -1194 - - -fixtures:1108:pytest_fixture_setup -52.47% -(0.00%) - + + +1123 + + +python:1790:runtest +76.53% +(0.00%) + - - -1049->1194 - - -52.47% - + + +1214->1123 + + +76.53% + - - -1203 - - -runner:155:pytest_runtest_setup -52.50% -(0.00%) - + + +1400 + + +_hooks:486:__call__ +99.98% +(0.00%) +57× - - -1049->1203 - - -52.50% - + + +1119->1400 + + +23.19% + - - -1204 - - -runner:160:pytest_runtest_call -47.12% -(0.00%) - + + +1399 + + +_manager:110:_hookexec +99.98% +(0.00%) +57× - - -1049->1204 - - -47.12% - - - - -1194->228 - - -52.46% - - - - -1163 - - -runner:478:setup -52.50% -(0.00%) - - - - - - -1203->1163 - - -52.50% - + + +1400->1399 + + +99.98% +33× - + 1120 - - -python:1790:runtest -47.12% -(0.00%) - + + +runner:111:pytest_runtest_protocol +100.00% +(0.00%) + - - -1204->1120 - - -47.12% - - - - -1116 - - -fixtures:1041:execute -52.49% -(0.00%) - + + +1212 + + +runner:119:runtestprotocol +99.99% +(0.01%) + - - -1384 - - -_hooks:486:__call__ -99.90% -(0.01%) -54× + + +1120->1212 + + +99.99% + + + + +1121 + + +runner:219:call_and_report +99.98% +(0.00%) + - - -1116->1384 - - -52.48% - - - - -1383 - - -_manager:110:_hookexec -99.90% -(0.00%) -54× - - - - - -1384->1383 - - -99.90% -33× - - - -1117 - - -runner:111:pytest_runtest_protocol -100.00% -(0.00%) - - - - - - -1202 - - -runner:119:runtestprotocol -99.94% -(0.00%) - - - - - - -1117->1202 - - -99.94% - - - - -1118 - - -runner:219:call_and_report -99.94% -(0.01%) - - - - - - -1202->1118 - - -99.94% - + + +1212->1121 + + +99.98% + - - -1119 - - -runner:247:call_runtest_hook -99.83% -(0.00%) - + + +1122 + + +runner:247:call_runtest_hook +99.97% +(0.00%) + - - -1118->1119 - - -99.83% - + + +1121->1122 + + +99.97% + - - -1209 - - -runner:318:from_call -99.82% -(0.00%) - + + +1219 + + +runner:318:from_call +99.97% +(0.00%) + - - -1119->1209 - - -99.82% - - - - -1208 - - -runner:262:<lambda> -99.81% -(0.00%) - - - - - - -1209->1208 - - -99.81% - - - - -1120->1384 - - -47.11% - + + +1122->1219 + + +99.97% + - - -1192 - - -python:1794:setup -52.50% -(0.00%) - + + +1218 + + +runner:262:<lambda> +99.97% +(0.00%) + - - -1163->1192 - - -52.50% - + + +1219->1218 + + +99.97% + + + + +1123->1400 + + +76.52% + - - -1184 - - -fixtures:561:_fillfixtures -52.50% -(0.00%) - + + +1198 + + +python:1794:setup +23.19% +(0.00%) + - - -1192->1184 - - -52.50% - + + +1168->1198 + + +23.19% + - + 1193 - - -fixtures:568:getfixturevalue -52.50% -(0.00%) - + + +fixtures:561:_fillfixtures +23.19% +(0.00%) + - - -1184->1193 - - -52.50% - + + +1198->1193 + + +23.19% + - - -1188 - - -fixtures:592:_get_active_fixturedef -52.49% -(0.00%) - + + +1199 + + +fixtures:568:getfixturevalue +23.19% +(0.00%) + - - -1193->1188 - - -52.49% - + + +1193->1199 + + +23.19% + - - -1195 - - -fixtures:620:_compute_fixture_value -52.49% -(0.00%) - - + + +1199->648 + + +23.19% + + + +1207->231 + + +23.18% + - - -1188->1195 - - -52.49% - - - - -1195->1116 - - -52.49% - - - - -1208->1384 - - -99.81% - - - - -1257 - - -__init__:1018:<genexpr> -0.66% -(0.01%) -134× - - - - - -1311 - - -~:0:<built-in method builtins.sorted> -0.66% -(0.01%) - - - - - - -1286->1311 - - -0.66% - - - - -1311->1257 - - -0.66% -134× - - - -1383->1049 - - -99.89% -33× - - - -1622 - - -<frozen importlib:664:_load_unlocked -0.67% -(0.00%) -10× - - - - - -1634->1622 - - -0.67% - - - - -1617 - - -<frozen importlib:233:_call_with_frames_removed -0.63% -(0.00%) -11× - - - - - -1617->1 - - -0.63% - - - - -1618 - - -<frozen importlib:877:exec_module -0.66% -(0.00%) - - - - - - -1618->1617 - - -0.63% - - - - -1622->1618 - - -0.66% - + + +1218->1400 + + +99.97% + + + + +1399->1059 + + +99.98% +33× diff --git a/profiling/profiling-database.csv b/profiling/profiling-database.csv new file mode 100644 index 00000000..5911a78f --- /dev/null +++ b/profiling/profiling-database.csv @@ -0,0 +1,78 @@ +ncalls,tottime,tottime_percall,cumtime,cumtime_percall,timestamp,filename,lineno,function,process_id,label,ignore_result,ignore_justification +13,0.432,0.033,0.432,0.033,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,14,calc_ftemp_arrh,pyrealm/pmodel/functions.py:calc_ftemp_arrh,7c3fe42,False, +3,0.283,0.094,0.283,0.094,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,77,calc_ftemp_inst_rd,pyrealm/pmodel/functions.py:calc_ftemp_inst_rd,7c3fe42,False, +3,0.698,0.233,0.886,0.295,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,119,calc_ftemp_inst_vcmax,pyrealm/pmodel/functions.py:calc_ftemp_inst_vcmax,7c3fe42,False, +4,0.372,0.093,0.401,0.1,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,197,calc_ftemp_kphio,pyrealm/pmodel/functions.py:calc_ftemp_kphio,7c3fe42,False, +2,0.152,0.076,0.189,0.094,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,256,calc_gammastar,pyrealm/pmodel/functions.py:calc_gammastar,7c3fe42,False, +2,0.01,0.005,4.142,2.071,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,310,calc_ns_star,pyrealm/pmodel/functions.py:calc_ns_star,7c3fe42,False, +2,0.188,0.094,0.322,0.161,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,354,calc_kmm,pyrealm/pmodel/functions.py:calc_kmm,7c3fe42,False, +2,0.13,0.065,0.13,0.065,2024-05-07T16:26:25,pyrealm/pmodel/functions.py,644,calc_co2_to_ca,pyrealm/pmodel/functions.py:calc_co2_to_ca,7c3fe42,False, +4,0.101,0.025,0.647,0.162,2024-05-07T16:26:25,pyrealm/core/water.py,67,calc_density_h2o_fisher,pyrealm/core/water.py:calc_density_h2o_fisher,7c3fe42,False, +5,0.005,0.001,1.721,0.344,2024-05-07T16:26:25,pyrealm/core/water.py,126,calc_density_h2o,pyrealm/core/water.py:calc_density_h2o,7c3fe42,False, +4,3.465,0.866,4.132,1.033,2024-05-07T16:26:25,pyrealm/core/water.py,181,calc_viscosity_h2o,pyrealm/core/water.py:calc_viscosity_h2o,7c3fe42,False, +2,0.179,0.089,0.253,0.126,2024-05-07T16:26:25,pyrealm/pmodel/isotopes.py,42,__init__,pyrealm/pmodel/isotopes.py:CalcCarbonIsotopes.__init__,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/isotopes.py,98,__repr__,pyrealm/pmodel/isotopes.py:CalcCarbonIsotopes.__repr__,7c3fe42,False, +1,0.016,0.016,0.016,0.016,2024-05-07T16:26:25,pyrealm/pmodel/isotopes.py,102,calc_c4_discrimination,pyrealm/pmodel/isotopes.py:CalcCarbonIsotopes.calc_c4_discrimination,7c3fe42,False, +1,0.058,0.058,0.058,0.058,2024-05-07T16:26:25,pyrealm/pmodel/isotopes.py,187,calc_c3_discrimination,pyrealm/pmodel/isotopes.py:CalcCarbonIsotopes.calc_c3_discrimination,7c3fe42,False, +2,0.0,0.0,0.477,0.238,2024-05-07T16:26:25,pyrealm/pmodel/isotopes.py,226,summarize,pyrealm/pmodel/isotopes.py:CalcCarbonIsotopes.summarize,7c3fe42,False, +3,0.267,0.089,1.929,0.643,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,186,__init__,pyrealm/pmodel/pmodel.py:PModel.__init__,7c3fe42,False, +16,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,300,_check_estimated,pyrealm/pmodel/pmodel.py:PModel._check_estimated,7c3fe42,False, +4,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,309,gpp,pyrealm/pmodel/pmodel.py:PModel.gpp,7c3fe42,False, +3,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,316,vcmax,pyrealm/pmodel/pmodel.py:PModel.vcmax,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,322,vcmax25,pyrealm/pmodel/pmodel.py:PModel.vcmax25,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,328,rd,pyrealm/pmodel/pmodel.py:PModel.rd,7c3fe42,False, +3,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,334,jmax,pyrealm/pmodel/pmodel.py:PModel.jmax,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,340,gs,pyrealm/pmodel/pmodel.py:PModel.gs,7c3fe42,False, +3,0.712,0.237,2.207,0.736,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,358,estimate_productivity,pyrealm/pmodel/pmodel.py:PModel.estimate_productivity,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,443,__repr__,pyrealm/pmodel/pmodel.py:PModel.__repr__,7c3fe42,False, +2,0.0,0.0,0.646,0.323,2024-05-07T16:26:25,pyrealm/pmodel/pmodel.py,456,summarize,pyrealm/pmodel/pmodel.py:PModel.summarize,7c3fe42,False, +3,0.0,0.0,0.885,0.295,2024-05-07T16:26:25,pyrealm/pmodel/jmax_limitation.py,75,__init__,pyrealm/pmodel/jmax_limitation.py:JmaxLimitation.__init__,7c3fe42,False, +3,0.885,0.295,0.885,0.295,2024-05-07T16:26:25,pyrealm/pmodel/jmax_limitation.py,127,wang17,pyrealm/pmodel/jmax_limitation.py:JmaxLimitation.wang17,7c3fe42,False, +2,0.004,0.002,5.456,2.728,2024-05-07T16:26:25,pyrealm/pmodel/pmodel_environment.py,76,__init__,pyrealm/pmodel/pmodel_environment.py:PModelEnvironment.__init__,7c3fe42,False, +4,0.0,0.0,0.803,0.201,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,95,__init__,pyrealm/pmodel/optimal_chi.py:OptimalChiABC.__init__,7c3fe42,False, +4,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,150,_check_requires,pyrealm/pmodel/optimal_chi.py:OptimalChiABC._check_requires,7c3fe42,False, +3,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,248,set_beta,pyrealm/pmodel/optimal_chi.py:OptimalChiPrentice14.set_beta,7c3fe42,False, +4,0.803,0.201,0.803,0.201,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,253,estimate_chi,pyrealm/pmodel/optimal_chi.py:OptimalChiPrentice14.estimate_chi,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,380,set_beta,pyrealm/pmodel/optimal_chi.py:OptimalChiC4.set_beta,7c3fe42,False, +1,0.188,0.188,0.216,0.216,2024-05-07T16:26:25,pyrealm/pmodel/optimal_chi.py,385,estimate_chi,pyrealm/pmodel/optimal_chi.py:OptimalChiC4.estimate_chi,7c3fe42,False, +4,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/__init__.py,28,warning_on_one_line,pyrealm/__init__.py:warning_on_one_line,7c3fe42,False, +1,0.1,0.1,0.1,0.1,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,14,convert_gpp_advantage_to_c4_fraction,pyrealm/pmodel/competition.py:convert_gpp_advantage_to_c4_fraction,7c3fe42,False, +1,0.126,0.126,0.144,0.144,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,62,calculate_tree_proportion,pyrealm/pmodel/competition.py:calculate_tree_proportion,7c3fe42,False, +1,0.091,0.091,0.345,0.345,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,182,__init__,pyrealm/pmodel/competition.py:C3C4Competition.__init__,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,245,__repr__,pyrealm/pmodel/competition.py:C3C4Competition.__repr__,7c3fe42,False, +1,0.098,0.098,0.098,0.098,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,249,estimate_isotopic_discrimination,pyrealm/pmodel/competition.py:C3C4Competition.estimate_isotopic_discrimination,7c3fe42,False, +2,0.0,0.0,0.43,0.215,2024-05-07T16:26:25,pyrealm/pmodel/competition.py,289,summarize,pyrealm/pmodel/competition.py:C3C4Competition.summarize,7c3fe42,False, +962,0.013,0.0,0.016,0.0,2024-05-07T16:26:25,pyrealm/core/utilities.py,52,check_input_shapes,pyrealm/core/utilities.py:check_input_shapes,7c3fe42,False, +6,0.168,0.028,1.553,0.259,2024-05-07T16:26:25,pyrealm/core/utilities.py,113,summarize_attrs,pyrealm/core/utilities.py:summarize_attrs,7c3fe42,False, +13,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/core/utilities.py,184,_get_interval_functions,pyrealm/core/utilities.py:_get_interval_functions,7c3fe42,False, +13,0.745,0.057,0.752,0.058,2024-05-07T16:26:25,pyrealm/core/utilities.py,213,bounds_checker,pyrealm/core/utilities.py:bounds_checker,7c3fe42,False, +17,1.463,0.086,1.574,0.093,2024-05-07T16:26:25,pyrealm/core/utilities.py,339,evaluate_horner_polynomial,pyrealm/core/utilities.py:evaluate_horner_polynomial,7c3fe42,False, +3,0.019,0.006,0.019,0.006,2024-05-07T16:26:25,pyrealm/pmodel/subdaily.py,39,memory_effect,pyrealm/pmodel/subdaily.py:memory_effect,7c3fe42,False, +1,0.265,0.265,1.222,1.222,2024-05-07T16:26:25,pyrealm/pmodel/subdaily.py,218,__init__,pyrealm/pmodel/subdaily.py:SubdailyPModel.__init__,7c3fe42,False, +1,0.012,0.012,0.012,0.012,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,70,__init__,pyrealm/pmodel/scaler.py:SubdailyScaler.__init__,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,175,_set_times,pyrealm/pmodel/scaler.py:SubdailyScaler._set_times,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,210,set_window,pyrealm/pmodel/scaler.py:SubdailyScaler.set_window,7c3fe42,False, +6,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,309,pad_values,pyrealm/pmodel/scaler.py:SubdailyScaler.pad_values,7c3fe42,False, +6,0.008,0.001,0.008,0.001,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,332,get_window_values,pyrealm/pmodel/scaler.py:SubdailyScaler.get_window_values,7c3fe42,False, +6,0.0,0.0,0.011,0.002,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,370,get_daily_means,pyrealm/pmodel/scaler.py:SubdailyScaler.get_daily_means,7c3fe42,False, +3,0.0,0.0,0.019,0.006,2024-05-07T16:26:25,pyrealm/pmodel/scaler.py,407,fill_daily_to_subdaily,pyrealm/pmodel/scaler.py:SubdailyScaler.fill_daily_to_subdaily,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/__init__.py,20,__init__,pyrealm/__init__.py:ExperimentalFeatureWarning.__init__,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/__init__.py,23,__str__,pyrealm/__init__.py:ExperimentalFeatureWarning.__str__,7c3fe42,False, +1,0.369,0.369,0.369,0.369,2024-05-07T16:26:25,pyrealm/core/pressure.py,10,calc_patm,pyrealm/core/pressure.py:calc_patm,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/core/calendar.py,89,__post_init__,pyrealm/core/calendar.py:Calendar.__post_init__,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/core/calendar.py,104,__getitem__,pyrealm/core/calendar.py:Calendar.__getitem__,7c3fe42,False, +2,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/core/calendar.py,113,__len__,pyrealm/core/calendar.py:Calendar.__len__,7c3fe42,False, +1,0.154,0.154,0.154,0.154,2024-05-07T16:26:25,pyrealm/core/hygro.py,188,calc_saturation_vapour_pressure_slope,pyrealm/core/hygro.py:calc_saturation_vapour_pressure_slope,7c3fe42,False, +2,0.139,0.069,0.139,0.069,2024-05-07T16:26:25,pyrealm/core/hygro.py,210,calc_enthalpy_vaporisation,pyrealm/core/hygro.py:calc_enthalpy_vaporisation,7c3fe42,False, +1,0.007,0.007,0.232,0.232,2024-05-07T16:26:25,pyrealm/core/hygro.py,227,calc_specific_heat,pyrealm/core/hygro.py:calc_specific_heat,7c3fe42,False, +1,0.058,0.058,0.359,0.359,2024-05-07T16:26:25,pyrealm/core/hygro.py,259,calc_psychrometric_constant,pyrealm/core/hygro.py:calc_psychrometric_constant,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/core/solar.py,26,calc_heliocentric_longitudes,pyrealm/core/solar.py:calc_heliocentric_longitudes,7c3fe42,False, +1,0.275,0.275,1.913,1.913,2024-05-07T16:26:25,pyrealm/splash/evap.py,74,__post_init__,pyrealm/splash/evap.py:DailyEvapFluxes.__post_init__,7c3fe42,False, +463,2.919,0.002,3.019,0.002,2024-05-07T16:26:25,pyrealm/splash/evap.py,109,estimate_aet,pyrealm/splash/evap.py:DailyEvapFluxes.estimate_aet,7c3fe42,False, +1,4.499,4.499,4.616,4.616,2024-05-07T16:26:25,pyrealm/splash/solar.py,71,__post_init__,pyrealm/splash/solar.py:DailySolarFluxes.__post_init__,7c3fe42,False, +1,0.001,0.001,7.056,7.056,2024-05-07T16:26:25,pyrealm/splash/splash.py,58,__init__,pyrealm/splash/splash.py:SplashModel.__init__,7c3fe42,False, +1,0.002,0.002,1.69,1.69,2024-05-07T16:26:25,pyrealm/splash/splash.py,110,estimate_initial_soil_moisture,pyrealm/splash/splash.py:SplashModel.estimate_initial_soil_moisture,7c3fe42,False, +463,0.159,0.0,3.362,0.002,2024-05-07T16:26:25,pyrealm/splash/splash.py,224,estimate_daily_water_balance,pyrealm/splash/splash.py:SplashModel.estimate_daily_water_balance,7c3fe42,False, +1,0.027,0.027,1.755,1.755,2024-05-07T16:26:25,pyrealm/splash/splash.py,287,calculate_soil_moisture,pyrealm/splash/splash.py:SplashModel.calculate_soil_moisture,7c3fe42,False, +1,0.212,0.212,1.044,1.044,2024-05-07T16:26:25,pyrealm/core/water.py,12,calc_density_h2o_chen,pyrealm/core/water.py:calc_density_h2o_chen,7c3fe42,False, +1,0.0,0.0,0.0,0.0,2024-05-07T16:26:25,pyrealm/constants/core_const.py,242,__post_init__,pyrealm/constants/core_const.py:CoreConst.__post_init__,7c3fe42,False,