From 6d1b54b4f200b08f91256d9c9518b653fa76a139 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Sun, 5 Apr 2026 12:50:04 +0200 Subject: [PATCH 01/10] Migrate docstrings to NumPy style (#149) * Apply latest templates * Add docstripy to dev depemdencies * Apply latest templates * Transfrom docstrings from google to numpy style * Reformat docstrings * Reformat pyproject.toml * Remove unnecessary semicolons in docstrings * Remove redundant lines in docstrings * Add tutorial for Magnetic nanoparticles to TOC * Remove temporary ignored linting rules * Apply latest templates * Get rid of "By default..." in argument descriptions --- .copier-answers.yml | 2 +- .github/workflows/coverage.yml | 10 +- .github/workflows/issues-labels.yml | 9 + .github/workflows/lint-format.yml | 8 - .gitignore | 1 + .pre-commit-config.yaml | 7 - .prettierignore | 17 +- CONTRIBUTING.md | 1 - docs/mkdocs.yml | 4 +- pixi.lock | 101 +-- pixi.toml | 48 +- pyproject.toml | 56 +- src/easydynamics/analysis/analysis.py | 425 ++++++------ src/easydynamics/analysis/analysis1d.py | 614 ++++++++++-------- src/easydynamics/analysis/analysis_base.py | 319 +++++---- .../convolution/analytical_convolution.py | 403 ++++++------ src/easydynamics/convolution/convolution.py | 171 ++--- .../convolution/convolution_base.py | 217 ++++--- src/easydynamics/convolution/energy_grid.py | 27 +- .../convolution/numerical_convolution.py | 73 ++- .../convolution/numerical_convolution_base.py | 256 ++++---- src/easydynamics/experiment/experiment.py | 390 ++++++----- .../sample_model/background_model.py | 31 +- .../sample_model/component_collection.py | 350 ++++++---- .../components/damped_harmonic_oscillator.py | 177 ++--- .../sample_model/components/delta_function.py | 116 ++-- .../sample_model/components/exponential.py | 182 +++--- .../components/expression_component.py | 165 +++-- .../sample_model/components/gaussian.py | 172 ++--- .../sample_model/components/lorentzian.py | 166 +++-- .../sample_model/components/mixins.py | 151 +++-- .../components/model_component.py | 147 +++-- .../sample_model/components/polynomial.py | 176 ++--- .../sample_model/components/voigt.py | 195 +++--- .../brownian_translational_diffusion.py | 268 ++++---- .../diffusion_model/diffusion_model_base.py | 106 +-- .../jump_translational_diffusion.py | 319 +++++---- .../sample_model/instrument_model.py | 393 ++++++----- src/easydynamics/sample_model/model_base.py | 306 +++++---- .../sample_model/resolution_model.py | 51 +- src/easydynamics/sample_model/sample_model.py | 314 +++++---- src/easydynamics/utils/detailed_balance.py | 135 ++-- src/easydynamics/utils/utils.py | 70 +- tools/add_license_headers.py | 151 ----- tools/check_license_headers.py | 45 -- tools/license_headers.py | 315 +++++++++ tools/remove_license_headers.py | 41 -- 47 files changed, 4451 insertions(+), 3250 deletions(-) delete mode 100644 tools/add_license_headers.py delete mode 100644 tools/check_license_headers.py create mode 100644 tools/license_headers.py delete mode 100644 tools/remove_license_headers.py diff --git a/.copier-answers.yml b/.copier-answers.yml index 7b414c16..c3886bcb 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,6 +1,6 @@ # WARNING: Do not edit this file manually. # Any changes will be overwritten by Copier. -_commit: v0.10.1-25-ga5301e9 +_commit: v0.10.1-38-g85fbe04 _src_path: gh:easyscience/templates app_docs_url: https://easyscience.github.io/dynamics-app app_doi: 10.5281/zenodo.18877180 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index cd9ff1e0..e1e44d41 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -1,8 +1,10 @@ name: Coverage checks on: - # Trigger the workflow on push + # Trigger the workflow on push to develop push: + branches: + - develop # Do not run on version tags (those are handled by other workflows) tags-ignore: ['v*'] # Trigger the workflow on pull request @@ -15,11 +17,11 @@ permissions: actions: write contents: read -# Allow only one concurrent workflow, skipping runs queued between the run -# in-progress and latest queued. And cancel in-progress runs. +# Allow only one concurrent workflow per PR or branch ref. +# Cancel in-progress runs only for pull requests, but let branch push runs finish. concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} # Set the environment variables to be used in all jobs defined in this workflow env: diff --git a/.github/workflows/issues-labels.yml b/.github/workflows/issues-labels.yml index 3a60cdd7..df3c55f1 100644 --- a/.github/workflows/issues-labels.yml +++ b/.github/workflows/issues-labels.yml @@ -13,9 +13,18 @@ permissions: jobs: check-labels: + if: github.actor != 'easyscience[bot]' + runs-on: ubuntu-latest + concurrency: + group: issue-labels-${{ github.event.issue.number }} + cancel-in-progress: true + steps: + - name: Checkout repository + uses: actions/checkout@v5 + - name: Setup easyscience[bot] id: bot uses: ./.github/actions/setup-easyscience-bot diff --git a/.github/workflows/lint-format.yml b/.github/workflows/lint-format.yml index 457d67f4..f1135fa5 100644 --- a/.github/workflows/lint-format.yml +++ b/.github/workflows/lint-format.yml @@ -79,12 +79,6 @@ jobs: shell: bash run: pixi run docstring-lint-check - - name: Check formatting of docstrings in Python code - id: docstring_format - continue-on-error: true - shell: bash - run: pixi run docstring-format-check - - name: Check formatting of non-Python files (md, toml, etc.) id: nonpy_format continue-on-error: true @@ -112,7 +106,6 @@ jobs: echo "| py lint | ${{ steps.py_lint.outcome == 'success' && '✅' || '❌' }} |" echo "| py format | ${{ steps.py_format.outcome == 'success' && '✅' || '❌' }} |" echo "| docstring lint | ${{ steps.docstring_lint.outcome == 'success' && '✅' || '❌' }} |" - echo "| docstring format | ${{ steps.docstring_format.outcome == 'success' && '✅' || '❌' }} |" echo "| nonpy format | ${{ steps.nonpy_format.outcome == 'success' && '✅' || '❌' }} |" echo "| notebooks lint | ${{ steps.notebook_lint.outcome == 'success' && '✅' || '❌' }} |" } >> "$GITHUB_STEP_SUMMARY" @@ -125,7 +118,6 @@ jobs: || steps.py_lint.outcome == 'failure' || steps.py_format.outcome == 'failure' || steps.docstring_lint.outcome == 'failure' - || steps.docstring_format.outcome == 'failure' || steps.nonpy_format.outcome == 'failure' || steps.notebook_lint.outcome == 'failure' shell: bash diff --git a/.gitignore b/.gitignore index 0500ede3..6dc595c7 100644 --- a/.gitignore +++ b/.gitignore @@ -41,5 +41,6 @@ CMakeLists.txt.user* *.dmg # Misc +.cache/ *.log *.zip diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5fa0c2cb..9a3855f4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,13 +39,6 @@ repos: pass_filenames: false stages: [manual] - - id: pixi-docstring-format-check - name: pixi run docstring-format-check - entry: pixi run docstring-format-check - language: system - pass_filenames: false - stages: [manual] - - id: pixi-nonpy-format-check name: pixi run nonpy-format-check entry: pixi run nonpy-format-check diff --git a/.prettierignore b/.prettierignore index 788ec8fa..a08c3c48 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,6 @@ +# Git +.git/ + # Copier .copier-answers*.yml @@ -14,4 +17,16 @@ docs/docs/assets/ .pytest_cache/ # MyPy -.mypy_cache +.mypy_cache/ + +# Ruff +.ruff_cache/ + +# Node +node_modules + +# Misc +.benchmarks +.cache +deps/ +tmp/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 85365779..168c5d97 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -230,7 +230,6 @@ pixi run license-check.........................Passed pixi run py-lint-check.........................Passed pixi run py-format-check.......................Passed pixi run docstring-lint-check..................Passed -pixi run docstring-format-check................Passed pixi run nonpy-format-check....................Passed pixi run notebook-lint-check...................Passed pixi run unit-tests............................Passed diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index bd73822e..a821a82f 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -148,8 +148,7 @@ plugins: python: paths: ['src'] # Change 'src' to your actual sources directory options: - docstring_style: google - render_markdown: true + docstring_style: numpy group_by_category: false heading_level: 1 show_root_heading: true @@ -183,6 +182,7 @@ nav: - Tutorials: tutorials/index.md - Getting Started: - Tutorial 1. Brownian Diffusion: tutorials/tutorial1_brownian.ipynb + - Tutorial 2. Magnetic nanoparticles: tutorials/tutorial2_nanoparticles.ipynb - Classes and Methods: - Components: tutorials/components.ipynb - Component collection: tutorials/component_collection.ipynb diff --git a/pixi.lock b/pixi.lock index cdb11917..1665d1a6 100644 --- a/pixi.lock +++ b/pixi.lock @@ -83,8 +83,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -92,6 +92,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -124,6 +125,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -250,7 +252,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -334,8 +335,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -343,6 +344,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -375,6 +377,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -501,7 +504,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -585,8 +587,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -594,6 +596,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -626,6 +629,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -752,7 +756,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -826,8 +829,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -835,6 +838,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -867,6 +871,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -993,7 +998,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -1092,8 +1096,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -1101,6 +1105,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -1133,6 +1138,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -1260,7 +1266,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -1344,8 +1349,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -1353,6 +1358,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -1385,6 +1391,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -1512,7 +1519,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -1596,8 +1602,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -1605,6 +1611,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -1637,6 +1644,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -1764,7 +1772,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -1838,8 +1845,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -1847,6 +1854,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -1879,6 +1887,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -2006,7 +2015,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -2105,8 +2113,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -2114,6 +2122,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -2146,6 +2155,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -2272,7 +2282,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -2356,8 +2365,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -2365,6 +2374,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -2397,6 +2407,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -2523,7 +2534,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -2607,8 +2617,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -2616,6 +2626,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -2648,6 +2659,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -2774,7 +2786,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -2848,8 +2859,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -2857,6 +2868,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl @@ -2889,6 +2901,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl @@ -3015,7 +3028,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl @@ -4031,15 +4043,6 @@ packages: name: distlib version: 0.4.0 sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 -- pypi: https://files.pythonhosted.org/packages/dc/b4/a7ec1eaee86761a9dbfd339732b4706db3c6b65e970c12f0f56cfcce3dcf/docformatter-1.7.7-py3-none-any.whl - name: docformatter - version: 1.7.7 - sha256: 7af49f8a46346a77858f6651f431b882c503c2f4442c8b4524b920c863277834 - requires_dist: - - charset-normalizer>=3.0.0,<4.0.0 - - tomli>=2.0.0,<3.0.0 ; python_full_version < '3.11' and extra == 'tomli' - - untokenize>=0.1.1,<0.2.0 - requires_python: '>=3.9,<4.0' - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl name: docstring-parser-fork version: 0.0.14 @@ -4051,6 +4054,13 @@ packages: - pydoctor>=25.4.0 ; extra == 'docs' - pytest ; extra == 'test' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl + name: docstripy + version: 0.7.2 + sha256: c4ba35de6c1b1c51f7afad4a46d8953aad55dce1a490d198f7e98c8c63efefda + requires_dist: + - nbformat + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl name: dunamai version: 1.26.0 @@ -4061,8 +4071,8 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.3.0+devdirty13 - sha256: c9fe79448ba34fd24162d77b5501f66b07c86af3dc0e0982ef2ce4d1a597b1d9 + version: 0.4.0+devdirty10 + sha256: bd1d44f7263fe45e52e8b62d2740c303be86c7bcc89e3cbec95ec663568953b1 requires_dist: - darkdetect - easyscience @@ -4077,7 +4087,8 @@ packages: - sympy - build ; extra == 'dev' - copier ; extra == 'dev' - - docformatter ; extra == 'dev' + - docstripy ; extra == 'dev' + - format-docstring ; extra == 'dev' - gitpython ; extra == 'dev' - interrogate ; extra == 'dev' - jinja2 ; extra == 'dev' @@ -4451,6 +4462,15 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl + name: format-docstring + version: 0.2.7 + sha256: c9d50eafebe0f260e3270ca662ff3a0ed4050f64d95e352f8c5f88d9aede42d6 + requires_dist: + - click>=8.0 + - jupyter-notebook-parser>=0.1.4 + - tomli>=1.1.0 ; python_full_version < '3.11' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl name: fqdn version: 1.5.1 @@ -5091,6 +5111,11 @@ packages: - jupyter-server>=1.1.2 - importlib-metadata>=4.8.3 ; python_full_version < '3.10' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl + name: jupyter-notebook-parser + version: 0.1.4 + sha256: 27b3b67cf898684e646d569f017cb27046774ad23866cb0bdf51d5f76a46476b + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl name: jupyter-server version: 2.17.0 @@ -10084,10 +10109,6 @@ packages: - python-docs-theme ; extra == 'doc' - uncertainties[arrays,doc,test] ; extra == 'all' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz - name: untokenize - version: 0.1.1 - sha256: 3865dbbbb8efb4bb5eaa72f1be7f3e0be00ea8b7f125c69cbd1f5fda926f37a2 - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl name: uri-template version: 1.3.0 diff --git a/pixi.toml b/pixi.toml index ab15262f..ac6a7e02 100644 --- a/pixi.toml +++ b/pixi.toml @@ -5,7 +5,7 @@ # Platform-independent [activation.env] -PYTHONIOENCODING = "utf-8" +PYTHONIOENCODING = 'utf-8' # Platform-specific @@ -35,7 +35,7 @@ platforms = ['win-64', 'linux-64', 'osx-64', 'osx-arm64'] channels = ['conda-forge'] ##################### -# System requirements +# SYSTEM REQUIREMENTS ##################### [system-requirements] @@ -92,8 +92,8 @@ default = { features = ['default', 'py-max'] } unit-tests = 'python -m pytest tests/unit/ --color=yes -v' integration-tests = 'python -m pytest tests/integration/ --color=yes -n auto -v' -notebook-tests = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=600 --color=yes -n auto -v' script-tests = 'python -m pytest tools/test_scripts.py --color=yes -n auto -v' +notebook-tests = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=600 --color=yes -n auto -v' test = { depends-on = ['unit-tests'] } @@ -103,12 +103,11 @@ test = { depends-on = ['unit-tests'] } pyproject-check = 'python -m validate_pyproject pyproject.toml' docstring-lint-check = 'pydoclint --quiet src/' -docstring-format-check = 'docformatter --check src/' notebook-lint-check = 'nbqa ruff docs/docs/tutorials/' py-lint-check = 'ruff check src/ tests/ docs/docs/tutorials/' -py-format-check = "ruff format --check src/ tests/ docs/docs/tutorials/" -nonpy-format-check = "npx prettier --list-different --config=prettierrc.toml --ignore-unknown ." -nonpy-format-check-modified = "python tools/nonpy_prettier_modified.py" +py-format-check = 'ruff format --check src/ tests/ docs/docs/tutorials/' +nonpy-format-check = 'npx prettier --list-different --config=prettierrc.toml --ignore-unknown .' +nonpy-format-check-modified = 'python tools/nonpy_prettier_modified.py' check = 'pre-commit run --hook-stage manual --all-files' @@ -116,22 +115,23 @@ check = 'pre-commit run --hook-stage manual --all-files' # 🛠️ Fixes ########## -docs-format-fix = 'docformatter --in-place src/ docs/docs/tutorials/' +docstring-transform = 'pixi run docstripy src/ -s=numpy -w' +docstring-format-fix = 'format-docstring src/' notebook-lint-fix = 'nbqa ruff --fix docs/docs/tutorials/' py-lint-fix = 'ruff check --fix src/ tests/ docs/docs/tutorials/' py-lint-fix-unsafe = 'ruff check --fix --unsafe-fixes src/ tests/ docs/docs/tutorials/' -py-format-fix = "ruff format src/ tests/ docs/docs/tutorials/" +py-format-fix = 'ruff format src/ tests/ docs/docs/tutorials/' nonpy-format-fix = 'npx prettier --write --list-different --config=prettierrc.toml --ignore-unknown .' -nonpy-format-fix-modified = "python tools/nonpy_prettier_modified.py --write" -success-message-fix = 'echo "✅ All auto-formatting steps completed successfully!"' +nonpy-format-fix-modified = 'python tools/nonpy_prettier_modified.py --write' +success-message = 'echo "✅ All auto-formatting steps completed successfully!"' fix = { depends-on = [ + 'docstring-format-fix', 'py-format-fix', - 'docs-format-fix', 'py-lint-fix', 'nonpy-format-fix', 'notebook-lint-fix', - 'success-message-fix', + 'success-message', ] } #################### @@ -179,11 +179,11 @@ notebook-prepare = { depends-on = [ ######################## docs-vars = "JUPYTER_PLATFORM_DIRS=1 PYTHONWARNINGS='ignore::RuntimeWarning'" -docs-pre = "pixi run docs-vars python -m mkdocs" -docs-serve = "pixi run docs-pre serve -f docs/mkdocs.yml" -docs-serve-dirty = "pixi run docs-serve --dirty" -docs-build = "pixi run docs-pre build -f docs/mkdocs.yml" -docs-build-local = "pixi run docs-build --no-directory-urls" +docs-pre = 'pixi run docs-vars python -m mkdocs' +docs-serve = 'pixi run docs-pre serve -f docs/mkdocs.yml' +docs-serve-dirty = 'pixi run docs-serve --dirty' +docs-build = 'pixi run docs-pre build -f docs/mkdocs.yml' +docs-build-local = 'pixi run docs-build --no-directory-urls' docs-deploy-pre = 'mike deploy -F docs/mkdocs.yml --push --branch gh-pages --update-aliases --alias-type redirect' docs-set-default-pre = 'mike set-default -F docs/mkdocs.yml --push --branch gh-pages' @@ -194,9 +194,9 @@ docs-update-assets = 'python tools/update_docs_assets.py' # 📦 Template Management Tasks ############################## -copier-copy = "copier copy gh:easyscience/templates . --data-file ../dynamics/.copier-answers.yml --data template_type=lib" -copier-recopy = "copier recopy --data-file ../dynamics/.copier-answers.yml --data template_type=lib" -copier-update = "copier update --data-file ../dynamics/.copier-answers.yml --data template_type=lib" +copier-copy = 'copier copy gh:easyscience/templates . --data-file ../dynamics/.copier-answers.yml --data template_type=lib' +copier-recopy = 'copier recopy --data-file ../dynamics/.copier-answers.yml --data template_type=lib' +copier-update = 'copier update --data-file ../dynamics/.copier-answers.yml --data template_type=lib' ##################### # 🪝 Pre-commit Hooks @@ -243,9 +243,9 @@ github-labels = 'python tools/update_github_labels.py' # ⚖️ SPDX License Headers ######################### -license-remove = 'python tools/remove_license_headers.py src/ tests/' -license-add = 'python tools/add_license_headers.py src/ tests/' -license-check = 'python tools/check_license_headers.py src/ tests/' +license-remove = 'python tools/license_headers.py remove src/ tests/ --exclude-from-pyproject-toml tool.ruff.exclude' +license-add = 'python tools/license_headers.py add src/ tests/ --exclude-from-pyproject-toml tool.ruff.exclude' +license-check = 'python tools/license_headers.py check src/ tests/ --exclude-from-pyproject-toml tool.ruff.exclude' #################################### # 🚀 Other Development & Build Tasks diff --git a/pyproject.toml b/pyproject.toml index bcacdf96..49f35979 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,7 +55,8 @@ dev = [ 'jupytext', # Jupyter notebook text format support 'jupyterquiz', # Quizzes in Jupyter notebooks 'pydoclint', # Docstring linter - 'docformatter', # Docstring formatter + 'format-docstring', # Docstring formatter + 'docstripy', # Convert docstrings to other formats 'interrogate', # Docstring coverage checker 'copier', # Template management 'mike', # MkDocs: Versioned documentation support @@ -177,14 +178,14 @@ testpaths = ['tests'] [tool.ruff] exclude = ['tmp'] indent-width = 4 -line-length = 99 +line-length = 99 # See also `max-line-length` in [tool.ruff.lint.pycodestyle] preview = true # Enable new rules that are not yet stable, like DOC # Formatting options for Ruff [tool.ruff.format] docstring-code-format = true # Whether to format code snippets in docstrings -docstring-code-line-length = 72 # Line length for code snippets in docstrings +docstring-code-line-length = 99 # Line length for code snippets in docstrings indent-style = 'space' # PEP 8 recommends using spaces over tabs line-ending = 'lf' # Line endings will be converted to \n quote-style = 'single' # But double quotes in docstrings (PEP 8, PEP 257) @@ -195,6 +196,7 @@ quote-style = 'single' # But double quotes in docstrings (PEP 8, PEP 25 select = [ # Various rules #'C90', # https://docs.astral.sh/ruff/rules/#mccabe-c90 + #'D', # https://docs.astral.sh/ruff/rules/#pydocstyle-d 'F', # https://docs.astral.sh/ruff/rules/#pyflakes-f #'FLY', # https://docs.astral.sh/ruff/rules/#flynt-fly #'FURB', # https://docs.astral.sh/ruff/rules/#refurb-furb @@ -254,15 +256,20 @@ select = [ # Ignore specific rules globally ignore = [ 'COM812', # https://docs.astral.sh/ruff/rules/missing-trailing-comma/ - # The following covered by [tool.pydoclint] section below - 'D', # https://docs.astral.sh/ruff/rules/#pydocstyle-d + # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc + # Disable, as [tool.format_docstring] split one-line docstrings into the canonical multi-line layout + 'D200', # https://docs.astral.sh/ruff/rules/unnecessary-multiline-docstring/ ] # Ignore specific rules in certain files or directories [tool.ruff.lint.per-file-ignores] +'*/__init__.py' = [ + 'F401', # re-exports are intentional in __init__.py +] 'tests/**' = [ 'ANN', # https://docs.astral.sh/ruff/rules/#flake8-annotations-ann + 'D', # https://docs.astral.sh/ruff/rules/#pydocstyle-d 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc 'INP001', # https://docs.astral.sh/ruff/rules/implicit-namespace-package/ 'S101', # https://docs.astral.sh/ruff/rules/assert/ @@ -290,18 +297,13 @@ max-complexity = 10 # PEP 8 line length guidance: # https://peps.python.org/pep-0008/#maximum-line-length # Use 99 characters as the project-wide maximum for regular code lines. -max-line-length = 99 -# allow longer lines so that parameter declarations such as -# `name (Type | Type | None):` remain on a single line. Splitting these -# lines can prevent tools such as MkDocs and IDEs from correctly -# parsing and rendering parameter documentation. -# The descriptive text itself is wrapped more strictly by -# `docformatter` (see the configuration in [tool.docformatter] below) -# whenever it is treated as normal paragraph text. -# The line length for code snippets in docstrings is also more strict, -# as defined in the [tool.ruff.format] section above. +# Use 99 characters for docstrings. +max-line-length = 99 # See also `line-length` in [tool.ruff] max-doc-length = 99 +[tool.ruff.lint.pydocstyle] +convention = 'numpy' + ############################# # Configuration for pydoclint ############################# @@ -317,20 +319,22 @@ max-doc-length = 99 # the parameter declarations in the code (in function's signature). [tool.pydoclint] -style = "google" +#exclude = '\.' # Temporarily disable pydoclint until we are ready +style = 'numpy' check-style-mismatch = true check-arg-defaults = true allow-init-docstring = true -################################ -# Configuration for docformatter -################################ +#################################### +# Configuration for format-docstring +#################################### -# 'docformatter' -- Code formatter for docstrings -# https://docformatter.readthedocs.io/en/latest/ +# 'format-docstring' -- Code formatter for docstrings +# https://github.com/jsh9/format-docstring -[tool.docformatter] -recursive = true -wrap-summaries = 72 -wrap-descriptions = 72 -close-quotes-on-newline = true +[tool.format_docstring] +#exclude = '\.' # Temporarily disable format-docstring until we are ready +docstring_style = 'numpy' +line_length = 99 +fix_rst_backticks = true +verbose = 'default' diff --git a/src/easydynamics/analysis/analysis.py b/src/easydynamics/analysis/analysis.py index 23364709..bb937e34 100644 --- a/src/easydynamics/analysis/analysis.py +++ b/src/easydynamics/analysis/analysis.py @@ -20,11 +20,10 @@ class Analysis(AnalysisBase): - """For analysing two-dimensional data, i.e. intensity as function of - energy and Q. + """ + For analysing two-dimensional data, i.e. intensity as function of energy and Q. - Supports independent fits of each Q value and simultaneous fits of - all Q. + Supports independent fits of each Q value and simultaneous fits of all Q. """ def __init__( @@ -36,24 +35,26 @@ def __init__( instrument_model: InstrumentModel | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: - """Initialize an Analysis object. - - Args: - display_name (str | None, default='MyAnalysis'): Display name of the analysis. - unique_name (str | None, default=None): Unique name of the analysis. If - None, a unique name is automatically generated. - experiment (Experiment | None, default=None): The Experiment associated - with this Analysis. If None, a default Experiment is - created. - sample_model (SampleModel | None, default=None): The SampleModel - associated with this Analysis. If None, a default - SampleModel is created. - instrument_model (InstrumentModel | None, default=None): The - InstrumentModel associated with this Analysis. If None, - a default InstrumentModel is created. - extra_parameters (Parameter | list[Parameter] | None, default=None): Extra - parameters to be included in the analysis for advanced - users. If None, no extra parameters are added. + """ + Initialize an Analysis object. + + Parameters + ---------- + display_name : str | None, default='MyAnalysis' + Display name of the analysis. + unique_name : str | None, default=None + Unique name of the analysis. If None, a unique name is automatically generated. + experiment : Experiment | None, default=None + The Experiment associated with this Analysis. If None, a default Experiment is created. + sample_model : SampleModel | None, default=None + The SampleModel associated with this Analysis. If None, a default SampleModel is + created. + instrument_model : InstrumentModel | None, default=None + The InstrumentModel associated with this Analysis. If None, a default InstrumentModel + is created. + extra_parameters : Parameter | list[Parameter] | None, default=None + Extra parameters to be included in the analysis for advanced users. If None, no extra + parameters are added. """ # Avoid triggering updates before the object is fully @@ -90,28 +91,33 @@ def __init__( @property def analysis_list(self) -> list[Analysis1d]: - """Get the Analysis1d objects associated with this Analysis. + """ + Get the Analysis1d objects associated with this Analysis. - Returns: - list[Analysis1d]: A list of Analysis1d objects, one for - each Q index. + Returns + ------- + list[Analysis1d] + A list of Analysis1d objects, one for each Q index. """ return self._analysis_list @analysis_list.setter def analysis_list(self, _value: list[Analysis1d]) -> None: - """analysis_list is read-only. + """ + Analysis_list is read-only. - To change the analysis list, modify the experiment, sample - model, or instrument model. + To change the analysis list, modify the experiment, sample model, or instrument model. - Args: - _value (list[Analysis1d]): The new list of Analysis1d objects. This - argument is ignored, as analysis_list is read-only. + Parameters + ---------- + _value : list[Analysis1d] + The new list of Analysis1d objects. This argument is ignored, as analysis_list is + read-only. - Raises: - AttributeError: Always raised, since analysis_list is - read-only. + Raises + ------ + AttributeError + Always raised, since analysis_list is read-only. """ raise AttributeError( @@ -128,21 +134,24 @@ def calculate( Q_index: int | None = None, energy: sc.Variable | None = None, ) -> list[np.ndarray] | np.ndarray: - """Calculate model data for a specific Q index. If Q_index is - None, calculate for all Q indices and return a list of arrays. - - Args: - Q_index (int | None, default=None): Index of the Q value to calculate - for. If None, calculate for all Q values. - energy (sc.Variable | None, default=None): The energy values to use for - calculating the model. If None, uses the energy from the - experiment. - - Returns: - list[np.ndarray] | np.ndarray: If Q_index is None, returns - a list of numpy arrays, one for each Q index. - If Q_index is an integer, returns a single numpy array - for that Q index. + """ + Calculate model data for a specific Q index. + + If Q_index is None, calculate for all Q indices and return a list of arrays. + + Parameters + ---------- + Q_index : int | None, default=None + Index of the Q value to calculate for. If None, calculate for all Q values. + energy : sc.Variable | None, default=None + The energy values to use for calculating the model. If None, uses the energy from the + experiment. + + Returns + ------- + list[np.ndarray] | np.ndarray + If Q_index is None, returns a list of numpy arrays, one for each Q index. If Q_index is + an integer, returns a single numpy array for that Q index. """ if energy is None: energy = self.energy @@ -158,25 +167,29 @@ def fit( fit_method: str = 'independent', Q_index: int | None = None, ) -> FitResults | list[FitResults]: - """Fit the model to the experimental data. - - Args: - fit_method (str, default="independent"): Method to use for fitting. Options are - "independent" (fit each Q index independently, one after - the other) or "simultaneous" (fit all Q indices - simultaneously). Default is "independent". - Q_index (int | None, default=None): If fit_method is "independent", - specify which Q index to fit. If None, fit all Q indices - independently. Ignored if fit_method is "simultaneous". - Default is None. - - Returns: - FitResults | list[FitResults]: a list of FitResults if fitting independently, - or a single FitResults object if fitting simultaneously. - - Raises: - ValueError: If fit_method is not "independent" or - "simultaneous" or if there are no Q values available for fitting. + """ + Fit the model to the experimental data. + + Parameters + ---------- + fit_method : str, default='independent' + Method to use for fitting. Options are "independent" (fit each Q index independently, + one after the other) or "simultaneous" (fit all Q indices simultaneously). + Q_index : int | None, default=None + If fit_method is "independent", specify which Q index to fit. If None, fit all Q + indices independently. Ignored if fit_method is "simultaneous". + + Raises + ------ + ValueError + If fit_method is not "independent" or "simultaneous" or if there are no Q values + available for fitting. + + Returns + ------- + FitResults | list[FitResults] + A list of FitResults if fitting independently, or a single FitResults object if fitting + simultaneously. """ if self.Q is None: @@ -202,36 +215,42 @@ def plot_data_and_model( energy: sc.Variable | None = None, **kwargs: dict[str, Any], ) -> InteractiveFigure: - """Plot the experimental data and the model prediction. + """ + Plot the experimental data and the model prediction. + Optionally also plot the individual components of the model. Uses Plopp for plotting: https://scipp.github.io/plopp/ - Args: - Q_index (int | None, default=None): Index of the Q value to plot. If - None, plot all Q values. Default is None. - plot_components (bool, default=True): Whether to plot the individual - components. Default is True. - add_background (bool, default=True): Whether to add background components - to the sample model components when plotting. Default is - True. - energy (sc.Variable | None, default=None): The energy values to use for - calculating the model. If None, uses the energy from the - experiment. - **kwargs (dict[str, Any]): Additional keyword arguments passed to plopp - for customizing the plot. - - Raises: - ValueError: If Q_index is out of bounds, or if there is no - data to plot, or if there are no Q values available for - plotting. - RuntimeError: If not in a Jupyter notebook environment. - TypeError: If plot_components or add_background is not True - or False. - - Returns: - InteractiveFigure: A Plopp InteractiveFigure containing the - plot of the data and model. + Parameters + ---------- + Q_index : int | None, default=None + Index of the Q value to plot. If None, plot all Q values. + plot_components : bool, default=True + Whether to plot the individual components. + add_background : bool, default=True + Whether to add background components to the sample model components when plotting. + Default is True. + energy : sc.Variable | None, default=None + The energy values to use for calculating the model. If None, uses the energy from the + experiment. + **kwargs : dict[str, Any] + Additional keyword arguments passed to plopp for customizing the plot. + + Raises + ------ + ValueError + If Q_index is out of bounds, or if there is no data to plot, or if there are no Q + values available for plotting. + RuntimeError + If not in a Jupyter notebook environment. + TypeError + If plot_components or add_background is not True or False. + + Returns + ------- + InteractiveFigure + A Plopp InteractiveFigure containing the plot of the data and model. """ if Q_index is not None: @@ -300,19 +319,21 @@ def plot_data_and_model( return fig def parameters_to_dataset(self) -> sc.Dataset: - """Creates a scipp dataset with copies of the Parameters in the - model. + """ + Creates a scipp dataset with copies of the Parameters in the model. Ensures unit consistency across Q. - Returns: - sc.Dataset: A dataset where each entry is a parameter, with - dimensions "Q" and values corresponding to the parameter - values. + Raises + ------ + UnitError + If there are inconsistent units for the same parameter across different Q values. - Raises: - UnitError: If there are inconsistent units for the same - parameter across different Q values. + Returns + ------- + sc.Dataset + A dataset where each entry is a parameter, with dimensions "Q" and values corresponding + to the parameter values. """ ds = sc.Dataset(coords={'Q': self.Q}) @@ -370,22 +391,28 @@ def plot_parameters( names: str | list[str] | None = None, **kwargs: dict[str, Any], ) -> InteractiveFigure: - """Plot fitted parameters as a function of Q. - - Args: - names (str | list[str] | None, default=None): Name(s) of the parameter(s) - to plot. If None, plots all parameters. - **kwargs (dict[str, Any]): Additional keyword arguments passed to - plopp.slicer for customizing the plot (e.g., title, - linestyle, marker, color). - - Returns: - InteractiveFigure: A Plopp InteractiveFigure containing the - plot of the parameters. - - Raises: - TypeError: If names is not a string, list of strings, or None. - ValueError: If any of the specified parameter names are not found in the dataset. + """ + Plot fitted parameters as a function of Q. + + Parameters + ---------- + names : str | list[str] | None, default=None + Name(s) of the parameter(s) to plot. If None, plots all parameters. + **kwargs : dict[str, Any] + Additional keyword arguments passed to plopp.slicer for customizing the plot (e.g., + title, linestyle, marker, color). + + Raises + ------ + TypeError + If names is not a string, list of strings, or None. + ValueError + If any of the specified parameter names are not found in the dataset. + + Returns + ------- + InteractiveFigure + A Plopp InteractiveFigure containing the plot of the parameters. """ ds = self.parameters_to_dataset() @@ -420,13 +447,15 @@ def plot_parameters( ) def fix_energy_offset(self, Q_index: int | None = None) -> None: - """Fix the energy offset parameter(s) for a specific Q index, or - for all Q indices if Q_index is None. - - Args: - Q_index (int | None, default=None): Index of the Q value to - fix the energy offset for. If None, fixes the energy - offset for all Q values. Default is None. + """ + Fix the energy offset parameter(s) for a specific Q index, or for all Q indices if Q_index + is None. + + Parameters + ---------- + Q_index : int | None, default=None + Index of the Q value to fix the energy offset for. If None, fixes the energy offset for + all Q values. """ if Q_index is not None: Q_index = self._verify_Q_index(Q_index) @@ -436,13 +465,15 @@ def fix_energy_offset(self, Q_index: int | None = None) -> None: analysis.fix_energy_offset() def free_energy_offset(self, Q_index: int | None = None) -> None: - """Free the energy offset parameter(s) for a specific Q index, - or for all Q indices if Q_index is None. - - Args: - Q_index (int | None, default=None): Index of the Q value to - free the energy offset for. If None, frees the energy - offset for all Q values. Default is None. + """ + Free the energy offset parameter(s) for a specific Q index, or for all Q indices if Q_index + is None. + + Parameters + ---------- + Q_index : int | None, default=None + Index of the Q value to free the energy offset for. If None, frees the energy offset + for all Q values. """ if Q_index is not None: Q_index = self._verify_Q_index(Q_index) @@ -456,8 +487,8 @@ def free_energy_offset(self, Q_index: int | None = None) -> None: ############# def _on_experiment_changed(self) -> None: - """Update the Q values in the sample and instrument models when - the experiment changes. + """ + Update the Q values in the sample and instrument models when the experiment changes. Also update all the Analysis1d objects with the new experiment. """ @@ -467,11 +498,10 @@ def _on_experiment_changed(self) -> None: analysis.experiment = self.experiment def _on_sample_model_changed(self) -> None: - """Update the Q values in the sample model when the sample model - changes. + """ + Update the Q values in the sample model when the sample model changes. - Also update all the Analysis1d objects with the new sample - model. + Also update all the Analysis1d objects with the new sample model. """ if self._call_updaters: super()._on_sample_model_changed() @@ -479,11 +509,10 @@ def _on_sample_model_changed(self) -> None: analysis.sample_model = self.sample_model def _on_instrument_model_changed(self) -> None: - """Update the Q values in the instrument model when the - instrument model changes. + """ + Update the Q values in the instrument model when the instrument model changes. - Also update all the Analysis1d objects with the new instrument - model. + Also update all the Analysis1d objects with the new instrument model. """ if self._call_updaters: super()._on_instrument_model_changed() @@ -495,14 +524,18 @@ def _on_instrument_model_changed(self) -> None: ############# def _fit_single_Q(self, Q_index: int) -> FitResults: - """Fit data for a single Q index. + """ + Fit data for a single Q index. - Args: - Q_index (int): Index of the Q value to fit. + Parameters + ---------- + Q_index : int + Index of the Q value to fit. - Returns: - FitResults: The results of the fit for the specified - Q index. + Returns + ------- + FitResults + The results of the fit for the specified Q index. """ Q_index = self._verify_Q_index(Q_index) @@ -510,20 +543,24 @@ def _fit_single_Q(self, Q_index: int) -> FitResults: return self.analysis_list[Q_index].fit() def _fit_all_Q_independently(self) -> list[FitResults]: - """Fit data for all Q indices independently. + """ + Fit data for all Q indices independently. - Returns: - list[FitResults]: A list of FitResults, one for each Q - index. + Returns + ------- + list[FitResults] + A list of FitResults, one for each Q index. """ return [analysis.fit() for analysis in self.analysis_list] def _fit_all_Q_simultaneously(self) -> FitResults: - """Fit data for all Q indices simultaneously. + """ + Fit data for all Q indices simultaneously. - Returns: - FitResults: The results of the simultaneous fit across all - Q indices. + Returns + ------- + FitResults + The results of the simultaneous fit across all Q indices. """ xs = [] @@ -551,26 +588,30 @@ def _fit_all_Q_simultaneously(self) -> FitResults: ) def get_fit_functions(self) -> list[callable]: - """Get fit functions for all Q indices, which can be used for - simultaneous fitting. + """ + Get fit functions for all Q indices, which can be used for simultaneous fitting. - Returns: - list[callable]: A list of fit functions, one for each - Q index. + Returns + ------- + list[callable] + A list of fit functions, one for each Q index. """ return [analysis.as_fit_function() for analysis in self.analysis_list] def _create_model_array(self, energy: sc.Variable | None = None) -> sc.DataArray: - """Create a scipp array for the model. - - Args: - energy (sc.Variable | None, default=None): The energy values to use for - calculating the model. If None, uses the energy from the - experiment. - - Returns: - sc.DataArray: A DataArray containing the model values, with - dimensions "Q" and "energy". + """ + Create a scipp array for the model. + + Parameters + ---------- + energy : sc.Variable | None, default=None + The energy values to use for calculating the model. If None, uses the energy from the + experiment. + + Returns + ------- + sc.DataArray + A DataArray containing the model values, with dimensions "Q" and "energy". """ if energy is None: energy = self.energy @@ -585,23 +626,27 @@ def _create_components_dataset( add_background: bool = True, energy: sc.Variable | None = None, ) -> sc.Dataset: - """Create a scipp dataset containing the individual components - of the model for plotting. - - Args: - add_background (bool, default=True): Whether to add background components - to the sample model components when creating the - dataset. - energy (sc.Variable | None, default=None): The energy values to use for - calculating the components. If None, uses the energy from - the experiment. - - Raises: - TypeError: If add_background is not True or False. - - Returns: - sc.Dataset: A scipp Dataset where each entry is a component - of the model, with dimensions "Q". + """ + Create a scipp dataset containing the individual components of the model for plotting. + + Parameters + ---------- + add_background : bool, default=True + Whether to add background components to the sample model components when creating the + dataset. + energy : sc.Variable | None, default=None + The energy values to use for calculating the components. If None, uses the energy from + the experiment. + + Raises + ------ + TypeError + If add_background is not True or False. + + Returns + ------- + sc.Dataset + A scipp Dataset where each entry is a component of the model, with dimensions "Q". """ if not isinstance(add_background, bool): raise TypeError('add_background must be True or False.') diff --git a/src/easydynamics/analysis/analysis1d.py b/src/easydynamics/analysis/analysis1d.py index 81f98f55..36cc7c8c 100644 --- a/src/easydynamics/analysis/analysis1d.py +++ b/src/easydynamics/analysis/analysis1d.py @@ -21,11 +21,10 @@ class Analysis1d(AnalysisBase): - """For analysing one-dimensional data, i.e. intensity as function of - energy for a single Q index. + """ + For analysing one-dimensional data, i.e. intensity as function of energy for a single Q index. - Is used primarily in the Analysis class, but can also be used on its - own for simpler analyses. + Is used primarily in the Analysis class, but can also be used on its own for simpler analyses. """ def __init__( @@ -38,27 +37,31 @@ def __init__( Q_index: int | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: - """Initialize a Analysis1d. - - Args: - display_name (str | None, default='MyAnalysis'): Display name of the analysis. - unique_name (str | None, default=None): Unique name of the analysis. If - None, a unique name is automatically generated. - experiment (Experiment | None, default=None): The Experiment associated - with this Analysis. If None, a default Experiment is - created. - sample_model (SampleModel | None, default=None): The SampleModel - associated with this Analysis. If None, a default - SampleModel is created. - instrument_model (InstrumentModel | None, default=None): The - InstrumentModel associated with this Analysis. If None, - a default InstrumentModel is created. - Q_index (int | None, default=None): The Q index to analyze. If None, the - analysis will not be able to calculate or fit until a - Q index is set. - extra_parameters (Parameter | list[Parameter] | None, default=None): Extra - parameters to be included in the analysis for advanced - users. If None, no extra parameters are added. + """ + Initialize a Analysis1d. + + Parameters + ---------- + display_name : str | None, default='MyAnalysis' + Display name of the analysis. + unique_name : str | None, default=None + Unique name of the analysis. If None, a unique name is automatically generated. By + default, None. + experiment : Experiment | None, default=None + The Experiment associated with this Analysis. If None, a default Experiment is created. + + sample_model : SampleModel | None, default=None + The SampleModel associated with this Analysis. If None, a default SampleModel is + created. + instrument_model : InstrumentModel | None, default=None + The InstrumentModel associated with this Analysis. If None, a default InstrumentModel + is created. + Q_index : int | None, default=None + The Q index to analyze. If None, the analysis will not be able to calculate or fit + until a Q index is set. + extra_parameters : Parameter | list[Parameter] | None, default=None + Extra parameters to be included in the analysis for advanced users. If None, no extra + parameters are added. """ super().__init__( display_name=display_name, @@ -89,20 +92,26 @@ def __init__( @property def Q_index(self) -> int | None: - """Get the Q index associated with this Analysis. + """ + Get the Q index associated with this Analysis. - Returns: - int | None: The Q index associated with this Analysis. + Returns + ------- + int | None + The Q index associated with this Analysis. """ return self._Q_index @Q_index.setter def Q_index(self, value: int | None) -> None: - """Set the Q index for single Q analysis. + """ + Set the Q index for single Q analysis. - Args: - value (int | None): The Q index. + Parameters + ---------- + value : int | None + The Q index. """ self._Q_index = self._verify_Q_index(value) @@ -113,16 +122,21 @@ def Q_index(self, value: int | None) -> None: ############# def calculate(self, energy: sc.Variable | None = None) -> np.ndarray: - """Calculate the model prediction for the chosen Q index. Makes - sure the convolver is up to date before calculating. + """ + Calculate the model prediction for the chosen Q index. + + Makes sure the convolver is up to date before calculating. - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - calculation. If None, the energy grid from the experiment - is used. + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for calculation. If None, the energy grid from the + experiment is used. - Returns: - np.ndarray: The calculated model prediction. + Returns + ------- + np.ndarray + The calculated model prediction. """ energy = self._verify_energy(energy) self._convolver = self._create_convolver(energy=energy) @@ -130,16 +144,21 @@ def calculate(self, energy: sc.Variable | None = None) -> np.ndarray: return self._calculate(energy=energy) def _calculate(self, energy: sc.Variable | None = None) -> np.ndarray: - """Calculate the model prediction for the chosen Q index. Does - not check if the convolver is up to date. + """ + Calculate the model prediction for the chosen Q index. + + Does not check if the convolver is up to date. - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - calculation. If None, the energy grid from the experiment - is used. + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for calculation. If None, the energy grid from the + experiment is used. - Returns: - np.ndarray: The calculated model prediction. + Returns + ------- + np.ndarray + The calculated model prediction. """ sample_intensity = self._evaluate_sample(energy=energy) @@ -149,19 +168,21 @@ def _calculate(self, energy: sc.Variable | None = None) -> np.ndarray: return sample_intensity + background_intensity def fit(self) -> FitResults: - """Fit the model to the experimental data for the chosen Q - index. + """ + Fit the model to the experimental data for the chosen Q index. - The energy grid is fixed for the duration of the fit. - Convolution objects are created once and reused during - parameter optimization for performance reasons. + The energy grid is fixed for the duration of the fit. Convolution objects are created once + and reused during parameter optimization for performance reasons. - Returns: - FitResults: The result of the fit. + Raises + ------ + ValueError + If no experiment is associated with this Analysis. - Raises: - ValueError: If no experiment is associated with this - Analysis. + Returns + ------- + FitResults + The result of the fit. """ if self._experiment is None: raise ValueError('No experiment is associated with this Analysis.') @@ -188,37 +209,43 @@ def as_fit_function( _x: np.ndarray | sc.Variable | None = None, **kwargs: dict[str, Any], # noqa: ARG002 ) -> callable: - """Return self._calculate as a fit function. - - The EasyScience fitter requires x as input, but - self._calculate() already uses the correct energy from the - experiment. So we ignore the x input and just return the - calculated model. - - Args: - _x (np.ndarray | sc.Variable | None, default=None): Ignored. - The energy grid is taken from the experiment. - **kwargs (dict[str, Any]): Ignored. Included for compatibility with the - EasyScience fitter. - - Returns: - callable: A function that can be used as a fit function in the - EasyScience fitter, which returns the calculated model. + """ + Return self._calculate as a fit function. + + The EasyScience fitter requires x as input, but self._calculate() already uses the correct + energy from the experiment. So we ignore the x input and just return the calculated model. + + Parameters + ---------- + _x : np.ndarray | sc.Variable | None, default=None + Ignored. The energy grid is taken from the experiment. + **kwargs : dict[str, Any] + Ignored. Included for compatibility with the EasyScience fitter. + + Returns + ------- + callable + A function that can be used as a fit function in the EasyScience fitter, which returns + the calculated model. """ def fit_function( _x: np.ndarray | sc.Variable | None = None, **kwargs: dict[str, Any], # noqa: ARG001 ) -> np.ndarray: + """Fit function.""" return self._calculate() return fit_function def get_all_variables(self) -> list[DescriptorNumber]: - """Get all variables used in the analysis. + """ + Get all variables used in the analysis. - Returns: - list[DescriptorNumber]: A list of all variables. + Returns + ------- + list[DescriptorNumber] + A list of all variables. """ variables = self.sample_model.get_all_variables(Q_index=self.Q_index) @@ -236,28 +263,34 @@ def plot_data_and_model( energy: sc.Variable | None = None, **kwargs: dict[str, Any], ) -> InteractiveFigure: - """Plot the experimental data and the model prediction for the - chosen Q index. Optionally also plot the individual components - of the model. + """ + Plot the experimental data and the model prediction for the chosen Q index. Optionally also + plot the individual components of the model. Uses Plopp for plotting: https://scipp.github.io/plopp/ - Args: - plot_components (bool, default=True): Whether to plot the individual - components of the model. - add_background (bool, default=True): Whether to add the background to the - model prediction when plotting individual components. - energy (sc.Variable | None, default=None): Optional energy grid to use for - plotting. If None, the energy grid from the experiment - is used. - **kwargs (dict[str, Any]): Keyword arguments to pass to the plotting - function. - - Returns: - InteractiveFigure: A plot of the data and model. - - Raises: - ValueError: If no data is available to plot. + Parameters + ---------- + plot_components : bool, default=True + Whether to plot the individual components of the model. + add_background : bool, default=True + Whether to add the background to the model prediction when plotting individual + components. + energy : sc.Variable | None, default=None + Optional energy grid to use for plotting. If None, the energy grid from the experiment + is used. + **kwargs : dict[str, Any] + Keyword arguments to pass to the plotting function. + + Raises + ------ + ValueError + If no data is available to plot. + + Returns + ------- + InteractiveFigure + A plot of the data and model. """ import plopp as pp @@ -317,42 +350,54 @@ def free_energy_offset(self) -> None: ############# def _require_Q_index(self) -> int: - """Get the Q index, ensuring it is set. Raises a ValueError if - the Q index is not set. + """ + Get the Q index, ensuring it is set. + + Raises a ValueError if the Q index is not set. - Returns: - int: The Q index. + Raises + ------ + ValueError + If the Q index is not set. - Raises: - ValueError: If the Q index is not set. + Returns + ------- + int + The Q index. """ if self._Q_index is None: raise ValueError('Q_index must be set.') return self._Q_index def _on_Q_index_changed(self) -> None: - """Handle changes to the Q index. + """ + Handle changes to the Q index. - This method is called whenever the Q index is changed. It - updates the Convolution object for the new Q index and the - masked energy from the experiment for the new Q index. + This method is called whenever the Q index is changed. It updates the Convolution object + for the new Q index and the masked energy from the experiment for the new Q index. """ masked_energy = self.experiment.get_masked_energy(Q_index=self._Q_index) self._masked_energy = masked_energy self._convolver = self._create_convolver() def _verify_energy(self, energy: sc.Variable | None) -> sc.Variable | None: - """Verify that the provided energy is the correct type. - - Args: - energy (sc.Variable | None): The energy to verify. - - Returns: - sc.Variable | None: The verified energy, or None if no - energy is provided. - - Raises: - TypeError: If energy is not a sc.Variable or None. + """ + Verify that the provided energy is the correct type. + + Parameters + ---------- + energy : sc.Variable | None + The energy to verify. + + Raises + ------ + TypeError + If energy is not a sc.Variable or None. + + Returns + ------- + sc.Variable | None + The verified energy, or None if no energy is provided. """ if energy is not None and not isinstance(energy, sc.Variable): @@ -364,18 +409,25 @@ def _calculate_energy_with_offset( energy: sc.Variable, energy_offset: Parameter, ) -> sc.Variable: - """Calculate the energy grid with the energy offset applied. - - Args: - energy (sc.Variable): The energy grid to apply the offset to. - energy_offset (Parameter): The energy offset to apply. - - Returns: - sc.Variable: The energy grid with the offset applied. - - Raises: - sc.UnitError: If the energy and energy offset have - incompatible units. + """ + Calculate the energy grid with the energy offset applied. + + Parameters + ---------- + energy : sc.Variable + The energy grid to apply the offset to. + energy_offset : Parameter + The energy offset to apply. + + Raises + ------ + sc.UnitError + If the energy and energy offset have incompatible units. + + Returns + ------- + sc.Variable + The energy grid with the offset applied. """ if energy.unit != energy_offset.unit: @@ -402,33 +454,33 @@ def _evaluate_components( convolve: bool = True, energy: sc.Variable | None = None, ) -> np.ndarray: - """Calculate the contribution of a set of components, optionally - convolving with the resolution. - - If convolve is True and a - Convolution object is provided (for full model evaluation), we - use it to perform the convolution of the components with the + """ + Calculate the contribution of a set of components, optionally convolving with the resolution. - If convolve is True but no Convolution object is - provided, create a new Convolution object for the given - components (for individual components). - If convolve is False, evaluate the components directly without - convolution (for background). - - Args: - components (ComponentCollection | ModelComponent): The - components to evaluate. - convolver (Convolution | None, default=None): An optional Convolution - object to use for convolution. If None, a new - Convolution object will be created if convolve is True. - convolve (bool, default=True): Whether to perform convolution with the - resolution. Default is True. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - np.ndarray: The evaluated contribution of the components. + + If convolve is True and a Convolution object is provided (for full model evaluation), we + use it to perform the convolution of the components with the resolution. If convolve is + True but no Convolution object is provided, create a new Convolution object for the given + components (for individual components). If convolve is False, evaluate the components + directly without convolution (for background). + + Parameters + ---------- + components : ComponentCollection | ModelComponent + The components to evaluate. + convolver : Convolution | None, default=None + An optional Convolution object to use for convolution. If None, a new Convolution + object will be created if convolve is True. + convolve : bool, default=True + Whether to perform convolution with the resolution. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + np.ndarray + The evaluated contribution of the components. """ Q_index = self._require_Q_index() @@ -477,17 +529,21 @@ def _evaluate_sample( self, energy: sc.Variable | None = None, ) -> np.ndarray: - """Evaluate the sample contribution for a given Q index. + """ + Evaluate the sample contribution for a given Q index. Assumes that self._convolver is up to date. - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. - Returns: - np.ndarray: The evaluated sample contribution. + Returns + ------- + np.ndarray + The evaluated sample contribution. """ Q_index = self._require_Q_index() components = self.sample_model.get_component_collection(Q_index=Q_index) @@ -503,17 +559,21 @@ def _evaluate_sample_component( component: ModelComponent, energy: sc.Variable | None = None, ) -> np.ndarray: - """Evaluate a single sample component for the chosen Q index. - - Args: - component (ModelComponent): The sample component to - evaluate. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - np.ndarray: The evaluated sample component contribution. + """ + Evaluate a single sample component for the chosen Q index. + + Parameters + ---------- + component : ModelComponent + The sample component to evaluate. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + np.ndarray + The evaluated sample component contribution. """ return self._evaluate_components( components=component, @@ -523,15 +583,19 @@ def _evaluate_sample_component( ) def _evaluate_background(self, energy: sc.Variable | None = None) -> np.ndarray: - """Evaluate the background contribution for the chosen Q index. - - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - np.ndarray: The evaluated background contribution. + """ + Evaluate the background contribution for the chosen Q index. + + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + np.ndarray + The evaluated background contribution. """ Q_index = self._require_Q_index() background_components = self.instrument_model.background_model.get_component_collection( @@ -549,18 +613,21 @@ def _evaluate_background_component( component: ModelComponent, energy: sc.Variable | None = None, ) -> np.ndarray: - """Evaluate a single background component for the chosen Q - index. - - Args: - component (ModelComponent): The background component to - evaluate. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - np.ndarray: The evaluated background component contribution. + """ + Evaluate a single background component for the chosen Q index. + + Parameters + ---------- + component : ModelComponent + The background component to evaluate. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + np.ndarray + The evaluated background component contribution. """ return self._evaluate_components( @@ -574,18 +641,20 @@ def _create_convolver( self, energy: sc.Variable | None = None, ) -> Convolution | None: - """Initialize and return a Convolution object for the chosen Q - index. If the necessary components for convolution are not - available, return None. - - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - convolution. If None, the energy grid from the experiment - is used. - - Returns: - Convolution | None: The initialized Convolution object or - None if not available. + """ + Initialize and return a Convolution object for the chosen Q index. If the necessary + components for convolution are not available, return None. + + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for convolution. If None, the energy grid from the + experiment is used. + + Returns + ------- + Convolution | None + The initialized Convolution object or None if not available. """ Q_index = self._require_Q_index() @@ -621,19 +690,25 @@ def _create_component_scipp_array( background: np.ndarray | None = None, energy: sc.Variable | None = None, ) -> sc.DataArray: - """Create a scipp DataArray for a single component. Adds the - background if it is not None. - - Args: - component (ModelComponent): The component to evaluate. - background (np.ndarray | None, default=None): Optional background to add - to the component. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - sc.DataArray: The model calculation of the component. + """ + Create a scipp DataArray for a single component. + + Adds the background if it is not None. + + Parameters + ---------- + component : ModelComponent + The component to evaluate. + background : np.ndarray | None, default=None + Optional background to add to the component. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + sc.DataArray + The model calculation of the component. """ values = self._evaluate_sample_component(component=component, energy=energy) @@ -646,16 +721,21 @@ def _create_background_component_scipp_array( component: ModelComponent, energy: sc.Variable | None = None, ) -> sc.DataArray: - """Create a scipp DataArray for a single background component. - - Args: - component (ModelComponent): The component to evaluate. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - sc.DataArray: The model calculation of the component. + """ + Create a scipp DataArray for a single background component. + + Parameters + ---------- + component : ModelComponent + The component to evaluate. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + sc.DataArray + The model calculation of the component. """ values = self._evaluate_background_component( @@ -665,17 +745,19 @@ def _create_background_component_scipp_array( return self._to_scipp_array(values=values, energy=energy) def _create_sample_scipp_array(self, energy: sc.Variable | None = None) -> sc.DataArray: - """Create a scipp DataArray for the full sample model including - background. - - Args: - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - sc.DataArray: The model calculation of the full sample - model. + """ + Create a scipp DataArray for the full sample model including background. + + Parameters + ---------- + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + sc.DataArray + The model calculation of the full sample model. """ values = self.calculate(energy=energy) return self._to_scipp_array(values=values, energy=energy) @@ -685,18 +767,21 @@ def _create_components_dataset_single_Q( add_background: bool = True, energy: sc.Variable | None = None, ) -> dict[str, sc.DataArray]: - """Create sc.DataArrays for all sample and background - components. - - Args: - add_background (bool, default=True): Whether to add background components. - energy (sc.Variable | None, default=None): Optional energy grid to use for - evaluation. If None, the energy grid from the experiment - is used. - - Returns: - dict[str, sc.DataArray]: A dictionary of component names to - their corresponding sc.DataArrays. + """ + Create sc.DataArrays for all sample and background components. + + Parameters + ---------- + add_background : bool, default=True + Whether to add background components. + energy : sc.Variable | None, default=None + Optional energy grid to use for evaluation. If None, the energy grid from the + experiment is used. + + Returns + ------- + dict[str, sc.DataArray] + A dictionary of component names to their corresponding sc.DataArrays. """ scipp_arrays = {} sample_components = self.sample_model.get_component_collection( @@ -727,17 +812,22 @@ def _to_scipp_array( values: np.ndarray, energy: sc.Variable | None = None, ) -> sc.DataArray: - """Convert a numpy array of values to a sc.DataArray with the - correct coordinates for energy and Q. - - Args: - values (np.ndarray): The values to convert. - energy (sc.Variable | None, default=None): Optional energy grid to use for the - energy coordinate. If None, the energy grid from the - experiment is used. - - Returns: - sc.DataArray: The converted sc.DataArray. + """ + Convert a numpy array of values to a sc.DataArray with the correct coordinates for energy + and Q. + + Parameters + ---------- + values : np.ndarray + The values to convert. + energy : sc.Variable | None, default=None + Optional energy grid to use for the energy coordinate. If None, the energy grid from + the experiment is used. + + Returns + ------- + sc.DataArray + The converted sc.DataArray. """ if energy is None: diff --git a/src/easydynamics/analysis/analysis_base.py b/src/easydynamics/analysis/analysis_base.py index 61247e0e..d249a052 100644 --- a/src/easydynamics/analysis/analysis_base.py +++ b/src/easydynamics/analysis/analysis_base.py @@ -12,14 +12,14 @@ class AnalysisBase(EasyScienceModelBase): - """Base class for analysis in EasyDynamics. This class is not meant - to be used directly. - - An Analysis consists of an Experiment, a SampleModel, and an - InstrumentModel. The Experiment contains the data to be fitted, the - SampleModel contains the model for the sample, and the - InstrumentModel contains the model for the instrument, including - background and resolution + """ + Base class for analysis in EasyDynamics. + + This class is not meant to be used directly. + + An Analysis consists of an Experiment, a SampleModel, and an InstrumentModel. The Experiment + contains the data to be fitted, the SampleModel contains the model for the sample, and the + InstrumentModel contains the model for the instrument, including background and resolution """ def __init__( @@ -31,31 +31,35 @@ def __init__( instrument_model: InstrumentModel | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: - """Initialize the AnalysisBase. - - Args: - display_name (str | None, default='MyAnalysis'): Display name of the analysis. - unique_name (str | None, default=None): Unique name of the analysis. If - None, a unique name is automatically generated. - experiment (Experiment | None, default=None): The Experiment associated - with this Analysis. If None, a default Experiment is - created. - sample_model (SampleModel | None, default=None): The SampleModel - associated with this Analysis. If None, a default - SampleModel is created. - instrument_model (InstrumentModel | None, default=None): The - InstrumentModel associated with this Analysis. If None, - a default InstrumentModel is created. - extra_parameters (Parameter | list[Parameter] | None, default=None): Extra - parameters to be included in the analysis for advanced - users. If None, no extra parameters are added. - - Raises: - TypeError: If experiment is not an Experiment or None or - if sample_model is not a SampleModel or None or if - instrument_model is not an InstrumentModel or None or if - extra_parameters is not a Parameter, a list of Parameters, - or None. + """ + Initialize the AnalysisBase. + + Parameters + ---------- + display_name : str | None, default='MyAnalysis' + Display name of the analysis. + unique_name : str | None, default=None + Unique name of the analysis. If None, a unique name is automatically generated. By + default, None. + experiment : Experiment | None, default=None + The Experiment associated with this Analysis. If None, a default Experiment is created. + + sample_model : SampleModel | None, default=None + The SampleModel associated with this Analysis. If None, a default SampleModel is + created. + instrument_model : InstrumentModel | None, default=None + The InstrumentModel associated with this Analysis. If None, a default InstrumentModel + is created. + extra_parameters : Parameter | list[Parameter] | None, default=None + Extra parameters to be included in the analysis for advanced users. If None, no extra + parameters are added. + + Raises + ------ + TypeError + If experiment is not an Experiment or None or if sample_model is not a SampleModel or + None or if instrument_model is not an InstrumentModel or None or if extra_parameters is + not a Parameter, a list of Parameters, or None. """ super().__init__(display_name=display_name, unique_name=unique_name) @@ -101,23 +105,31 @@ def __init__( @property def experiment(self) -> Experiment: - """Get the Experiment associated with this Analysis. + """ + Get the Experiment associated with this Analysis. - Returns: - Experiment: The Experiment associated with this Analysis. + Returns + ------- + Experiment + The Experiment associated with this Analysis. """ return self._experiment @experiment.setter def experiment(self, value: Experiment) -> None: - """Set the Experiment for this Analysis. + """ + Set the Experiment for this Analysis. - Args: - value (Experiment): The Experiment to set for this Analysis. + Parameters + ---------- + value : Experiment + The Experiment to set for this Analysis. - Raises: - TypeError: if value is not an Experiment. + Raises + ------ + TypeError + If value is not an Experiment. """ if not isinstance(value, Experiment): @@ -127,23 +139,31 @@ def experiment(self, value: Experiment) -> None: @property def sample_model(self) -> SampleModel: - """Get the SampleModel associated with this Analysis. + """ + Get the SampleModel associated with this Analysis. - Returns: - SampleModel: The SampleModel associated with this Analysis. + Returns + ------- + SampleModel + The SampleModel associated with this Analysis. """ return self._sample_model @sample_model.setter def sample_model(self, value: SampleModel) -> None: - """Set the SampleModel for this Analysis. + """ + Set the SampleModel for this Analysis. - Args: - value (SampleModel): The SampleModel to set for this Analysis. + Parameters + ---------- + value : SampleModel + The SampleModel to set for this Analysis. - Raises: - TypeError: if value is not a SampleModel. + Raises + ------ + TypeError + If value is not a SampleModel. """ if not isinstance(value, SampleModel): raise TypeError('sample_model must be an instance of SampleModel') @@ -152,24 +172,30 @@ def sample_model(self, value: SampleModel) -> None: @property def instrument_model(self) -> InstrumentModel: - """Get the InstrumentModel associated with this Analysis. + """ + Get the InstrumentModel associated with this Analysis. - Returns: - InstrumentModel: The InstrumentModel associated with this - Analysis. + Returns + ------- + InstrumentModel + The InstrumentModel associated with this Analysis. """ return self._instrument_model @instrument_model.setter def instrument_model(self, value: InstrumentModel) -> None: - """Set the InstrumentModel for this Analysis. + """ + Set the InstrumentModel for this Analysis. - Args: - value (InstrumentModel): The InstrumentModel to set for this - Analysis. + Parameters + ---------- + value : InstrumentModel + The InstrumentModel to set for this Analysis. - Raises: - TypeError: if value is not an InstrumentModel. + Raises + ------ + TypeError + If value is not an InstrumentModel. """ if not isinstance(value, InstrumentModel): raise TypeError('instrument_model must be an instance of InstrumentModel') @@ -178,105 +204,122 @@ def instrument_model(self, value: InstrumentModel) -> None: @property def Q(self) -> sc.Variable | None: - """Get the Q values from the associated Experiment, if - available. + """ + Get the Q values from the associated Experiment, if available. - Returns: - sc.Variable | None: The Q values from the associated Experiment, - if available, and None if not. + Returns + ------- + sc.Variable | None + The Q values from the associated Experiment, if available, and None if not. """ return self.experiment.Q @Q.setter def Q(self, _value: sc.Variable) -> None: - """Q cannot be set, as it is a read-only property derived from - the Experiment. + """ + Q cannot be set, as it is a read-only property derived from the Experiment. - Args: - _value (sc.Variable): The Q values to set. This argument is - ignored, as Q is a read-only property. + Parameters + ---------- + _value : sc.Variable + The Q values to set. This argument is ignored, as Q is a read-only property. - Raises: - AttributeError: If trying to set Q. + Raises + ------ + AttributeError + If trying to set Q. """ raise AttributeError('Q is a read-only property derived from the Experiment.') @property def energy(self) -> sc.Variable | None: - """Get the energy values from the associated Experiment, if - available. + """ + Get the energy values from the associated Experiment, if available. - Returns: - sc.Variable | None: The energy values from the associated - Experiment, if available, and None if not. + Returns + ------- + sc.Variable | None + The energy values from the associated. """ return self.experiment.energy @energy.setter def energy(self, _value: sc.Variable) -> None: - """Energy cannot be set, as it is a read-only property derived - from the Experiment. + """ + Energy cannot be set, as it is a read-only property derived from the Experiment. - Args: - _value (sc.Variable): The energy values to set. This argument is - ignored, as energy is a read-only property. + Parameters + ---------- + _value : sc.Variable + The energy values to set. This argument is ignored, as energy is a read-only property. - Raises: - AttributeError: If trying to set energy. + Raises + ------ + AttributeError + If trying to set energy. """ raise AttributeError('energy is a read-only property derived from the Experiment.') @property def temperature(self) -> Parameter | None: - """Get the temperature from the associated SampleModel, if - available. + """ + Get the temperature from the associated SampleModel, if available. - Returns: - Parameter | None: The temperature from the associated SampleModel, - if available, and None if not. + Returns + ------- + Parameter | None + The temperature from the associated SampleModel, if available, and None if not. """ return self.sample_model.temperature @temperature.setter def temperature(self, _value: np.ndarray | Parameter) -> None: - """Temperature cannot be set, as it is a read-only property - derived from the SampleModel. - - Args: - _value (np.ndarray | Parameter): The temperature to set. - This argument is ignored, as temperature is a read-only - property. - - Raises: - AttributeError: If trying to set temperature. + """ + Temperature cannot be set, as it is a read-only property derived from the SampleModel. + + Parameters + ---------- + _value : np.ndarray | Parameter + The temperature to set. This argument is ignored, as temperature is a read-only + property. + + Raises + ------ + AttributeError + If trying to set temperature. """ raise AttributeError('temperature is a read-only property derived from the SampleModel.') @property def extra_parameters(self) -> list[Parameter]: - """Get the extra parameters included in this Analysis. + """ + Get the extra parameters included in this Analysis. - Returns: - list[Parameter]: The extra parameters included in this - Analysis. + Returns + ------- + list[Parameter] + The extra parameters included in this Analysis. """ return self._extra_parameters @extra_parameters.setter def extra_parameters(self, value: Parameter | list[Parameter]) -> None: - """Set the extra parameters for this Analysis. + """ + Set the extra parameters for this Analysis. - Args: - value (Parameter | list[Parameter]): The extra parameters to - include in this Analysis. + Parameters + ---------- + value : Parameter | list[Parameter] + The extra parameters to include in this Analysis. - Raises: - TypeError: If value is not a Parameter, a list of - Parameters, or None. + Raises + ------ + TypeError + If value is not a Parameter, a list of Parameters, or None. """ if isinstance(value, Parameter): self._extra_parameters = [value] @@ -292,11 +335,10 @@ def extra_parameters(self, value: Parameter | list[Parameter]) -> None: ############# def normalize_resolution(self) -> None: - """Normalize the resolution in the InstrumentModel to ensure - that it integrates to 1. + """ + Normalize the resolution in the InstrumentModel to ensure that it integrates to 1. - This is important for accurate fitting and interpretation of the - results. + This is important for accurate fitting and interpretation of the results. """ self.instrument_model.normalize_resolution() @@ -305,36 +347,44 @@ def normalize_resolution(self) -> None: ############# def _on_experiment_changed(self) -> None: - """Update the Q values in the sample and instrument models when - the experiment changes. + """ + Update the Q values in the sample and instrument models when the experiment changes. """ self.sample_model.Q = self.Q self.instrument_model.Q = self.Q def _on_sample_model_changed(self) -> None: - """Update the Q values in the sample model when the sample model - changes. + """ + Update the Q values in the sample model when the sample model changes. """ self.sample_model.Q = self.Q def _on_instrument_model_changed(self) -> None: - """Update the Q values in the instrument model when the - instrument model changes. + """ + Update the Q values in the instrument model when the instrument model changes. """ self.instrument_model.Q = self.Q def _verify_Q_index(self, Q_index: int | None) -> int | None: - """Verify that the Q index is valid. - - Args: - Q_index (int | None): The Q index to verify. - - Returns: - int | None: The verified Q index. - - Raises: - TypeError: If Q_index is not an integer or None. - IndexError: If the Q index is not valid. + """ + Verify that the Q index is valid. + + Parameters + ---------- + Q_index : int | None + The Q index to verify. + + Raises + ------ + TypeError + If Q_index is not an integer or None. + IndexError + If the Q index is not valid. + + Returns + ------- + int | None + The verified Q index. """ if Q_index is None: return None @@ -351,10 +401,13 @@ def _verify_Q_index(self, Q_index: int | None) -> int | None: ############# def __repr__(self) -> str: - """Return a string representation of the Analysis. + """ + Return a string representation of the Analysis. - Returns: - str: A string representation of the Analysis. + Returns + ------- + str + A string representation of the Analysis. """ return f' {self.__class__.__name__} (display_name={self.display_name}, \ unique_name={self.unique_name})' diff --git a/src/easydynamics/convolution/analytical_convolution.py b/src/easydynamics/convolution/analytical_convolution.py index 70ecc318..a835f215 100644 --- a/src/easydynamics/convolution/analytical_convolution.py +++ b/src/easydynamics/convolution/analytical_convolution.py @@ -17,11 +17,11 @@ class AnalyticalConvolution(ConvolutionBase): - """Analytical convolution of a ModelComponent or ComponentCollection - with a ResolutionModel. + """ + Analytical convolution of a ModelComponent or ComponentCollection with a ResolutionModel. - Possible analytical convolutions are any combination of delta - functions, Gaussians, Lorentzians and Voigt profiles. + Possible analytical convolutions are any combination of delta functions, Gaussians, Lorentzians + and Voigt profiles. """ # Mapping of supported component type pairs to convolution methods. @@ -43,19 +43,21 @@ def __init__( resolution_components: ComponentCollection | ModelComponent | None = None, energy_offset: Numeric | Parameter = 0.0, ) -> None: - """Initialize an AnalyticalConvolution. - - Args: - energy (np.ndarray | sc.Variable): 1D array of energy values - where the convolution is evaluated. - energy_unit (str | sc.Unit, default='meV'): The unit of the - energy. - sample_components (ComponentCollection | ModelComponent | None, default=None): - The sample model to be convolved. - resolution_components (ComponentCollection | ModelComponent | None, default=None): - The resolution model to convolve with. - energy_offset (Numeric | Parameter, default=0.0): An offset to - shift the energy values by. + """ + Initialize an AnalyticalConvolution. + + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. + energy_unit : str | sc.Unit, default='meV' + The unit of the energy. + sample_components : ComponentCollection | ModelComponent | None, default=None + The sample model to be convolved. + resolution_components : ComponentCollection | ModelComponent | None, default=None + The resolution model to convolve with. + energy_offset : Numeric | Parameter, default=0.0 + An offset to shift the energy values by. """ super().__init__( energy=energy, @@ -68,14 +70,18 @@ def __init__( def convolution( self, ) -> np.ndarray: - """Convolve sample with resolution analytically if possible. - Accepts ComponentCollection or single ModelComponent for each. - Possible analytical convolutions are any combination of delta - functions, Gaussians, Lorentzians and Voigt profiles. - - Returns: - np.ndarray: The convolution of the sample_components and - resolution_components values evaluated at self.energy. + """ + Convolve sample with resolution analytically if possible. + + Accepts ComponentCollection or single ModelComponent for each. Possible analytical + convolutions are any combination of delta functions, Gaussians, Lorentzians and Voigt + profiles. + + Returns + ------- + np.ndarray + The convolution of the sample_components and resolution_components values evaluated at + self.energy. """ sample_components = self.sample_components.components @@ -100,48 +106,47 @@ def _convolute_analytic_pair( sample_component: ModelComponent, resolution_component: ModelComponent, ) -> np.ndarray: - r"""Analytic convolution for component pair (sample_component, - resolution_component). + r""" + Analytic convolution for component pair (sample_component, resolution_component). - The convolution of two Gaussian components results in another - Gaussian component with width $\sqrt{w_1^2 + w_2^2}$. + The convolution of two Gaussian components results in another Gaussian component with width + $\sqrt{w_1^2 + w_2^2}$. - The convolution of two Lorentzian components results in another - Lorentzian component with width $w_1 + w_2$. + The convolution of two Lorentzian components results in another Lorentzian component with + width $w_1 + w_2$. - The convolution of a Gaussian and a Lorentzian results in a - Voigt profile. + The convolution of a Gaussian and a Lorentzian results in a Voigt profile. - The convolution of a Gaussian and a Voigt profile results in - another Voigt profile, with the Lorentzian width unchanged and - the Gaussian widths summed in quadrature. + The convolution of a Gaussian and a Voigt profile results in another Voigt profile, with + the Lorentzian width unchanged and the Gaussian widths summed in quadrature. - The convolution of a Lorentzian and a Voigt profile results in - another Voigt profile, with the Gaussian width unchanged and the - Lorentzian widths summed. + The convolution of a Lorentzian and a Voigt profile results in another Voigt profile, with + the Gaussian width unchanged and the Lorentzian widths summed. - The convolution of two Voigt profiles results in another Voigt - profile, with the Gaussian widths summed in quadrature and the - Lorentzian widths summed. + The convolution of two Voigt profiles results in another Voigt profile, with the Gaussian + widths summed in quadrature and the Lorentzian widths summed. - The convolution of a delta function with any component or - ComponentCollection results in the same component or - ComponentCollection shifted by the delta center. + The convolution of a delta function with any component or ComponentCollection results in + the same component or ComponentCollection shifted by the delta center. All areas are multiplied in the convolution. - Args: - sample_component (ModelComponent): The sample component to - be convolved. - resolution_component (ModelComponent): The resolution - component to convolve with. - - Returns: - np.ndarray: The convolution result - - Raises: - ValueError: If the component pair cannot be handled - analytically. + Parameters + ---------- + sample_component : ModelComponent + The sample component to be convolved. + resolution_component : ModelComponent + The resolution component to convolve with. + + Raises + ------ + ValueError + If the component pair cannot be handled analytically. + + Returns + ------- + np.ndarray + The convolution result. """ if isinstance(resolution_component, DeltaFunction): @@ -187,19 +192,22 @@ def _convolute_delta_any( sample_component: DeltaFunction, resolution_components: ComponentCollection | ModelComponent, ) -> np.ndarray: - """Convolution of delta function with any ModelComponent or - ComponentCollection results in the same component or - ComponentCollection shifted by the delta center. The areas are + """ + Convolution of delta function with any ModelComponent or ComponentCollection results in the + same component or ComponentCollection shifted by the delta center. The areas are multiplied. - Args: - sample_component (DeltaFunction): The sample component to - be convolved. - resolution_components (ComponentCollection | ModelComponent) - : The resolution model to convolve with. - - Returns: - np.ndarray: The evaluated convolution values at self.energy. + Parameters + ---------- + sample_component : DeltaFunction + The sample component to be convolved. + resolution_components : ComponentCollection | ModelComponent + : The resolution model to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ return sample_component.area.value * resolution_components.evaluate( self.energy_with_offset.values - sample_component.center.value @@ -210,18 +218,21 @@ def _convolute_gaussian_gaussian( sample_component: Gaussian, resolution_component: Gaussian, ) -> np.ndarray: - r"""Convolution of two Gaussian components results in another - Gaussian component with width $\sqrt{w_1^2 + w_2^2}$. The areas - are multiplied. - - Args: - sample_component (Gaussian): The sample Gaussian component - to be convolved. - resolution_component (Gaussian): The resolution Gaussian - component to convolve with. - - Returns: - np.ndarray: The evaluated convolution values at self.energy. + r""" + Convolution of two Gaussian components results in another Gaussian component with width + $\sqrt{w_1^2 + w_2^2}$. The areas are multiplied. + + Parameters + ---------- + sample_component : Gaussian + The sample Gaussian component to be convolved. + resolution_component : Gaussian + The resolution Gaussian component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ width = np.sqrt(sample_component.width.value**2 + resolution_component.width.value**2) @@ -237,17 +248,21 @@ def _convolute_gaussian_lorentzian( sample_component: Gaussian, resolution_component: Lorentzian, ) -> np.ndarray: - """Convolution of a Gaussian and a Lorentzian results in a Voigt - profile. The areas are multiplied. - - Args: - sample_component (Gaussian): The sample Gaussian component - to be convolved. - resolution_component (Lorentzian): The resolution Lorentzian - component to convolve with. + """ + Convolution of a Gaussian and a Lorentzian results in a Voigt profile. The areas are + multiplied. - Returns: - np.ndarray: The evaluated convolution values at self.energy. + Parameters + ---------- + sample_component : Gaussian + The sample Gaussian component to be convolved. + resolution_component : Lorentzian + The resolution Lorentzian component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ center = sample_component.center.value + resolution_component.center.value area = sample_component.area.value * resolution_component.area.value @@ -264,19 +279,22 @@ def _convolute_gaussian_voigt( sample_component: Gaussian, resolution_component: Voigt, ) -> np.ndarray: - """Convolution of a Gaussian and a Voigt profile results in - another Voigt profile. The Lorentzian width remains unchanged, - while the Gaussian widths are summed in quadrature. The areas - are multiplied. - - Args: - sample_component (Gaussian): The sample Gaussian component - to be convolved. - resolution_component (Voigt): The resolution Voigt component - to convolve with. - - Returns: - np.ndarray: The evaluated convolution values at self.energy. + """ + Convolution of a Gaussian and a Voigt profile results in another Voigt profile. The + Lorentzian width remains unchanged, while the Gaussian widths are summed in quadrature. The + areas are multiplied. + + Parameters + ---------- + sample_component : Gaussian + The sample Gaussian component to be convolved. + resolution_component : Voigt + The resolution Voigt component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ area = sample_component.area.value * resolution_component.area.value @@ -300,18 +318,21 @@ def _convolute_lorentzian_lorentzian( sample_component: Lorentzian, resolution_component: Lorentzian, ) -> np.ndarray: - r"""Convolution of two Lorentzian components results in another - Lorentzian component with width $w_1 + w_2$. The areas are - multiplied. - - Args: - sample_component (Lorentzian): The sample Lorentzian - component to be convolved. - resolution_component (Lorentzian): The resolution Lorentzian - component to convolve with. - - Returns: - np.ndarray: The evaluated convolution values at self.energy. + r""" + Convolution of two Lorentzian components results in another Lorentzian component with width + $w_1 + w_2$. The areas are multiplied. + + Parameters + ---------- + sample_component : Lorentzian + The sample Lorentzian component to be convolved. + resolution_component : Lorentzian + The resolution Lorentzian component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ area = sample_component.area.value * resolution_component.area.value @@ -326,21 +347,24 @@ def _convolute_lorentzian_voigt( sample_component: Lorentzian, resolution_component: Voigt, ) -> np.ndarray: - """Convolution of a Lorentzian and a Voigt profile results in - another Voigt profile. + """ + Convolution of a Lorentzian and a Voigt profile results in another Voigt profile. - The Gaussian width remains unchanged, while the Lorentzian - widths are summed. + The Gaussian width remains unchanged, while the Lorentzian widths are summed. The areas are multiplied. - Args: - sample_component (Lorentzian): The sample Lorentzian - component to be convolved. - resolution_component (Voigt): The resolution Voigt component - to convolve with. - Returns: - np.ndarray: The evaluated convolution values at self.energy. + Parameters + ---------- + sample_component : Lorentzian + The sample Lorentzian component to be convolved. + resolution_component : Voigt + The resolution Voigt component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ area = sample_component.area.value * resolution_component.area.value @@ -364,21 +388,23 @@ def _convolute_voigt_voigt( sample_component: Voigt, resolution_component: Voigt, ) -> np.ndarray: - """Convolution of two Voigt profiles results in another Voigt - profile. - - The Gaussian widths are summed in quadrature, - while the Lorentzian widths are summed. - The areas are multiplied. - - Args: - sample_component (Voigt): The sample Voigt component to be - convolved. - resolution_component (Voigt): The resolution Voigt component - to convolve with. - - Returns: - np.ndarray: The evaluated convolution values at self.energy. + """ + Convolution of two Voigt profiles results in another Voigt profile. + + The Gaussian widths are summed in quadrature, while the Lorentzian widths are summed. The + areas are multiplied. + + Parameters + ---------- + sample_component : Voigt + The sample Voigt component to be convolved. + resolution_component : Voigt + The resolution Voigt component to convolve with. + + Returns + ------- + np.ndarray + The evaluated convolution values at self.energy. """ area = sample_component.area.value * resolution_component.area.value @@ -404,28 +430,29 @@ def _gaussian_eval( center: float, width: float, ) -> np.ndarray: - r"""Evaluate a Gaussian function. + r""" + Evaluate a Gaussian function. - $$ - I(x) = \frac{A}{\sigma \sqrt{2\pi}} - \exp\left( - -\frac{1}{2} - \left(\frac{x - x_0}{\sigma}\right)^2 - \right) - $$ + $$ I(x) = \frac{A}{\sigma \sqrt{2\pi}} \exp\left( -\frac{1}{2} \left(\frac{x - + x_0}{\sigma}\right)^2 \right) $$ - where $A$ is the area, $x_0$ is the center, and $\sigma$ is the - width. + where $A$ is the area, $x_0$ is the center, and $\sigma$ is the width. All checks are handled in the calling function. - Args: - area (float): The area under the Gaussian curve. - center (float): The center of the Gaussian. - width (float): The width (sigma) of the Gaussian. - - Returns: - np.ndarray: The evaluated Gaussian values at self.energy. + Parameters + ---------- + area : float + The area under the Gaussian curve. + center : float + The center of the Gaussian. + width : float + The width (sigma) of the Gaussian. + + Returns + ------- + np.ndarray + The evaluated Gaussian values at self.energy. """ normalization = 1 / (np.sqrt(2 * np.pi) * width) @@ -437,22 +464,26 @@ def _lorentzian_eval(self, area: float, center: float, width: float) -> np.ndarr r""" Evaluate a Lorentzian function. - $$ - I(x) = \frac{A}{\\pi} \frac{\Gamma}{(x - x_0)^2 + \Gamma^2}, - $$ + $$ I(x) = \frac{A}{\\pi} \frac{\Gamma}{(x - x_0)^2 + \Gamma^2}, $$ - where $A$ is the area, $x_0$ is the center, and $\\Gamma$ is - the half width at half maximum (HWHM). + where $A$ is the area, $x_0$ is the center, and $\\Gamma$ is the half width at half maximum + (HWHM). All checks are handled in the calling function. - Args: - area (float): The area under the Lorentzian. - center (float): The center of the Lorentzian. - width (float): The width (HWHM) of the Lorentzian. - - Returns: - np.ndarray: The evaluated Lorentzian values at self.energy. + Parameters + ---------- + area : float + The area under the Lorentzian. + center : float + The center of the Lorentzian. + width : float + The width (HWHM) of the Lorentzian. + + Returns + ------- + np.ndarray + The evaluated Lorentzian values at self.energy. """ normalization = width / np.pi @@ -467,20 +498,24 @@ def _voigt_eval( gaussian_width: float, lorentzian_width: float, ) -> np.ndarray: - """Evaluate a Voigt profile function using scipy's - voigt_profile. - - Args: - area (float): The area under the Voigt profile. - center (float): The center of the Voigt profile. - gaussian_width (float): The Gaussian width (sigma) of the - Voigt profile. - lorentzian_width (float): The Lorentzian width (HWHM) of the - Voigt profile. - - Returns: - np.ndarray: The evaluated Voigt profile values at - self.energy. + """ + Evaluate a Voigt profile function using scipy's voigt_profile. + + Parameters + ---------- + area : float + The area under the Voigt profile. + center : float + The center of the Voigt profile. + gaussian_width : float + The Gaussian width (sigma) of the Voigt profile. + lorentzian_width : float + The Lorentzian width (HWHM) of the Voigt profile. + + Returns + ------- + np.ndarray + The evaluated Voigt profile values at self.energy. """ return area * voigt_profile( diff --git a/src/easydynamics/convolution/convolution.py b/src/easydynamics/convolution/convolution.py index 3f3f1ef3..32d3fb96 100644 --- a/src/easydynamics/convolution/convolution.py +++ b/src/easydynamics/convolution/convolution.py @@ -18,19 +18,17 @@ class Convolution(NumericalConvolutionBase): - """Convolution class that combines analytical and numerical - convolution methods to efficiently perform convolutions of - ComponentCollections with ResolutionComponents. - - Supports analytical convolution for pairs of analytical model - components (DeltaFunction, Gaussian, Lorentzian, Voigt), while using - numerical convolution for other components. If temperature is - provided, detailed balance correction is applied to the sample - model. In this case, all convolutions are handled numerically. - Includes a setting to normalize the detailed balance correction. - Includes optional upsampling and extended range to improve accuracy - of the numerical convolutions. Also warns about numerical - instabilities if peaks are very wide or very narrow. + """ + Convolution class that combines analytical and numerical convolution methods to efficiently + perform convolutions of ComponentCollections with ResolutionComponents. + + Supports analytical convolution for pairs of analytical model components (DeltaFunction, + Gaussian, Lorentzian, Voigt), while using numerical convolution for other components. If + temperature is provided, detailed balance correction is applied to the sample model. In this + case, all convolutions are handled numerically. Includes a setting to normalize the detailed + balance correction. Includes optional upsampling and extended range to improve accuracy of the + numerical convolutions. Also warns about numerical instabilities if peaks are very wide or very + narrow. """ # When these attributes are changed, the convolution plan @@ -61,33 +59,31 @@ def __init__( energy_unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, ) -> None: - """Initialize the Convolution class. - - Args: - energy (np.ndarray | sc.Variable): 1D array of energy - values where the convolution is evaluated. - sample_components (ComponentCollection | ModelComponent): - The sample components to be convolved. - resolution_components (ComponentCollection | ModelComponent): - The resolution components to convolve with. - energy_offset (Numeric | Parameter, default=0.0): An energy - offset to apply to the energy values before convolution. - upsample_factor (Numeric | None, default=5): The factor by which to - upsample the input data before convolution. Default is - 5. - extension_factor (Numeric | None, default=0.2): The factor by which to - extend the input data range before convolution. Default - is 0.2. - temperature (Parameter | Numeric | None, default=None): The - temperature to use for detailed balance correction. - Default is None. - temperature_unit (str | sc.Unit, default='K'): The unit of the - temperature parameter. Default is 'K'. - energy_unit (str | sc.Unit, default='meV'): The unit of the energy. - Default is 'meV'. - normalize_detailed_balance (bool, default=True): Whether to - normalize the detailed balance correction. Default is - True. + """ + Initialize the Convolution class. + + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. + sample_components : ComponentCollection | ModelComponent + The sample components to be convolved. + resolution_components : ComponentCollection | ModelComponent + The resolution components to convolve with. + energy_offset : Numeric | Parameter, default=0.0 + An energy offset to apply to the energy values before convolution. + upsample_factor : Numeric | None, default=5 + The factor by which to upsample the input data before convolution. Default is 5. + extension_factor : Numeric | None, default=0.2 + The factor by which to extend the input data range before convolution. Default is 0.2. + temperature : Parameter | Numeric | None, default=None + The temperature to use for detailed balance correction. + temperature_unit : str | sc.Unit, default='K' + The unit of the temperature parameter. + energy_unit : str | sc.Unit, default='meV' + The unit of the energy. + normalize_detailed_balance : bool, default=True + Whether to normalize the detailed balance correction. Default is True. """ self._convolution_plan_is_valid = False @@ -115,12 +111,14 @@ def __init__( def convolution( self, ) -> np.ndarray: - """Perform convolution using analytical convolutions where - possible, and numerical convolutions for the remaining - components. + """ + Perform convolution using analytical convolutions where possible, and numerical + convolutions for the remaining components. - Returns: - np.ndarray: The convolved values evaluated at energy. + Returns + ------- + np.ndarray + The convolved values evaluated at energy. """ if not self._convolution_plan_is_valid: self._build_convolution_plan() @@ -141,13 +139,14 @@ def convolution( return total def _convolve_delta_functions(self) -> np.ndarray: - """Convolve delta function components of the sample model with - the resolution components. No detailed balance correction is - applied to delta functions. + """ + Convolve delta function components of the sample model with the resolution components. No + detailed balance correction is applied to delta functions. - Returns: - np.ndarray: The convolved values of the delta function c - components evaluated at energy. + Returns + ------- + np.ndarray + The convolved values of the delta function c components evaluated at energy. """ return sum( delta.area.value @@ -162,22 +161,26 @@ def _check_if_pair_is_analytic( sample_component: ModelComponent, resolution_component: ModelComponent, ) -> bool: - """Check if the convolution of the given component pair can be - handled analytically. - - Args: - sample_component (ModelComponent): The sample component to - be convolved. - resolution_component (ModelComponent): The resolution - component to convolve with. - - Returns: - bool: True if the component pair can be handled - analytically, False otherwise. - - Raises: - TypeError: If either component is not a ModelComponent, or if - the resolution component is a DeltaFunction. + """ + Check if the convolution of the given component pair can be handled analytically. + + Parameters + ---------- + sample_component : ModelComponent + The sample component to be convolved. + resolution_component : ModelComponent + The resolution component to convolve with. + + Raises + ------ + TypeError + If either component is not a ModelComponent, or if the resolution component is a + DeltaFunction. + + Returns + ------- + bool + True if the component pair can be handled analytically, False otherwise. """ if not isinstance(sample_component, ModelComponent): @@ -204,8 +207,8 @@ def _check_if_pair_is_analytic( ) def _build_convolution_plan(self) -> None: - """Separate sample model components into analytical pairs, delta - functions, and the rest. + """ + Separate sample model components into analytical pairs, delta functions, and the rest. """ analytical_sample_components = ComponentCollection() @@ -250,11 +253,11 @@ def _build_convolution_plan(self) -> None: self._set_convolvers() def _set_convolvers(self) -> None: - """Initialize analytical and numerical convolvers based on - sample model components. + """ + Initialize analytical and numerical convolvers based on sample model components. - There is no delta function convolver, as delta functions are - handled directly in the convolution method. + There is no delta function convolver, as delta functions are handled directly in the + convolution method. """ if self._analytical_sample_components.components: @@ -284,15 +287,19 @@ def _set_convolvers(self) -> None: # Update some setters so the internal sample models are updated def __setattr__(self, name: str, value: any) -> None: - """Custom setattr to invalidate convolution plan on relevant - attribute changes, and build a new plan. - - The new plan is only built after initialization (when - _reactions_enabled is True) to avoid issues during __init__. - - Args: - name (str): The name of the attribute to set. - value (any): The value to set the attribute to. + """ + Custom setattr to invalidate convolution plan on relevant attribute changes, and build a + new plan. + + The new plan is only built after initialization (when _reactions_enabled is True) to avoid + issues during __init__. + + Parameters + ---------- + name : str + The name of the attribute to set. + value : any + The value to set the attribute to. """ super().__setattr__(name, value) diff --git a/src/easydynamics/convolution/convolution_base.py b/src/easydynamics/convolution/convolution_base.py index 3037c649..d328dbed 100644 --- a/src/easydynamics/convolution/convolution_base.py +++ b/src/easydynamics/convolution/convolution_base.py @@ -11,7 +11,8 @@ class ConvolutionBase: - """Base class for convolutions of sample and resolution models. + """ + Base class for convolutions of sample and resolution models. This base class has no convolution functionality. """ @@ -24,26 +25,29 @@ def __init__( energy_unit: str | sc.Unit = 'meV', energy_offset: Numeric | Parameter = 0.0, ) -> None: - """Initialize the ConvolutionBase. - - Args: - energy (np.ndarray | sc.Variable): 1D array of energy - values where the convolution is evaluated. - sample_components (ComponentCollection | ModelComponent | None, default=None): - The sample model to be convolved. - resolution_components (ComponentCollection | ModelComponent | None, default=None): - The resolution model to convolve with. - energy_unit (str | sc.Unit, default='meV'): The unit of the - energy. - energy_offset (Numeric | Parameter, default=0.0): The energy - offset applied to the convolution. Default is 0.0. - - Raises: - TypeError: If energy is not a numpy ndarray or a scipp - Variable or if energy_unit is not a string or scipp unit, or if - energy_offset is not a number or a Parameter, or if - sample_components is not a ComponentCollection or ModelComponent, or if - resolution_components is not a ComponentCollection or ModelComponent. + """ + Initialize the ConvolutionBase. + + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. + sample_components : ComponentCollection | ModelComponent | None, default=None + The sample model to be convolved. + resolution_components : ComponentCollection | ModelComponent | None, default=None + The resolution model to convolve with. + energy_unit : str | sc.Unit, default='meV' + The unit of the energy. + energy_offset : Numeric | Parameter, default=0.0 + The energy offset applied to the convolution. + + Raises + ------ + TypeError + If energy is not a numpy ndarray or a scipp Variable or if energy_unit is not a string + or scipp unit, or if energy_offset is not a number or a Parameter, or if + sample_components is not a ComponentCollection or ModelComponent, or if + resolution_components is not a ComponentCollection or ModelComponent. """ if isinstance(energy, Numeric): energy = np.array([float(energy)]) @@ -91,23 +95,30 @@ def __init__( @property def energy_offset(self) -> Parameter: - """Get the energy offset. + """ + Get the energy offset. - Returns: - Parameter: The energy offset applied to the convolution. + Returns + ------- + Parameter + The energy offset applied to the convolution. """ return self._energy_offset @energy_offset.setter def energy_offset(self, energy_offset: Numeric | Parameter) -> None: - """Set the energy offset. + """ + Set the energy offset. - Args: - energy_offset (Numeric | Parameter): The energy offset to - apply to the convolution. + Parameters + ---------- + energy_offset : Numeric | Parameter + The energy offset to apply to the convolution. - Raises: - TypeError: If energy_offset is not a number or a Parameter. + Raises + ------ + TypeError + If energy_offset is not a number or a Parameter. """ if not isinstance(energy_offset, Parameter | Numeric): raise TypeError('Energy_offset must be a number or a Parameter.') @@ -120,10 +131,13 @@ def energy_offset(self, energy_offset: Numeric | Parameter) -> None: @property def energy_with_offset(self) -> sc.Variable: - """Get the energy with the offset applied. + """ + Get the energy with the offset applied. - Returns: - sc.Variable: The energy values with the offset applied. + Returns + ------- + sc.Variable + The energy values with the offset applied. """ energy_with_offset = self.energy.copy() energy_with_offset.values = self.energy.values - self.energy_offset.value @@ -131,15 +145,18 @@ def energy_with_offset(self) -> sc.Variable: @energy_with_offset.setter def energy_with_offset(self, _value: sc.Variable) -> None: - """Energy with offset is a read-only property derived from - energy and energy_offset. + """ + Energy with offset is a read-only property derived from energy and energy_offset. - Args: - _value (sc.Variable): The value to set (ignored). + Parameters + ---------- + _value : sc.Variable + The value to set (ignored). - Raises: - AttributeError: Always raised since energy_with_offset is - read-only. + Raises + ------ + AttributeError + Always raised since energy_with_offset is read-only. """ raise AttributeError( 'Energy with offset is a read-only property derived from energy and energy_offset.' @@ -147,26 +164,31 @@ def energy_with_offset(self, _value: sc.Variable) -> None: @property def energy(self) -> sc.Variable: - """Get the energy. + """ + Get the energy. - Returns: - sc.Variable: The energy values where the convolution is - evaluated. + Returns + ------- + sc.Variable + The energy values where the convolution is evaluated. """ return self._energy @energy.setter def energy(self, energy: np.ndarray | sc.Variable) -> None: - """Set the energy. + """ + Set the energy. - Args: - energy (np.ndarray | sc.Variable): 1D array of energy - values where the convolution is evaluated. + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. - Raises: - TypeError: If energy is not a numpy ndarray or a - scipp Variable. + Raises + ------ + TypeError + If energy is not a numpy ndarray or a scipp Variable. """ if isinstance(energy, Numeric): @@ -184,30 +206,39 @@ def energy(self, energy: np.ndarray | sc.Variable) -> None: @property def energy_unit(self) -> str: - """Get the energy unit. + """ + Get the energy unit. - Returns: - str: The unit of the energy. + Returns + ------- + str + The unit of the energy. """ return self._energy_unit @energy_unit.setter def energy_unit(self, _unit_str: str) -> None: + """Energy unit.""" raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' ) # noqa: E501 def convert_energy_unit(self, energy_unit: str | sc.Unit) -> None: - """Convert the energy and energy_offset to the specified unit. - - Args: - energy_unit (str | sc.Unit): The unit of the energy. - - Raises: - TypeError: If energy_unit is not a string or scipp unit. - Exception: If energy cannot be converted to the specified - unit. + """ + Convert the energy and energy_offset to the specified unit. + + Parameters + ---------- + energy_unit : str | sc.Unit + The unit of the energy. + + Raises + ------ + TypeError + If energy_unit is not a string or scipp unit. + Exception + If energy cannot be converted to the specified unit. """ if not isinstance(energy_unit, (str, sc.Unit)): raise TypeError('Energy unit must be a string or scipp unit.') @@ -230,25 +261,30 @@ def convert_energy_unit(self, energy_unit: str | sc.Unit) -> None: @property def sample_components(self) -> ComponentCollection | ModelComponent: - """Get the sample model. + """ + Get the sample model. - Returns: - ComponentCollection | ModelComponent: The sample model to - be convolved. + Returns + ------- + ComponentCollection | ModelComponent + The sample model to be convolved. """ return self._sample_components @sample_components.setter def sample_components(self, sample_components: ComponentCollection | ModelComponent) -> None: - """Set the sample model. + """ + Set the sample model. - Args: - sample_components (ComponentCollection | ModelComponent): - The sample model to be convolved. + Parameters + ---------- + sample_components : ComponentCollection | ModelComponent + The sample model to be convolved. - Raises: - TypeError: If sample_components is not a ComponentCollection - or ModelComponent. + Raises + ------ + TypeError + If sample_components is not a ComponentCollection or ModelComponent. """ if not isinstance(sample_components, (ComponentCollection, ModelComponent)): raise TypeError( @@ -261,11 +297,13 @@ def sample_components(self, sample_components: ComponentCollection | ModelCompon @property def resolution_components(self) -> ComponentCollection | ModelComponent: - """Get the resolution model. + """ + Get the resolution model. - Returns: - ComponentCollection | ModelComponent: The resolution model - to be convolved. + Returns + ------- + ComponentCollection | ModelComponent + The resolution model to be convolved. """ return self._resolution_components @@ -273,16 +311,19 @@ def resolution_components(self) -> ComponentCollection | ModelComponent: def resolution_components( self, resolution_components: ComponentCollection | ModelComponent ) -> None: - """Set the resolution model. - - Args: - resolution_components (ComponentCollection | ModelComponent): - The resolution model to be convolved. Can be a - ComponentCollection or a single ModelComponent - - Raises: - TypeError: If resolution_components is not a - ComponentCollection or ModelComponent. + """ + Set the resolution model. + + Parameters + ---------- + resolution_components : ComponentCollection | ModelComponent + The resolution model to be convolved. Can be a ComponentCollection or a single + ModelComponent. + + Raises + ------ + TypeError + If resolution_components is not a ComponentCollection or ModelComponent. """ if not isinstance(resolution_components, (ComponentCollection, ModelComponent)): raise TypeError( diff --git a/src/easydynamics/convolution/energy_grid.py b/src/easydynamics/convolution/energy_grid.py index 645a605b..0722aa59 100644 --- a/src/easydynamics/convolution/energy_grid.py +++ b/src/easydynamics/convolution/energy_grid.py @@ -8,20 +8,21 @@ @dataclass(frozen=True) class EnergyGrid: - """Container for the dense energy grid and related metadata. + """ + Container for the dense energy grid and related metadata. - Attributes: - energy_dense (np.ndarray): The upsampled and extended energy - array. - energy_dense_centered (np.ndarray): The centered version of - energy_dense (used for resolution evaluation). - energy_dense_step (float): The spacing of energy_dense - (used for width checks and normalization). - energy_span_dense (float): The total span of energy_dense. - (used for width checks). - energy_even_length_offset (float): The offset to apply if - energy_dense has even length (used for convolution - alignment). + Attributes + ---------- + energy_dense : np.ndarray + The upsampled and extended energy array. + energy_dense_centered : np.ndarray + The centered version of energy_dense (used for resolution evaluation). + energy_dense_step : float + The spacing of energy_dense (used for width checks and normalization). + energy_span_dense : float + The total span of energy_dense. (used for width checks). + energy_even_length_offset : float + The offset to apply if energy_dense has even length (used for convolution alignment). """ energy_dense: np.ndarray diff --git a/src/easydynamics/convolution/numerical_convolution.py b/src/easydynamics/convolution/numerical_convolution.py index 10a55c81..87e6b49e 100644 --- a/src/easydynamics/convolution/numerical_convolution.py +++ b/src/easydynamics/convolution/numerical_convolution.py @@ -14,13 +14,12 @@ class NumericalConvolution(NumericalConvolutionBase): - """Numerical convolution of a ComponentCollection with a - ComponentCollection using FFT. + """ + Numerical convolution of a ComponentCollection with a ComponentCollection using FFT. - Includes optional upsampling and extended range to improve accuracy. - Warns about very wide or very narrow peaks in the models. If - temperature is provided, detailed balance correction is applied to - the sample model. + Includes optional upsampling and extended range to improve accuracy. Warns about very wide or + very narrow peaks in the models. If temperature is provided, detailed balance correction is + applied to the sample model. """ def __init__( @@ -36,31 +35,31 @@ def __init__( energy_unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, ) -> None: - """Initialize the NumericalConvolution object. - - Args: - energy (np.ndarray | sc.Variable): 1D array of energy values - where the convolution is evaluated. - sample_components (ComponentCollection | ModelComponent): - The sample model to be convolved. - resolution_components (ComponentCollection | ModelComponent): - The resolution model to convolve with. - energy_offset (Numeric | Parameter, default=0.0): An energy - offset to apply to the energy values before convolution. - upsample_factor (Numeric | None, default=5): The factor by which to - upsample the input data before convolution. - extension_factor (Numeric | None, default=0.2): The factor by which to - extend the input data range before convolution. - temperature (Parameter | Numeric | None, default=None): The - temperature to use for detailed balance correction. - Default is None. - temperature_unit (str | sc.Unit, default='K'): The unit of the - temperature parameter. - energy_unit (str | sc.Unit, default='meV'): The unit of the - energy. Default is 'meV'. - normalize_detailed_balance (bool, default=True): Whether to - normalize the detailed balance correction. Default is - True. + """ + Initialize the NumericalConvolution object. + + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. + sample_components : ComponentCollection | ModelComponent + The sample model to be convolved. + resolution_components : ComponentCollection | ModelComponent + The resolution model to convolve with. + energy_offset : Numeric | Parameter, default=0.0 + An energy offset to apply to the energy values before convolution. + upsample_factor : Numeric | None, default=5 + The factor by which to upsample the input data before convolution. + extension_factor : Numeric | None, default=0.2 + The factor by which to extend the input data range before convolution. + temperature : Parameter | Numeric | None, default=None + The temperature to use for detailed balance correction. + temperature_unit : str | sc.Unit, default='K' + The unit of the temperature parameter. + energy_unit : str | sc.Unit, default='meV' + The unit of the energy. + normalize_detailed_balance : bool, default=True + Whether to normalize the detailed balance correction. Default is True. """ super().__init__( energy=energy, @@ -78,12 +77,14 @@ def __init__( def convolution( self, ) -> np.ndarray: - """Calculate the convolution of the sample and resolution models - at the values given in energy. Includes detailed balance - correction if temperature is provided. + """ + Calculate the convolution of the sample and resolution models at the values given in + energy. Includes detailed balance correction if temperature is provided. - Returns: - np.ndarray: The convolved values evaluated at energy. + Returns + ------- + np.ndarray + The convolved values evaluated at energy. """ # Give warnings if peaks are very wide or very narrow diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index ccbdea57..e2d6f5b6 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -25,12 +25,11 @@ class NumericalConvolutionBase(ConvolutionBase): - """Base class for numerical convolutions of sample and resolution - models. + """ + Base class for numerical convolutions of sample and resolution models. - Provides methods to handle upsampling, extension, and detailed - balance correction. This base class has no convolution - functionality. + Provides methods to handle upsampling, extension, and detailed balance correction. This base + class has no convolution functionality. """ def __init__( @@ -46,34 +45,38 @@ def __init__( energy_unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, ) -> None: - """Initialize the NumericalConvolutionBase. - - Args: - energy (np.ndarray | sc.Variable): 1D array of energy values - where the convolution is evaluated. - sample_components (ComponentCollection | ModelComponent): - The components to be convolved. - resolution_components (ComponentCollection | ModelComponent): - The resolution components to convolve with. - energy_offset (Numeric | Parameter, default=0.0): An energy - offset to apply to the energy values before convolution. - upsample_factor (Numeric | None, default=5): The factor by which to - upsample the input data before convolution. - extension_factor (Numeric | None, default=0.2): The factor by which to - extend the input data range before convolution. - temperature (Parameter | Numeric | None, default=None): The temperature to - use for detailed balance correction. - temperature_unit (str | sc.Unit, default='K'): The unit of the - temperature parameter. - energy_unit (str | sc.Unit, default='meV'): The unit of the energy. - normalize_detailed_balance (bool, default=True): Whether to normalize the - detailed balance correction. - - Raises: - TypeError: If temperature is not None, a number, or a - Parameter, or if temperature_unit is not a string or sc.Unit, or if - upsample_factor is not a number or None, or if extension_factor - is not a number, or if normalize_detailed_balance is not a bool. + """ + Initialize the NumericalConvolutionBase. + + Parameters + ---------- + energy : np.ndarray | sc.Variable + 1D array of energy values where the convolution is evaluated. + sample_components : ComponentCollection | ModelComponent + The components to be convolved. + resolution_components : ComponentCollection | ModelComponent + The resolution components to convolve with. + energy_offset : Numeric | Parameter, default=0.0 + An energy offset to apply to the energy values before convolution. + upsample_factor : Numeric | None, default=5 + The factor by which to upsample the input data before convolution. + extension_factor : Numeric | None, default=0.2 + The factor by which to extend the input data range before convolution. + temperature : Parameter | Numeric | None, default=None + The temperature to use for detailed balance correction. + temperature_unit : str | sc.Unit, default='K' + The unit of the temperature parameter. + energy_unit : str | sc.Unit, default='meV' + The unit of the energy. + normalize_detailed_balance : bool, default=True + Whether to normalize the detailed balance correction. + + Raises + ------ + TypeError + If temperature is not None, a number, or a Parameter, or if temperature_unit is not a + string or sc.Unit, or if upsample_factor is not a number or None, or if + extension_factor is not a number, or if normalize_detailed_balance is not a bool. """ super().__init__( energy=energy, @@ -104,10 +107,13 @@ def __init__( @ConvolutionBase.energy.setter def energy(self, energy: np.ndarray) -> None: - """Set the energy array and recreate the dense grid. + """ + Set the energy array and recreate the dense grid. - Args: - energy (np.ndarray): The new energy array. + Parameters + ---------- + energy : np.ndarray + The new energy array. """ ConvolutionBase.energy.fset(self, energy) # Recreate dense grid when energy is updated @@ -115,24 +121,33 @@ def energy(self, energy: np.ndarray) -> None: @property def upsample_factor(self) -> Numeric | None: - """Get the upsample factor. + """ + Get the upsample factor. - Returns: - Numeric | None: The upsample factor. + Returns + ------- + Numeric | None + The upsample factor. """ return self._upsample_factor @upsample_factor.setter def upsample_factor(self, factor: Numeric | None) -> None: - """Set the upsample factor and recreate the dense grid. - - Args: - factor (Numeric | None): The new upsample factor. - - Raises: - TypeError: If factor is not a number or None. - ValueError: If factor is not greater than 1. + """ + Set the upsample factor and recreate the dense grid. + + Parameters + ---------- + factor : Numeric | None + The new upsample factor. + + Raises + ------ + TypeError + If factor is not a number or None. + ValueError + If factor is not greater than 1. """ if factor is None: self._upsample_factor = factor @@ -152,15 +167,16 @@ def upsample_factor(self, factor: Numeric | None) -> None: @property def extension_factor(self) -> float: - """Get the extension factor. + """ + Get the extension factor. - The extension factor determines how much the energy range is - extended on both sides before convolution. - 0.2 means extending by 20% of the original energy span - on each side + The extension factor determines how much the energy range is extended on both sides before + convolution. 0.2 means extending by 20% of the original energy span on each side - Returns: - float: The extension factor. + Returns + ------- + float + The extension factor. """ return self._extension_factor @@ -169,17 +185,21 @@ def extension_factor(self) -> float: def extension_factor(self, factor: Numeric) -> None: """ Set the extension factor and recreate the dense grid. - The extension factor determines how much the energy range is - extended on both sides before convolution. - 0.2 means extending by 20% of the original energy span - on each side. - Args: - factor (Numeric): The new extension factor. + The extension factor determines how much the energy range is extended on both sides before + convolution. 0.2 means extending by 20% of the original energy span on each side. - Raises: - TypeError: If factor is not a number. - ValueError: If factor is negative. + Parameters + ---------- + factor : Numeric + The new extension factor. + + Raises + ------ + TypeError + If factor is not a number. + ValueError + If factor is negative. """ if not isinstance(factor, Numeric): @@ -193,29 +213,34 @@ def extension_factor(self, factor: Numeric) -> None: @property def temperature(self) -> Parameter | None: - """Get the temperature. + """ + Get the temperature. - Returns: - Parameter | None: The temperature parameter, or None if - detailed balance correction is disabled. + Returns + ------- + Parameter | None + The temperature parameter, or None if detailed balance correction is disabled. """ return self._temperature @temperature.setter def temperature(self, temp: Parameter | Numeric | None) -> None: - """Set the temperature. + """ + Set the temperature. - If None, disables detailed balance - correction and removes the temperature parameter. + If None, disables detailed balance correction and removes the temperature parameter. - Args: - temp (Parameter | Numeric | None): The temperature to set. - The unit will be the same as the existing temperature - parameter if it exists, otherwise 'K'. + Parameters + ---------- + temp : Parameter | Numeric | None + The temperature to set. The unit will be the same as the existing temperature parameter + if it exists, otherwise 'K'. - Raises: - TypeError: If temp is not a Numeric, Parameter, or None. + Raises + ------ + TypeError + If temp is not a Numeric, Parameter, or None. """ if temp is None: @@ -237,28 +262,35 @@ def temperature(self, temp: Parameter | Numeric | None) -> None: @property def normalize_detailed_balance(self) -> bool: - """Get whether to normalize the detailed balance factor. + """ + Get whether to normalize the detailed balance factor. If True, the detailed balance factor is divided by temperature. - Returns: - bool: Whether to normalize the detailed balance factor. + Returns + ------- + bool + Whether to normalize the detailed balance factor. """ return self._normalize_detailed_balance @normalize_detailed_balance.setter def normalize_detailed_balance(self, normalize: bool) -> None: - """Set whether to normalize the detailed balance factor. + """ + Set whether to normalize the detailed balance factor. If True, the detailed balance factor is divided by temperature. - Args: - normalize (bool): Whether to normalize the detailed balance - factor. + Parameters + ---------- + normalize : bool + Whether to normalize the detailed balance factor. - Raises: - TypeError: If normalize is not a bool. + Raises + ------ + TypeError + If normalize is not a bool. """ if not isinstance(normalize, bool): @@ -269,20 +301,22 @@ def normalize_detailed_balance(self, normalize: bool) -> None: def _create_energy_grid( self, ) -> EnergyGrid: - """Create a dense grid by upsampling and extending the energy - array. + """ + Create a dense grid by upsampling and extending the energy array. - If upsample_factor is None, no upsampling or extension is - performed. - This dense grid is used for convolution to improve accuracy. + If upsample_factor is None, no upsampling or extension is performed. This dense grid is + used for convolution to improve accuracy. - Returns: - EnergyGrid: The dense grid created by upsampling and - extending energy. + Raises + ------ + ValueError + If energy array is not uniformly spaced when upsample_factor is None, or if energy + array has less than 2 points. - Raises: - ValueError: If energy array is not uniformly spaced when - upsample_factor is None, or if energy array has less than 2 points. + Returns + ------- + EnergyGrid + The dense grid created by upsampling and extending energy. """ if self.upsample_factor is None: # Check if the array is uniformly spaced. @@ -345,18 +379,19 @@ def _check_width_thresholds( model: ComponentCollection | ModelComponent, model_name: str, ) -> None: - """Helper function to check and warn if components are wide - compared to the span of the data, or narrow compared to the - spacing. + """ + Helper function to check and warn if components are wide compared to the span of the data, + or narrow compared to the spacing. In both cases, the convolution accuracy may be compromised. - Args: - model (ComponentCollection | ModelComponent): The model to - check - model_name (str): A string indicating whether the model is a - 'sample model' or 'resolution model' for warning - messages. + Parameters + ---------- + model : ComponentCollection | ModelComponent + The model to check. + model_name : str + A string indicating whether the model is a 'sample model' or 'resolution model' for + warning messages. """ # Handle ComponentCollection or ModelComponent @@ -386,12 +421,13 @@ def _check_width_thresholds( ) def __repr__(self) -> str: - """Return a string representation of the - NumericalConvolutionBase. + """ + Return a string representation of the NumericalConvolutionBase. - Returns: - str: A string representation of the - NumericalConvolutionBase. + Returns + ------- + str + A string representation of the NumericalConvolutionBase. """ return ( f'{self.__class__.__name__}(' diff --git a/src/easydynamics/experiment/experiment.py b/src/easydynamics/experiment/experiment.py index ad829e37..383f6c06 100644 --- a/src/easydynamics/experiment/experiment.py +++ b/src/easydynamics/experiment/experiment.py @@ -15,11 +15,10 @@ class Experiment(NewBase): - """Holds data from an experiment as a sc.DataArray along with - metadata. + """ + Holds data from an experiment as a sc.DataArray along with metadata. - This is a minimal implementation that will be extended in the - future. + This is a minimal implementation that will be extended in the future. """ def __init__( @@ -28,18 +27,23 @@ def __init__( unique_name: str | None = None, data: sc.DataArray | str | None = None, ) -> None: - """Initialize the Experiment object. - - Args: - display_name (str | None, default="MyExperiment"): Display name of the experiment. - unique_name (str | None, default=None): Unique name of the experiment. If - None, a unique name will be generated. - data (sc.DataArray | str | None, default=None): Dataset associated with - the experiment. Can be a sc.DataArray or a filename - string to load from. If None, no data is loaded. - - Raises: - TypeError: If data is not a sc.DataArray, a string, or None. + """ + Initialize the Experiment object. + + Parameters + ---------- + display_name : str | None, default='MyExperiment' + Display name of the experiment. + unique_name : str | None, default=None + Unique name of the experiment. If None, a unique name will be generated. None. + data : sc.DataArray | str | None, default=None + Dataset associated with the experiment. Can be a sc.DataArray or a filename string to + load from. If None, no data is loaded. + + Raises + ------ + TypeError + If data is not a sc.DataArray, a string, or None. """ super().__init__( display_name=display_name, @@ -68,24 +72,30 @@ def __init__( @property def data(self) -> sc.DataArray | None: - """Get the dataset associated with this experiment. + """ + Get the dataset associated with this experiment. - Returns: - sc.DataArray | None: The dataset associated with this - experiment, or None if no data is loaded. + Returns + ------- + sc.DataArray | None + The dataset associated with this experiment, or None if no data is loaded. """ return self._data @data.setter def data(self, value: sc.DataArray) -> None: - """Set the dataset associated with this experiment. + """ + Set the dataset associated with this experiment. - Args: - value (sc.DataArray): The new dataset to associate with this - experiment. + Parameters + ---------- + value : sc.DataArray + The new dataset to associate with this experiment. - Raises: - TypeError: If the value is not a sc.DataArray. + Raises + ------ + TypeError + If the value is not a sc.DataArray. """ if not isinstance(value, sc.DataArray): raise TypeError(f'Data must be a sc.DataArray, not {type(value).__name__}') @@ -97,35 +107,44 @@ def data(self, value: sc.DataArray) -> None: @property def binned_data(self) -> sc.DataArray | None: - """Get the binned dataset associated with this experiment. + """ + Get the binned dataset associated with this experiment. - Returns: - sc.DataArray | None: The binned dataset associated with this - experiment, or None if no data is loaded. + Returns + ------- + sc.DataArray | None + The binned dataset associated with this experiment, or None if no data is loaded. """ return self._binned_data @binned_data.setter def binned_data(self, _value: sc.DataArray) -> None: - """Set the binned dataset associated with this experiment. Read- - only property. Use rebin() to rebin the data instead. + """ + Set the binned dataset associated with this experiment. + + Read- only property. Use rebin() to rebin the data instead. - Args: - _value (sc.DataArray): The new binned dataset to associate - with this experiment (ignored) + Parameters + ---------- + _value : sc.DataArray + The new binned dataset to associate with this experiment (ignored). - Raises: - AttributeError: Always, since binned_data is read-only. + Raises + ------ + AttributeError + Always, since binned_data is read-only. """ raise AttributeError('binned_data is a read-only property. Use rebin() to rebin the data') @property def Q(self) -> sc.Variable | None: - """Get the Q values from the dataset. + """ + Get the Q values from the dataset. - Returns: - sc.Variable | None: The Q values from the dataset, or None - if no data is loaded. + Returns + ------- + sc.Variable | None + The Q values from the dataset, or None if no data is loaded. """ if self._binned_data is None: return None @@ -133,24 +152,32 @@ def Q(self) -> sc.Variable | None: @Q.setter def Q(self, _value: sc.Variable) -> None: - """Set the Q values for the dataset. Q is a read-only property - derived from the data, so this setter raises an error. + """ + Set the Q values for the dataset. - Args: - _value (sc.Variable): The new Q values to set (ignored) + Q is a read-only property derived from the data, so this setter raises an error. - Raises: - AttributeError: Always, since Q is read-only. + Parameters + ---------- + _value : sc.Variable + The new Q values to set (ignored). + + Raises + ------ + AttributeError + Always, since Q is read-only. """ raise AttributeError('Q is a read-only property derived from the data.') @property def energy(self) -> sc.Variable | None: - """Get the energy values from the dataset. + """ + Get the energy values from the dataset. - Returns: - sc.Variable | None: The energy values from the dataset, or - None if no data is loaded. + Returns + ------- + sc.Variable | None + The energy values from the dataset, or None if no data is loaded. """ if self._binned_data is None: return None @@ -158,31 +185,42 @@ def energy(self) -> sc.Variable | None: @energy.setter def energy(self, _value: sc.Variable) -> None: - """Set the energy values for the dataset. Energy is a read-only - property derived from the data, so this setter raises an error. + """ + Set the energy values for the dataset. - Args: - _value (sc.Variable): The new energy values to set (ignored) + Energy is a read-only property derived from the data, so this setter raises an error. - Raises: - AttributeError: Always, since energy is read-only. + Parameters + ---------- + _value : sc.Variable + The new energy values to set (ignored). + + Raises + ------ + AttributeError + Always, since energy is read-only. """ raise AttributeError('energy is a read-only property derived from the data.') def get_masked_energy(self, Q_index: int) -> sc.Variable | None: - """Get the energy values from the dataset, removing points where - the y values or variances are NaN or Inf for the given Q index. - - Args: - Q_index (int): The Q index to get the masked energy values - for. - - Returns: - sc.Variable | None: The masked energy values from the - dataset, or None if no data is loaded. - - Raises: - IndexError: If Q_index is not a valid index for the Q values. + """ + Get the energy values from the dataset, removing points where the y values or variances are + NaN or Inf for the given Q index. + + Parameters + ---------- + Q_index : int + The Q index to get the masked energy values for. + + Raises + ------ + IndexError + If Q_index is not a valid index for the Q values. + + Returns + ------- + sc.Variable | None + The masked energy values from the dataset, or None if no data is loaded. """ if self._binned_data is None: return None @@ -205,16 +243,21 @@ def get_masked_energy(self, Q_index: int) -> sc.Variable | None: ########### def load_hdf5(self, filename: str, display_name: str | None = None) -> None: - """Load data from an HDF5 file. - - Args: - filename (str ): Path to the HDF5 file. - display_name (str | None, default=None): Optional display name for the - experiment. - - Raises: - TypeError: If filename is not a string or if display_name is - not a string or None or if the loaded data is not a sc.DataArray. + """ + Load data from an HDF5 file. + + Parameters + ---------- + filename : str + Path to the HDF5 file. + display_name : str | None, default=None + Optional display name for the experiment. + + Raises + ------ + TypeError + If filename is not a string or if display_name is not a string or None or if the loaded + data is not a sc.DataArray. """ if not isinstance(filename, str): raise TypeError(f'Filename must be a string, not {type(filename).__name__}') @@ -235,16 +278,21 @@ def load_hdf5(self, filename: str, display_name: str | None = None) -> None: self.data = loaded_data def save_hdf5(self, filename: str | None = None) -> None: - """Save the dataset to HDF5. - - Args: - filename (str | None, default=None): Path to the output HDF5 file. - If None, the file will be named after the unique_name of - the experiment with a .h5 extension. - - Raises: - TypeError: If filename is not a string or None. - ValueError: If there is no data to save. + """ + Save the dataset to HDF5. + + Parameters + ---------- + filename : str | None, default=None + Path to the output HDF5 file. If None, the file will be named after the unique_name of + the experiment with a .h5 extension. + + Raises + ------ + TypeError + If filename is not a string or None. + ValueError + If there is no data to save. """ if filename is None: @@ -266,18 +314,23 @@ def remove_data(self) -> None: self._binned_data = None def rebin(self, dimensions: dict[str, int | sc.Variable]) -> None: - """Rebin the dataset along specified dimensions. - - Args: - dimensions (dict[str, int | sc.Variable]): A dictionary - mapping dimension names to number of bins (int) or bin - edges (sc.Variable). - - Raises: - TypeError: If dimensions is not a dictionary or if - keys/values are of incorrect types. - ValueError: If there is no data to rebin. - KeyError: If a specified dimension is not in the dataset. + """ + Rebin the dataset along specified dimensions. + + Parameters + ---------- + dimensions : dict[str, int | sc.Variable] + A dictionary mapping dimension names to number of bins (int) or bin edges + (sc.Variable). + + Raises + ------ + TypeError + If dimensions is not a dictionary or if keys/values are of incorrect types. + ValueError + If there is no data to rebin. + KeyError + If a specified dimension is not in the dataset. """ if not isinstance(dimensions, dict): @@ -320,15 +373,22 @@ def rebin(self, dimensions: dict[str, int | sc.Variable]) -> None: ########### def plot_data(self, slicer: bool = False, **kwargs: dict) -> None: - """Plot the dataset using plopp: https://scipp.github.io/plopp/ - - Args: - slicer (bool, default=False): If True, use plopp's slicer instead of plot. - **kwargs (dict): Additional keyword arguments to pass to plopp. - - Raises: - ValueError: If there is no data to plot. - RuntimeError: If not in a Jupyter notebook environment. + """ + Plot the dataset using plopp: https://scipp.github.io/plopp/. + + Parameters + ---------- + slicer : bool, default=False + If True, use plopp's slicer instead of plot. + **kwargs : dict + Additional keyword arguments to pass to plopp. + + Raises + ------ + ValueError + If there is no data to plot. + RuntimeError + If not in a Jupyter notebook environment. """ if self._binned_data is None: @@ -367,14 +427,20 @@ def plot_data(self, slicer: bool = False, **kwargs: dict) -> None: @staticmethod def _validate_coordinates(data: sc.DataArray) -> None: - """Validate that required coordinates are present in the data. - - Args: - data (sc.DataArray): The data to validate. - - Raises: - TypeError: If data is not a sc.DataArray. - ValueError: If required coordinates are missing. + """ + Validate that required coordinates are present in the data. + + Parameters + ---------- + data : sc.DataArray + The data to validate. + + Raises + ------ + TypeError + If data is not a sc.DataArray. + ValueError + If required coordinates are missing. """ if not isinstance(data, sc.DataArray): raise TypeError('Data must be a sc.DataArray.') @@ -385,13 +451,18 @@ def _validate_coordinates(data: sc.DataArray) -> None: raise ValueError(f"Data is missing required coordinate: '{coord}'") def _convert_to_bin_centers(self, data: sc.DataArray) -> sc.DataArray: - """Convert the coordinates of the data to bin centers. + """ + Convert the coordinates of the data to bin centers. - Args: - data (sc.DataArray): The data to convert. + Parameters + ---------- + data : sc.DataArray + The data to convert. - Returns: - sc.DataArray: The data with coordinates at bin centers. + Returns + ------- + sc.DataArray + The data with coordinates at bin centers. """ for dim in data.dims: coord = data.coords[dim] @@ -401,16 +472,18 @@ def _convert_to_bin_centers(self, data: sc.DataArray) -> sc.DataArray: return data def _extract_x_y_var(self, Q_index: int) -> tuple[np.ndarray, np.ndarray, np.ndarray]: - """Extract the x, y, and weights arrays from the experiment for - the given Q index. + """ + Extract the x, y, and weights arrays from the experiment for the given Q index. - Args: - Q_index (int): The Q index to extract the data for. + Parameters + ---------- + Q_index : int + The Q index to extract the data for. - Returns: - tuple[np.ndarray, np.ndarray, np.ndarray]: The x, y, and - variances arrays extracted from the experiment for the - given Q index. + Returns + ------- + tuple[np.ndarray, np.ndarray, np.ndarray] + The x, y, and variances arrays extracted from the experiment for the given Q index. """ data = self.binned_data['Q', Q_index] x = data.coords['energy'].values @@ -421,21 +494,26 @@ def _extract_x_y_var(self, Q_index: int) -> tuple[np.ndarray, np.ndarray, np.nda def _extract_x_y_weights_only_finite( self, Q_index: int ) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - """Extract the x, y, and weights arrays from the experiment for - the given Q index, removing any NaN and Inf values. - - Args: - Q_index (int): The Q index to extract the data for. - - Returns: - tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: The - x, y, weights, and mask arrays extracted from the - experiment for the given Q index, with NaNs and Infs - removed. - - Raises: - ValueError: If any variances are zero after removing NaNs - and Infs, since this would lead to infinite weights. + """ + Extract the x, y, and weights arrays from the experiment for the given Q index, removing + any NaN and Inf values. + + Parameters + ---------- + Q_index : int + The Q index to extract the data for. + + Raises + ------ + ValueError + If any variances are zero after removing NaNs and Infs, since this would lead to + infinite weights. + + Returns + ------- + tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray] + The x, y, weights, and mask arrays extracted from the experiment for the given Q index, + with NaNs and Infs removed. """ x, y, var = self._extract_x_y_var(Q_index) @@ -463,19 +541,25 @@ def _extract_x_y_weights_only_finite( ########### def __repr__(self) -> str: - """Return a string representation of the Experiment object. + """ + Return a string representation of the Experiment object. - Returns: - str: A string representation of the Experiment object. + Returns + ------- + str + A string representation of the Experiment object. """ return f'Experiment `{self.unique_name}` with data: {self._data}' def __copy__(self) -> 'Experiment': - """Return a copy of the object. + """ + Return a copy of the object. - Returns: - Experiment: A copy of the Experiment object. + Returns + ------- + 'Experiment' + A copy of the Experiment object. """ temp = self.to_dict(skip=['unique_name']) new_obj = self.__class__.from_dict(temp) diff --git a/src/easydynamics/sample_model/background_model.py b/src/easydynamics/sample_model/background_model.py index 2f4645f5..81f29b81 100644 --- a/src/easydynamics/sample_model/background_model.py +++ b/src/easydynamics/sample_model/background_model.py @@ -11,8 +11,8 @@ class BackgroundModel(ModelBase): - """BackgroundModel represents a model of the background in an - experiment at various Q. + """ + BackgroundModel represents a model of the background in an experiment at various Q. """ def __init__( @@ -23,19 +23,22 @@ def __init__( components: ModelComponent | ComponentCollection | None = None, Q: Q_type | None = None, ) -> None: - """Initialize the BackgroundModel. + """ + Initialize the BackgroundModel. - Args: - display_name (str | None, default='MyBackgroundModel'): Display name of the model. - unique_name (str | None, default=None): Unique name of the model. If None, - a unique name will be generated. - unit (str | sc.Unit, default='meV'): Unit of the model. - components (ModelComponent | ComponentCollection | None, default=None): - Template components of the model. If None, no components - are added. These components are copied into - ComponentCollections for each Q value. - Q (Q_type | None, default=None): Q values for the model. If None, Q is not - set. + Parameters + ---------- + display_name : str | None, default='MyBackgroundModel' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + unit : str | sc.Unit, default='meV' + Unit of the model. + components : ModelComponent | ComponentCollection | None, default=None + Template components of the model. If None, no components are added. These components + are copied into ComponentCollections for each Q value. + Q : Q_type | None, default=None + Q values for the model. If None, Q is not set. """ super().__init__( display_name=display_name, diff --git a/src/easydynamics/sample_model/component_collection.py b/src/easydynamics/sample_model/component_collection.py index 5f483091..a805f58f 100644 --- a/src/easydynamics/sample_model/component_collection.py +++ b/src/easydynamics/sample_model/component_collection.py @@ -17,8 +17,8 @@ class ComponentCollection(ModelBase): - """Collection of model components representing a sample, background - or resolution model. + """ + Collection of model components representing a sample, background or resolution model. """ def __init__( @@ -28,20 +28,24 @@ def __init__( unique_name: str | None = None, components: list[ModelComponent] | None = None, ) -> None: - """Initialize a new ComponentCollection. - - Args: - unit (str | sc.Unit, default='meV'): Unit of the collection. - display_name (str | None, default="MyComponentCollection"): Display - name of the collection - unique_name (str | None, default=None): Unique name of the collection - Defaults to None. - components (list[ModelComponent] | None, default=None): Initial model - components to add to the ComponentCollection. - - Raises: - TypeError: If unit is not a string or sc.Unit, - or if components is not a list of ModelComponent. + """ + Initialize a new ComponentCollection. + + Parameters + ---------- + unit : str | sc.Unit, default='meV' + Unit of the collection. + display_name : str | None, default='MyComponentCollection' + Display name of the collection. + unique_name : str | None, default=None + Unique name of the collection. + components : list[ModelComponent] | None, default=None + Initial model components to add to the ComponentCollection. + + Raises + ------ + TypeError + If unit is not a string or sc.Unit, or if components is not a list of ModelComponent. """ super().__init__(display_name=display_name, unique_name=unique_name) @@ -66,24 +70,31 @@ def __init__( @property def components(self) -> list[ModelComponent]: - """Get the list of components in the collection. + """ + Get the list of components in the collection. - Returns: - list[ModelComponent]: The components in the collection. + Returns + ------- + list[ModelComponent] + The components in the collection. """ return list(self._components) @components.setter def components(self, components: list[ModelComponent]) -> None: - """Set the list of components in the collection. + """ + Set the list of components in the collection. - Args: - components (list[ModelComponent]): The new list of - components. + Parameters + ---------- + components : list[ModelComponent] + The new list of components. - Raises: - TypeError: If components is not a list of ModelComponent. + Raises + ------ + TypeError + If components is not a list of ModelComponent. """ if not isinstance(components, list): @@ -99,24 +110,30 @@ def components(self, components: list[ModelComponent]) -> None: @property def is_empty(self) -> bool: - """Check if the ComponentCollection has no components. + """ + Check if the ComponentCollection has no components. - Returns: - bool: True if the collection has no components, - False otherwise. + Returns + ------- + bool + True if the collection has no components, False otherwise. """ return not self._components @is_empty.setter def is_empty(self, _value: bool) -> None: - """is_empty is a read-only property that indicates whether the - collection has components. + """ + Is_empty is a read-only property that indicates whether the collection has components. - Args: - _value (bool): The value to set (ignored). + Parameters + ---------- + _value : bool + The value to set (ignored). - Raises: - AttributeError: Always raised since is_empty is read-only. + Raises + ------ + AttributeError + Always raised since is_empty is read-only. """ raise AttributeError( 'is_empty is a read-only property that indicates ' @@ -125,23 +142,30 @@ def is_empty(self, _value: bool) -> None: @property def unit(self) -> str | sc.Unit | None: - """Get the unit of the ComponentCollection. + """ + Get the unit of the ComponentCollection. - Returns: - str | sc.Unit | None: The unit of the ComponentCollection, - which is the same as the unit of its components. + Returns + ------- + str | sc.Unit | None + The unit of the ComponentCollection, which is the same as the unit of its components. """ return self._unit @unit.setter def unit(self, _unit_str: str) -> None: - """Unit is read-only and cannot be set directly. + """ + Unit is read-only and cannot be set directly. - Args: - _unit_str (str): The unit to set (ignored). + Parameters + ---------- + _unit_str : str + The unit to set (ignored). - Raises: - AttributeError: Always raised since unit is read-only. + Raises + ------ + AttributeError + Always raised since unit is read-only. """ raise AttributeError( @@ -150,16 +174,20 @@ def unit(self, _unit_str: str) -> None: ) # noqa: E501 def convert_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the ComponentCollection and all its - components. - - Args: - unit (str | sc.Unit): The target unit to convert to. - - Raises: - TypeError: If unit is not a string or sc.Unit. - Exception: If any component cannot be converted to the - specified unit. + """ + Convert the unit of the ComponentCollection and all its components. + + Parameters + ---------- + unit : str | sc.Unit + The target unit to convert to. + + Raises + ------ + TypeError + If unit is not a string or sc.Unit. + Exception + If any component cannot be converted to the specified unit. """ if not isinstance(unit, (str, sc.Unit)): @@ -185,19 +213,22 @@ def convert_unit(self, unit: str | sc.Unit) -> None: # ------------------------------------------------------------------ def append_component(self, component: ModelComponent | ComponentCollection) -> None: - """Append a model component or the components from another - ComponentCollection to this ComponentCollection. - - Args: - component (ModelComponent | "ComponentCollection"): The component - to append. If a ComponentCollection is provided, all of its - components will be appended. - - Raises: - TypeError: If component is not a ModelComponent or - ComponentCollection. - ValueError: If a component with the same unique name already - exists in the collection. + """ + Append a model component or the components from another ComponentCollection to this + ComponentCollection. + + Parameters + ---------- + component : ModelComponent | ComponentCollection + The component to append. If a ComponentCollection is provided, all of its components + will be appended. + + Raises + ------ + TypeError + If component is not a ModelComponent or ComponentCollection. + ValueError + If a component with the same unique name already exists in the collection. """ if not isinstance(component, (ModelComponent, ComponentCollection)): raise TypeError( @@ -219,15 +250,20 @@ def append_component(self, component: ModelComponent | ComponentCollection) -> N self._components.append(comp) def remove_component(self, unique_name: str) -> None: - """Remove a component from the collection by its unique name. - - Args: - unique_name (str): Unique name of the component to remove. - - Raises: - TypeError: If unique_name is not a string. - KeyError: If no component with the given unique name exists - in the collection. + """ + Remove a component from the collection by its unique name. + + Parameters + ---------- + unique_name : str + Unique name of the component to remove. + + Raises + ------ + TypeError + If unique_name is not a string. + KeyError + If no component with the given unique name exists in the collection. """ if not isinstance(unique_name, str): @@ -246,22 +282,30 @@ def remove_component(self, unique_name: str) -> None: @property def components(self) -> list[ModelComponent]: - """Get the list of components in the collection. + """ + Get the list of components in the collection. - Returns: - list[ModelComponent]: The components in the collection. + Returns + ------- + list[ModelComponent] + The components in the collection. """ return list(self._components) @components.setter def components(self, components: list[ModelComponent]) -> None: - """Set the components in the collection. + """ + Set the components in the collection. - Args: - components (list[ModelComponent]): The new components in the collection + Parameters + ---------- + components : list[ModelComponent] + The new components in the collection. - Raises: - TypeError: If components is not a list of ModelComponent + Raises + ------ + TypeError + If components is not a list of ModelComponent. """ if not isinstance(components, list): raise TypeError('components must be a list of ModelComponent instances.') @@ -276,23 +320,30 @@ def components(self, components: list[ModelComponent]) -> None: @property def is_empty(self) -> bool: - """Returns True if the collection has no components, otherwise - False. + """ + Returns True if the collection has no components, otherwise False. - Returns: - bool: True if the collection has no components, otherwise False + Returns + ------- + bool + True if the collection has no components, otherwise False. """ return not self._components @is_empty.setter def is_empty(self, _value: bool) -> None: - """is_empty is read-only. + """ + Is_empty is read-only. - Args: - _value (bool): ignored. + Parameters + ---------- + _value : bool + Ignored. - Raises: - AttributeError: Always raised since is_empty is read-only + Raises + ------ + AttributeError + Always raised since is_empty is read-only. """ raise AttributeError( 'is_empty is a read-only property that indicates ' @@ -300,11 +351,13 @@ def is_empty(self, _value: bool) -> None: ) def list_component_names(self) -> list[str]: - """List the names of all components in the model. + """ + List the names of all components in the model. - Returns: - list[str]: List of unique names of the components in the - collection. + Returns + ------- + list[str] + List of unique names of the components in the collection. """ return [component.unique_name for component in self._components] @@ -314,13 +367,16 @@ def clear_components(self) -> None: self._components.clear() def normalize_area(self) -> None: - """Normalize the areas of all components so they sum to 1. This - is useful for convolutions. + """ + Normalize the areas of all components so they sum to 1. - Raises: - ValueError: If there are no components in the model or - if the total area is zero or not finite, which - would prevent normalization. + This is useful for convolutions. + + Raises + ------ + ValueError + If there are no components in the model or if the total area is zero or not finite, + which would prevent normalization. """ if not self.components: raise ValueError('No components in the model to normalize.') @@ -354,23 +410,30 @@ def normalize_area(self) -> None: # ------------------------------------------------------------------ def get_all_variables(self) -> list[DescriptorBase]: - """Get all parameters from the model component. + """ + Get all parameters from the model component. - Returns: - list[DescriptorBase]: List of parameters in the component. + Returns + ------- + list[DescriptorBase] + List of parameters in the component. """ return [var for component in self.components for var in component.get_all_variables()] def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - """Evaluate the sum of all components. + """ + Evaluate the sum of all components. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - Energy axis. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + Energy axis. - Returns: - np.ndarray: Evaluated model values. + Returns + ------- + np.ndarray + Evaluated model values. """ if not self.components: @@ -382,20 +445,29 @@ def evaluate_component( x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray, unique_name: str, ) -> np.ndarray: - """Evaluate a single component by name. - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - Energy axis. - unique_name (str): Component unique name. - - Returns: - np.ndarray: Evaluated values for the specified component. - Raises: - ValueError: If there are no components in the model. - TypeError: If unique_name is not a string. - KeyError: If no component with the given unique name exists - in the collection. + """ + Evaluate a single component by name. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + Energy axis. + unique_name : str + Component unique name. + + Raises + ------ + ValueError + If there are no components in the model. + TypeError + If unique_name is not a string. + KeyError + If no component with the given unique name exists in the collection. + + Returns + ------- + np.ndarray + Evaluated values for the specified component. """ if not self.components: raise ValueError('No components in the model to evaluate.') @@ -428,15 +500,18 @@ def free_all_parameters(self) -> None: # ------------------------------------------------------------------ def __contains__(self, item: str | ModelComponent) -> bool: - """Check if a component with the given name or instance exists - in the ComponentCollection. + """ + Check if a component with the given name or instance exists in the ComponentCollection. - Args: - item (str | ModelComponent): The component name or instance - to check for. + Parameters + ---------- + item : str | ModelComponent + The component name or instance to check for. - Returns: - bool: True if the component exists, False otherwise. + Returns + ------- + bool + True if the component exists, False otherwise. """ if isinstance(item, str): @@ -448,10 +523,13 @@ def __contains__(self, item: str | ModelComponent) -> bool: return False def __repr__(self) -> str: - """Return a string representation of the ComponentCollection. + """ + Return a string representation of the ComponentCollection. - Returns: - str: String representation of the ComponentCollection. + Returns + ------- + str + String representation of the ComponentCollection. """ comp_names = ', '.join(c.unique_name for c in self.components) or 'No components' diff --git a/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py b/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py index 81a766f7..3bb71a72 100644 --- a/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py +++ b/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py @@ -14,15 +14,11 @@ class DampedHarmonicOscillator(CreateParametersMixin, ModelComponent): - r"""Model of a Damped Harmonic Oscillator (DHO). - - The intensity is given by - $$ - I(x) = \frac{2 A x_0^2 \gamma}{\pi \left( (x^2 - x_0^2)^2 + - (2 \gamma x)^2 \right)}, - $$ - where $A$ is the area, $x_0$ is the center, and $\gamma$ is the - width. + r""" + Model of a Damped Harmonic Oscillator (DHO). + + The intensity is given by $$ I(x) = \frac{2 A x_0^2 \gamma}{\pi \left( (x^2 - x_0^2)^2 + (2 + \gamma x)^2 \right)}, $$ where $A$ is the area, $x_0$ is the center, and $\gamma$ is the width. """ def __init__( @@ -34,19 +30,25 @@ def __init__( display_name: str | None = 'DampedHarmonicOscillator', unique_name: str | None = None, ) -> None: - """Initialize the Damped Harmonic Oscillator. - - Args: - area (Numeric | Parameter, default=1.0): Area under the curve. - center (Numeric | Parameter, default=1.0): Resonance frequency, approximately the - peak position. - width (Numeric | Parameter, default=1.0): Damping constant, approximately the - half width at half max (HWHM) of the peaks. - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='DampedHarmonicOscillator'): - Display name of the component. - unique_name (str | None, default=None): Unique name of the component. - If None, a unique_name is automatically generated. + """ + Initialize the Damped Harmonic Oscillator. + + Parameters + ---------- + area : Numeric | Parameter, default=1.0 + Area under the curve. + center : Numeric | Parameter, default=1.0 + Resonance frequency, approximately the peak position. + width : Numeric | Parameter, default=1.0 + Damping constant, approximately the half width at half max (HWHM) of the peaks. By + default, 1.0. + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='DampedHarmonicOscillator' + Display name of the component. + unique_name : str | None, default=None + Unique name of the component. If None, a unique_name is automatically generated. By + default, None. """ super().__init__( @@ -73,22 +75,30 @@ def __init__( @property def area(self) -> Parameter: - """Get the area parameter. + """ + Get the area parameter. - Returns: - Parameter: The area parameter. + Returns + ------- + Parameter + The area parameter. """ return self._area @area.setter def area(self, value: Numeric) -> None: - """Set the value of the area parameter. + """ + Set the value of the area parameter. - Args: - value (Numeric): The new value for the area parameter. + Parameters + ---------- + value : Numeric + The new value for the area parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): raise TypeError('area must be a number') @@ -96,23 +106,32 @@ def area(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric) -> None: - """Set the value of the center parameter. - - Args: - value (Numeric): The new value for the center parameter. - - Raises: - TypeError: If the value is not a number. - ValueError: If the value is not positive. + """ + Set the value of the center parameter. + + Parameters + ---------- + value : Numeric + The new value for the center parameter. + + Raises + ------ + TypeError + If the value is not a number. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('center must be a number') @@ -123,23 +142,32 @@ def center(self, value: Numeric) -> None: @property def width(self) -> Parameter: - """Get the width parameter. + """ + Get the width parameter. - Returns: - Parameter: The width parameter. + Returns + ------- + Parameter + The width parameter. """ return self._width @width.setter def width(self, value: Numeric) -> None: - """Set the value of the width parameter. - - Args: - value (Numeric): The new value for the width parameter. - - Raises: - TypeError: If the value is not a number. - ValueError: If the value is not positive. + """ + Set the value of the width parameter. + + Parameters + ---------- + value : Numeric + The new value for the width parameter. + + Raises + ------ + TypeError + If the value is not a number. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('width must be a number') @@ -150,24 +178,22 @@ def width(self, value: Numeric) -> None: self._width.value = value def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - r"""Evaluate the Damped Harmonic Oscillator at the given x - values. - - If x is a scipp Variable, the unit of the DHO will be converted - to match x. The intensity is given by - $$ - I(x) = \frac{2 A x_0^2 \gamma}{\pi \left( (x^2 - x_0^2)^2 + - (2 \gamma x)^2 \right)}, - $$ - where $A$ is the area, $x_0$ is the center, and $\gamma$ is the - width. - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the DHO. - - Returns: - np.ndarray: The intensity of the DHO at the given x values. + r""" + Evaluate the Damped Harmonic Oscillator at the given x values. + + If x is a scipp Variable, the unit of the DHO will be converted to match x. The intensity + is given by $$ I(x) = \frac{2 A x_0^2 \gamma}{\pi \left( (x^2 - x_0^2)^2 + (2 \gamma x)^2 + \right)}, $$ where $A$ is the area, $x_0$ is the center, and $\gamma$ is the width. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the DHO. + + Returns + ------- + np.ndarray + The intensity of the DHO at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -179,12 +205,13 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) return self.area.value * normalization / (denominator) def __repr__(self) -> str: - """Return a string representation of the Damped Harmonic - Oscillator. + """ + Return a string representation of the Damped Harmonic Oscillator. - Returns: - str: A string representation of the Damped Harmonic - Oscillator. + Returns + ------- + str + A string representation of the Damped Harmonic Oscillator. """ return ( f'DampedHarmonicOscillator(display_name = {self.display_name}, unit = {self._unit},\n \ diff --git a/src/easydynamics/sample_model/components/delta_function.py b/src/easydynamics/sample_model/components/delta_function.py index 820a039b..178b4489 100644 --- a/src/easydynamics/sample_model/components/delta_function.py +++ b/src/easydynamics/sample_model/components/delta_function.py @@ -16,12 +16,12 @@ class DeltaFunction(CreateParametersMixin, ModelComponent): - """Delta function. + """ + Delta function. - Evaluates to zero everywhere, except in convolutions, where it acts - as an identity. This is handled by the Convolution method. If the - center is not provided, it will be centered at 0 and fixed, which is - typically what you want in QENS. + Evaluates to zero everywhere, except in convolutions, where it acts as an identity. This is + handled by the Convolution method. If the center is not provided, it will be centered at 0 and + fixed, which is typically what you want in QENS. """ def __init__( @@ -32,16 +32,22 @@ def __init__( display_name: str | None = 'DeltaFunction', unique_name: str | None = None, ) -> None: - """Initialize the Delta function. - - Args: - center (Numeric | Parameter | None, default=None): Center of the delta function. - If None, defaults to 0 and is fixed. - area (Numeric | Parameter, default=1.0): Total area under the curve. - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='DeltaFunction'): Name of the component. - unique_name (str | None, default=None): Unique name of the component. - If None, a unique_name is automatically generated. + """ + Initialize the Delta function. + + Parameters + ---------- + center : Numeric | Parameter | None, default=None + Center of the delta function. If None. + area : Numeric | Parameter, default=1.0 + Total area under the curve. + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='DeltaFunction' + Name of the component. + unique_name : str | None, default=None + Unique name of the component. If None, a unique_name is automatically generated. By + default, None. """ # Validate inputs and create Parameters if not given super().__init__( @@ -61,23 +67,31 @@ def __init__( @property def area(self) -> Parameter: - """Get the area parameter. + """ + Get the area parameter. - Returns: - Parameter: The area parameter. + Returns + ------- + Parameter + The area parameter. """ return self._area @area.setter def area(self, value: Numeric) -> None: - """Set the value of the area parameter. + """ + Set the value of the area parameter. - Args: - value (Numeric): The new value for the area parameter. + Parameters + ---------- + value : Numeric + The new value for the area parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): @@ -86,24 +100,31 @@ def area(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric | None) -> None: - """Set the center parameter value. + """ + Set the center parameter value. - Args: - value (Numeric | None): The new value for the center - parameter. If None, defaults to 0 and is fixed. + Parameters + ---------- + value : Numeric | None + The new value for the center parameter. If None, defaults to 0 and is fixed. - Raises: - TypeError: If the value is not a number or None. + Raises + ------ + TypeError + If the value is not a number or None. """ if value is None: @@ -114,19 +135,21 @@ def center(self, value: Numeric | None) -> None: self._center.value = value def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - """Evaluate the Delta function at the given x values. + """ + Evaluate the Delta function at the given x values. - The Delta function evaluates to zero everywhere, except at the - center. Its numerical integral is equal to the area. It acts as - an identity in convolutions. + The Delta function evaluates to zero everywhere, except at the center. Its numerical + integral is equal to the area. It acts as an identity in convolutions. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Delta function. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Delta function. - Returns: - np.ndarray: The evaluated Delta function at the given x - values. + Returns + ------- + np.ndarray + The evaluated Delta function at the given x values. """ # x assumed sorted, 1D numpy array @@ -159,10 +182,13 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) return model def __repr__(self) -> str: - """Return a string representation of the Delta function. + """ + Return a string representation of the Delta function. - Returns: - str: A string representation of the Delta function. + Returns + ------- + str + A string representation of the Delta function. """ return f'DeltaFunction(unique_name = {self.unique_name}, unit = {self._unit},\n \ diff --git a/src/easydynamics/sample_model/components/exponential.py b/src/easydynamics/sample_model/components/exponential.py index 56a72912..7c5e36cb 100644 --- a/src/easydynamics/sample_model/components/exponential.py +++ b/src/easydynamics/sample_model/components/exponential.py @@ -14,14 +14,14 @@ class Exponential(CreateParametersMixin, ModelComponent): - r"""Model of an exponential function. + r""" + Model of an exponential function. The intensity is given by $$ I(x) = A e^{B (x-x_0)}, $$ - where $A$ is the amplitude, $x_0$ is the center, and $B$ describes - the rate of decay or growth. + where $A$ is the amplitude, $x_0$ is the center, and $B$ describes the rate of decay or growth. """ def __init__( @@ -33,24 +33,31 @@ def __init__( display_name: str | None = 'Exponential', unique_name: str | None = None, ) -> None: - """Initialize the Exponential component. - - Args: - amplitude (Numeric | Parameter, default=1.0): Amplitude of the - Exponential. - center (Numeric | Parameter | None, default=None): Center of the Exponential. - If None, the center is fixed at 0. - rate (Numeric | Parameter, default=1.0): Decay or growth - constant of the Exponential. - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='Exponential'): Name of the component. - unique_name (str | None, default=None): Unique name of the component. if - None, a unique_name is automatically generated. - - Raises: - TypeError: If amplitude, center, or rate are not numbers or - Parameters. - ValueError: If amplitude, center or rate are not finite numbers + """ + Initialize the Exponential component. + + Parameters + ---------- + amplitude : Numeric | Parameter, default=1.0 + Amplitude of the Exponential. + center : Numeric | Parameter | None, default=None + Center of the Exponential. If None, the center is fixed at 0. + rate : Numeric | Parameter, default=1.0 + Decay or growth constant of the Exponential. + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='Exponential' + Name of the component. + unique_name : str | None, default=None + Unique name of the component. if None, a unique_name is automatically generated. By + default, None. + + Raises + ------ + TypeError + If amplitude, center, or rate are not numbers or Parameters. + ValueError + If amplitude, center or rate are not finite numbers. """ # Validate inputs and create Parameters if not given super().__init__( @@ -89,23 +96,31 @@ def __init__( @property def amplitude(self) -> Parameter: - """Get the amplitude parameter. + """ + Get the amplitude parameter. - Returns: - Parameter: The amplitude parameter. + Returns + ------- + Parameter + The amplitude parameter. """ return self._amplitude @amplitude.setter def amplitude(self, value: Numeric) -> None: - """Set the value of the amplitude parameter. + """ + Set the value of the amplitude parameter. - Args: - value (Numeric): The new value for the amplitude parameter. + Parameters + ---------- + value : Numeric + The new value for the amplitude parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): @@ -114,24 +129,31 @@ def amplitude(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric | None) -> None: - """Set the center parameter value. + """ + Set the center parameter value. - Args: - value (Numeric | None): The new value for the center - parameter. + Parameters + ---------- + value : Numeric | None + The new value for the center parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if value is None: @@ -144,23 +166,30 @@ def center(self, value: Numeric | None) -> None: @property def rate(self) -> Parameter: - """Get the rate parameter. + """ + Get the rate parameter. - Returns: - Parameter: The rate parameter. + Returns + ------- + Parameter + The rate parameter. """ return self._rate @rate.setter def rate(self, value: Numeric) -> None: - """Set the rate parameter value. + """ + Set the rate parameter value. - Args: - value (Numeric): The new value for the rate - parameter. + Parameters + ---------- + value : Numeric + The new value for the rate parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): raise TypeError('rate must be a number') @@ -171,25 +200,23 @@ def evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray, ) -> np.ndarray: - r"""Evaluate the Exponential at the given x values. + r""" + Evaluate the Exponential at the given x values. - If x is a scipp Variable, the unit of the Exponential will be - converted to match x. - The intensity is given by - $$ - I(x) = A \exp\left( r (x - x_0) \right) - $$ + If x is a scipp Variable, the unit of the Exponential will be converted to match x. The + intensity is given by $$ I(x) = A \exp\left( r (x - x_0) \right) $$ - where $A$ is the amplitude, $x_0$ is the center, and $r$ is the - rate. + where $A$ is the amplitude, $x_0$ is the center, and $r$ is the rate. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Exponential. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Exponential. - Returns: - np.ndarray: The intensity of the Exponential at the given x - values. + Returns + ------- + np.ndarray + The intensity of the Exponential at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -198,14 +225,20 @@ def evaluate( return self.amplitude.value * np.exp(exponent) def convert_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the Parameters in the component. - - Args: - unit (str | sc.Unit): The new unit to convert to. - - Raises: - TypeError: If unit is not a string or sc.Unit. - Exception: If conversion fails for any parameter. + """ + Convert the unit of the Parameters in the component. + + Parameters + ---------- + unit : str | sc.Unit + The new unit to convert to. + + Raises + ------ + TypeError + If unit is not a string or sc.Unit. + Exception + If conversion fails for any parameter. """ if not isinstance(unit, (str, sc.Unit)): @@ -229,10 +262,13 @@ def convert_unit(self, unit: str | sc.Unit) -> None: raise e def __repr__(self) -> str: - """Return a string representation of the Exponential. + """ + Return a string representation of the Exponential. - Returns: - str: A string representation of the Exponential. + Returns + ------- + str + A string representation of the Exponential. """ return f'Exponential(unique_name = {self.unique_name}, unit = {self._unit},\n \ diff --git a/src/easydynamics/sample_model/components/expression_component.py b/src/easydynamics/sample_model/components/expression_component.py index dcc9e445..176b4dc5 100644 --- a/src/easydynamics/sample_model/components/expression_component.py +++ b/src/easydynamics/sample_model/components/expression_component.py @@ -14,16 +14,13 @@ class ExpressionComponent(ModelComponent): - """Model component defined by a symbolic expression. + """ + Model component defined by a symbolic expression. - Example: - expr = ExpressionComponent( - "A * exp(-(x - x0)**2 / (2*sigma**2))", - parameters={"A": 10, "x0": 0, "sigma": 1}, - ) + Example: expr = ExpressionComponent( "A * exp(-(x - x0)**2 / (2*sigma**2))", parameters={"A": + 10, "x0": 0, "sigma": 1}, ) - expr.A = 5 - y = expr.evaluate(x) + expr.A = 5 y = expr.evaluate(x) """ # ------------------------- @@ -77,21 +74,28 @@ def __init__( display_name: str | None = 'Expression', unique_name: str | None = None, ) -> None: - """Initialize the ExpressionComponent. - - Args: - expression (str): The symbolic expression as a string. - Must contain 'x' as the independent variable. - parameters (dict[str, Numeric] | None, default=None): - Dictionary of parameter names and their initial values. - Defaults to None (no parameters). - unit (str | sc.Unit, default="meV"): Unit of the output. - display_name (str | None, default="Expression"): Display name for the component. - unique_name (str | None, default=None): Unique name for the component. - - Raises: - ValueError: If the expression is invalid or does not contain 'x'. - TypeError: If any parameter value is not numeric. + """ + Initialize the ExpressionComponent. + + Parameters + ---------- + expression : str + The symbolic expression as a string. Must contain 'x' as the independent variable. + parameters : dict[str, Numeric] | None, default=None + Dictionary of parameter names and their initial values. + unit : str | sc.Unit, default='meV' + Unit of the output. + display_name : str | None, default='Expression' + Display name for the component. + unique_name : str | None, default=None + Unique name for the component. + + Raises + ------ + ValueError + If the expression is invalid or does not contain 'x'. + TypeError + If any parameter value is not numeric. """ super().__init__(unit=unit, display_name=display_name, unique_name=unique_name) @@ -187,13 +191,18 @@ def expression(self) -> str: @expression.setter def expression(self, _new_expr: str) -> None: - """Prevent changing the expression after initialization. + """ + Prevent changing the expression after initialization. - Args: - _new_expr (str): New expression string (ignored). + Parameters + ---------- + _new_expr : str + New expression string (ignored). - Raises: - AttributeError: Always raised to prevent changing the expression. + Raises + ------ + AttributeError + Always raised to prevent changing the expression. """ raise AttributeError('Expression cannot be changed after initialization') @@ -201,14 +210,18 @@ def evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray, ) -> np.ndarray: - """Evaluate the expression for given x values. + """ + Evaluate the expression for given x values. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - Input values for the independent variable. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + Input values for the independent variable. - Returns: - np.ndarray: Evaluated results. + Returns + ------- + np.ndarray + Evaluated results. """ x = self._prepare_x_for_evaluate(x) @@ -222,23 +235,31 @@ def evaluate( return self._func(*args) def get_all_variables(self) -> list[Parameter]: - """Return all parameters. + """ + Return all parameters. - Returns: - list[Parameter]: List of all parameters in the expression. + Returns + ------- + list[Parameter] + List of all parameters in the expression. """ return list(self._parameters.values()) def convert_unit(self, _new_unit: str | sc.Unit) -> None: - """Convert the unit of the expression. + """ + Convert the unit of the expression. Unit conversion is not implemented for ExpressionComponent. - Args: - _new_unit (str | sc.Unit): The new unit to convert to (ignored). + Parameters + ---------- + _new_unit : str | sc.Unit + The new unit to convert to (ignored). - Raises: - NotImplementedError: Always raised to indicate unit conversion is not supported. + Raises + ------ + NotImplementedError + Always raised to indicate unit conversion is not supported. """ raise NotImplementedError('Unit conversion is not implemented for ExpressionComponent') @@ -248,30 +269,43 @@ def convert_unit(self, _new_unit: str | sc.Unit) -> None: # ------------------------- def __getattr__(self, name: str) -> Parameter: - """Allow access to parameters as attributes. - - Args: - name (str): Name of the parameter to access. - - Returns: - Parameter: The parameter with the given name. - - Raises: - AttributeError: If the parameter does not exist. + """ + Allow access to parameters as attributes. + + Parameters + ---------- + name : str + Name of the parameter to access. + + Raises + ------ + AttributeError + If the parameter does not exist. + + Returns + ------- + Parameter + The parameter with the given name. """ if '_parameters' in self.__dict__ and name in self._parameters: return self._parameters[name] raise AttributeError(f"{self.__class__.__name__} has no attribute '{name}'") def __setattr__(self, name: str, value: Numeric) -> None: - """Allow setting parameter values as attributes. - - Args: - name (str): Name of the parameter to set. - value (Numeric): New value for the parameter. - - Raises: - TypeError: If the value is not numeric. + """ + Allow setting parameter values as attributes. + + Parameters + ---------- + name : str + Name of the parameter to set. + value : Numeric + New value for the parameter. + + Raises + ------ + TypeError + If the value is not numeric. """ if '_parameters' in self.__dict__ and name in self._parameters: param = self._parameters[name] @@ -285,15 +319,18 @@ def __setattr__(self, name: str, value: Numeric) -> None: super().__setattr__(name, value) def __dir__(self) -> list[str]: - """Include parameter names in dir() output for better IDE - support. + """ + Include parameter names in dir() output for better IDE support. - Returns: - list[str]: List of attribute names, including parameters. + Returns + ------- + list[str] + List of attribute names, including parameters. """ return super().__dir__() + list(self._parameters.keys()) def __repr__(self) -> str: + """Repr function.""" param_str = ', '.join(f'{k}={v.value}' for k, v in self._parameters.items()) return ( f'{self.__class__.__name__}(\n' diff --git a/src/easydynamics/sample_model/components/gaussian.py b/src/easydynamics/sample_model/components/gaussian.py index 892577e1..9c185b2f 100644 --- a/src/easydynamics/sample_model/components/gaussian.py +++ b/src/easydynamics/sample_model/components/gaussian.py @@ -14,23 +14,18 @@ class Gaussian(CreateParametersMixin, ModelComponent): - r"""Model of a Gaussian function. + r""" + Model of a Gaussian function. The intensity is given by - $$ - I(x) = \frac{A}{\sigma \sqrt{2\pi}} - \exp\left( - -\frac{1}{2} - \left(\frac{x - x_0}{\sigma}\right)^2 - \right) - $$ + $$ I(x) = \frac{A}{\sigma \sqrt{2\pi}} \exp\left( -\frac{1}{2} \left(\frac{x - + x_0}{\sigma}\right)^2 \right) $$ - where $A$ is the area, $x_0$ is the center, and $\sigma$ is the - width. + where $A$ is the area, $x_0$ is the center, and $\sigma$ is the width. - If the center is not provided, it will be centered at 0 and - fixed, which is typically what you want in QENS. + If the center is not provided, it will be centered at 0 and fixed, which is typically what you + want in QENS. """ def __init__( @@ -42,17 +37,24 @@ def __init__( display_name: str | None = 'Gaussian', unique_name: str | None = None, ) -> None: - """Initialize the Gaussian component. - - Args: - area (Numeric | Parameter, default=1.0): Area of the Gaussian. - center (Numeric | Parameter | None, default=None): Center of the - Gaussian. If None, defaults to 0 and is fixed. - width (Numeric | Parameter, default=1.0): Standard deviation. - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='Gaussian'): Name of the component. - unique_name (str | None, default=None): Unique name of the component. - if None, a unique_name is automatically generated. + """ + Initialize the Gaussian component. + + Parameters + ---------- + area : Numeric | Parameter, default=1.0 + Area of the Gaussian. + center : Numeric | Parameter | None, default=None + Center of the Gaussian. If None. + width : Numeric | Parameter, default=1.0 + Standard deviation. + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='Gaussian' + Name of the component. + unique_name : str | None, default=None + Unique name of the component. if None, a unique_name is automatically generated. By + default, None. """ # Validate inputs and create Parameters if not given super().__init__( @@ -74,23 +76,31 @@ def __init__( @property def area(self) -> Parameter: - """Get the area parameter. + """ + Get the area parameter. - Returns: - Parameter: The area parameter. + Returns + ------- + Parameter + The area parameter. """ return self._area @area.setter def area(self, value: Numeric) -> None: - """Set the value of the area parameter. + """ + Set the value of the area parameter. - Args: - value (Numeric): The new value for the area parameter. + Parameters + ---------- + value : Numeric + The new value for the area parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): @@ -99,24 +109,31 @@ def area(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric | None) -> None: - """Set the center parameter value. + """ + Set the center parameter value. - Args: - value (Numeric | None): The new value for the center - parameter. If None, defaults to 0 and is fixed. + Parameters + ---------- + value : Numeric | None + The new value for the center parameter. If None, defaults to 0 and is fixed. - Raises: - TypeError: If the value is not a number or None. + Raises + ------ + TypeError + If the value is not a number or None. """ if value is None: @@ -128,24 +145,32 @@ def center(self, value: Numeric | None) -> None: @property def width(self) -> Parameter: - """Get the width parameter (standard deviation). + """ + Get the width parameter (standard deviation). - Returns: - Parameter: The width parameter. + Returns + ------- + Parameter + The width parameter. """ return self._width @width.setter def width(self, value: Numeric) -> None: - """Set the width parameter value. - - Args: - value (Numeric): The new value for the width - parameter. - - Raises: - TypeError: If the value is not a number or None. - ValueError: If the value is not positive. + """ + Set the width parameter value. + + Parameters + ---------- + value : Numeric + The new value for the width parameter. + + Raises + ------ + TypeError + If the value is not a number or None. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('width must be a number') @@ -159,30 +184,24 @@ def evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray, ) -> np.ndarray: - r"""Evaluate the Gaussian at the given x values. + r""" + Evaluate the Gaussian at the given x values. - If x is a scipp Variable, the unit of the Gaussian will be - converted to match x. - The intensity is given by - $$ - I(x) = \frac{A}{\sigma \sqrt{2\pi}} - \exp\left( - -\frac{1}{2} - \left(\frac{x - x_0}{\sigma}\right)^2 - \right) - $$ + If x is a scipp Variable, the unit of the Gaussian will be converted to match x. The + intensity is given by $$ I(x) = \frac{A}{\sigma \sqrt{2\pi}} \exp\left( -\frac{1}{2} + \left(\frac{x - x_0}{\sigma}\right)^2 \right) $$ - where $A$ is the area, $x_0$ is the center, and $\sigma$ is the - width. + where $A$ is the area, $x_0$ is the center, and $\sigma$ is the width. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Gaussian. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Gaussian. - - Returns: - np.ndarray: The intensity of the Gaussian at the given x - values. + Returns + ------- + np.ndarray + The intensity of the Gaussian at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -193,10 +212,13 @@ def evaluate( return self.area.value * normalization * np.exp(exponent) def __repr__(self) -> str: - """Return a string representation of the Gaussian. + """ + Return a string representation of the Gaussian. - Returns: - str: A string representation of the Gaussian. + Returns + ------- + str + A string representation of the Gaussian. """ return f'Gaussian(unique_name = {self.unique_name}, unit = {self._unit},\n \ diff --git a/src/easydynamics/sample_model/components/lorentzian.py b/src/easydynamics/sample_model/components/lorentzian.py index 8f5697bd..ca3d1a21 100644 --- a/src/easydynamics/sample_model/components/lorentzian.py +++ b/src/easydynamics/sample_model/components/lorentzian.py @@ -14,17 +14,15 @@ class Lorentzian(CreateParametersMixin, ModelComponent): - r"""Model of a Lorentzian function. + r""" + Model of a Lorentzian function. - The intensity is given by - $$ - I(x) = \frac{A}{\pi} \frac{\Gamma}{(x - x_0)^2 + \Gamma^2}, - $$ - where $A$ is the area, $x_0$ is the center, and $\Gamma$ is the - half width at half maximum (HWHM). + The intensity is given by $$ I(x) = \frac{A}{\pi} \frac{\Gamma}{(x - x_0)^2 + \Gamma^2}, $$ + where $A$ is the area, $x_0$ is the center, and $\Gamma$ is the half width at half maximum + (HWHM). - If the center is not provided, it will be centered at 0 - and fixed, which is typically what you want in QENS. + If the center is not provided, it will be centered at 0 and fixed, which is typically what you + want in QENS. """ def __init__( @@ -36,18 +34,24 @@ def __init__( display_name: str | None = 'Lorentzian', unique_name: str | None = None, ) -> None: - """Initialize the Lorentzian component. - - Args: - area (Numeric | Parameter, default=1.0): Area of the Lorentzian. - center (Numeric | Parameter | None, default=None): Center of the - Lorentzian. If None, defaults to 0 and is fixed. - width (Numeric | Parameter, default=1.0): Half width at half maximum - (HWHM). - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='Lorentzian'): Name of the component. - unique_name (str | None, default=None): Unique name of the component. If - None, a unique_name is automatically generated. + """ + Initialize the Lorentzian component. + + Parameters + ---------- + area : Numeric | Parameter, default=1.0 + Area of the Lorentzian. + center : Numeric | Parameter | None, default=None + Center of the Lorentzian. If None. + width : Numeric | Parameter, default=1.0 + Half width at half maximum (HWHM). + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='Lorentzian' + Name of the component. + unique_name : str | None, default=None + Unique name of the component. If None, a unique_name is automatically generated. By + default, None. """ super().__init__( @@ -69,22 +73,30 @@ def __init__( @property def area(self) -> Parameter: - """Get the area parameter. + """ + Get the area parameter. - Returns: - Parameter: The area parameter. + Returns + ------- + Parameter + The area parameter. """ return self._area @area.setter def area(self, value: Numeric) -> None: - """Set the value of the area parameter. + """ + Set the value of the area parameter. - Args: - value (Numeric): The new value for the area parameter. + Parameters + ---------- + value : Numeric + The new value for the area parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): raise TypeError('area must be a number') @@ -92,23 +104,30 @@ def area(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric | None) -> None: - """Set the value of the center parameter. + """ + Set the value of the center parameter. - Args: - value (Numeric | None): The new value for the center - parameter. If None, defaults to 0 and is fixed. + Parameters + ---------- + value : Numeric | None + The new value for the center parameter. If None, defaults to 0 and is fixed. - Raises: - TypeError: If the value is not a number or None. + Raises + ------ + TypeError + If the value is not a number or None. """ if value is None: @@ -120,24 +139,32 @@ def center(self, value: Numeric | None) -> None: @property def width(self) -> Parameter: - """Get the width parameter (HWHM). + """ + Get the width parameter (HWHM). - Returns: - Parameter: The width parameter. + Returns + ------- + Parameter + The width parameter. """ return self._width @width.setter def width(self, value: Numeric) -> None: - """Set the width parameter value (HWHM). - - Args: - value (Numeric): The new value for the width - parameter. - - Raises: - TypeError: If the value is not a number. - ValueError: If the value is not positive. + """ + Set the width parameter value (HWHM). + + Parameters + ---------- + value : Numeric + The new value for the width parameter. + + Raises + ------ + TypeError + If the value is not a number. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('width must be a number') @@ -147,26 +174,26 @@ def width(self, value: Numeric) -> None: self._width.value = value def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - r"""Evaluate the Lorentzian at the given x values. + r""" + Evaluate the Lorentzian at the given x values. - If x is a scipp Variable, the unit of the Lorentzian will be - converted to match x. The intensity is given by + If x is a scipp Variable, the unit of the Lorentzian will be converted to match x. The + intensity is given by - $$ - I(x) = \frac{A}{\pi} \frac{\Gamma}{(x - - x_0)^2 + \Gamma^2}, - $$ + $$ I(x) = \frac{A}{\pi} \frac{\Gamma}{(x - x_0)^2 + \Gamma^2}, $$ - where $A$ is the area, $x_0$ is the center, and $\Gamma$ is - the half width at half maximum (HWHM). + where $A$ is the area, $x_0$ is the center, and $\Gamma$ is the half width at half maximum + (HWHM). - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Lorentzian. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Lorentzian. - Returns: - np.ndarray: The intensity of the Lorentzian at the given x - values. + Returns + ------- + np.ndarray + The intensity of the Lorentzian at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -177,10 +204,13 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) return self.area.value * normalization / denominator def __repr__(self) -> str: - """Return a string representation of the Lorentzian. + """ + Return a string representation of the Lorentzian. - Returns: - str: A string representation of the Lorentzian. + Returns + ------- + str + A string representation of the Lorentzian. """ return f'Lorentzian(unique_name = {self.unique_name}, unit = {self._unit},\n \ area = {self.area},\n center = {self.center},\n width = {self.width})' diff --git a/src/easydynamics/sample_model/components/mixins.py b/src/easydynamics/sample_model/components/mixins.py index b5125767..a80a7200 100644 --- a/src/easydynamics/sample_model/components/mixins.py +++ b/src/easydynamics/sample_model/components/mixins.py @@ -15,12 +15,11 @@ class CreateParametersMixin: - """Provides parameter creation and validation methods for model - components. + """ + Provides parameter creation and validation methods for model components. - This mixin provides methods to create and validate common physics - parameters (area, center, width) with appropriate bounds and type - checking. + This mixin provides methods to create and validate common physics parameters (area, center, + width) with appropriate bounds and type checking. """ def _create_area_parameter( @@ -30,26 +29,34 @@ def _create_area_parameter( unit: str | sc.Unit = 'meV', minimum_area: float = MINIMUM_AREA, ) -> Parameter: - """Validate and convert a number to a Parameter describing the - area of a function. - - If the area is negative, a warning is raised. - If the area is non-negative, its minimum is set to 0 to avoid it - accidentally becoming negative during fitting. - - Args: - area (Numeric | Parameter): The area value or Parameter. - name (str): The name of the model component. - unit (str | sc.Unit, default='meV'): The unit of the area Parameter. - minimum_area (float, default=MINIMUM_AREA): The minimum allowed area. - - Returns: - Parameter: The validated area Parameter. - - Raises: - TypeError: If area is not a number or a Parameter. - ValueError: If area is not a finite number or if the area - Parameter has a non-finite value. + """ + Validate and convert a number to a Parameter describing the area of a function. + + If the area is negative, a warning is raised. If the area is non-negative, its minimum is + set to 0 to avoid it accidentally becoming negative during fitting. + + Parameters + ---------- + area : Numeric | Parameter + The area value or Parameter. + name : str + The name of the model component. + unit : str | sc.Unit, default='meV' + The unit of the area Parameter. + minimum_area : float, default=MINIMUM_AREA + The minimum allowed area. + + Raises + ------ + TypeError + If area is not a number or a Parameter. + ValueError + If area is not a finite number or if the area Parameter has a non-finite value. + + Returns + ------- + Parameter + The validated area Parameter. """ if not isinstance(area, (Parameter, Numeric)): raise TypeError('area must be a number or a Parameter.') @@ -79,28 +86,34 @@ def _create_center_parameter( unit: str | sc.Unit = 'meV', enforce_minimum_center: bool = False, ) -> Parameter: - """Validate and convert a number to a Parameter describing the - center of a function. - - Args: - center (Numeric | Parameter | None): The center value or - Parameter. - name (str): The name of the model component. - fix_if_none (bool): Whether to fix the center Parameter - if center is None. - unit (str | sc.Unit, default='meV'): The unit of the center - Parameter. - enforce_minimum_center (bool, default=False): Whether to - enforce a minimum center value to avoid zero center in - DHO. - - Returns: - Parameter: The validated center Parameter. - - Raises: - TypeError: If center is not None, a number, or a Parameter. - ValueError: If center is a number but not finite, or if - center is a Parameter but has a non-finite value. + """ + Validate and convert a number to a Parameter describing the center of a function. + + Parameters + ---------- + center : Numeric | Parameter | None + The center value or Parameter. + name : str + The name of the model component. + fix_if_none : bool + Whether to fix the center Parameter if center is None. + unit : str | sc.Unit, default='meV' + The unit of the center Parameter. + enforce_minimum_center : bool, default=False + Whether to enforce a minimum center value to avoid zero center in DHO. + + Raises + ------ + TypeError + If center is not None, a number, or a Parameter. + ValueError + If center is a number but not finite, or if center is a Parameter but has a non-finite + value. + + Returns + ------- + Parameter + The validated center Parameter. """ if center is not None and not isinstance(center, (Numeric, Parameter)): raise TypeError('center must be None, a number, or a Parameter.') @@ -129,23 +142,33 @@ def _create_width_parameter( unit: str | sc.Unit = 'meV', minimum_width: float = MINIMUM_WIDTH, ) -> Parameter: - """Validate and convert a number to a Parameter describing the - width of a function. - - Args: - width (Numeric | Parameter): The width value or Parameter. - name (str): The name of the model component. - param_name (str, default='width'): The name of the width parameter. - unit (str | sc.Unit, default='meV'): The unit of the width Parameter. - minimum_width (float, default=MINIMUM_WIDTH): The minimum - allowed width. - - Returns: - Parameter: The validated width Parameter. - - Raises: - TypeError: If width is not a number or a Parameter. - ValueError: If width is non-positive. + """ + Validate and convert a number to a Parameter describing the width of a function. + + Parameters + ---------- + width : Numeric | Parameter + The width value or Parameter. + name : str + The name of the model component. + param_name : str, default='width' + The name of the width parameter. + unit : str | sc.Unit, default='meV' + The unit of the width Parameter. + minimum_width : float, default=MINIMUM_WIDTH + The minimum allowed width. + + Raises + ------ + TypeError + If width is not a number or a Parameter. + ValueError + If width is non-positive. + + Returns + ------- + Parameter + The validated width Parameter. """ if not isinstance(width, (Numeric, Parameter)): raise TypeError(f'{param_name} must be a number or a Parameter.') diff --git a/src/easydynamics/sample_model/components/model_component.py b/src/easydynamics/sample_model/components/model_component.py index bfbd7384..f4d0c15e 100644 --- a/src/easydynamics/sample_model/components/model_component.py +++ b/src/easydynamics/sample_model/components/model_component.py @@ -23,14 +23,17 @@ def __init__( display_name: str | None = None, unique_name: str | None = None, ) -> None: - """Initialize the ModelComponent. - - Args: - unit (str | sc.Unit, default="meV"): The unit of the model component. - display_name (str | None, default=None): A human-readable name for the - component. - unique_name (str | None, default=None): A unique identifier for the - component. + """ + Initialize the ModelComponent. + + Parameters + ---------- + unit : str | sc.Unit, default='meV' + The unit of the model component. + display_name : str | None, default=None + A human-readable name for the component. + unique_name : str | None, default=None + A unique identifier for the component. """ self.validate_unit(unit) super().__init__(display_name=display_name, unique_name=unique_name) @@ -38,24 +41,33 @@ def __init__( @property def unit(self) -> str: - """Get the unit. + """ + Get the unit. - Returns: - str: The unit of the model component. + Returns + ------- + str + The unit of the model component. """ return str(self._unit) @unit.setter def unit(self, _unit_str: str) -> None: - """Unit is read-only. Use convert_unit to change the unit - between allowed types or create a new ModelComponent with the - desired unit. + """ + Unit is read-only. - Args: - _unit_str (str): The new unit to set. + Use convert_unit to change the unit between allowed types or create a new ModelComponent + with the desired unit. - Raises: - AttributeError: Always raised since unit is read-only. + Parameters + ---------- + _unit_str : str + The new unit to set. + + Raises + ------ + AttributeError + Always raised since unit is read-only. """ raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' @@ -77,21 +89,26 @@ def free_all_parameters(self) -> None: def _prepare_x_for_evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray ) -> np.ndarray: - """Prepare the input x for evaluation by handling units and - converting to a numpy array. - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The input data to prepare. - - Returns: - np.ndarray: The prepared input data as a numpy array. - - Raises: - ValueError: If x contains NaN or infinite values, or if a - sc.DataArray has more than one coordinate. - UnitError: If x has incompatible units that cannot be - converted to the component's unit. + """ + Prepare the input x for evaluation by handling units and converting to a numpy array. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The input data to prepare. + + Raises + ------ + ValueError + If x contains NaN or infinite values, or if a sc.DataArray has more than one + coordinate. + UnitError + If x has incompatible units that cannot be converted to the component's unit. + + Returns + ------- + np.ndarray + The prepared input data as a numpy array. """ # Handle units @@ -148,13 +165,18 @@ def _prepare_x_for_evaluate( @staticmethod def validate_unit(unit: str | sc.Unit | None) -> None: - """Validate that the unit is either a string or a scipp Unit. + """ + Validate that the unit is either a string or a scipp Unit. - Args: - unit (str | sc.Unit | None): The unit to validate. + Parameters + ---------- + unit : str | sc.Unit | None + The unit to validate. - Raises: - TypeError: If unit is not a string or scipp Unit. + Raises + ------ + TypeError + If unit is not a string or scipp Unit. """ if unit is not None and not isinstance(unit, (str, sc.Unit)): raise TypeError( @@ -162,15 +184,20 @@ def validate_unit(unit: str | sc.Unit | None) -> None: ) def convert_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the Parameters in the component. - - Args: - unit (str | sc.Unit): The new unit to convert to. - - Raises: - TypeError: If the provided unit is not a str or sc.Unit - Exception: If the provided unit is invalid or incompatible - with the component's parameters. + """ + Convert the unit of the Parameters in the component. + + Parameters + ---------- + unit : str | sc.Unit + The new unit to convert to. + + Raises + ------ + TypeError + If the provided unit is not a str or sc.Unit. + Exception + If the provided unit is invalid or incompatible with the component's parameters. """ if not isinstance(unit, (str, sc.Unit)): raise TypeError(f'Unit must be a string or sc.Unit, got {type(unit).__name__}') @@ -193,23 +220,31 @@ def convert_unit(self, unit: str | sc.Unit) -> None: @abstractmethod def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - """Abstract method to evaluate the model component at input x. + """ + Abstract method to evaluate the model component at input x. + Must be implemented by subclasses. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the component. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the component. - Returns: - np.ndarray: Evaluated function values. + Returns + ------- + np.ndarray + Evaluated function values. """ pass def __repr__(self) -> str: - """Return a string representation of the ModelComponent. + """ + Return a string representation of the ModelComponent. - Returns: - str: A string representation of the ModelComponent. + Returns + ------- + str + A string representation of the ModelComponent. """ return f'{self.__class__.__name__}(unique_name={self.unique_name}, unit={self._unit})' diff --git a/src/easydynamics/sample_model/components/polynomial.py b/src/easydynamics/sample_model/components/polynomial.py index 340ca537..0263d81b 100644 --- a/src/easydynamics/sample_model/components/polynomial.py +++ b/src/easydynamics/sample_model/components/polynomial.py @@ -18,13 +18,11 @@ class Polynomial(ModelComponent): - r"""Polynomial function component. + r""" + Polynomial function component. - The intensity is given by - $$ - I(x) = c_0 + c_1 x + c_2 x^2 + ... + c_N x^N, - $$ - where $C_i$ are the coefficients. + The intensity is given by $$ I(x) = c_0 + c_1 x + c_2 x^2 + ... + c_N x^N, $$ where $C_i$ are + the coefficients. """ def __init__( @@ -34,24 +32,28 @@ def __init__( display_name: str | None = 'Polynomial', unique_name: str | None = None, ) -> None: - """Initialize the Polynomial component. - - Args: - coefficients (Sequence[Numeric | Parameter], default=(0.0,)): - Coefficients c0, c1, ..., cN - unit (str | sc.Unit, default='meV'): Unit of the Polynomial - component. - display_name (str | None, default='Polynomial'): Display - name of the Polynomial component. - unique_name (str | None, default=None): Unique name of the - component. If None, a unique_name is automatically - generated. - - Raises: - TypeError: If coefficients is not a sequence of numbers or - Parameters or if any item in coefficients is not a - number or Parameter. - ValueError: If coefficients is an empty sequence. + """ + Initialize the Polynomial component. + + Parameters + ---------- + coefficients : Sequence[Numeric | Parameter], default=(0.0,) + Coefficients c0, c1, ..., cN. + unit : str | sc.Unit, default='meV' + Unit of the Polynomial component. + display_name : str | None, default='Polynomial' + Display name of the Polynomial component. + unique_name : str | None, default=None + Unique name of the component. If None, a unique_name is automatically generated. By + default, None. + + Raises + ------ + TypeError + If coefficients is not a sequence of numbers or Parameters or if any item in + coefficients is not a number or Parameter. + ValueError + If coefficients is an empty sequence. """ super().__init__(display_name=display_name, unit=unit, unique_name=unique_name) @@ -84,29 +86,35 @@ def __init__( @property def coefficients(self) -> list[Parameter]: - """Get the coefficients of the polynomial as a list of - Parameters. + """ + Get the coefficients of the polynomial as a list of Parameters. - Returns: - list[Parameter]: The coefficients of the polynomial. + Returns + ------- + list[Parameter] + The coefficients of the polynomial. """ return list(self._coefficients) @coefficients.setter def coefficients(self, coeffs: Sequence[Numeric | Parameter]) -> None: - """Set the coefficients of the polynomial. + """ + Set the coefficients of the polynomial. Length must match current number of coefficients. - Args: - coeffs (Sequence[Numeric | Parameter]): New coefficients as - a sequence of numbers or Parameters. - - Raises: - TypeError: If coeffs is not a sequence of numbers or - Parameters or if any item in coeffs is not a number or Parameter. - ValueError: If the length of coeffs does not match the - existing number of coefficients. + Parameters + ---------- + coeffs : Sequence[Numeric | Parameter] + New coefficients as a sequence of numbers or Parameters. + + Raises + ------ + TypeError + If coeffs is not a sequence of numbers or Parameters or if any item in coeffs is not a + number or Parameter. + ValueError + If the length of coeffs does not match the existing number of coefficients. """ if not isinstance(coeffs, (list, tuple, np.ndarray)): raise TypeError( @@ -126,29 +134,32 @@ def coefficients(self, coeffs: Sequence[Numeric | Parameter]) -> None: raise TypeError('Each coefficient must be either a numeric value or a Parameter.') def coefficient_values(self) -> list[float]: - """Get the coefficients of the polynomial as a list. + """ + Get the coefficients of the polynomial as a list. - Returns: - list[float]: The coefficient values of the polynomial. + Returns + ------- + list[float] + The coefficient values of the polynomial. """ return [param.value for param in self._coefficients] def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - r"""Evaluate the Polynomial at the given x values. + r""" + Evaluate the Polynomial at the given x values. - The intensity is given by - $$ - I(x) = c_0 + c_1 x + c_2 x^2 + ... + c_N x^N, - $$ - where $C_i$ are the coefficients. + The intensity is given by $$ I(x) = c_0 + c_1 x + c_2 x^2 + ... + + c_N x^N, $$ where $C_i$ are the coefficients. - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Polynomial. + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Polynomial. - Returns: - np.ndarray: The evaluated Polynomial at the given x - values. + Returns + ------- + np.ndarray + The evaluated Polynomial at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -168,24 +179,30 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) @property def degree(self) -> int: - """Get the degree of the polynomial. + """ + Get the degree of the polynomial. - Returns: - int: The degree of the polynomial. + Returns + ------- + int + The degree of the polynomial. """ return len(self._coefficients) - 1 @degree.setter def degree(self, _value: int) -> None: - """The degree is determined by the number of coefficients and - cannot be set directly. + """ + The degree is determined by the number of coefficients and cannot be set directly. - Args: - _value (int): The new degree of the polynomial. + Parameters + ---------- + _value : int + The new degree of the polynomial. - Raises: - AttributeError: Always raised since degree cannot be set - directly. + Raises + ------ + AttributeError + Always raised since degree cannot be set directly. """ raise AttributeError( 'The degree of the polynomial is determined by the number of coefficients ' @@ -193,21 +210,29 @@ def degree(self, _value: int) -> None: ) def get_all_variables(self) -> list[DescriptorBase]: - """Get all variables from the model component. + """ + Get all variables from the model component. - Returns: - list[DescriptorBase]: List of variables in the component. + Returns + ------- + list[DescriptorBase] + List of variables in the component. """ return list(self._coefficients) def convert_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the polynomial. + """ + Convert the unit of the polynomial. - Args: - unit (str | sc.Unit): The target unit to convert to. + Parameters + ---------- + unit : str | sc.Unit + The target unit to convert to. - Raises: - UnitError: If the provided unit is not a string or sc.Unit. + Raises + ------ + UnitError + If the provided unit is not a string or sc.Unit. """ if not isinstance(unit, (str, sc.Unit)): @@ -226,10 +251,13 @@ def convert_unit(self, unit: str | sc.Unit) -> None: self._unit = unit def __repr__(self) -> str: - """Return a string representation of the Polynomial. + """ + Return a string representation of the Polynomial. - Returns: - str: A string representation of the Polynomial. + Returns + ------- + str + A string representation of the Polynomial. """ coeffs_str = ', '.join(f'{param.name}={param.value}' for param in self._coefficients) diff --git a/src/easydynamics/sample_model/components/voigt.py b/src/easydynamics/sample_model/components/voigt.py index d57c91bc..c261b3f2 100644 --- a/src/easydynamics/sample_model/components/voigt.py +++ b/src/easydynamics/sample_model/components/voigt.py @@ -15,9 +15,11 @@ class Voigt(CreateParametersMixin, ModelComponent): - r"""Voigt profile, a convolution of Gaussian and Lorentzian. If the - center is not provided, it will be centered at 0 and fixed, which is - typically what you want in QENS. + r""" + Voigt profile, a convolution of Gaussian and Lorentzian. + + If the center is not provided, it will be centered at 0 and fixed, which is typically what you + want in QENS. Use scipy.special.voigt_profile to evaluate the Voigt profile. """ @@ -32,19 +34,26 @@ def __init__( display_name: str | None = 'Voigt', unique_name: str | None = None, ) -> None: - """Initialize a Voigt component. - - Args: - area (Numeric | Parameter, default=1.0): Total area under the curve. - center (Numeric | Parameter | None, default=None): Center of the Voigt profile. - gaussian_width (Numeric | Parameter, default=1.0): Standard deviation of the - Gaussian part. - lorentzian_width (Numeric | Parameter, default=1.0): Half width at half max - (HWHM) of the Lorentzian part. - unit (str | sc.Unit, default='meV'): Unit of the parameters. - display_name (str | None, default='Voigt'): Display name of the component. - unique_name (str | None, default=None): Unique name of the component. - If None, a unique_name is automatically generated. + """ + Initialize a Voigt component. + + Parameters + ---------- + area : Numeric | Parameter, default=1.0 + Total area under the curve. + center : Numeric | Parameter | None, default=None + Center of the Voigt profile. + gaussian_width : Numeric | Parameter, default=1.0 + Standard deviation of the Gaussian part. + lorentzian_width : Numeric | Parameter, default=1.0 + Half width at half max (HWHM) of the Lorentzian part. + unit : str | sc.Unit, default='meV' + Unit of the parameters. + display_name : str | None, default='Voigt' + Display name of the component. + unique_name : str | None, default=None + Unique name of the component. If None, a unique_name is automatically generated. By + default, None. """ super().__init__( @@ -78,22 +87,30 @@ def __init__( @property def area(self) -> Parameter: - """Get the area parameter. + """ + Get the area parameter. - Returns: - Parameter: The area parameter. + Returns + ------- + Parameter + The area parameter. """ return self._area @area.setter def area(self, value: Numeric) -> None: - """Set the value of the area parameter. + """ + Set the value of the area parameter. - Args: - value (Numeric): The new value for the area parameter. + Parameters + ---------- + value : Numeric + The new value for the area parameter. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if not isinstance(value, Numeric): raise TypeError('area must be a number') @@ -101,23 +118,30 @@ def area(self, value: Numeric) -> None: @property def center(self) -> Parameter: - """Get the center parameter. + """ + Get the center parameter. - Returns: - Parameter: The center parameter. + Returns + ------- + Parameter + The center parameter. """ return self._center @center.setter def center(self, value: Numeric | None) -> None: - """Set the value of the center parameter. + """ + Set the value of the center parameter. - Args: - value (Numeric | None): The new value for the center - parameter. If None, defaults to 0 and is fixed. + Parameters + ---------- + value : Numeric | None + The new value for the center parameter. If None, defaults to 0 and is fixed. - Raises: - TypeError: If the value is not a number. + Raises + ------ + TypeError + If the value is not a number. """ if value is None: value = 0.0 @@ -128,24 +152,32 @@ def center(self, value: Numeric | None) -> None: @property def gaussian_width(self) -> Parameter: - """Get the Gaussian width parameter. + """ + Get the Gaussian width parameter. - Returns: - Parameter: The Gaussian width parameter. + Returns + ------- + Parameter + The Gaussian width parameter. """ return self._gaussian_width @gaussian_width.setter def gaussian_width(self, value: Numeric) -> None: - """Set the width parameter value. - - Args: - value (Numeric): The new value for the width - parameter. - - Raises: - TypeError: If the value is not a number. - ValueError: If the value is not positive. + """ + Set the width parameter value. + + Parameters + ---------- + value : Numeric + The new value for the width parameter. + + Raises + ------ + TypeError + If the value is not a number. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('gaussian_width must be a number') @@ -155,24 +187,32 @@ def gaussian_width(self, value: Numeric) -> None: @property def lorentzian_width(self) -> Parameter: - """Get the Lorentzian width parameter (HWHM). + """ + Get the Lorentzian width parameter (HWHM). - Returns: - Parameter: The Lorentzian width parameter. + Returns + ------- + Parameter + The Lorentzian width parameter. """ return self._lorentzian_width @lorentzian_width.setter def lorentzian_width(self, value: Numeric) -> None: - """Set the value of the Lorentzian width parameter. - - Args: - value (Numeric): The new value for the Lorentzian width - parameter. - - Raises: - TypeError: If the value is not a number. - ValueError: If the value is not positive. + """ + Set the value of the Lorentzian width parameter. + + Parameters + ---------- + value : Numeric + The new value for the Lorentzian width parameter. + + Raises + ------ + TypeError + If the value is not a number. + ValueError + If the value is not positive. """ if not isinstance(value, Numeric): raise TypeError('lorentzian_width must be a number') @@ -181,22 +221,22 @@ def lorentzian_width(self, value: Numeric) -> None: self._lorentzian_width.value = value def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) -> np.ndarray: - r"""Evaluate the Voigt at the given x values. - - If x is a scipp Variable, the unit of the Voigt will be - converted to match x. The Voigt evaluates to the convolution of - a Gaussian with sigma gaussian_width and a Lorentzian with half - width at half max lorentzian_width, centered at center, with - area equal to area. - - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values at which to evaluate the Voigt. - - Returns: - np.ndarray: The intensity of the Voigt at the given x - values. + r""" + Evaluate the Voigt at the given x values. + + If x is a scipp Variable, the unit of the Voigt will be converted to match x. The Voigt + evaluates to the convolution of a Gaussian with sigma gaussian_width and a Lorentzian with + half width at half max lorentzian_width, centered at center, with area equal to area. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values at which to evaluate the Voigt. + + Returns + ------- + np.ndarray + The intensity of the Voigt at the given x values. """ x = self._prepare_x_for_evaluate(x) @@ -208,10 +248,13 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) ) def __repr__(self) -> str: - """Return a string representation of the Voigt. + """ + Return a string representation of the Voigt. - Returns: - str: A string representation of the Voigt. + Returns + ------- + str + A string representation of the Voigt. """ return f'Voigt(unique_name = {self.unique_name}, unit = {self._unit},\n \ diff --git a/src/easydynamics/sample_model/diffusion_model/brownian_translational_diffusion.py b/src/easydynamics/sample_model/diffusion_model/brownian_translational_diffusion.py index f9aa17d3..b3872d9a 100644 --- a/src/easydynamics/sample_model/diffusion_model/brownian_translational_diffusion.py +++ b/src/easydynamics/sample_model/diffusion_model/brownian_translational_diffusion.py @@ -18,24 +18,20 @@ class BrownianTranslationalDiffusion(DiffusionModelBase): - r"""Model of Brownian translational diffusion, consisting of a - Lorentzian function for each Q-value, where the width is given by $D - Q^2$, where $D$ is the diffusion coefficient. The area of the - Lorentzians is given by the scale parameter multiplied by the QISF, - which is 1 for this model. The EISF is 0 for this model, so there is - no delta function component. Q is assumed to have units of - 1/angstrom. Creates ComponentCollections with Lorentzian components - for given Q-values. - - Example: - >>>Q=np.linspace(0.5,2,7) - >>>energy=np.linspace(-2, 2, 501) - >>>scale=1.0 + r""" + Model of Brownian translational diffusion, consisting of a Lorentzian function for each + Q-value, where the width is given by $D Q^2$, where $D$ is the diffusion coefficient. The area + of the Lorentzians is given by the scale parameter multiplied by the QISF, which is 1 for this + model. The EISF is 0 for this model, so there is no delta function component. Q is assumed to + have units of 1/angstrom. Creates ComponentCollections with Lorentzian components for given + Q-values. + + Example: >>>Q=np.linspace(0.5,2,7) >>>energy=np.linspace(-2, 2, 501) >>>scale=1.0 >>>diffusion_coefficient = 2.4e-9 # m^2/s >>>diffusion_model=BrownianTranslationalDiffusion(display_name="DiffusionModel", >>>scale=scale, diffusion_coefficient= diffusion_coefficient) - >>>component_collections=diffusion_model.create_component_collections(Q) - See also the tutorials. + >>>component_collections=diffusion_model.create_component_collections(Q) See also the + tutorials. """ def __init__( @@ -46,23 +42,27 @@ def __init__( scale: Numeric = 1.0, diffusion_coefficient: Numeric = 1.0, ) -> None: - """Initialize a new BrownianTranslationalDiffusion model. - - Args: - display_name (str | None, default='BrownianTranslationalDiffusion'): - Display name of the diffusion model. - unique_name (str | None, default=None): Unique name of the diffusion - model. If None, a unique name will be generated. - unit (str | sc.Unit, default='meV'): Unit of the diffusion model. Must be - convertible to meV. - scale (Numeric, default=1.0): Scale factor for the diffusion model. Must - be a non-negative number. - diffusion_coefficient (Numeric, default=1.0): Diffusion coefficient D in - m^2/s. - - Raises: - TypeError: If scale or diffusion_coefficient is not a - number. + """ + Initialize a new BrownianTranslationalDiffusion model. + + Parameters + ---------- + display_name : str | None, default='BrownianTranslationalDiffusion' + Display name of the diffusion model. + unique_name : str | None, default=None + Unique name of the diffusion model. If None, a unique name will be generated. By + default, None. + unit : str | sc.Unit, default='meV' + Unit of the diffusion model. Must be convertible to meV. + scale : Numeric, default=1.0 + Scale factor for the diffusion model. Must be a non-negative number. + diffusion_coefficient : Numeric, default=1.0 + Diffusion coefficient D in m^2/s. + + Raises + ------ + TypeError + If scale or diffusion_coefficient is not a number. """ if not isinstance(scale, Numeric): raise TypeError('scale must be a number.') @@ -93,24 +93,32 @@ def __init__( @property def diffusion_coefficient(self) -> Parameter: - """Get the diffusion coefficient parameter D. + """ + Get the diffusion coefficient parameter D. - Returns: - Parameter: Diffusion coefficient D in m^2/s. + Returns + ------- + Parameter + Diffusion coefficient D in m^2/s. """ return self._diffusion_coefficient @diffusion_coefficient.setter def diffusion_coefficient(self, diffusion_coefficient: Numeric) -> None: - """Set the diffusion coefficient parameter D. - - Args: - diffusion_coefficient (Numeric): The new value for the - diffusion coefficient D in m^2/s. - - Raises: - TypeError: If diffusion_coefficient is not a number. - ValueError: If diffusion_coefficient is negative. + """ + Set the diffusion coefficient parameter D. + + Parameters + ---------- + diffusion_coefficient : Numeric + The new value for the diffusion coefficient D in m^2/s. + + Raises + ------ + TypeError + If diffusion_coefficient is not a number. + ValueError + If diffusion_coefficient is negative. """ if not isinstance(diffusion_coefficient, Numeric): raise TypeError('diffusion_coefficient must be a number.') @@ -124,15 +132,18 @@ def diffusion_coefficient(self, diffusion_coefficient: Numeric) -> None: # ------------------------------------------------------------------ def calculate_width(self, Q: Q_type) -> np.ndarray: - """Calculate the half-width at half-maximum (HWHM) for the - diffusion model. + """ + Calculate the half-width at half-maximum (HWHM) for the diffusion model. - Args: - Q (Q_type): Scattering vector in 1/angstrom + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. - Returns: - np.ndarray: HWHM values in the unit of the model - (e.g., meV). + Returns + ------- + np.ndarray + HWHM values in the unit of the model (e.g., meV). """ Q = _validate_and_convert_Q(Q) @@ -142,28 +153,36 @@ def calculate_width(self, Q: Q_type) -> np.ndarray: return Q**2 * unit_conversion_factor.value def calculate_EISF(self, Q: Q_type) -> np.ndarray: - """Calculate the Elastic Incoherent Structure Factor (EISF) for - the Brownian translational diffusion model. + """ + Calculate the Elastic Incoherent Structure Factor (EISF) for the Brownian translational + diffusion model. - Args: - Q (Q_type): Scattering - vector in 1/angstrom + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. - Returns: - np.ndarray: EISF values (dimensionless). + Returns + ------- + np.ndarray + EISF values (dimensionless). """ Q = _validate_and_convert_Q(Q) return np.zeros_like(Q) def calculate_QISF(self, Q: Q_type) -> np.ndarray: - """Calculate the Quasi-Elastic Incoherent Structure Factor - (QISF). + """ + Calculate the Quasi-Elastic Incoherent Structure Factor (QISF). - Args: - Q (Q_type): Scattering vector in 1/angstrom + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. - Returns: - np.ndarray: QISF values (dimensionless). + Returns + ------- + np.ndarray + QISF values (dimensionless). """ Q = _validate_and_convert_Q(Q) @@ -174,23 +193,28 @@ def create_component_collections( Q: Q_type, component_display_name: str = 'Brownian diffusion', ) -> list[ComponentCollection]: - r"""Create ComponentCollection components for the Brownian - translational diffusion model at given Q values. - - Args: - Q (Q_type): Scattering vector values. - component_display_name (str, default="Brownian diffusion"): - Name of the Lorentzian component. - - Returns: - list[ComponentCollection]: List of ComponentCollections with - Lorentzian components for each Q value. Each Lorentzian - has a width given by $D*Q^2$ and an area given by the - scale parameter multiplied by the QISF (which is 1 for - this model). - - Raises: - TypeError: If component_display_name is not a string. + r""" + Create ComponentCollection components for the Brownian translational diffusion model at + given Q values. + + Parameters + ---------- + Q : Q_type + Scattering vector values. + component_display_name : str, default='Brownian diffusion' + Name of the Lorentzian component. + + Raises + ------ + TypeError + If component_display_name is not a string. + + Returns + ------- + list[ComponentCollection] + List of ComponentCollections with Lorentzian components for each Q value. Each + Lorentzian has a width given by $D*Q^2$ and an area given by the scale parameter + multiplied by the QISF (which is 1 for this model). """ Q = _validate_and_convert_Q(Q) @@ -241,17 +265,24 @@ def create_component_collections( # ------------------------------------------------------------------ def _write_width_dependency_expression(self, Q: float) -> str: - """Write the dependency expression for the width as a function - of Q to make dependent Parameters. + """ + Write the dependency expression for the width as a function of Q to make dependent + Parameters. - Args: - Q (float): Scattering vector in 1/angstrom. + Parameters + ---------- + Q : float + Scattering vector in 1/angstrom. - Returns: - str: Dependency expression for the width. + Raises + ------ + TypeError + If Q is not a float. - Raises: - TypeError: If Q is not a float. + Returns + ------- + str + Dependency expression for the width. """ if not isinstance(Q, (float)): raise TypeError('Q must be a float.') @@ -260,11 +291,13 @@ def _write_width_dependency_expression(self, Q: float) -> str: return f'hbar * D* {Q} **2*1/(angstrom**2)' def _write_width_dependency_map_expression(self) -> dict[str, DescriptorNumber]: - """Write the dependency map expression to make dependent - Parameters. + """ + Write the dependency map expression to make dependent Parameters. - Returns: - dict[str, DescriptorNumber]: Dependency map for the width. + Returns + ------- + dict[str, DescriptorNumber] + Dependency map for the width. """ return { 'D': self.diffusion_coefficient, @@ -273,17 +306,23 @@ def _write_width_dependency_map_expression(self) -> dict[str, DescriptorNumber]: } def _write_area_dependency_expression(self, QISF: float) -> str: - """Write the dependency expression for the area to make - dependent Parameters. - - Args: - QISF (float): Quasielastic Incoherent Scattering Function. - - Returns: - str: Dependency expression for the area. - - Raises: - TypeError: If QISF is not a float. + """ + Write the dependency expression for the area to make dependent Parameters. + + Parameters + ---------- + QISF : float + Quasielastic Incoherent Scattering Function. + + Raises + ------ + TypeError + If QISF is not a float. + + Returns + ------- + str + Dependency expression for the area. """ if not isinstance(QISF, (float)): raise TypeError('QISF must be a float.') @@ -291,11 +330,13 @@ def _write_area_dependency_expression(self, QISF: float) -> str: return f'{QISF} * scale' def _write_area_dependency_map_expression(self) -> dict[str, DescriptorNumber]: - """Write the dependency map expression to make dependent - Parameters. + """ + Write the dependency map expression to make dependent Parameters. - Returns: - dict[str, DescriptorNumber]: Dependency map for the area. + Returns + ------- + dict[str, DescriptorNumber] + Dependency map for the area. """ return { 'scale': self.scale, @@ -306,12 +347,13 @@ def _write_area_dependency_map_expression(self) -> dict[str, DescriptorNumber]: # ------------------------------------------------------------------ def __repr__(self) -> str: - """String representation of the BrownianTranslationalDiffusion - model. + """ + String representation of the BrownianTranslationalDiffusion model. - Returns: - str: String representation of the - BrownianTranslationalDiffusion model. + Returns + ------- + str + String representation of the BrownianTranslationalDiffusion model. """ return ( f'BrownianTranslationalDiffusion(display_name={self.display_name},' diff --git a/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py b/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py index 6360ca52..177d5e79 100644 --- a/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py +++ b/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py @@ -20,22 +20,27 @@ def __init__( scale: Numeric = 1.0, unit: str | sc.Unit = 'meV', ) -> None: - """Initialize a new DiffusionModel. - - Args: - display_name (str | None, default='MyDiffusionModel'): - Display name of the diffusion model. - unique_name (str | None, default=None): Unique name of the diffusion - model. If None, a unique name will be generated. - scale (Numeric, default=1.0): Scale factor for the diffusion model. Must - be a non-negative number. - unit (str | sc.Unit, default='meV'): Unit of the diffusion model. Must be - convertible to meV. - - Raises: - TypeError: If scale is not a number. - UnitError: If unit is not a string or scipp Unit, or if it - cannot be converted to meV. + """ + Initialize a new DiffusionModel. + + Parameters + ---------- + display_name : str | None, default='MyDiffusionModel' + Display name of the diffusion model. + unique_name : str | None, default=None + Unique name of the diffusion model. If None, a unique name will be generated. By + default, None. + scale : Numeric, default=1.0 + Scale factor for the diffusion model. Must be a non-negative number. + unit : str | sc.Unit, default='meV' + Unit of the diffusion model. Must be convertible to meV. + + Raises + ------ + TypeError + If scale is not a number. + UnitError + If unit is not a string or scipp Unit, or if it cannot be converted to meV. """ try: @@ -61,24 +66,32 @@ def __init__( @property def unit(self) -> str | sc.Unit | None: - """Get the unit of the energy axis of the DiffusionModel. + """ + Get the unit of the energy axis of the DiffusionModel. - Returns: - str | sc.Unit | None: Unit of the DiffusionModel. + Returns + ------- + str | sc.Unit | None + Unit of the DiffusionModel. """ return str(self._unit) @unit.setter def unit(self, _unit_str: str) -> None: - """The unit of the energy axis is read-only. To change the unit, - use convert_unit or create a new DiffusionModel with the desired - unit. + """ + The unit of the energy axis is read-only. - Args: - _unit_str (str): The new unit to set (ignored) + To change the unit, use convert_unit or create a new DiffusionModel with the desired unit. - Raises: - AttributeError: Always, since the unit is read-only. + Parameters + ---------- + _unit_str : str + The new unit to set (ignored). + + Raises + ------ + AttributeError + Always, since the unit is read-only. """ raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' @@ -87,24 +100,32 @@ def unit(self, _unit_str: str) -> None: @property def scale(self) -> Parameter: - """Get the scale parameter of the diffusion model. + """ + Get the scale parameter of the diffusion model. - Returns: - Parameter: scale parameter of the diffusion model + Returns + ------- + Parameter + Scale parameter of the diffusion model. """ return self._scale @scale.setter def scale(self, scale: Numeric) -> None: - """Set the scale parameter of the diffusion model. - - Args: - scale (Numeric): The new value for the scale parameter. Must - be a non-negative number. - - Raises: - TypeError: If scale is not a number. - ValueError: If scale is negative. + """ + Set the scale parameter of the diffusion model. + + Parameters + ---------- + scale : Numeric + The new value for the scale parameter. Must be a non-negative number. + + Raises + ------ + TypeError + If scale is not a number. + ValueError + If scale is negative. """ if not isinstance(scale, Numeric): raise TypeError('scale must be a number.') @@ -118,9 +139,12 @@ def scale(self, scale: Numeric) -> None: # ------------------------------------------------------------------ def __repr__(self) -> str: - """String representation of the Diffusion model. + """ + String representation of the Diffusion model. - Returns: - str: String representation of the DiffusionModel. + Returns + ------- + str + String representation of the DiffusionModel. """ return f'{self.__class__.__name__}(display_name={self.display_name}, unit={self.unit})' diff --git a/src/easydynamics/sample_model/diffusion_model/jump_translational_diffusion.py b/src/easydynamics/sample_model/diffusion_model/jump_translational_diffusion.py index 888a0ad5..346ce152 100644 --- a/src/easydynamics/sample_model/diffusion_model/jump_translational_diffusion.py +++ b/src/easydynamics/sample_model/diffusion_model/jump_translational_diffusion.py @@ -18,29 +18,22 @@ class JumpTranslationalDiffusion(DiffusionModelBase): - r"""Model of Jump translational diffusion. The model consists of a - Lorentzian function for each Q-value, where the width is given by - - $$ - \Gamma(Q) = \frac{Q^2}{1+D t Q^2}. - $$ - - where $D$ is the diffusion coefficient and $t$ is the relaxation - time. Q is assumed to have units of 1/angstrom. Creates - ComponentCollections with Lorentzian components for given Q-values. - - Example: - >>> Q = np.linspace(0.5, 2, 7) - >>> energy = np.linspace(-2, 2, 501) - >>> scale = 1.0 - >>> diffusion_coefficient = 2.4e-9 # m^2/s - >>> relaxation_time = 1.0 # ps - >>> diffusion_model=JumpTranslationalDiffusion( - >>> scale = scale, diffusion_coefficient = (diffusion_coefficient,) - >>> relaxation_time=relaxation_time) - >>> component_collections= - >>> diffusion_model.create_component_collections(Q) - See also the tutorials.. + r""" + Model of Jump translational diffusion. + + The model consists of a Lorentzian function for each Q-value, where the width is given by + + $$ \Gamma(Q) = \frac{Q^2}{1+D t Q^2}. $$ + + where $D$ is the diffusion coefficient and $t$ is the relaxation time. Q is assumed to have + units of 1/angstrom. Creates ComponentCollections with Lorentzian components for given + Q-values. + + Example: >>> Q = np.linspace(0.5, 2, 7) >>> energy = np.linspace(-2, 2, 501) >>> scale = 1.0 + >>> diffusion_coefficient = 2.4e-9 # m^2/s >>> relaxation_time = 1.0 # ps >>> + diffusion_model=JumpTranslationalDiffusion( >>> scale = scale, diffusion_coefficient = + (diffusion_coefficient,) >>> relaxation_time=relaxation_time) >>> component_collections= >>> + diffusion_model.create_component_collections(Q) See also the tutorials.. """ def __init__( @@ -52,24 +45,29 @@ def __init__( diffusion_coefficient: Numeric = 1.0, relaxation_time: Numeric = 1.0, ) -> None: - """Initialize a new JumpTranslationalDiffusion model. - - Args: - display_name (str | None, default="JumpTranslationalDiffusion"): - Display name of the diffusion model. - unique_name (str | None, default=None): Unique name of the diffusion - model. If None, a unique name will be generated. - unit (str | sc.Unit, default="meV"): Unit of the diffusion model. Must be - convertible to meV. - scale (Numeric, default=1.0): Scale factor for the diffusion model. Must - be a non-negative number. - diffusion_coefficient (Numeric, default=1.0): Diffusion coefficient D in - m^2/s. - relaxation_time (Numeric, default=1.0): Relaxation time t in ps. - - Raises: - TypeError: If scale, diffusion_coefficient, or - relaxation_time are not numbers. + """ + Initialize a new JumpTranslationalDiffusion model. + + Parameters + ---------- + display_name : str | None, default='JumpTranslationalDiffusion' + Display name of the diffusion model. + unique_name : str | None, default=None + Unique name of the diffusion model. If None, a unique name will be generated. By + default, None. + unit : str | sc.Unit, default='meV' + Unit of the diffusion model. Must be convertible to meV. + scale : Numeric, default=1.0 + Scale factor for the diffusion model. Must be a non-negative number. + diffusion_coefficient : Numeric, default=1.0 + Diffusion coefficient D in m^2/s. + relaxation_time : Numeric, default=1.0 + Relaxation time t in ps. + + Raises + ------ + TypeError + If scale, diffusion_coefficient, or relaxation_time are not numbers. """ super().__init__( display_name=display_name, @@ -109,24 +107,32 @@ def __init__( @property def diffusion_coefficient(self) -> Parameter: - """Get the diffusion coefficient parameter D. + """ + Get the diffusion coefficient parameter D. - Returns: - Parameter: Diffusion coefficient D. + Returns + ------- + Parameter + Diffusion coefficient D. """ return self._diffusion_coefficient @diffusion_coefficient.setter def diffusion_coefficient(self, diffusion_coefficient: Numeric) -> None: - """Set the diffusion coefficient parameter D. - - Args: - diffusion_coefficient (Numeric): Diffusion coefficient D in - m^2/s. - - Raises: - TypeError: If diffusion_coefficient is not a number. - ValueError: If diffusion_coefficient is negative. + """ + Set the diffusion coefficient parameter D. + + Parameters + ---------- + diffusion_coefficient : Numeric + Diffusion coefficient D in m^2/s. + + Raises + ------ + TypeError + If diffusion_coefficient is not a number. + ValueError + If diffusion_coefficient is negative. """ if not isinstance(diffusion_coefficient, Numeric): raise TypeError('diffusion_coefficient must be a number.') @@ -136,23 +142,32 @@ def diffusion_coefficient(self, diffusion_coefficient: Numeric) -> None: @property def relaxation_time(self) -> Parameter: - """Get the relaxation time parameter t. + """ + Get the relaxation time parameter t. - Returns: - Parameter: Relaxation time t in ps. + Returns + ------- + Parameter + Relaxation time t in ps. """ return self._relaxation_time @relaxation_time.setter def relaxation_time(self, relaxation_time: Numeric) -> None: - """Set the relaxation time parameter t. - - Args: - relaxation_time (Numeric): Relaxation time t in ps. - - Raises: - TypeError: If relaxation_time is not a number. - ValueError: If relaxation_time is negative. + """ + Set the relaxation time parameter t. + + Parameters + ---------- + relaxation_time : Numeric + Relaxation time t in ps. + + Raises + ------ + TypeError + If relaxation_time is not a number. + ValueError + If relaxation_time is negative. """ if not isinstance(relaxation_time, Numeric): raise TypeError('relaxation_time must be a number.') @@ -166,17 +181,19 @@ def relaxation_time(self, relaxation_time: Numeric) -> None: ################################ def calculate_width(self, Q: Q_type) -> np.ndarray: - r"""Calculate the half-width at half-maximum (HWHM) for the - diffusion model. $\Gamma(Q) = Q^2/(1+D t Q^2)$, where $D$ is the - diffusion coefficient and $t$ is the relaxation time. - - Args: - Q (Q_type): Scattering vector in 1/angstrom. Can be a single - value or an array of values. - - Returns: - np.ndarray: HWHM values in the unit of the model (e.g., - meV). + r""" + Calculate the half-width at half-maximum (HWHM) for the diffusion model. $\Gamma(Q) = + Q^2/(1+D t Q^2)$, where $D$ is the diffusion coefficient and $t$ is the relaxation time. + + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. Can be a single value or an array of values. + + Returns + ------- + np.ndarray + HWHM values in the unit of the model (e.g., meV). """ Q = _validate_and_convert_Q(Q) @@ -198,27 +215,35 @@ def calculate_width(self, Q: Q_type) -> np.ndarray: return numerator / denominator def calculate_EISF(self, Q: Q_type) -> np.ndarray: - """Calculate the Elastic Incoherent Structure Factor (EISF). + """ + Calculate the Elastic Incoherent Structure Factor (EISF). - Args: - Q (Q_type): Scattering vector in 1/angstrom. Can be a single - value or an array of values. + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. Can be a single value or an array of values. - Returns: - np.ndarray: EISF values (dimensionless). + Returns + ------- + np.ndarray + EISF values (dimensionless). """ Q = _validate_and_convert_Q(Q) return np.zeros_like(Q) def calculate_QISF(self, Q: Q_type) -> np.ndarray: - """Calculate the Quasi-Elastic Incoherent Structure Factor - (QISF). - - Args: - Q (Q_type): Scattering vector in 1/angstrom. Can be a single - value or an array of values. - Returns: - np.ndarray: QISF values (dimensionless). + """ + Calculate the Quasi-Elastic Incoherent Structure Factor (QISF). + + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. Can be a single value or an array of values. + + Returns + ------- + np.ndarray + QISF values (dimensionless). """ Q = _validate_and_convert_Q(Q) return np.ones_like(Q) @@ -228,21 +253,25 @@ def create_component_collections( Q: Q_type, component_display_name: str = 'Jump translational diffusion', ) -> list[ComponentCollection]: - """Create ComponentCollection components for the diffusion model - at given Q values. - - Args: - Q (Q_type): Scattering vector in 1/angstrom. Can be a single - value or an array of values. - component_display_name (str, default="Jump translational diffusion"): - Name of the Jump Diffusion Lorentzian component. - - Returns: - list[ComponentCollection]: List of ComponentCollections with - Jump Diffusion Lorentzian components. - - Raises: - TypeError: If component_display_name is not a string. + """ + Create ComponentCollection components for the diffusion model at given Q values. + + Parameters + ---------- + Q : Q_type + Scattering vector in 1/angstrom. Can be a single value or an array of values. + component_display_name : str, default='Jump translational diffusion' + Name of the Jump Diffusion Lorentzian component. + + Raises + ------ + TypeError + If component_display_name is not a string. + + Returns + ------- + list[ComponentCollection] + List of ComponentCollections with Jump Diffusion Lorentzian components. """ Q = _validate_and_convert_Q(Q) @@ -293,17 +322,24 @@ def create_component_collections( ################################ def _write_width_dependency_expression(self, Q: float) -> str: - """Write the dependency expression for the width as a function - of Q to make dependent Parameters. + """ + Write the dependency expression for the width as a function of Q to make dependent + Parameters. - Args: - Q (float): Scattering vector in 1/angstrom + Parameters + ---------- + Q : float + Scattering vector in 1/angstrom. - Returns: - str: Dependency expression for the width. + Raises + ------ + TypeError + If Q is not a float. - Raises: - TypeError: If Q is not a float. + Returns + ------- + str + Dependency expression for the width. """ if not isinstance(Q, (float)): raise TypeError('Q must be a float.') @@ -312,11 +348,13 @@ def _write_width_dependency_expression(self, Q: float) -> str: return f'hbar * D* {Q} **2/(angstrom**2)/(1 + (D * t* {Q} **2/(angstrom**2)))' def _write_width_dependency_map_expression(self) -> dict[str, DescriptorNumber]: - """Write the dependency map expression to make dependent - Parameters. + """ + Write the dependency map expression to make dependent Parameters. - Returns: - dict[str, DescriptorNumber]: Dependency map for the width. + Returns + ------- + dict[str, DescriptorNumber] + Dependency map for the width. """ return { 'D': self._diffusion_coefficient, @@ -326,17 +364,23 @@ def _write_width_dependency_map_expression(self) -> dict[str, DescriptorNumber]: } def _write_area_dependency_expression(self, QISF: float) -> str: - """Write the dependency expression for the area to make - dependent Parameters. - - Args: - QISF (float): Q-dependent intermediate scattering function. - - Returns: - str: Dependency expression for the area. - - Raises: - TypeError: If QISF is not a float. + """ + Write the dependency expression for the area to make dependent Parameters. + + Parameters + ---------- + QISF : float + Q-dependent intermediate scattering function. + + Raises + ------ + TypeError + If QISF is not a float. + + Returns + ------- + str + Dependency expression for the area. """ if not isinstance(QISF, (float)): @@ -345,11 +389,13 @@ def _write_area_dependency_expression(self, QISF: float) -> str: return f'{QISF} * scale' def _write_area_dependency_map_expression(self) -> dict[str, DescriptorNumber]: - """Write the dependency map expression to make dependent - Parameters. + """ + Write the dependency map expression to make dependent Parameters. - Returns: - dict[str, DescriptorNumber]: Dependency map for the area. + Returns + ------- + dict[str, DescriptorNumber] + Dependency map for the area. """ return { 'scale': self._scale, @@ -360,12 +406,13 @@ def _write_area_dependency_map_expression(self) -> dict[str, DescriptorNumber]: ################################ def __repr__(self) -> str: - """String representation of the JumpTranslationalDiffusion - model. + """ + String representation of the JumpTranslationalDiffusion model. - Returns: - str: String representation of the JumpTranslationalDiffusion - model. + Returns + ------- + str + String representation of the JumpTranslationalDiffusion model. """ return ( f'JumpTranslationalDiffusion(display_name={self.display_name}, ' diff --git a/src/easydynamics/sample_model/instrument_model.py b/src/easydynamics/sample_model/instrument_model.py index 78815553..00cf2544 100644 --- a/src/easydynamics/sample_model/instrument_model.py +++ b/src/easydynamics/sample_model/instrument_model.py @@ -17,11 +17,11 @@ class InstrumentModel(NewBase): - """InstrumentModel represents a model of the instrument in an - experiment at various Q. + """ + InstrumentModel represents a model of the instrument in an experiment at various Q. - It can contain a model of the resolution function for convolutions, - of the background and an offset in the energy axis. + It can contain a model of the resolution function for convolutions, of the background and an + offset in the energy axis. """ def __init__( @@ -34,30 +34,34 @@ def __init__( energy_offset: Numeric | None = None, unit: str | sc.Unit = 'meV', ) -> None: - """Initialize an InstrumentModel. - - Args: - display_name (str, default="MyInstrumentModel"): The display name of the - InstrumentModel. Default is "MyInstrumentModel". - unique_name (str | None, default=None): The unique name of the - InstrumentModel. - Q (Q_type | None, default=None): The Q values where the instrument is modelled. - resolution_model (ResolutionModel | None, default=None): The resolution - model of the instrument. If None, an empty resolution - model is created and no resolution convolution is - carried out. - background_model (BackgroundModel | None, default=None): The background - model of the instrument. If None, an empty background - model is created, and the background evaluates to 0. - energy_offset (Numeric | None, default=None): Template energy offset - of the instrument. Will be copied to each Q value. If - None, the energy offset will be 0. - unit (str | sc.Unit, default="meV"): The unit of the energy axis. - - Raises: - TypeError: If resolution_model is not a ResolutionModel or - None, or if background_model is not a BackgroundModel or None, or - if energy_offset is not a number or None. + """ + Initialize an InstrumentModel. + + Parameters + ---------- + display_name : str, default='MyInstrumentModel' + The display name of the InstrumentModel. + unique_name : str | None, default=None + The unique name of the InstrumentModel. + Q : Q_type | None, default=None + The Q values where the instrument is modelled. + resolution_model : ResolutionModel | None, default=None + The resolution model of the instrument. If None, an empty resolution model is created + and no resolution convolution is carried out. + background_model : BackgroundModel | None, default=None + The background model of the instrument. If None, an empty background model is created, + and the background evaluates to 0. + energy_offset : Numeric | None, default=None + Template energy offset of the instrument. Will be copied to each Q value. If None, the + energy offset will be 0. + unit : str | sc.Unit, default='meV' + The unit of the energy axis. + + Raises + ------ + TypeError + If resolution_model is not a ResolutionModel or None, or if background_model is not a + BackgroundModel or None, or if energy_offset is not a number or None. """ super().__init__( display_name=display_name, @@ -107,23 +111,30 @@ def __init__( @property def resolution_model(self) -> ResolutionModel: - """Get the resolution model of the instrument. + """ + Get the resolution model of the instrument. - Returns: - ResolutionModel: The resolution model of the instrument. + Returns + ------- + ResolutionModel + The resolution model of the instrument. """ return self._resolution_model @resolution_model.setter def resolution_model(self, value: ResolutionModel) -> None: - """Set the resolution model of the instrument. + """ + Set the resolution model of the instrument. - Args: - value (ResolutionModel): The new resolution model of the - instrument. + Parameters + ---------- + value : ResolutionModel + The new resolution model of the instrument. - Raises: - TypeError: If value is not a ResolutionModel. + Raises + ------ + TypeError + If value is not a ResolutionModel. """ if not isinstance(value, ResolutionModel): raise TypeError( @@ -134,24 +145,31 @@ def resolution_model(self, value: ResolutionModel) -> None: @property def background_model(self) -> BackgroundModel: - """Get the background model of the instrument. + """ + Get the background model of the instrument. - Returns: - BackgroundModel: The background model of the instrument. + Returns + ------- + BackgroundModel + The background model of the instrument. """ return self._background_model @background_model.setter def background_model(self, value: BackgroundModel) -> None: - """Set the background model of the instrument. + """ + Set the background model of the instrument. - Args: - value (BackgroundModel): The new background model of the - instrument. + Parameters + ---------- + value : BackgroundModel + The new background model of the instrument. - Raises: - TypeError: If value is not a BackgroundModel. + Raises + ------ + TypeError + If value is not a BackgroundModel. """ if not isinstance(value, BackgroundModel): @@ -163,28 +181,34 @@ def background_model(self, value: BackgroundModel) -> None: @property def Q(self) -> np.ndarray | None: - """Get the Q values of the InstrumentModel. + """ + Get the Q values of the InstrumentModel. - Returns: - np.ndarray | None: The Q values of the InstrumentModel, or - None if not set + Returns + ------- + np.ndarray | None + The Q values of the InstrumentModel, or None if not set. """ return self._Q @Q.setter def Q(self, value: Q_type | None) -> None: - """Set the Q values of the InstrumentModel. If Q is already set, - it raises an error if the new Q values are not similar to the - old ones to prevent accidental changes to the background and - resolution models. To change Q values, first run clear_Q(). + """ + Set the Q values of the InstrumentModel. + + If Q is already set, it raises an error if the new Q values are not similar to the old ones + to prevent accidental changes to the background and resolution models. To change Q values, + first run clear_Q(). - Args: - value (Q_type | None): The new Q values to set. - If None, Q values are not changed. + Parameters + ---------- + value : Q_type | None + The new Q values to set. If None, Q values are not changed. - Raises: - ValueError: If the new Q values are not similar to the old - ones when Q is not None + Raises + ------ + ValueError + If the new Q values are not similar to the old ones when Q is not None. """ if value is None: return @@ -204,26 +228,33 @@ def Q(self, value: Q_type | None) -> None: @property def unit(self) -> str | sc.Unit: - """Get the unit of the InstrumentModel. + """ + Get the unit of the InstrumentModel. - Returns: - str | sc.Unit: The unit of the InstrumentModel. + Returns + ------- + str | sc.Unit + The unit of the InstrumentModel. """ return self._unit @unit.setter def unit(self, _unit_str: str) -> None: - """Set the unit of the InstrumentModel. The unit is read-only - and cannot be set directly. Use convert_unit to change the unit - between allowed types or create a new InstrumentModel with the - desired unit. + """ + Set the unit of the InstrumentModel. - Args: - _unit_str (str): The new unit for the InstrumentModel - (ignored) + The unit is read-only and cannot be set directly. Use convert_unit to change the unit + between allowed types or create a new InstrumentModel with the desired unit. - Raises: - AttributeError: Always, as the unit is read-only. + Parameters + ---------- + _unit_str : str + The new unit for the InstrumentModel (ignored). + + Raises + ------ + AttributeError + Always, as the unit is read-only. """ raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' @@ -232,25 +263,30 @@ def unit(self, _unit_str: str) -> None: @property def energy_offset(self) -> Parameter: - """Get the energy offset template parameter of the instrument - model. + """ + Get the energy offset template parameter of the instrument model. - Returns: - Parameter: The energy offset template parameter of the - instrument model. + Returns + ------- + Parameter + The energy offset template parameter of the instrument model. """ return self._energy_offset @energy_offset.setter def energy_offset(self, value: Numeric) -> None: - """Set the offset parameter of the instrument model. + """ + Set the offset parameter of the instrument model. - Args: - value (Numeric): The new value for the energy offset - parameter. Will be copied to all Q values. + Parameters + ---------- + value : Numeric + The new value for the energy offset parameter. Will be copied to all Q values. - Raises: - TypeError: If value is not a number. + Raises + ------ + TypeError + If value is not a number. """ if not isinstance(value, Numeric): raise TypeError(f'energy_offset must be a number, got {type(value).__name__}') @@ -263,16 +299,19 @@ def energy_offset(self, value: Numeric) -> None: # -------------------------------------------------------------- def clear_Q(self, confirm: bool = False) -> None: - """Clear the Q values of the InstrumentModel and any associated - ResolutionModel and BackgroundModel, removing all component - collections and their associated Parameters. - - Args: - confirm (bool, default=False): Confirmation to clear Q - values. - - Raises: - ValueError: If confirm is not True. + """ + Clear the Q values of the InstrumentModel and any associated ResolutionModel and + BackgroundModel, removing all component collections and their associated Parameters. + + Parameters + ---------- + confirm : bool, default=False + Confirmation to clear Q values. + + Raises + ------ + ValueError + If confirm is not True. """ if not confirm: raise ValueError( @@ -284,14 +323,18 @@ def clear_Q(self, confirm: bool = False) -> None: self._on_Q_change() def convert_unit(self, unit_str: str | sc.Unit) -> None: - """Convert the unit of the InstrumentModel. + """ + Convert the unit of the InstrumentModel. - Args: - unit_str (str | sc.Unit): The unit to convert to. + Parameters + ---------- + unit_str : str | sc.Unit + The unit to convert to. - Raises: - ValueError: If unit_str is not a valid unit string or - scipp Unit. + Raises + ------ + ValueError + If unit_str is not a valid unit string or scipp Unit. """ unit = _validate_unit(unit_str) if unit is None: @@ -306,23 +349,28 @@ def convert_unit(self, unit_str: str | sc.Unit) -> None: self._unit = unit def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: - """Get all variables in the InstrumentModel. - - Args: - Q_index (int | None, default=None): The index of the Q value to get - variables for. If None, get variables for all Q values. - - Returns: - list[Parameter]: A list of all variables in the - InstrumentModel. If Q_index is specified, only variables - from the ComponentCollection at the given Q index are - included. Otherwise, all variables in the - InstrumentModel are included. - - Raises: - TypeError: If Q_index is not an int or None. - IndexError: If Q_index is out of bounds for the Q values in - the InstrumentModel. + """ + Get all variables in the InstrumentModel. + + Parameters + ---------- + Q_index : int | None, default=None + The index of the Q value to get variables for. If None, get variables for all Q values. + + + Raises + ------ + TypeError + If Q_index is not an int or None. + IndexError + If Q_index is out of bounds for the Q values in the InstrumentModel. + + Returns + ------- + list[Parameter] + A list of all variables in the InstrumentModel. If Q_index is specified, only variables + from the ComponentCollection at the given Q index are included. Otherwise, all + variables in the InstrumentModel are included. """ if self._Q is None: return [] @@ -359,20 +407,29 @@ def get_energy_offset( self, Q_index: int | None = None, ) -> Parameter | list[Parameter]: - """Get the energy offset Parameter at a specific Q index. - - Args: - Q_index (int | None, default=None): The index of the Q value to get the energy - offset for. If None, get the energy offset for all Q values. - - Returns: - Parameter | list[Parameter]: The energy offset Parameter at the specified Q - index, or a list of Parameters if Q_index is None. - - Raises: - ValueError: If no Q values are set in the InstrumentModel. - IndexError: If Q_index is out of bounds. - TypeError: If Q_index is not an int or None. + """ + Get the energy offset Parameter at a specific Q index. + + Parameters + ---------- + Q_index : int | None, default=None + The index of the Q value to get the energy offset for. If None, get the energy offset + for all Q values. + + Raises + ------ + ValueError + If no Q values are set in the InstrumentModel. + IndexError + If Q_index is out of bounds. + TypeError + If Q_index is not an int or None. + + Returns + ------- + Parameter | list[Parameter] + The energy offset Parameter at the specified Q index, or a list of Parameters if + Q_index is None. """ if self._Q is None: raise ValueError('No Q values are set in the InstrumentModel.') @@ -389,26 +446,32 @@ def get_energy_offset( return self._energy_offsets[Q_index] def fix_energy_offset(self, Q_index: int | None = None) -> None: - """Fix energy offset parameters. If Q_index is specified, only - fix the energy offset for that Q value. If Q_index is None, fix - energy offsets for all Q values. + """ + Fix energy offset parameters. + + If Q_index is specified, only fix the energy offset for that Q value. If Q_index is None, + fix energy offsets for all Q values. - Args: - Q_index (int | None, default=None): The index of the Q value - to fix the energy offset for. If None, fix energy - offsets for all Q values. + Parameters + ---------- + Q_index : int | None, default=None + The index of the Q value to fix the energy offset for. If None, fix energy offsets for + all Q values. """ self._fix_or_free_energy_offset(Q_index, fixed=True) def free_energy_offset(self, Q_index: int | None = None) -> None: - """Free energy offset parameters. If Q_index is specified, only - free the energy offset for that Q value. If Q_index is None, + """ + Free energy offset parameters. + + If Q_index is specified, only free the energy offset for that Q value. If Q_index is None, free energy offsets for all Q values. - Args: - Q_index (int | None, default=None): The index of the Q value - to free the energy offset for. If None, free energy - offsets for all Q values. + Parameters + ---------- + Q_index : int | None, default=None + The index of the Q value to free the energy offset for. If None, free energy offsets + for all Q values. """ self._fix_or_free_energy_offset(Q_index, fixed=False) @@ -416,21 +479,26 @@ def free_energy_offset(self, Q_index: int | None = None) -> None: # Private methods # -------------------------------------------------------------- def _fix_or_free_energy_offset(self, Q_index: int | None = None, fixed: bool = True) -> None: - """Fix or free energy offset parameters. If Q_index is - specified, only fix or free the energy offset for that Q value. - If Q_index is None, fix or free energy offsets for all Q values. - - Args: - Q_index (int | None, default=None): The index of the Q value - to fix or free the energy offset for. If None, fix or - free energy offsets for all Q values. - fixed (bool, default=True): Whether to fix (True) or free - (False) the energy offset. - - Raises: - TypeError: If Q_index is not an int or None. - IndexError: If Q_index is out of bounds for the Q values in - the InstrumentModel. + """ + Fix or free energy offset parameters. + + If Q_index is specified, only fix or free the energy offset for that Q value. If Q_index is + None, fix or free energy offsets for all Q values. + + Parameters + ---------- + Q_index : int | None, default=None + The index of the Q value to fix or free the energy offset for. If None, fix or free + energy offsets for all Q values. + fixed : bool, default=True + Whether to fix (True) or free (False) the energy offset. + + Raises + ------ + TypeError + If Q_index is not an int or None. + IndexError + If Q_index is out of bounds for the Q values in the InstrumentModel. """ if Q_index is None: @@ -478,10 +546,13 @@ def _on_background_model_change(self) -> None: # ------------------------------------------------------------- def __repr__(self) -> str: - """Return a string representation of the InstrumentModel. + """ + Return a string representation of the InstrumentModel. - Returns: - str: A string representation of the InstrumentModel. + Returns + ------- + str + A string representation of the InstrumentModel. """ return ( diff --git a/src/easydynamics/sample_model/model_base.py b/src/easydynamics/sample_model/model_base.py index 0bb95860..1b5d9363 100644 --- a/src/easydynamics/sample_model/model_base.py +++ b/src/easydynamics/sample_model/model_base.py @@ -17,10 +17,10 @@ class ModelBase(EasyScienceModelBase): - """Base class for Sample Models. + """ + Base class for Sample Models. - Contains common functionality for models with components and Q - dependence. + Contains common functionality for models with components and Q dependence. """ def __init__( @@ -31,22 +31,27 @@ def __init__( components: ModelComponent | ComponentCollection | None = None, Q: Q_type | None = None, ) -> None: - """Initialize the ModelBase. - - Args: - display_name (str, default="MyModelBase"): Display name of the model. - unique_name (str | None, default=None): Unique name of the model. If None, - a unique name will be generated. - unit (str | sc.Unit | None, default="meV"): Unit of the model. - components (ModelComponent | ComponentCollection | None, default=None): - Template components of the model. If None, no components - are added. These components are copied into - ComponentCollections for each Q value. - Q (Q_type | None, default=None): Q values for the model. - If None, Q is not set. - - Raises: - TypeError: If components is not a ModelComponent or ComponentCollection. + """ + Initialize the ModelBase. + + Parameters + ---------- + display_name : str, default='MyModelBase' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + unit : str | sc.Unit | None, default='meV' + Unit of the model. + components : ModelComponent | ComponentCollection | None, default=None + Template components of the model. If None, no components are added. These components + are copied into ComponentCollections for each Q value. + Q : Q_type | None, default=None + Q values for the model. If None, Q is not set. + + Raises + ------ + TypeError + If components is not a ModelComponent or ComponentCollection. """ super().__init__( display_name=display_name, @@ -72,23 +77,26 @@ def __init__( def evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray ) -> list[np.ndarray]: - """Evaluate the sample model at all Q for the given x values. - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - Energy axis values to evaluate the model at. If a scipp - Variable or DataArray is provided, the unit of the model - will be converted to match the unit of x for evaluation, and - the result will be returned in the same unit as x. - - Returns: - list[np.ndarray]: A list of numpy arrays containing the - evaluated model values for each Q. The length of the - list will match the number of Q values in the model. - - Raises: - ValueError: If there are no components in the model to - evaluate. + """ + Evaluate the sample model at all Q for the given x values. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + Energy axis values to evaluate the model at. If a scipp Variable or DataArray is + provided, the unit of the model will be converted to match the unit of x for + evaluation, and the result will be returned in the same unit as x. + + Raises + ------ + ValueError + If there are no components in the model to evaluate. + + Returns + ------- + list[np.ndarray] + A list of numpy arrays containing the evaluated model values for each Q. The length of + the list will match the number of Q values in the model. """ if not self._component_collections: @@ -102,23 +110,25 @@ def evaluate( # Component management # ------------------------------------------------------------------ def append_component(self, component: ModelComponent | ComponentCollection) -> None: - """Append a ModelComponent or ComponentCollection to the - SampleModel. + """ + Append a ModelComponent or ComponentCollection to the SampleModel. - Args: - component (ModelComponent | ComponentCollection): The - ModelComponent or ComponentCollection to append. + Parameters + ---------- + component : ModelComponent | ComponentCollection + The ModelComponent or ComponentCollection to append. """ self._components.append_component(component) self._on_components_change() def remove_component(self, unique_name: str) -> None: - """Remove a ModelComponent from the SampleModel by its unique - name. + """ + Remove a ModelComponent from the SampleModel by its unique name. - Args: - unique_name (str): The unique name of the ModelComponent - to remove. + Parameters + ---------- + unique_name : str + The unique name of the ModelComponent to remove. """ self._components.remove_component(unique_name) self._on_components_change() @@ -134,24 +144,31 @@ def clear_components(self) -> None: @property def unit(self) -> str | sc.Unit | None: - """Get the unit of the ComponentCollection. + """ + Get the unit of the ComponentCollection. - Returns: - str | sc.Unit | None: The unit of the ComponentCollection. + Returns + ------- + str | sc.Unit | None + The unit of the ComponentCollection. """ return self._unit @unit.setter def unit(self, _unit_str: str) -> None: - """Unit is read-only and cannot be set directly. + """ + Unit is read-only and cannot be set directly. - Args: - _unit_str (str): The new unit to set (ignored). + Parameters + ---------- + _unit_str : str + The new unit to set (ignored). - Raises: - AttributeError: Always raised to indicate that the unit is - read-only. + Raises + ------ + AttributeError + Always raised to indicate that the unit is read-only. """ raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' @@ -159,16 +176,20 @@ def unit(self, _unit_str: str) -> None: ) # noqa: E501 def convert_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the ComponentCollection and all its - components. - - Args: - unit (str | sc.Unit): The new unit to convert to. - - Raises: - TypeError: If the provided unit is not a string or sc.Unit. - Exception: If the provided unit is not compatible with the - current unit. + """ + Convert the unit of the ComponentCollection and all its components. + + Parameters + ---------- + unit : str | sc.Unit + The new unit to convert to. + + Raises + ------ + TypeError + If the provided unit is not a string or sc.Unit. + Exception + If the provided unit is not compatible with the current unit. """ old_unit = self._unit @@ -191,24 +212,30 @@ def convert_unit(self, unit: str | sc.Unit) -> None: @property def components(self) -> list[ModelComponent]: - """Get the components of the SampleModel. + """ + Get the components of the SampleModel. - Returns: - list[ModelComponent]: The components of the SampleModel. + Returns + ------- + list[ModelComponent] + The components of the SampleModel. """ return self._components.components @components.setter def components(self, value: ModelComponent | ComponentCollection | None) -> None: - """Set the components of the SampleModel. + """ + Set the components of the SampleModel. - Args: - value (ModelComponent | ComponentCollection | None): The new - components to set. If None, all components will be cleared. + Parameters + ---------- + value : ModelComponent | ComponentCollection | None + The new components to set. If None, all components will be cleared. - Raises: - TypeError: If value is not a ModelComponent, - ComponentCollection, or None. + Raises + ------ + TypeError + If value is not a ModelComponent, ComponentCollection, or None. """ if not isinstance(value, (ModelComponent, ComponentCollection, type(None))): raise TypeError('Components must be a ModelComponent or a ComponentCollection') @@ -219,27 +246,33 @@ def components(self, value: ModelComponent | ComponentCollection | None) -> None @property def Q(self) -> np.ndarray | None: - """Get the Q values of the SampleModel. + """ + Get the Q values of the SampleModel. - Returns: - np.ndarray | None: The Q values of the SampleModel, or None - if not set. + Returns + ------- + np.ndarray | None + The Q values of the SampleModel, or None if not set. """ return self._Q @Q.setter def Q(self, value: Q_type | None) -> None: - """Set the Q values of the SampleModel. If Q is already set, it - throws an error if the new Q values are not similar to the old + """ + Set the Q values of the SampleModel. + + If Q is already set, it throws an error if the new Q values are not similar to the old ones. To change Q values, first run clear_Q(). - Args: - value (Q_type | None): The new Q values to set. - If None, Q values are not changed. + Parameters + ---------- + value : Q_type | None + The new Q values to set. If None, Q values are not changed. - Raises: - ValueError: If the new Q values are not similar to the old - ones when Q is already set. + Raises + ------ + ValueError + If the new Q values are not similar to the old ones when Q is already set. """ if value is None: return @@ -258,14 +291,19 @@ def Q(self, value: Q_type | None) -> None: ) def clear_Q(self, confirm: bool = False) -> None: - """Clear the Q values of the SampleModel, removing all component - collections and their associated Parameters. - - Args: - confirm (bool, default=False): Confirmation to clear Q values. - - Raises: - ValueError: If confirm is not True. + """ + Clear the Q values of the SampleModel, removing all component collections and their + associated Parameters. + + Parameters + ---------- + confirm : bool, default=False + Confirmation to clear Q values. + + Raises + ------ + ValueError + If confirm is not True. """ if not confirm: raise ValueError( @@ -288,24 +326,29 @@ def free_all_parameters(self) -> None: par.fixed = False def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: - """Get all Parameters and Descriptors from all - ComponentCollections in the ModelBase. Parameters Ignores the - Parameters and Descriptors in self._components as these are just + """ + Get all Parameters and Descriptors from all ComponentCollections in the ModelBase. + Parameters Ignores the Parameters and Descriptors in self._components as these are just templates. - Args: - Q_index (int | None, default=None): If None, get variables for all - ComponentCollections. If int, get variables for the - ComponentCollection at this index. Defaults to None. - - Returns: - list[Parameter]: A list of all Parameters and Descriptors - from the ComponentCollections in the ModelBase. - - Raises: - TypeError: If Q_index is not an int or None. - IndexError: If Q_index is out of bounds for the number of - ComponentCollections. + Parameters + ---------- + Q_index : int | None, default=None + If None, get variables for all ComponentCollections. If int, get variables for the + ComponentCollection at this index. + + Raises + ------ + TypeError + If Q_index is not an int or None. + IndexError + If Q_index is out of bounds for the number of ComponentCollections. + + Returns + ------- + list[Parameter] + A list of all Parameters and Descriptors from the ComponentCollections in the + ModelBase. """ if Q_index is None: @@ -326,19 +369,25 @@ def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: return all_vars def get_component_collection(self, Q_index: int) -> ComponentCollection: - """Get the ComponentCollection at the given Q index. - - Args: - Q_index (int): The index of the desired ComponentCollection. - - Returns: - ComponentCollection: The ComponentCollection at the - specified Q index. - - Raises: - TypeError: If Q_index is not an int. - IndexError: If Q_index is out of bounds for the number of - ComponentCollections. + """ + Get the ComponentCollection at the given Q index. + + Parameters + ---------- + Q_index : int + The index of the desired ComponentCollection. + + Raises + ------ + TypeError + If Q_index is not an int. + IndexError + If Q_index is out of bounds for the number of ComponentCollections. + + Returns + ------- + ComponentCollection + The ComponentCollection at the. """ if not isinstance(Q_index, int): raise TypeError(f'Q_index must be an int, got {type(Q_index).__name__}') @@ -382,10 +431,13 @@ def _on_components_change(self) -> None: # ------------------------------------------------------------------ def __repr__(self) -> str: - """Return a string representation of the ModelBase. + """ + Return a string representation of the ModelBase. - Returns: - str: A string representation of the ModelBase. + Returns + ------- + str + A string representation of the ModelBase. """ return ( f'{self.__class__.__name__}(unique_name={self.unique_name}, ' diff --git a/src/easydynamics/sample_model/resolution_model.py b/src/easydynamics/sample_model/resolution_model.py index 639bf8f8..50fae8d0 100644 --- a/src/easydynamics/sample_model/resolution_model.py +++ b/src/easydynamics/sample_model/resolution_model.py @@ -13,8 +13,8 @@ class ResolutionModel(ModelBase): - """ResolutionModel represents a model of the instrment resolution in - an experiment at various Q. + """ + ResolutionModel represents a model of the instrment resolution in an experiment at various Q. """ def __init__( @@ -25,19 +25,22 @@ def __init__( components: ModelComponent | ComponentCollection | None = None, Q: Q_type | None = None, ) -> None: - """Initialize a ResolutionModel. + """ + Initialize a ResolutionModel. - Args: - display_name (str, default="MyResolutionModel"): Display name of the model. - unique_name (str | None, default=None): Unique name of the model. If None, - a unique name will be generated. - unit (str | sc.Unit, default="meV"): Unit of the model. - components (ModelComponent | ComponentCollection | None, default=None): - Template components of the model. If None, no components - are added. These components are copied into - ComponentCollections for each Q value. - Q (Q_type | None, default=None): Q values for the model. If None, Q is not - set. + Parameters + ---------- + display_name : str, default='MyResolutionModel' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + unit : str | sc.Unit, default='meV' + Unit of the model. + components : ModelComponent | ComponentCollection | None, default=None + Template components of the model. If None, no components are added. These components + are copied into ComponentCollections for each Q value. + Q : Q_type | None, default=None + Q values for the model. If None, Q is not set. """ super().__init__( @@ -49,17 +52,21 @@ def __init__( ) def append_component(self, component: ModelComponent | ComponentCollection) -> None: - """Append a component to the ResolutionModel. + """ + Append a component to the ResolutionModel. - Does not allow DeltaFunction or Polynomial components, as these - are not physical resolution components. + Does not allow DeltaFunction or Polynomial components, as these are not physical resolution + components. - Args: - component (ModelComponent | ComponentCollection): - Component(s) to append. + Parameters + ---------- + component : ModelComponent | ComponentCollection + Component(s) to append. - Raises: - TypeError: If the component is a DeltaFunction or Polynomial + Raises + ------ + TypeError + If the component is a DeltaFunction or Polynomial. """ if isinstance(component, ComponentCollection): components = component.components diff --git a/src/easydynamics/sample_model/sample_model.py b/src/easydynamics/sample_model/sample_model.py index d6c63492..26fad08c 100644 --- a/src/easydynamics/sample_model/sample_model.py +++ b/src/easydynamics/sample_model/sample_model.py @@ -18,9 +18,9 @@ class SampleModel(ModelBase): - """SampleModel represents a model of a sample with components and - diffusion models, parameterized by Q and optionally temperature. - Generates ComponentCollections for each Q value, combining + """ + SampleModel represents a model of a sample with components and diffusion models, parameterized + by Q and optionally temperature. Generates ComponentCollections for each Q value, combining components from the base model and diffusion models. Applies detailed balancing based on temperature if provided. @@ -38,36 +38,39 @@ def __init__( temperature_unit: str | sc.Unit = 'K', divide_by_temperature: bool = True, ) -> None: - """Initialize the SampleModel. - - Args: - display_name (str, default="MySampleModel"): Display name of the model. - unique_name (str | None, default=None): Unique name of the model. If None, - a unique name will be generated. - unit (str | sc.Unit, default="meV"): Unit of the model. If None, - defaults to "meV". - components (ModelComponent | ComponentCollection | None, default=None): - Template components of the model. If None, no components - are added. These components are copied into - ComponentCollections for each Q value. - Q (Q_type | None, default=None): - Q values for the model. If None, Q is not set. - diffusion_models (DiffusionModelBase | list[DiffusionModelBase] | None, default=None): - Diffusion models to include in the SampleModel. If None, - no diffusion models are added. - temperature (float | None, default=None): Temperature for detailed - balancing. If None, no detailed balancing is applied. - temperature_unit (str | sc.Unit, default="K"): Unit of the temperature. - Defaults to "K". - divide_by_temperature (bool, default=True): Whether to divide the detailed - balance factor by temperature. Defaults to True. - - Raises: - TypeError: If diffusion_models is not a DiffusionModelBase, - a list of DiffusionModelBase, or None, or if temperature - is not a number or None, or if divide_by_temperature is - not a bool. - ValueError: If temperature is negative. + """ + Initialize the SampleModel. + + Parameters + ---------- + display_name : str, default='MySampleModel' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + unit : str | sc.Unit, default='meV' + Unit of the model. If None,. + components : ModelComponent | ComponentCollection | None, default=None + Template components of the model. If None, no components are added. These components + are copied into ComponentCollections for each Q value. + Q : Q_type | None, default=None + Q values for the model. If None, Q is not set. + diffusion_models : DiffusionModelBase | list[DiffusionModelBase] | None, default=None + Diffusion models to include in the SampleModel. If None, no diffusion models are added. + temperature : float | None, default=None + Temperature for detailed balancing. If None, no detailed balancing is applied. By + default, None. + temperature_unit : str | sc.Unit, default='K' + Unit of the temperature. + divide_by_temperature : bool, default=True + Whether to divide the detailed balance factor by temperature. + + Raises + ------ + TypeError + If diffusion_models is not a DiffusionModelBase, a list of DiffusionModelBase, or None, + or if temperature is not a number or None, or if divide_by_temperature is not a bool. + ValueError + If temperature is negative. """ if diffusion_models is None: self._diffusion_models = [] @@ -117,15 +120,18 @@ def __init__( # ------------------------------------------------------------------ def append_diffusion_model(self, diffusion_model: DiffusionModelBase) -> None: - """Append a DiffusionModel to the SampleModel. + """ + Append a DiffusionModel to the SampleModel. - Args: - diffusion_model (DiffusionModelBase): The DiffusionModel - to append. + Parameters + ---------- + diffusion_model : DiffusionModelBase + The DiffusionModel to append. - Raises: - TypeError: If the diffusion_model is not a - DiffusionModelBase + Raises + ------ + TypeError + If the diffusion_model is not a DiffusionModelBase. """ if not isinstance(diffusion_model, DiffusionModelBase): @@ -137,14 +143,18 @@ def append_diffusion_model(self, diffusion_model: DiffusionModelBase) -> None: self._generate_component_collections() def remove_diffusion_model(self, name: 'str') -> None: - """Remove a DiffusionModel from the SampleModel by unique name. + """ + Remove a DiffusionModel from the SampleModel by unique name. - Args: - name (str): The unique name of the DiffusionModel to remove. + Parameters + ---------- + name : 'str' + The unique name of the DiffusionModel to remove. - Raises: - ValueError: If no DiffusionModel with the given unique name - is found. + Raises + ------ + ValueError + If no DiffusionModel with the given unique name is found. """ for i, dm in enumerate(self._diffusion_models): if dm.unique_name == name: @@ -167,11 +177,13 @@ def clear_diffusion_models(self) -> None: @property def diffusion_models(self) -> list[DiffusionModelBase]: - """Get the diffusion models of the SampleModel. + """ + Get the diffusion models of the SampleModel. - Returns: - list[DiffusionModelBase]: The diffusion models of the - SampleModel. + Returns + ------- + list[DiffusionModelBase] + The diffusion models of the SampleModel. """ return self._diffusion_models @@ -179,17 +191,19 @@ def diffusion_models(self) -> list[DiffusionModelBase]: def diffusion_models( self, value: DiffusionModelBase | list[DiffusionModelBase] | None ) -> None: - """Set the diffusion models of the SampleModel. - - Args: - value (DiffusionModelBase | list[DiffusionModelBase] | None): - The diffusion model(s) to set. Can be a single - DiffusionModelBase, a list of DiffusionModelBase, or - None to clear all diffusion models. - - Raises: - TypeError: If value is not a DiffusionModelBase, a list of - DiffusionModelBase, or None. + """ + Set the diffusion models of the SampleModel. + + Parameters + ---------- + value : DiffusionModelBase | list[DiffusionModelBase] | None + The diffusion model(s) to set. Can be a single DiffusionModelBase, a list of + DiffusionModelBase, or None to clear all diffusion models. + + Raises + ------ + TypeError + If value is not a DiffusionModelBase, a list of DiffusionModelBase, or None. """ if value is None: @@ -210,25 +224,32 @@ def diffusion_models( @property def temperature(self) -> Parameter | None: - """Get the temperature of the SampleModel. + """ + Get the temperature of the SampleModel. - Returns: - Parameter | None: The temperature Parameter of the - SampleModel, or None if not set. + Returns + ------- + Parameter | None + The temperature Parameter of the SampleModel, or None if not set. """ return self._temperature @temperature.setter def temperature(self, value: Numeric | None) -> None: - """Set the temperature of the SampleModel. - - Args: - value (Numeric | None): The temperature value to set. Can be - a number or None to unset the temperature. - - Raises: - TypeError: If value is not a number or None. - ValueError: If value is negative. + """ + Set the temperature of the SampleModel. + + Parameters + ---------- + value : Numeric | None + The temperature value to set. Can be a number or None to unset the temperature. + + Raises + ------ + TypeError + If value is not a number or None. + ValueError + If value is negative. """ if value is None: self._temperature = None @@ -253,23 +274,30 @@ def temperature(self, value: Numeric | None) -> None: @property def temperature_unit(self) -> str | sc.Unit: - """Get the temperature unit of the SampleModel. + """ + Get the temperature unit of the SampleModel. - Returns: - str | sc.Unit: The unit of the temperature Parameter. + Returns + ------- + str | sc.Unit + The unit of the temperature Parameter. """ return self._temperature_unit @temperature_unit.setter def temperature_unit(self, _value: str | sc.Unit) -> None: - """The temperature unit of the SampleModel is read-only. + """ + The temperature unit of the SampleModel is read-only. - Args: - _value (str | sc.Unit): The unit to set for the temperature - Parameter. + Parameters + ---------- + _value : str | sc.Unit + The unit to set for the temperature Parameter. - Raises: - AttributeError: Always, as temperature_unit is read-only. + Raises + ------ + AttributeError + Always, as temperature_unit is read-only. """ raise AttributeError( @@ -278,15 +306,20 @@ def temperature_unit(self, _value: str | sc.Unit) -> None: ) # noqa: E501 def convert_temperature_unit(self, unit: str | sc.Unit) -> None: - """Convert the unit of the temperature Parameter. - - Args: - unit (str | sc.Unit): The unit to convert the temperature - Parameter to. - - Raises: - ValueError: If temperature is not set or conversion fails. - Exception: If the provided unit is invalid or cannot be converted. + """ + Convert the unit of the temperature Parameter. + + Parameters + ---------- + unit : str | sc.Unit + The unit to convert the temperature Parameter to. + + Raises + ------ + ValueError + If temperature is not set or conversion fails. + Exception + If the provided unit is invalid or cannot be converted. """ if self._temperature is None: @@ -305,26 +338,30 @@ def convert_temperature_unit(self, unit: str | sc.Unit) -> None: @property def divide_by_temperature(self) -> bool: - """Get whether to divide the detailed balance factor by - temperature. + """ + Get whether to divide the detailed balance factor by temperature. - Returns: - bool: True if the detailed balance factor is divided by - temperature, False otherwise. + Returns + ------- + bool + True if the detailed balance factor is divided by temperature, False otherwise. """ return self._divide_by_temperature @divide_by_temperature.setter def divide_by_temperature(self, value: bool) -> None: - """Set whether to divide the detailed balance factor by - temperature. + """ + Set whether to divide the detailed balance factor by temperature. - Args: - value (bool): True to divide the detailed balance factor by - temperature, False otherwise. + Parameters + ---------- + value : bool + True to divide the detailed balance factor by temperature, False otherwise. - Raises: - TypeError: If value is not a bool. + Raises + ------ + TypeError + If value is not a bool. """ if not isinstance(value, bool): raise TypeError('divide_by_temperature must be True or False') @@ -337,15 +374,19 @@ def divide_by_temperature(self, value: bool) -> None: def evaluate( self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray ) -> list[np.ndarray]: - """Evaluate the sample model at all Q for the given x values. - - Args: - x (Numeric | list | np.ndarray | sc.Variable | sc.DataArray): - The x values to evaluate the model at. Can be a number, - list, numpy array, scipp Variable, or scipp DataArray. - - Returns: - list[np.ndarray]: List of evaluated model values for each Q. + """ + Evaluate the sample model at all Q for the given x values. + + Parameters + ---------- + x : Numeric | list | np.ndarray | sc.Variable | sc.DataArray + The x values to evaluate the model at. Can be a number, list, numpy array, scipp + Variable, or scipp DataArray. + + Returns + ------- + list[np.ndarray] + List of evaluated model values for each Q. """ y = super().evaluate(x) @@ -362,22 +403,23 @@ def evaluate( return y def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: - """Get all Parameters and Descriptors from all - ComponentCollections in the SampleModel. - - Also includes temperature if set and all variables from - diffusion models. Ignores the Parameters and Descriptors in - self._components as these are just templates. - - Args: - Q_index (int | None, default=None): If specified, only get variables from - the ComponentCollection at the given Q index. If None, - get variables from all ComponentCollections. - - Returns: - list[Parameter]: List of all Parameters and Descriptors, - including temperature if set and all variables from - diffusion models. + """ + Get all Parameters and Descriptors from all ComponentCollections in the SampleModel. + + Also includes temperature if set and all variables from diffusion models. Ignores the + Parameters and Descriptors in self._components as these are just templates. + + Parameters + ---------- + Q_index : int | None, default=None + If specified, only get variables from the ComponentCollection at the given Q index. If + None, get variables from all ComponentCollections. + + Returns + ------- + list[Parameter] + List of all Parameters and Descriptors, including temperature if set and all variables + from diffusion models. """ all_vars = super().get_all_variables(Q_index=Q_index) @@ -394,8 +436,9 @@ def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: # ------------------------------------------------------------------ def _generate_component_collections(self) -> None: - """Generate ComponentCollections from the DiffusionModels for - each Q and add the components from self._components. + """ + Generate ComponentCollections from the DiffusionModels for each Q and add the components + from self._components. """ # TODO regenerate automatically if Q, diffusion models # or components have changed @@ -422,10 +465,13 @@ def _on_diffusion_models_change(self) -> None: # ------------------------------------------------------------------ def __repr__(self) -> str: - """Return a string representation of the SampleModel. + """ + Return a string representation of the SampleModel. - Returns: - str: A string representation of the SampleModel. + Returns + ------- + str + A string representation of the SampleModel. """ return ( diff --git a/src/easydynamics/utils/detailed_balance.py b/src/easydynamics/utils/detailed_balance.py index cd8ff347..796afaff 100644 --- a/src/easydynamics/utils/detailed_balance.py +++ b/src/easydynamics/utils/detailed_balance.py @@ -30,51 +30,48 @@ def detailed_balance_factor( divide_by_temperature: bool = True, ) -> np.ndarray: r""" - Compute the detailed balance factor (DBF): - $$ - DBF(E, T) = E(n(E)+1)=\frac{E}{(1 - e^{-E / (k_B*T)})}}, - $$ - where $n(E)$ is the Bose-Einstein distribution, $E$ is the energy - transfer, and $T$ is the temperature. $k_B$ is the Boltzmann - constant. - If divide_by_temperature is True, the result is normalized by - $k_B*T$ to have value 1 at $E=0$. - - Args: - energy (int | float | list | np.ndarray | sc.Variable): The energy - transfer. If number, assumed to be in meV unless energy_unit - is set. - temperature (int | float | sc.Variable | Parameter): The - temperature. If number, assumed to be in K unless - temperature_unit is set. - energy_unit (str | sc.Unit, default='meV'): Unit for energy if energy is - given as a number or list. Default is 'meV' - temperature_unit (str | sc.Unit, default='K'): Unit for temperature if - temperature is given as a number. Default is 'K' - divide_by_temperature (bool, default=True): If True, divide the result - by $k_B*T$ to make it dimensionless and have value 1 at E=0. - Default is True. - - Returns: - np.ndarray: Detailed balance factor evaluated at the - given energy and temperature. - - Raises: - TypeError: If energy or temperature is not a number, list, - numpy array, or scipp Variable, or if energy_unit or - temperature_unit is not a string or scipp Unit, - or if divide_by_temperature is not a boolean. - ValueError: If temperature is negative, or if energy is a numpy - array with more than 1 dimension, or if temperature is a - scipp Variable that does not have a single dimension named - 'temperature', or if energy is a scipp Variable that does - not have a single dimension named 'energy'. - UnitError: If the provided energy_unit or temperature_unit is - invalid, or if the units of energy or temperature cannot be - converted to the expected units. - ZeroDivisionError: If divide_by_temperature is True and temperature is zero. - - Examples: + Compute the detailed balance factor (DBF): $$ DBF(E, T) = E(n(E)+1)=\frac{E}{(1 - e^{-E / + (k_B*T)})}}, $$ where $n(E)$ is the Bose-Einstein distribution, $E$ is the energy transfer, and + $T$ is the temperature. $k_B$ is the Boltzmann constant. If divide_by_temperature is True, the + result is normalized by $k_B*T$ to have value 1 at $E=0$. + + Parameters + ---------- + energy : int | float | list | np.ndarray | sc.Variable + The energy transfer. If number, assumed to be in meV unless energy_unit is set. + temperature : int | float | sc.Variable | Parameter + The temperature. If number, assumed to be in K unless temperature_unit is set. + energy_unit : str | sc.Unit, default='meV' + Unit for energy if energy is given as a number or list. + temperature_unit : str | sc.Unit, default='K' + Unit for temperature if temperature is given as a number. + divide_by_temperature : bool, default=True + If True, divide the result by $k_B*T$ to make it dimensionless and have value 1 at E=0. By + default, True. + + Raises + ------ + TypeError + If energy or temperature is not a number, list, numpy array, or scipp Variable, or if + energy_unit or temperature_unit is not a string or scipp Unit, or if divide_by_temperature + is not a boolean. + ValueError + If temperature is negative, or if energy is a numpy array with more than 1 dimension, or if + temperature is a scipp Variable that does not have a single dimension named 'temperature', + or if energy is a scipp Variable that does not have a single dimension named 'energy'. + UnitError + If the provided energy_unit or temperature_unit is invalid, or if the units of energy or + temperature cannot be converted to the expected units. + ZeroDivisionError + If divide_by_temperature is True and temperature is zero. + + Returns + ------- + np.ndarray + Detailed balance factor evaluated at the given energy and temperature. + + Examples + -------- >>> detailed_balance_factor(1.0, 300) # 1 meV at 300 K >>> detailed_balance_factor( ... energy=[1.0, 2.0], @@ -186,28 +183,32 @@ def _convert_to_scipp_variable( name: str, unit: str | None = None, ) -> sc.Variable: - """Convert various input types to a scipp Variable with proper - units. - - Args: - value (int | float | list | np.ndarray | Parameter | sc.Variable): - The value to convert. Can be a number, list, numpy array, - Parameter, or scipp Variable. If a number or list, the unit - must be specified in the unit argument. - name (str): The name of the variable, used for error messages. - unit (str | None, default=None): The unit to use if value is a number or list. - Must be specified if value is a number or list. Ignored if - value is a Parameter or sc.Variable, which have their own - units. - - Raises: - TypeError: If value is not one of the accepted types, or if unit - is not a string when needed. - UnitError: If the provided unit is invalid. - - Returns: - sc.Variable: The input value converted to a scipp Variable with - appropriate units. + """ + Convert various input types to a scipp Variable with proper units. + + Parameters + ---------- + value : int | float | list | np.ndarray | Parameter | sc.Variable + The value to convert. Can be a number, list, numpy array, Parameter, or scipp Variable. If + a number or list, the unit must be specified in the unit argument. + name : str + The name of the variable, used for error messages. + unit : str | None, default=None + The unit to use if value is a number or list. Must be specified if value is a number or + list. Ignored if value is a Parameter or sc.Variable, which have their own units. By + default, None. + + Raises + ------ + TypeError + If value is not one of the accepted types, or if unit is not a string when needed. + UnitError + If the provided unit is invalid. + + Returns + ------- + sc.Variable + The input value converted to a scipp Variable with appropriate units. """ if isinstance(value, sc.Variable): return value diff --git a/src/easydynamics/utils/utils.py b/src/easydynamics/utils/utils.py index 7b9134bc..3d383d9c 100644 --- a/src/easydynamics/utils/utils.py +++ b/src/easydynamics/utils/utils.py @@ -19,20 +19,26 @@ def _validate_and_convert_Q( Q: np.ndarray | Numeric | list | ArrayLike | sc.Variable | None, ) -> np.ndarray | None: - """Validate and convert Q to a numpy array. - - Args: - Q (np.ndarray | Numeric | list | ArrayLike | sc.Variable | None): - Scattering vector values in 1/angstrom. - - Returns: - np.ndarray | None: Q as a np.ndarray or None if Q is None. - - Raises: - TypeError: If Q is not a number, list, numpy array, or scipp - Variable. - ValueError: If Q is a numpy array with more than 1 dimension, or - if Q is a scipp Variable that does not have a single dimension named 'Q'. + """ + Validate and convert Q to a numpy array. + + Parameters + ---------- + Q : np.ndarray | Numeric | list | ArrayLike | sc.Variable | None + Scattering vector values in 1/angstrom. + + Raises + ------ + TypeError + If Q is not a number, list, numpy array, or scipp Variable. + ValueError + If Q is a numpy array with more than 1 dimension, or if Q is a scipp Variable that does not + have a single dimension named 'Q'. + + Returns + ------- + np.ndarray | None + Q as a np.ndarray or None if Q is None. """ if Q is None: return None @@ -57,16 +63,23 @@ def _validate_and_convert_Q( def _validate_unit(unit: str | sc.Unit | None) -> sc.Unit | None: - """Validate that the unit is a string or scipp Unit. - - Args: - unit (str | sc.Unit | None): Unit to validate. - - Returns: - sc.Unit | None: Validated unit or None. - - Raises: - TypeError: If unit is not None, a string, or a scipp Unit. + """ + Validate that the unit is a string or scipp Unit. + + Parameters + ---------- + unit : str | sc.Unit | None + Unit to validate. + + Raises + ------ + TypeError + If unit is not None, a string, or a scipp Unit. + + Returns + ------- + sc.Unit | None + Validated unit or None. """ if unit is not None and not isinstance(unit, (str, sc.Unit)): @@ -77,10 +90,13 @@ def _validate_unit(unit: str | sc.Unit | None) -> sc.Unit | None: def _in_notebook() -> bool: - """Check if the code is running in a Jupyter notebook. + """ + Check if the code is running in a Jupyter notebook. - Returns: - bool: True if in a Jupyter notebook, False otherwise. + Returns + ------- + bool + True if in a Jupyter notebook, False otherwise. """ try: from IPython import get_ipython diff --git a/tools/add_license_headers.py b/tools/add_license_headers.py deleted file mode 100644 index 28febde7..00000000 --- a/tools/add_license_headers.py +++ /dev/null @@ -1,151 +0,0 @@ -# SPDX-FileCopyrightText: 2026 EasyScience contributors -# SPDX-License-Identifier: BSD-3-Clause -"""Add SPDX headers to Python files. - -- SPDX-FileCopyrightText with the license holder name and organization - URL from ``pyproject.toml`` as well as the file's creation year. -- SPDX-License-Identifier is taken from the project license value in - ``pyproject.toml``. -""" - -from __future__ import annotations - -import argparse -import tomllib -from datetime import datetime -from pathlib import Path -from typing import Optional -from typing import Union - -from git import Repo -from spdx_headers.core import find_repository_root -from spdx_headers.core import get_copyright_info -from spdx_headers.data import load_license_data -from spdx_headers.operations import add_header_to_single_file - -LICENSE_DATABASE = load_license_data() - - -def load_pyproject(repo_path: Union[str, Path]) -> dict: - """Load and return parsed ``pyproject.toml`` data for the - repository. - """ - repo_root = find_repository_root(repo_path) - pyproject_path = repo_root / 'pyproject.toml' - - with open(pyproject_path, 'rb') as file_handle: - return tomllib.load(file_handle) - - -def get_file_creation_year(file_path: Union[str, Path]) -> str: - """Return the year the file was first added to Git history. - - If the year cannot be determined, fall back to the current year. - """ - file_path = Path(file_path) - - repo = Repo(file_path, search_parent_directories=True) - root = Path(repo.working_tree_dir).resolve() - rel_path = file_path.resolve().relative_to(root) - - rel_path_git = rel_path.as_posix() # IMPORTANT for git pathspec - - # Get the year when the file was first added to Git history. - # NOTE: Do not combine `--reverse` with `--max-count=1` here, as it can - # yield an empty result with some Git versions. Instead, get the full - # filtered output and take the first line. - log_output = repo.git.log( - '--follow', - '--diff-filter=A', - '--reverse', - '--format=%ad', - '--date=format:%Y', - '--', - rel_path_git, - ).strip() - - year = log_output.splitlines()[0].strip() if log_output else '' - - return year or str(datetime.now().year) - - -def get_org_url(repo_path: Union[str, Path]) -> str: - """Return the organization URL derived from the repository source - URL. - """ - pyproject_data = load_pyproject(repo_path) - repo_url = pyproject_data['project']['urls']['Source Code'] - return repo_url.rsplit('/', 1)[0] - - -def get_project_license(repo_path: Union[str, Path]) -> str: - """Return the project license value from ``pyproject.toml``.""" - pyproject_data = load_pyproject(repo_path) - return pyproject_data['project']['license'] - - -def get_copyright_holder(repo_path: Union[str, Path]) -> str: - """Return the repository copyright holder name.""" - _, name, _ = get_copyright_info(repo_path) - return name - - -def add_spdx_header( - target_file: Union[str, Path], - *, - license_key: str, - copyright_holder: str, - org_url: str, -) -> None: - """Add SPDX headers.""" - year = get_file_creation_year(target_file) - - add_header_to_single_file( - filepath=target_file, - license_key=license_key, - license_data=LICENSE_DATABASE, - year=year, - name=copyright_holder, - email=org_url, - ) - - -def build_parser() -> argparse.ArgumentParser: - parser = argparse.ArgumentParser( - description='Add SPDX headers to Python files under the given paths.', - ) - parser.add_argument( - 'paths', - nargs='+', - help='Relative paths to scan (e.g. src tests)', - ) - return parser - - -def main(argv: Optional[list[str]] = None) -> int: - parser = build_parser() - args = parser.parse_args(argv) - - repo_path = Path('.').resolve() - license_key = get_project_license(repo_path) - copyright_holder = get_copyright_holder(repo_path) - org_url = get_org_url(repo_path) - - for base_dir in args.paths: - base_path = Path(base_dir) - if not base_path.exists(): - parser.error(f'Path does not exist: {base_dir}') - - for py_file in base_path.rglob('*.py'): - add_spdx_header( - py_file, - license_key=license_key, - copyright_holder=copyright_holder, - org_url=org_url, - ) - - return 0 - - -if __name__ == '__main__': - raise SystemExit(main()) diff --git a/tools/check_license_headers.py b/tools/check_license_headers.py deleted file mode 100644 index c8a4df21..00000000 --- a/tools/check_license_headers.py +++ /dev/null @@ -1,45 +0,0 @@ -# SPDX-FileCopyrightText: 2026 EasyScience contributors -# SPDX-License-Identifier: BSD-3-Clause -"""Check SPDX headers in Python files.""" - -from __future__ import annotations - -import argparse -from pathlib import Path -from typing import Optional - -from spdx_headers.operations import check_headers - - -def build_parser() -> argparse.ArgumentParser: - parser = argparse.ArgumentParser( - description='Check SPDX headers in Python files under the given paths.', - ) - parser.add_argument( - 'paths', - nargs='+', - help='Relative paths to scan (e.g. src tests)', - ) - return parser - - -def main(argv: Optional[list[str]] = None) -> int: - parser = build_parser() - args = parser.parse_args(argv) - - exit_codes = [] - - for base_dir in args.paths: - base_path = Path(base_dir) - if not base_path.exists(): - parser.error(f'Path does not exist: {base_dir}') - - print('=' * 50) - print(f'Checking SPDX headers in: {base_dir}') - exit_codes.append(check_headers(base_dir)) - - return 0 if all(code == 0 for code in exit_codes) else 1 - - -if __name__ == '__main__': - raise SystemExit(main()) diff --git a/tools/license_headers.py b/tools/license_headers.py new file mode 100644 index 00000000..47d23524 --- /dev/null +++ b/tools/license_headers.py @@ -0,0 +1,315 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause +"""Add, remove, or check SPDX headers in Python files.""" + +from __future__ import annotations + +import argparse +import fnmatch +import tomllib +from datetime import datetime +from pathlib import Path +from typing import Any +from typing import Optional +from typing import Union + +from git import Repo +from spdx_headers.core import find_repository_root +from spdx_headers.core import get_copyright_info +from spdx_headers.core import has_spdx_header +from spdx_headers.data import load_license_data +from spdx_headers.operations import add_header_to_single_file +from spdx_headers.operations import remove_header_from_single_file + +LICENSE_DATABASE = load_license_data() + + +def load_pyproject(repo_path: Union[str, Path]) -> dict[str, Any]: + """Load and return parsed ``pyproject.toml`` data for the repository.""" + repo_root = find_repository_root(repo_path) + pyproject_path = repo_root / 'pyproject.toml' + + with pyproject_path.open('rb') as file_handle: + return tomllib.load(file_handle) + + +def get_pyproject_value(pyproject_data: dict[str, Any], dotted_key: str) -> Any: + """Return a nested ``pyproject.toml`` value from a dotted key.""" + value: Any = pyproject_data + for part in dotted_key.split('.'): + if not isinstance(value, dict) or part not in value: + raise KeyError(dotted_key) + value = value[part] + return value + + +def normalize_pattern(pattern: str) -> str: + """Normalize an exclude pattern to a POSIX-style relative path.""" + normalized = Path(pattern).as_posix() + if normalized.startswith('./'): + normalized = normalized[2:] + return normalized.rstrip('/') + + +def get_exclude_patterns( + repo_path: Union[str, Path], + exclude_values: list[str], + exclude_from_pyproject_toml: Optional[str], +) -> list[str]: + """Return normalized exclude patterns from CLI and ``pyproject.toml``.""" + pyproject_data = load_pyproject(repo_path) + patterns: list[str] = [] + + if exclude_from_pyproject_toml: + value = get_pyproject_value(pyproject_data, exclude_from_pyproject_toml) + if not isinstance(value, list) or not all(isinstance(item, str) for item in value): + raise ValueError( + f'{exclude_from_pyproject_toml} in pyproject.toml must be a list of strings.', + ) + patterns.extend(value) + + for item in exclude_values: + try: + value = get_pyproject_value(pyproject_data, item) + except KeyError: + patterns.append(item) + continue + + if not isinstance(value, list) or not all(isinstance(entry, str) for entry in value): + raise ValueError(f'{item} in pyproject.toml must be a list of strings.') + patterns.extend(value) + + normalized_patterns: list[str] = [] + seen: set[str] = set() + for pattern in patterns: + normalized = normalize_pattern(pattern) + if normalized and normalized not in seen: + normalized_patterns.append(normalized) + seen.add(normalized) + + return normalized_patterns + + +def get_file_creation_year(file_path: Union[str, Path]) -> str: + """Return the year the file was first added to Git history. + + If the year cannot be determined, fall back to the current year. + """ + file_path = Path(file_path) + + repo = Repo(file_path, search_parent_directories=True) + root = Path(repo.working_tree_dir).resolve() + rel_path = file_path.resolve().relative_to(root) + + rel_path_git = rel_path.as_posix() + + log_output = repo.git.log( + '--follow', + '--diff-filter=A', + '--reverse', + '--format=%ad', + '--date=format:%Y', + '--', + rel_path_git, + ).strip() + + year = log_output.splitlines()[0].strip() if log_output else '' + + return year or str(datetime.now().year) + + +def get_org_url(repo_path: Union[str, Path]) -> str: + """Return the organization URL derived from the repository source URL.""" + pyproject_data = load_pyproject(repo_path) + repo_url = pyproject_data['project']['urls']['Source Code'] + return repo_url.rsplit('/', 1)[0] + + +def get_project_license(repo_path: Union[str, Path]) -> str: + """Return the project license value from ``pyproject.toml``.""" + pyproject_data = load_pyproject(repo_path) + return pyproject_data['project']['license'] + + +def get_copyright_holder(repo_path: Union[str, Path]) -> str: + """Return the repository copyright holder name.""" + _, name, _ = get_copyright_info(repo_path) + return name + + +def add_spdx_header( + target_file: Union[str, Path], + *, + license_key: str, + copyright_holder: str, + org_url: str, +) -> None: + """Add SPDX headers to one file.""" + year = get_file_creation_year(target_file) + + add_header_to_single_file( + filepath=target_file, + license_key=license_key, + license_data=LICENSE_DATABASE, + year=year, + name=copyright_holder, + email=org_url, + ) + + +def is_excluded(relative_path: str, exclude_patterns: list[str]) -> bool: + """Return whether a relative path should be excluded.""" + for pattern in exclude_patterns: + if fnmatch.fnmatch(relative_path, pattern): + return True + if relative_path == pattern: + return True + if relative_path.startswith(f'{pattern}/'): + return True + return False + + +def iter_python_files( + paths: list[str], + *, + repo_root: Path, + exclude_patterns: list[str], + parser: argparse.ArgumentParser, +) -> list[Path]: + """Collect Python files under the given paths after exclusions.""" + files: list[Path] = [] + seen: set[Path] = set() + + for base_dir in paths: + base_path = Path(base_dir) + if not base_path.exists(): + parser.error(f'Path does not exist: {base_dir}') + + if base_path.is_file(): + candidates = [base_path] if base_path.suffix == '.py' else [] + else: + candidates = sorted(base_path.rglob('*.py')) + + for py_file in candidates: + resolved = py_file.resolve() + try: + relative_path = resolved.relative_to(repo_root).as_posix() + except ValueError: + relative_path = py_file.as_posix() + + if is_excluded(relative_path, exclude_patterns): + continue + + if resolved not in seen: + files.append(py_file) + seen.add(resolved) + + return files + + +def run_add( + files: list[Path], + *, + license_key: str, + copyright_holder: str, + org_url: str, +) -> int: + """Add SPDX headers to all selected files.""" + for py_file in files: + add_spdx_header( + py_file, + license_key=license_key, + copyright_holder=copyright_holder, + org_url=org_url, + ) + return 0 + + +def run_remove(files: list[Path]) -> int: + """Remove SPDX headers from all selected files.""" + for py_file in files: + remove_header_from_single_file(py_file) + return 0 + + +def run_check(files: list[Path]) -> int: + """Check SPDX headers in all selected files.""" + missing_files = [py_file for py_file in files if not has_spdx_header(py_file)] + + if not missing_files: + print('✓ All Python files have valid SPDX headers.') + return 0 + + print('✗ The following files are missing SPDX headers:') + for py_file in missing_files: + print(f' - {py_file.as_posix()}') + print(f'\nFound {len(missing_files)} files without SPDX headers.') + return 1 + + +def build_parser() -> argparse.ArgumentParser: + """Build the CLI argument parser.""" + parser = argparse.ArgumentParser( + description='Add, remove, or check SPDX headers in Python files.', + ) + subparsers = parser.add_subparsers(dest='command', required=True) + + for command_name in ('check', 'remove', 'add'): + command_parser = subparsers.add_parser(command_name) + command_parser.add_argument( + 'paths', + nargs='+', + help='Relative paths to scan (e.g. src tests)', + ) + command_parser.add_argument( + '--exclude', + nargs='*', + default=[], + help='Exclude paths, glob patterns, or pyproject dotted keys.', + ) + command_parser.add_argument( + '--exclude-from-pyproject-toml', + help='Read exclude patterns from a dotted key in pyproject.toml.', + ) + + return parser + + +def main(argv: Optional[list[str]] = None) -> int: + """Run the SPDX header CLI.""" + parser = build_parser() + args = parser.parse_args(argv) + + repo_path = Path('.').resolve() + repo_root = find_repository_root(repo_path).resolve() + exclude_patterns = get_exclude_patterns( + repo_path, + args.exclude, + args.exclude_from_pyproject_toml, + ) + files = iter_python_files( + args.paths, + repo_root=repo_root, + exclude_patterns=exclude_patterns, + parser=parser, + ) + + if args.command == 'check': + return run_check(files) + + if args.command == 'remove': + return run_remove(files) + + license_key = get_project_license(repo_path) + copyright_holder = get_copyright_holder(repo_path) + org_url = get_org_url(repo_path) + return run_add( + files, + license_key=license_key, + copyright_holder=copyright_holder, + org_url=org_url, + ) + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/tools/remove_license_headers.py b/tools/remove_license_headers.py deleted file mode 100644 index f5d09da5..00000000 --- a/tools/remove_license_headers.py +++ /dev/null @@ -1,41 +0,0 @@ -# SPDX-FileCopyrightText: 2026 EasyScience contributors -# SPDX-License-Identifier: BSD-3-Clause -"""Remove SPDX headers from Python files.""" - -from __future__ import annotations - -import argparse -from pathlib import Path -from typing import Optional - -from spdx_headers.operations import remove_header_from_py_files - - -def build_parser() -> argparse.ArgumentParser: - parser = argparse.ArgumentParser( - description='Remove SPDX headers from Python files under the given paths.', - ) - parser.add_argument( - 'paths', - nargs='+', - help='Relative paths to scan (e.g. src tests)', - ) - return parser - - -def main(argv: Optional[list[str]] = None) -> int: - parser = build_parser() - args = parser.parse_args(argv) - - for base_dir in args.paths: - base_path = Path(base_dir) - if not base_path.exists(): - parser.error(f'Path does not exist: {base_dir}') - - remove_header_from_py_files(base_dir) - - return 0 - - -if __name__ == '__main__': - raise SystemExit(main()) From 3dd8910772b9df83d2fe4b885f09e7effda87153 Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Tue, 7 Apr 2026 21:41:39 +0200 Subject: [PATCH 02/10] Allow transposing axes in 2d plots (#150) * Allow transposing axes when using Experiment.plot_data * formatting * PR comments --- docs/docs/tutorials/tutorial1_brownian.ipynb | 6 ++- pixi.lock | 4 +- pyproject.toml | 3 +- src/easydynamics/experiment/experiment.py | 48 +++++++++++++++---- .../easydynamics/analysis/test_analysis.py | 14 ++++-- .../experiment/test_experiment.py | 33 +++++++++++-- 6 files changed, 85 insertions(+), 23 deletions(-) diff --git a/docs/docs/tutorials/tutorial1_brownian.ipynb b/docs/docs/tutorials/tutorial1_brownian.ipynb index 5562adde..b09546b7 100644 --- a/docs/docs/tutorials/tutorial1_brownian.ipynb +++ b/docs/docs/tutorials/tutorial1_brownian.ipynb @@ -76,7 +76,9 @@ "source": [ "We can visualize the data in multiple ways, relying on plopp: https://scipp.github.io/plopp/\n", "\n", - "We here show two ways to look at the data: as a 2d colormap with intensity as function of `Q` and `energy`, and as a slicer with intensity as function of `energy` for various `Q`." + "We here show two ways to look at the data: as a 2d colormap with intensity as function of `Q` and `energy`, and as a slicer with intensity as function of `energy` for various `Q`.\n", + "\n", + "If you want $Q$ on the x axis, then set `transpose_axes=True`" ] }, { @@ -86,7 +88,7 @@ "metadata": {}, "outputs": [], "source": [ - "vanadium_experiment.plot_data(slicer=False)" + "vanadium_experiment.plot_data(slicer=False, transpose_axes=False)" ] }, { diff --git a/pixi.lock b/pixi.lock index 1665d1a6..44c70390 100644 --- a/pixi.lock +++ b/pixi.lock @@ -4071,8 +4071,8 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+devdirty10 - sha256: bd1d44f7263fe45e52e8b62d2740c303be86c7bcc89e3cbec95ec663568953b1 + version: 0.4.0+devdirty2 + sha256: aa4f4851802d4abba9dca0112aa3c99739e1c43425b48d91030f822baa577257 requires_dist: - darkdetect - easyscience diff --git a/pyproject.toml b/pyproject.toml index 49f35979..954af4af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -256,8 +256,7 @@ select = [ # Ignore specific rules globally ignore = [ 'COM812', # https://docs.astral.sh/ruff/rules/missing-trailing-comma/ - # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] - 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc + # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc # Disable, as [tool.format_docstring] split one-line docstrings into the canonical multi-line layout 'D200', # https://docs.astral.sh/ruff/rules/unnecessary-multiline-docstring/ ] diff --git a/src/easydynamics/experiment/experiment.py b/src/easydynamics/experiment/experiment.py index 383f6c06..0d305400 100644 --- a/src/easydynamics/experiment/experiment.py +++ b/src/easydynamics/experiment/experiment.py @@ -8,6 +8,7 @@ import plopp as pp import scipp as sc from easyscience.base_classes.new_base import NewBase +from plopp.backends.matplotlib.figure import InteractiveFigure from scipp.io import load_hdf5 as sc_load_hdf5 from scipp.io import save_hdf5 as sc_save_hdf5 @@ -146,9 +147,9 @@ def Q(self) -> sc.Variable | None: sc.Variable | None The Q values from the dataset, or None if no data is loaded. """ - if self._binned_data is None: + if self.binned_data is None: return None - return self._binned_data.coords['Q'] + return self.binned_data.coords['Q'] @Q.setter def Q(self, _value: sc.Variable) -> None: @@ -179,9 +180,9 @@ def energy(self) -> sc.Variable | None: sc.Variable | None The energy values from the dataset, or None if no data is loaded. """ - if self._binned_data is None: + if self.binned_data is None: return None - return self._binned_data.coords['energy'] + return self.binned_data.coords['energy'] @energy.setter def energy(self, _value: sc.Variable) -> None: @@ -222,7 +223,7 @@ def get_masked_energy(self, Q_index: int) -> sc.Variable | None: sc.Variable | None The masked energy values from the dataset, or None if no data is loaded. """ - if self._binned_data is None: + if self.binned_data is None: return None if ( @@ -232,7 +233,7 @@ def get_masked_energy(self, Q_index: int) -> sc.Variable | None: ): raise IndexError('Q_index must be a valid index for the Q values.') - energy = self._binned_data.coords['energy'] + energy = self.binned_data.coords['energy'] _, _, _, mask = self._extract_x_y_weights_only_finite(Q_index=Q_index) mask_var = sc.array(dims=['energy'], values=mask) @@ -372,7 +373,12 @@ def rebin(self, dimensions: dict[str, int | sc.Variable]) -> None: # other methods ########### - def plot_data(self, slicer: bool = False, **kwargs: dict) -> None: + def plot_data( + self, + slicer: bool = False, + transpose_axes: bool = False, + **kwargs: dict, + ) -> InteractiveFigure: """ Plot the dataset using plopp: https://scipp.github.io/plopp/. @@ -380,23 +386,41 @@ def plot_data(self, slicer: bool = False, **kwargs: dict) -> None: ---------- slicer : bool, default=False If True, use plopp's slicer instead of plot. + transpose_axes : bool, default=False + If True, transpose the data to have dimensions in the order (energy, Q) before + plotting, so that energy is on the x-axis. This only applies when slicer=False. **kwargs : dict Additional keyword arguments to pass to plopp. + Returns + ------- + InteractiveFigure + A plot of the data and model. + Raises ------ ValueError If there is no data to plot. RuntimeError If not in a Jupyter notebook environment. + TypeError + If slicer or transpose_axes are not True or False. """ - if self._binned_data is None: + if self.binned_data is None: raise ValueError('No data to plot. Please load data first.') if not _in_notebook(): raise RuntimeError('plot_data() can only be used in a Jupyter notebook environment.') + if not isinstance(slicer, bool): + raise TypeError(f'slicer must be True or False, not {type(slicer).__name__}') + + if not isinstance(transpose_axes, bool): + raise TypeError( + f'transpose_axes must be True or False, not {type(transpose_axes).__name__}' + ) + plot_kwargs_defaults = { 'title': self.display_name, } @@ -408,15 +432,19 @@ def plot_data(self, slicer: bool = False, **kwargs: dict) -> None: plot_kwargs_defaults.update(kwargs) if slicer: fig = pp.slicer( - self._binned_data, + self.binned_data, **plot_kwargs_defaults, ) for widget in fig.bottom_bar[0].controls.values(): widget.slider_toggler.value = '-o-' else: + if transpose_axes: + data_to_plot = self.binned_data.transpose(dims=['energy', 'Q']) + else: + data_to_plot = self.binned_data.transpose(dims=['Q', 'energy']) fig = pp.plot( - self._binned_data.transpose(dims=['energy', 'Q']), + data_to_plot, **plot_kwargs_defaults, ) return fig diff --git a/tests/unit/easydynamics/analysis/test_analysis.py b/tests/unit/easydynamics/analysis/test_analysis.py index 291e1811..25274a55 100644 --- a/tests/unit/easydynamics/analysis/test_analysis.py +++ b/tests/unit/easydynamics/analysis/test_analysis.py @@ -260,6 +260,9 @@ def test_plot_data_and_model_defaults(self, analysis): fake_fig.bottom_bar = [MagicMock()] fake_fig.bottom_bar[0].controls = {'test': fake_widget} + fake_data = MagicMock() + fake_data.coords = {'Q': 'Q_VALUES', 'energy': 'ENERGY_VALUES'} + analysis._create_model_array = MagicMock(return_value='MODEL') with ( patch('plopp.slicer', return_value=fake_fig) as mock_slicer, @@ -270,7 +273,7 @@ def test_plot_data_and_model_defaults(self, analysis): ) as mock_binned, patch('easydynamics.analysis.analysis._in_notebook', return_value=True), ): - mock_binned.return_value = 'DATA' + mock_binned.return_value = fake_data # THEN fig = analysis.plot_data_and_model(plot_components=False) @@ -284,7 +287,7 @@ def test_plot_data_and_model_defaults(self, analysis): assert 'Data' in data_passed assert 'Model' in data_passed - assert data_passed['Data'] == 'DATA' + assert data_passed['Data'] == fake_data assert data_passed['Model'] == 'MODEL' # Check the default kwargs @@ -310,6 +313,9 @@ def test_plot_data_and_model_plot_components_true(self, analysis): fake_fig.bottom_bar = [MagicMock()] fake_fig.bottom_bar[0].controls = {'test': fake_widget} + fake_data = MagicMock() + fake_data.coords = {'Q': 'Q_VALUES', 'energy': 'ENERGY_VALUES'} + analysis._create_model_array = MagicMock(return_value='MODEL') analysis._create_components_dataset = MagicMock(return_value={'Gaussian': 'GAUSS'}) with ( @@ -321,7 +327,7 @@ def test_plot_data_and_model_plot_components_true(self, analysis): ) as mock_binned, patch('easydynamics.analysis.analysis._in_notebook', return_value=True), ): - mock_binned.return_value = 'DATA' + mock_binned.return_value = fake_data # THEN fig = analysis.plot_data_and_model(plot_components=True) @@ -335,7 +341,7 @@ def test_plot_data_and_model_plot_components_true(self, analysis): assert 'Data' in data_passed assert 'Model' in data_passed - assert data_passed['Data'] == 'DATA' + assert data_passed['Data'] == fake_data assert data_passed['Model'] == 'MODEL' # Check the default kwargs assert kwargs['title'] == 'TestAnalysis' diff --git a/tests/unit/easydynamics/experiment/test_experiment.py b/tests/unit/easydynamics/experiment/test_experiment.py index 4568580e..8430d13f 100644 --- a/tests/unit/easydynamics/experiment/test_experiment.py +++ b/tests/unit/easydynamics/experiment/test_experiment.py @@ -332,7 +332,15 @@ def test_get_masked_energy_invalid_Q_index_raises(self, experiment_with_data, Q_ # test plotting ############## - def test_plot_data_success(self, experiment): + @pytest.mark.parametrize( + 'transpose_axes, expected_dims', + [ + (False, ['Q', 'energy']), + (True, ['energy', 'Q']), + ], + ids=['no_transpose', 'transpose'], + ) + def test_plot_data_success(self, experiment, transpose_axes, expected_dims): "Test plotting data successfully when in notebook environment" # WHEN with ( @@ -343,12 +351,12 @@ def test_plot_data_success(self, experiment): mock_plot.return_value = mock_fig # THEN - result = experiment.plot_data() + result = experiment.plot_data(transpose_axes=transpose_axes) # EXPECT mock_plot.assert_called_once() args, kwargs = mock_plot.call_args - assert sc.identical(args[0], experiment.data.transpose()) + assert sc.identical(args[0], experiment.data.transpose(dims=expected_dims)) assert kwargs['title'] == f'{experiment.display_name}' assert result == mock_fig @@ -395,6 +403,25 @@ def test_plot_data_not_in_notebook_raises(self, experiment): ): experiment.plot_data() + def test_plot_data_invalid_slicer_type_raises(self, experiment): + "Test plotting data raises TypeError when slicer argument is invalid" + # WHEN THEN EXPECT + + with ( + patch(f'{Experiment.__module__}._in_notebook', return_value=True), + pytest.raises(TypeError, match='slicer must be True or False'), + ): + experiment.plot_data(slicer='not_a_boolean') + + def test_plot_data_invalid_transpose_type_raises(self, experiment): + "Test plotting data raises TypeError when transpose argument is invalid" + # WHEN THEN EXPECT + with ( + patch(f'{Experiment.__module__}._in_notebook', return_value=True), + pytest.raises(TypeError, match='transpose_axes must be True or False'), + ): + experiment.plot_data(transpose_axes='not_a_boolean') + ############## # test private methods ############## From f39307c4ab3bfc9d436ebb088f5c034666b2425a Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Fri, 10 Apr 2026 06:29:38 +0200 Subject: [PATCH 03/10] Add linting rules (#151) * Add TC linting rule * Add A, COM, FA linting and upgrade python version * Add TID rule * fix some repr strings * undo version change * small fix --- pixi.lock | 699 ++++++++++-------- pyproject.toml | 12 +- src/easydynamics/analysis/__init__.py | 2 +- src/easydynamics/convolution/__init__.py | 2 +- src/easydynamics/experiment/__init__.py | 2 +- src/easydynamics/sample_model/__init__.py | 32 +- .../sample_model/background_model.py | 5 +- .../sample_model/component_collection.py | 6 +- .../sample_model/components/__init__.py | 18 +- .../components/damped_harmonic_oscillator.py | 14 +- .../sample_model/components/delta_function.py | 18 +- .../sample_model/components/exponential.py | 3 +- .../components/expression_component.py | 9 +- .../sample_model/components/gaussian.py | 15 +- .../sample_model/components/lorentzian.py | 15 +- .../sample_model/components/polynomial.py | 29 +- .../sample_model/components/voigt.py | 23 +- .../sample_model/diffusion_model/__init__.py | 8 +- .../sample_model/resolution_model.py | 9 +- src/easydynamics/sample_model/sample_model.py | 5 +- src/easydynamics/utils/__init__.py | 2 +- 21 files changed, 516 insertions(+), 412 deletions(-) diff --git a/pixi.lock b/pixi.lock index 44c70390..acd7cbf3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -36,7 +36,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -66,9 +66,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/32/3abb90c7057e2cbdd711b59d99dc4dfc1a28b7da5a41971ec918f0928682/chardet-7.4.0.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -85,7 +85,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -124,7 +124,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -164,9 +164,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -207,12 +207,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -228,7 +228,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/22/d7f2fabdba4fae9f3b570e5605d5eb4500dcb7b770d3217dca4428484b17/ruff-0.15.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -250,7 +250,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -276,7 +276,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.2-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda @@ -287,7 +287,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -318,9 +318,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/24/b012c1fd362e1a25425afd9f746166976b8ba3b2d78140a39df23bba2886/chardet-7.4.0.post2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -337,7 +337,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -376,7 +376,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -416,9 +416,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -459,12 +459,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -480,7 +480,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/eb/92/f1c662784d149ad1414cae450b082cf736430c12ca78367f20f5ed569d65/ruff-0.15.8-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -502,7 +502,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -528,7 +528,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda @@ -539,7 +539,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -570,9 +570,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/01/778bcb1e162000c5b8295a25191935b0b2eaf0000096bd3fcbf782b5c8c0/chardet-7.4.0.post2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -589,7 +589,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -628,7 +628,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -668,9 +668,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -711,12 +711,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -732,7 +732,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/f2/7a631a8af6d88bcef997eb1bf87cc3da158294c57044aafd3e17030613de/ruff-0.15.8-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -754,7 +754,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -780,7 +780,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -812,9 +812,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/0d/0b6039f2d254698a525d9a1b00334b3262a6521adede50885f05ba714fad/chardet-7.4.0.post2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -831,7 +831,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -870,7 +870,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -910,9 +910,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -951,12 +951,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -974,7 +974,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1f/a2/ef467cb77099062317154c63f234b8a7baf7cb690b99af760c5b68b9ee7f/ruff-0.15.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -996,7 +996,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -1041,7 +1041,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda @@ -1049,7 +1049,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -1079,14 +1079,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/57/053b571501feffd18bc7ff97d251293ad0e7ccc362c38be7fd6d640ca3fc/chardet-7.4.0.post2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/6a/9cc5221337a0f47478e4cb91623bf89c99728a43ff682ea8772827cc45a6/chardet-7.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1098,7 +1098,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -1137,7 +1137,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -1175,11 +1175,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/68/da/fda01c754dc85aed67ac0b7d3b213ab50b5b39f15f5eb072b2baf0edb689/msgspec-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -1198,7 +1198,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -1221,12 +1221,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -1242,7 +1242,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/22/d7f2fabdba4fae9f3b570e5605d5eb4500dcb7b770d3217dca4428484b17/ruff-0.15.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d4/06/19ff1efd58b85906149ce83dfddce23252cea5bec7e0fa5f834336cfe836/scipp-26.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -1264,7 +1264,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -1290,18 +1290,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.2-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.52.0-h77d7759_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.0-h77d7759_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.15-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -1332,14 +1332,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/db/fcccf6858e87927a22df20251bda9e672819f3db1f2497eccd0290059761/chardet-7.4.0.post2-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/2c/bc6d4f9acbad0bf402ce1fe47bac43324f04036848ca3525f4e53bca8198/chardet-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1351,7 +1351,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -1390,7 +1390,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -1428,11 +1428,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/03/59/fdcb3af72f750a8de2bcf39d62ada70b5eb17b06d7f63860e0a679cb656b/msgspec-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b2/34/a66dea16444967e3fc0991aff57ef473e2214e5bbdbe3c2b3139d2ccec7b/msgspec-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -1451,7 +1451,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -1474,12 +1474,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -1495,7 +1495,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/eb/92/f1c662784d149ad1414cae450b082cf736430c12ca78367f20f5ed569d65/ruff-0.15.8-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/81/21/4962b1daddf0422e56c5ed4c41bea1ccb6d2a9ab72b795196835a20969c7/scipp-26.3.1-cp311-cp311-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -1517,7 +1517,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -1543,18 +1543,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.15-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -1585,14 +1585,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/79/c92968b31cd51d87328d0298ec3e8278027ad74c79309a60af3b88d0b199/chardet-7.4.0.post2-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/dd/d1f18e3f3fe00799c652560521ba699f9698c264a0e1bbfc67e567a6d995/chardet-7.4.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1604,7 +1604,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -1643,7 +1643,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -1681,11 +1681,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/5a/15/3c225610da9f02505d37d69a77f4a2e7daae2a125f99d638df211ba84e59/msgspec-0.20.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/bc/16/418ba970f74707e2590954f7fda0b44c1d2242d3835aecf914f1dd3080e6/msgspec-0.21.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -1704,7 +1704,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -1727,12 +1727,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -1748,7 +1748,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/f2/7a631a8af6d88bcef997eb1bf87cc3da158294c57044aafd3e17030613de/ruff-0.15.8-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/60/54/5011adb56853caabfd90686c2e543d1e3c76a8ef2755809b7e12e3f3583b/scipp-26.3.1-cp311-cp311-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -1770,7 +1770,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -1793,10 +1793,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.15-h0159041_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -1828,14 +1828,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/86/2f178028970f0c8beaaf54f7ba6dbb1767f41435f332406f88f7c2711f84/chardet-7.4.0.post2-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/a9/68387dfc67972bc3547e84f3545af6bc1a53c46a01b6976ffa263485d61a/chardet-7.4.1-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1847,7 +1847,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -1886,7 +1886,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -1924,11 +1924,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/89/5e/406b7d578926b68790e390d83a1165a9bfc2d95612a1a9c1c4d5c72ea815/msgspec-0.20.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ee/06/924ab2c12b55b479e41039345e988bf935aabea92fbe90b7faf93166740c/msgspec-0.21.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -1946,7 +1946,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -1968,12 +1968,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -1991,7 +1991,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1f/a2/ef467cb77099062317154c63f234b8a7baf7cb690b99af760c5b68b9ee7f/ruff-0.15.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e6/0d/8882a4c7a5ebe59a46b709e82411d9c730d67250d41a2e11bc4bcd4d431d/scipp-26.3.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -2013,7 +2013,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -2066,7 +2066,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -2096,9 +2096,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/32/3abb90c7057e2cbdd711b59d99dc4dfc1a28b7da5a41971ec918f0928682/chardet-7.4.0.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -2115,7 +2115,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -2140,7 +2140,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl @@ -2154,7 +2154,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -2194,9 +2194,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -2237,12 +2237,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -2258,7 +2258,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/22/d7f2fabdba4fae9f3b570e5605d5eb4500dcb7b770d3217dca4428484b17/ruff-0.15.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -2280,7 +2280,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -2306,7 +2306,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.2-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda @@ -2317,7 +2317,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -2348,9 +2348,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/24/b012c1fd362e1a25425afd9f746166976b8ba3b2d78140a39df23bba2886/chardet-7.4.0.post2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -2367,7 +2367,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -2392,7 +2392,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl @@ -2406,7 +2406,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -2446,9 +2446,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -2489,12 +2489,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -2510,7 +2510,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/eb/92/f1c662784d149ad1414cae450b082cf736430c12ca78367f20f5ed569d65/ruff-0.15.8-py3-none-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -2532,7 +2532,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -2558,7 +2558,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda @@ -2569,7 +2569,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -2600,9 +2600,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/01/778bcb1e162000c5b8295a25191935b0b2eaf0000096bd3fcbf782b5c8c0/chardet-7.4.0.post2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -2619,7 +2619,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -2644,7 +2644,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl @@ -2658,7 +2658,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -2698,9 +2698,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -2741,12 +2741,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -2762,7 +2762,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/f2/7a631a8af6d88bcef997eb1bf87cc3da158294c57044aafd3e17030613de/ruff-0.15.8-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -2784,7 +2784,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -2810,7 +2810,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -2842,9 +2842,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/0d/0b6039f2d254698a525d9a1b00334b3262a6521adede50885f05ba714fad/chardet-7.4.0.post2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl @@ -2861,7 +2861,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl @@ -2886,7 +2886,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl @@ -2900,7 +2900,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl @@ -2940,9 +2940,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl @@ -2981,12 +2981,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl @@ -3004,7 +3004,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1f/a2/ef467cb77099062317154c63f234b8a7baf7cb690b99af760c5b68b9ee7f/ruff-0.15.8-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl @@ -3026,7 +3026,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl @@ -3602,80 +3602,80 @@ packages: version: 3.5.0 sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/0d/01/778bcb1e162000c5b8295a25191935b0b2eaf0000096bd3fcbf782b5c8c0/chardet-7.4.0.post2-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl name: chardet - version: 7.4.0.post2 - sha256: dc6829803ba71cb427dffac03a948ae828c617710bbd5f97ae3b34ab18558414 + version: 7.4.1 + sha256: b726b0b2684d29cd08f602bb4266334386c58741ff34c9e2f6cdf97ad604e235 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/46/0d/0b6039f2d254698a525d9a1b00334b3262a6521adede50885f05ba714fad/chardet-7.4.0.post2-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.0.post2 - sha256: a07dc1257fef2685dfc5182229abccd3f9b1299006a5b4d43ac7bd252faa1118 + version: 7.4.1 + sha256: 277ce1174ea054415a3c2ad5f51aa089a96dda16999de56e4ac1bc366d0d535e requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4a/db/fcccf6858e87927a22df20251bda9e672819f3db1f2497eccd0290059761/chardet-7.4.0.post2-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/65/6a/9cc5221337a0f47478e4cb91623bf89c99728a43ff682ea8772827cc45a6/chardet-7.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.0.post2 - sha256: 90227bc83d06d16b548afe185e93eff8c740cb11ec51536366399b912e361b8d + version: 7.4.1 + sha256: c98e1044785ab71f0fee70f64b8d56f69df9de1b593793022e001ba2f6b76dd0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8c/57/053b571501feffd18bc7ff97d251293ad0e7ccc362c38be7fd6d640ca3fc/chardet-7.4.0.post2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl name: chardet - version: 7.4.0.post2 - sha256: 24b8fcc1fe54936932f305522bc2f40a207ecbb38209fa24226eab7432531aef + version: 7.4.1 + sha256: fcaed03cefa53f62346091ef92da7a6f44bae6830a6f4c6b097a70cdc31b1199 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b0/24/b012c1fd362e1a25425afd9f746166976b8ba3b2d78140a39df23bba2886/chardet-7.4.0.post2-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/9f/dd/d1f18e3f3fe00799c652560521ba699f9698c264a0e1bbfc67e567a6d995/chardet-7.4.1-cp311-cp311-macosx_11_0_arm64.whl name: chardet - version: 7.4.0.post2 - sha256: 7aced16fe8098019c7c513dd92e9ee3ad29fffac757fa7de13ff8f3a8607a344 + version: 7.4.1 + sha256: 3886f8f9bb3500bd8c421b2de9b4878a0c183f80bc289338cdda869dfd4397fb requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b6/86/2f178028970f0c8beaaf54f7ba6dbb1767f41435f332406f88f7c2711f84/chardet-7.4.0.post2-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/c0/a9/68387dfc67972bc3547e84f3545af6bc1a53c46a01b6976ffa263485d61a/chardet-7.4.1-cp311-cp311-win_amd64.whl name: chardet - version: 7.4.0.post2 - sha256: a359eb4535aeabd3f61e599530c4c4d4855c31316e6fed7db619a9c58785ee38 + version: 7.4.1 + sha256: c820c95d8b4de8aea99b54083d38f10f763686646962b5627e8e2b2db113a37b requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e2/32/3abb90c7057e2cbdd711b59d99dc4dfc1a28b7da5a41971ec918f0928682/chardet-7.4.0.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/cb/2c/bc6d4f9acbad0bf402ce1fe47bac43324f04036848ca3525f4e53bca8198/chardet-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl name: chardet - version: 7.4.0.post2 - sha256: 5933289313b8cbfb0d07cf44583a2a6c7e31bffe5dcb7ebb6592825aa197d5b0 + version: 7.4.1 + sha256: a9322fd3ffd359b49b2d608725a15975ebc0d66f2dcedefa7ddb5847e54a6f9c requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fe/79/c92968b31cd51d87328d0298ec3e8278027ad74c79309a60af3b88d0b199/chardet-7.4.0.post2-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl name: chardet - version: 7.4.0.post2 - sha256: 18cb15facd3a70042cb4d3b9a80dd2e9b8d78af90643f434047060e1f84dff06 + version: 7.4.1 + sha256: 0de8d636391f9050e4e048ca8a9f98b25e67eff389705f8c6ff1ab9593f7339b requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl name: charset-normalizer - version: 3.4.6 - sha256: 0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 + version: 3.4.7 + sha256: eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl name: charset-normalizer - version: 3.4.6 - sha256: 9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 + version: 3.4.7 + sha256: 8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl +- pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl name: charset-normalizer - version: 3.4.6 - sha256: 82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e + version: 3.4.7 + sha256: 5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: charset-normalizer - version: 3.4.6 - sha256: c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb + version: 3.4.7 + sha256: 5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: charset-normalizer - version: 3.4.6 - sha256: a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 + version: 3.4.7 + sha256: 2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl +- pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl name: charset-normalizer - version: 3.4.6 - sha256: 2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab + version: 3.4.7 + sha256: 7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl name: click - version: 8.3.1 - sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + version: 8.3.2 + sha256: 1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d requires_dist: - colorama ; sys_platform == 'win32' requires_python: '>=3.10' @@ -3916,6 +3916,26 @@ packages: - questionary>=1.8.1 - typing-extensions>=4.0.0,<5.0.0 ; python_full_version < '3.11' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + name: copier + version: 9.14.2 + sha256: f27e65944b33cf5ab62ca0da5bd76c450754dbd5269db567c501c29c6417f6a6 + requires_dist: + - colorama>=0.4.6 + - dunamai>=1.7.0 + - funcy>=1.17 + - jinja2-ansible-filters>=1.3.1 + - jinja2>=3.1.5 + - packaging>=23.0 + - pathspec>=0.9.0 + - platformdirs>=4.3.6 + - plumbum>=1.6.9 + - pydantic>=2.4.2 + - pygments>=2.7.1 + - pyyaml>=5.3.1 + - questionary>=1.8.1 + - typing-extensions>=4.0.0,<5.0.0 ; python_full_version < '3.11' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl name: coverage version: 7.13.5 @@ -4061,18 +4081,18 @@ packages: requires_dist: - nbformat requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl name: dunamai - version: 1.26.0 - sha256: f584edf0fda0d308cce0961f807bc90a8fe3d9ff4d62f94e72eca7b43f0ed5f6 + version: 1.26.1 + sha256: 2727d939c5b4257cb01ea404372803b477f5176e5a347c43beaf89cd5072e853 requires_dist: - importlib-metadata>=1.6.0 ; python_full_version < '3.8' - packaging>=20.9 requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+devdirty2 - sha256: aa4f4851802d4abba9dca0112aa3c99739e1c43425b48d91030f822baa577257 + version: 0.4.0+devdirty7 + sha256: 3f004a41593dac54743871a0eabd270141600005e4f3fe898a6018d7bf2f24bc requires_dist: - darkdetect - easyscience @@ -5103,10 +5123,10 @@ packages: - pytest>=7.0 ; extra == 'test' - rich ; extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl name: jupyter-lsp - version: 2.3.0 - sha256: e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f + version: 2.3.1 + sha256: 71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81 requires_dist: - jupyter-server>=1.1.2 - importlib-metadata>=4.8.3 ; python_full_version < '3.10' @@ -5597,26 +5617,26 @@ packages: purls: [] size: 290754 timestamp: 1764018009077 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.2-h19cb2f5_0.conda - sha256: 46561199545890e050a8a90edcfce984e5f881da86b09388926e3a6c6b759dec - md5: ed6f7b7a35f942a0301e581d72616f7d +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda + sha256: 24d7e7d15d144f2f74fbc9f397a643f0a1da94dbe9aa9f0d15990fabe34974c9 + md5: 212ddd7bd52988f751905114325b5c0b depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 564908 - timestamp: 1774439353713 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - sha256: d1402087c8792461bfc081629e8aa97e6e577a31ae0b84e6b9cc144a18f48067 - md5: 4280e0a7fd613b271e022e60dea0138c + size: 564947 + timestamp: 1775564350407 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + sha256: 34cc56c627b01928e49731bcfe92338e440ab6b5952feee8f1dd16570b8b8339 + md5: acbb3f547c4aae16b19e417db0c6e5ed depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 568094 - timestamp: 1774439202359 + size: 570026 + timestamp: 1775565121045 - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 md5: 172bf1cd1ff8629f2b1179945ed45055 @@ -5890,6 +5910,18 @@ packages: purls: [] size: 951405 timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + sha256: ec37c79f737933bbac965f5dc0f08ef2790247129a84bb3114fad4900adce401 + md5: 810d83373448da85c3f673fbcb7ad3a3 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 958864 + timestamp: 1775753750179 - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.52.0-h77d7759_0.conda sha256: f500d1cd50cfcd288d02b8fc3c3b7ecf8de6fec7b86e57ea058def02908e4231 md5: d553eb96758e038b04027b30fe314b2d @@ -5900,6 +5932,16 @@ packages: purls: [] size: 996526 timestamp: 1772819669038 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.0-h77d7759_0.conda + sha256: 0dd0e92a2dc2c9978b7088c097fb078caefdd44fb8e24e3327d16c6a120378f7 + md5: 19915aab82b4593237be8ef977aad29e + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 1002564 + timestamp: 1775754043809 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c md5: f6233a3fddc35a2ec9f617f79d6f3d71 @@ -5911,6 +5953,17 @@ packages: purls: [] size: 918420 timestamp: 1772819478684 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1ae2325_0.conda + sha256: 10250e2aecd8dfb85c25f88353cee187946a80dd99ab5c65a8489aa977e19195 + md5: 3dc0c1fda95969dbc972eb809a47613d + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 923915 + timestamp: 1775754375054 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 md5: 8830689d537fda55f990620680934bb1 @@ -5922,6 +5975,17 @@ packages: purls: [] size: 1297302 timestamp: 1772818899033 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda + sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 + md5: 4152b5a8d2513fd7ae9fb9f221a5595d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + purls: [] + size: 1301855 + timestamp: 1775753831574 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -6580,78 +6644,78 @@ packages: version: 1.1.2 sha256: 454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/03/59/fdcb3af72f750a8de2bcf39d62ada70b5eb17b06d7f63860e0a679cb656b/msgspec-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl name: msgspec version: 0.20.0 - sha256: 09e0efbf1ac641fedb1d5496c59507c2f0dc62a052189ee62c763e0aae217520 + sha256: fb1d934e435dd3a2b8cf4bbf47a8757100b4a1cfdc2afdf227541199885cdacb requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5a/15/3c225610da9f02505d37d69a77f4a2e7daae2a125f99d638df211ba84e59/msgspec-0.20.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: msgspec version: 0.20.0 - sha256: 23ee3787142e48f5ee746b2909ce1b76e2949fbe0f97f9f6e70879f06c218b54 + sha256: 509ac1362a1d53aa66798c9b9fd76872d7faa30fcf89b2fba3bcbfd559d56eb0 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl name: msgspec version: 0.20.0 - sha256: fb1d934e435dd3a2b8cf4bbf47a8757100b4a1cfdc2afdf227541199885cdacb + sha256: 716284f898ab2547fedd72a93bb940375de9fbfe77538f05779632dc34afdfde requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl name: msgspec version: 0.20.0 - sha256: 509ac1362a1d53aa66798c9b9fd76872d7faa30fcf89b2fba3bcbfd559d56eb0 + sha256: 2aba22e2e302e9231e85edc24f27ba1f524d43c223ef5765bd8624c7df9ec0a5 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/68/da/fda01c754dc85aed67ac0b7d3b213ab50b5b39f15f5eb072b2baf0edb689/msgspec-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: msgspec - version: 0.20.0 - sha256: bb4d873f24ae18cd1334f4e37a178ed46c9d186437733351267e0a269bdf7e53 + version: 0.21.0 + sha256: f2a80db664c75f336cff5e17df7861c23fa47bec6f96c2c3f94be773cc675821 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b2/34/a66dea16444967e3fc0991aff57ef473e2214e5bbdbe3c2b3139d2ccec7b/msgspec-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl name: msgspec - version: 0.20.0 - sha256: 716284f898ab2547fedd72a93bb940375de9fbfe77538f05779632dc34afdfde + version: 0.21.0 + sha256: 0634e676eb334fde291310f1d0f23bf48332977c2d0ebdaf98dfcd9437091782 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/89/5e/406b7d578926b68790e390d83a1165a9bfc2d95612a1a9c1c4d5c72ea815/msgspec-0.20.0-cp311-cp311-win_amd64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bc/16/418ba970f74707e2590954f7fda0b44c1d2242d3835aecf914f1dd3080e6/msgspec-0.21.0-cp311-cp311-macosx_11_0_arm64.whl name: msgspec - version: 0.20.0 - sha256: d1dcc93a3ce3d3195985bfff18a48274d0b5ffbc96fa1c5b89da6f0d9af81b29 + version: 0.21.0 + sha256: 47220291d6cbc7980098d0e7593e77d86158ff08b9e61d64b2559928e5457828 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ee/06/924ab2c12b55b479e41039345e988bf935aabea92fbe90b7faf93166740c/msgspec-0.21.0-cp311-cp311-win_amd64.whl name: msgspec - version: 0.20.0 - sha256: 2aba22e2e302e9231e85edc24f27ba1f524d43c223ef5765bd8624c7df9ec0a5 + version: 0.21.0 + sha256: 03c472124cbbbcfbf0d2f429f62a8fb2d12b6633448a884dd1a875ab32aa59b4 requires_dist: - tomli ; python_full_version < '3.11' and extra == 'toml' - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: multidict version: 6.7.1 @@ -6708,10 +6772,10 @@ packages: requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/3f/c3/06490e98393dcb4d6ce2bf331a39335375c300afaef526897881fbeae6ab/narwhals-2.18.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl name: narwhals - version: 2.18.1 - sha256: a0a8bb80205323851338888ba3a12b4f65d352362c8a94be591244faf36504ad + version: 2.19.0 + sha256: 1f8dfa4a33a6dbff878c3e9be4c3b455dfcaf2a9322f1357db00e4e92e95b84b requires_dist: - cudf-cu12>=24.10.0 ; extra == 'cudf' - dask[dataframe]>=2024.8 ; extra == 'dask' @@ -6768,10 +6832,10 @@ packages: - testpath ; extra == 'test' - xmltodict ; extra == 'test' requires_python: '>=3.10.0' -- pypi: https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl name: nbconvert - version: 7.17.0 - sha256: 4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518 + version: 7.17.1 + sha256: aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8 requires_dist: - beautifulsoup4 - bleach[css]!=5.0.0 @@ -7045,9 +7109,9 @@ packages: version: 2.4.4 sha256: e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8 requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c - md5: f61eb8cd60ff9057122a3d338b99c00f +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb + md5: da1b85b6a87e141f5140bb9924cecab0 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates @@ -7055,33 +7119,33 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 3164551 - timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - sha256: e02e5639b0e4d6d4fcf0f3b082642844fb5a37316f5b0a1126c6271347462e90 - md5: 30bb8d08b99b9a7600d39efb3559fff0 + size: 3167099 + timestamp: 1775587756857 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + sha256: 334fd49ea31b99114f5afb1ec44555dc8c90640648302a4f8f838ee345d1ec50 + md5: 5cf0ece4375c73d7a5765e83565a69c7 depends: - - __osx >=10.13 + - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 2777136 - timestamp: 1769557662405 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 - md5: f4f6ad63f98f64191c3e77c5f5f29d76 + size: 2776564 + timestamp: 1775589970694 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea + md5: 25dcccd4f80f1638428613e0d7c9b4e1 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 3104268 - timestamp: 1769556384749 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 - md5: eb585509b815415bc964b2c7e11c7eb3 + size: 3106008 + timestamp: 1775587972483 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda + sha256: feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154 + md5: 05c7d624cff49dbd8db1ad5ba537a8a3 depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -7090,8 +7154,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 9343023 - timestamp: 1769557547888 + size: 9410183 + timestamp: 1775589779763 - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl name: overrides version: 7.7.0 @@ -8138,6 +8202,11 @@ packages: version: 4.9.4 sha256: 68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl + name: platformdirs + version: 4.9.6 + sha256: e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl name: plopp version: 26.3.1 @@ -8617,10 +8686,10 @@ packages: version: 1.2.0 sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl name: pytest - version: 9.0.2 - sha256: 711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b + version: 9.0.3 + sha256: 2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 requires_dist: - colorama>=0.4 ; sys_platform == 'win32' - exceptiongroup>=1 ; python_full_version < '3.11' @@ -8861,10 +8930,10 @@ packages: requires_dist: - six>=1.5 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl name: python-discovery - version: 1.2.1 - sha256: b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 + version: 1.2.2 + sha256: e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a requires_dist: - filelock>=3.15.4 - platformdirs>=4.3.6,<5 @@ -9177,25 +9246,45 @@ packages: version: 0.30.0 sha256: a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1f/a2/ef467cb77099062317154c63f234b8a7baf7cb690b99af760c5b68b9ee7f/ruff-0.15.8-py3-none-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl + name: ruff + version: 0.15.9 + sha256: 4965bac6ac9ea86772f4e23587746f0b7a395eccabb823eb8bfacc3fa06069f7 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl + name: ruff + version: 0.15.9 + sha256: 45a70921b80e1c10cf0b734ef09421f71b5aa11d27404edc89d7e8a69505e43d + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.15.9 + sha256: eaf05aad70ca5b5a0a4b0e080df3a6b699803916d88f006efd1f5b46302daab8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.15.9 + sha256: 2b0c7c341f68adb01c488c3b7d4b49aa8ea97409eae6462d860a79cf55f431b6 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl name: ruff - version: 0.15.8 - sha256: 04f79eff02a72db209d47d665ba7ebcad609d8918a134f86cb13dd132159fc89 + version: 0.15.10 + sha256: 28cb32d53203242d403d819fd6983152489b12e4a3ae44993543d6fe62ab42ed requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ca/f2/7a631a8af6d88bcef997eb1bf87cc3da158294c57044aafd3e17030613de/ruff-0.15.8-py3-none-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl name: ruff - version: 0.15.8 - sha256: 6ee3ae5c65a42f273f126686353f2e08ff29927b7b7e203b711514370d500de3 + version: 0.15.10 + sha256: b1e7c16ea0ff5a53b7c2df52d947e685973049be1cdfe2b59a9c43601897b22e requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/eb/92/f1c662784d149ad1414cae450b082cf736430c12ca78367f20f5ed569d65/ruff-0.15.8-py3-none-macosx_10_12_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: ruff - version: 0.15.8 - sha256: d3e3d0b6ba8dca1b7ef9ab80a28e840a20070c4b62e56d675c24f366ef330570 + version: 0.15.10 + sha256: 51cb8cc943e891ba99989dd92d61e29b1d231e14811db9be6440ecf25d5c1609 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/f8/22/d7f2fabdba4fae9f3b570e5605d5eb4500dcb7b770d3217dca4428484b17/ruff-0.15.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl name: ruff - version: 0.15.8 - sha256: 0f29b989a55572fb885b77464cf24af05500806ab4edf9a0fd8977f9759d85b1 + version: 0.15.10 + sha256: 93cc06a19e5155b4441dd72808fdf84290d84ad8a39ca3b0f994363ade4cebb1 requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl name: scipp @@ -10072,10 +10161,10 @@ packages: requires_dist: - typing-extensions>=4.12.0 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl name: tzdata - version: '2025.3' - sha256: 06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 + version: '2026.1' + sha256: 4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 requires_python: '>=2' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c diff --git a/pyproject.toml b/pyproject.toml index 954af4af..9e75a4a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -217,17 +217,17 @@ select = [ #'PLR', # https://docs.astral.sh/ruff/rules/#refactor-plr #'PLW', # https://docs.astral.sh/ruff/rules/#warning-plw # flake8 rules - #'A', # https://docs.astral.sh/ruff/rules/#flake8-builtins-a + 'A', # https://docs.astral.sh/ruff/rules/#flake8-builtins-a 'ANN', # https://docs.astral.sh/ruff/rules/#flake8-annotations-ann 'ARG', # https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg #'ASYNC', # https://docs.astral.sh/ruff/rules/#flake8-async-async 'B', # https://docs.astral.sh/ruff/rules/#flake8-bugbear-b #'BLE', # https://docs.astral.sh/ruff/rules/#flake8-blind-except-ble - 'C4', # https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4 - #'COM', # https://docs.astral.sh/ruff/rules/#flake8-commas-com + 'C4', # https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4 + 'COM', # https://docs.astral.sh/ruff/rules/#flake8-commas-com #'DTZ', # https://docs.astral.sh/ruff/rules/#flake8-datetimez-dtz #'EM', # https://docs.astral.sh/ruff/rules/#flake8-errmsg-em - #'FA', # https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa + 'FA', # https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa #'FBT', # https://docs.astral.sh/ruff/rules/#flake8-boolean-trap-fbt #'FIX', # https://docs.astral.sh/ruff/rules/#flake8-fixme-fix #'G', # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g @@ -246,9 +246,9 @@ select = [ #'SLF', # https://docs.astral.sh/ruff/rules/#flake8-self-slf #'SLOT', # https://docs.astral.sh/ruff/rules/#flake8-slots-slot #'T20', # https://docs.astral.sh/ruff/rules/#flake8-print-t20 - #'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc + 'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc #'TD', # https://docs.astral.sh/ruff/rules/#flake8-todos-td - #'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid + 'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid ] # Exceptions to the linting rules diff --git a/src/easydynamics/analysis/__init__.py b/src/easydynamics/analysis/__init__.py index 431457ca..a52854bc 100644 --- a/src/easydynamics/analysis/__init__.py +++ b/src/easydynamics/analysis/__init__.py @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .analysis import Analysis +from easydynamics.analysis.analysis import Analysis __all__ = [ 'Analysis', diff --git a/src/easydynamics/convolution/__init__.py b/src/easydynamics/convolution/__init__.py index 9b023c95..2cbfdcf5 100644 --- a/src/easydynamics/convolution/__init__.py +++ b/src/easydynamics/convolution/__init__.py @@ -1,6 +1,6 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .convolution import Convolution +from easydynamics.convolution.convolution import Convolution __all__ = ['Convolution'] diff --git a/src/easydynamics/experiment/__init__.py b/src/easydynamics/experiment/__init__.py index da01800f..f59656ed 100644 --- a/src/easydynamics/experiment/__init__.py +++ b/src/easydynamics/experiment/__init__.py @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .experiment import Experiment +from easydynamics.experiment.experiment import Experiment __all__ = [ 'Experiment', diff --git a/src/easydynamics/sample_model/__init__.py b/src/easydynamics/sample_model/__init__.py index 9cb2b108..f52c44bd 100644 --- a/src/easydynamics/sample_model/__init__.py +++ b/src/easydynamics/sample_model/__init__.py @@ -1,20 +1,24 @@ # SPDX-FileCopyrightText: 2025 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .background_model import BackgroundModel -from .component_collection import ComponentCollection -from .components import DampedHarmonicOscillator -from .components import DeltaFunction -from .components import Exponential -from .components import ExpressionComponent -from .components import Gaussian -from .components import Lorentzian -from .components import Polynomial -from .components import Voigt -from .diffusion_model.brownian_translational_diffusion import BrownianTranslationalDiffusion -from .instrument_model import InstrumentModel -from .resolution_model import ResolutionModel -from .sample_model import SampleModel +from easydynamics.sample_model.background_model import BackgroundModel +from easydynamics.sample_model.component_collection import ComponentCollection +from easydynamics.sample_model.components.damped_harmonic_oscillator import ( + DampedHarmonicOscillator, +) +from easydynamics.sample_model.components.delta_function import DeltaFunction +from easydynamics.sample_model.components.exponential import Exponential +from easydynamics.sample_model.components.expression_component import ExpressionComponent +from easydynamics.sample_model.components.gaussian import Gaussian +from easydynamics.sample_model.components.lorentzian import Lorentzian +from easydynamics.sample_model.components.polynomial import Polynomial +from easydynamics.sample_model.components.voigt import Voigt +from easydynamics.sample_model.diffusion_model.brownian_translational_diffusion import ( + BrownianTranslationalDiffusion, +) +from easydynamics.sample_model.instrument_model import InstrumentModel +from easydynamics.sample_model.resolution_model import ResolutionModel +from easydynamics.sample_model.sample_model import SampleModel __all__ = [ 'ComponentCollection', diff --git a/src/easydynamics/sample_model/background_model.py b/src/easydynamics/sample_model/background_model.py index 81f29b81..bd403ea2 100644 --- a/src/easydynamics/sample_model/background_model.py +++ b/src/easydynamics/sample_model/background_model.py @@ -3,12 +3,11 @@ import scipp as sc +from easydynamics.sample_model.component_collection import ComponentCollection +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.sample_model.model_base import ModelBase from easydynamics.utils.utils import Q_type -from .component_collection import ComponentCollection -from .components.model_component import ModelComponent - class BackgroundModel(ModelBase): """ diff --git a/src/easydynamics/sample_model/component_collection.py b/src/easydynamics/sample_model/component_collection.py index a805f58f..fd5b5ebd 100644 --- a/src/easydynamics/sample_model/component_collection.py +++ b/src/easydynamics/sample_model/component_collection.py @@ -4,6 +4,7 @@ from __future__ import annotations import warnings +from typing import TYPE_CHECKING import numpy as np import scipp as sc @@ -11,9 +12,10 @@ from easyscience.variable import DescriptorBase from easyscience.variable import Parameter -from easydynamics.utils.utils import Numeric +from easydynamics.sample_model.components.model_component import ModelComponent -from .components.model_component import ModelComponent +if TYPE_CHECKING: + from easydynamics.utils.utils import Numeric class ComponentCollection(ModelBase): diff --git a/src/easydynamics/sample_model/components/__init__.py b/src/easydynamics/sample_model/components/__init__.py index 54bec057..747dc594 100644 --- a/src/easydynamics/sample_model/components/__init__.py +++ b/src/easydynamics/sample_model/components/__init__.py @@ -1,14 +1,16 @@ # SPDX-FileCopyrightText: 2025 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .damped_harmonic_oscillator import DampedHarmonicOscillator -from .delta_function import DeltaFunction -from .exponential import Exponential -from .expression_component import ExpressionComponent -from .gaussian import Gaussian -from .lorentzian import Lorentzian -from .polynomial import Polynomial -from .voigt import Voigt +from easydynamics.sample_model.components.damped_harmonic_oscillator import ( + DampedHarmonicOscillator, +) +from easydynamics.sample_model.components.delta_function import DeltaFunction +from easydynamics.sample_model.components.exponential import Exponential +from easydynamics.sample_model.components.expression_component import ExpressionComponent +from easydynamics.sample_model.components.gaussian import Gaussian +from easydynamics.sample_model.components.lorentzian import Lorentzian +from easydynamics.sample_model.components.polynomial import Polynomial +from easydynamics.sample_model.components.voigt import Voigt __all__ = [ 'Gaussian', diff --git a/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py b/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py index 3bb71a72..d74b9116 100644 --- a/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py +++ b/src/easydynamics/sample_model/components/damped_harmonic_oscillator.py @@ -3,14 +3,17 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import numpy as np -import scipp as sc -from easyscience.variable import Parameter from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + import scipp as sc + from easyscience.variable import Parameter class DampedHarmonicOscillator(CreateParametersMixin, ModelComponent): @@ -214,6 +217,7 @@ def __repr__(self) -> str: A string representation of the Damped Harmonic Oscillator. """ return ( - f'DampedHarmonicOscillator(display_name = {self.display_name}, unit = {self._unit},\n \ - area = {self.area},\n center = {self.center},\n width = {self.width})' + f'DampedHarmonicOscillator(display_name = {self.display_name}, ' + f'unit = {self._unit},\n ' + f'area = {self.area},\n center = {self.center},\n width = {self.width})' ) diff --git a/src/easydynamics/sample_model/components/delta_function.py b/src/easydynamics/sample_model/components/delta_function.py index 178b4489..e3720f8b 100644 --- a/src/easydynamics/sample_model/components/delta_function.py +++ b/src/easydynamics/sample_model/components/delta_function.py @@ -3,18 +3,22 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import numpy as np -import scipp as sc -from easyscience.variable import Parameter from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent - EPSILON = 1e-8 # small number to avoid floating point issues +if TYPE_CHECKING: + import scipp as sc + from easyscience.variable import Parameter + + class DeltaFunction(CreateParametersMixin, ModelComponent): """ Delta function. @@ -191,5 +195,7 @@ def __repr__(self) -> str: A string representation of the Delta function. """ - return f'DeltaFunction(unique_name = {self.unique_name}, unit = {self._unit},\n \ - area = {self.area},\n center = {self.center}' + return ( + f'DeltaFunction(unique_name = {self.unique_name}, unit = {self._unit},\n' + f'area = {self.area},\n center = {self.center})' + ) diff --git a/src/easydynamics/sample_model/components/exponential.py b/src/easydynamics/sample_model/components/exponential.py index 7c5e36cb..f06e8138 100644 --- a/src/easydynamics/sample_model/components/exponential.py +++ b/src/easydynamics/sample_model/components/exponential.py @@ -8,10 +8,9 @@ from easyscience.variable import Parameter from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent - class Exponential(CreateParametersMixin, ModelComponent): r""" diff --git a/src/easydynamics/sample_model/components/expression_component.py b/src/easydynamics/sample_model/components/expression_component.py index 176b4dc5..d87c0e07 100644 --- a/src/easydynamics/sample_model/components/expression_component.py +++ b/src/easydynamics/sample_model/components/expression_component.py @@ -3,14 +3,17 @@ from __future__ import annotations -import numpy as np -import scipp as sc +from typing import TYPE_CHECKING + import sympy as sp from easyscience.variable import Parameter +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + import numpy as np + import scipp as sc class ExpressionComponent(ModelComponent): diff --git a/src/easydynamics/sample_model/components/gaussian.py b/src/easydynamics/sample_model/components/gaussian.py index 9c185b2f..4e9629c1 100644 --- a/src/easydynamics/sample_model/components/gaussian.py +++ b/src/easydynamics/sample_model/components/gaussian.py @@ -3,14 +3,17 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import numpy as np -import scipp as sc -from easyscience.variable import Parameter from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + import scipp as sc + from easyscience.variable import Parameter class Gaussian(CreateParametersMixin, ModelComponent): @@ -221,5 +224,7 @@ def __repr__(self) -> str: A string representation of the Gaussian. """ - return f'Gaussian(unique_name = {self.unique_name}, unit = {self._unit},\n \ - area = {self.area},\n center = {self.center},\n width = {self.width})' + return ( + f'Gaussian(unique_name = {self.unique_name}, unit = {self._unit},\n' + f'area = {self.area},\n center = {self.center},\n width = {self.width})' + ) diff --git a/src/easydynamics/sample_model/components/lorentzian.py b/src/easydynamics/sample_model/components/lorentzian.py index ca3d1a21..d86b1ed6 100644 --- a/src/easydynamics/sample_model/components/lorentzian.py +++ b/src/easydynamics/sample_model/components/lorentzian.py @@ -3,14 +3,17 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import numpy as np -import scipp as sc -from easyscience.variable import Parameter from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + import scipp as sc + from easyscience.variable import Parameter class Lorentzian(CreateParametersMixin, ModelComponent): @@ -212,5 +215,7 @@ def __repr__(self) -> str: str A string representation of the Lorentzian. """ - return f'Lorentzian(unique_name = {self.unique_name}, unit = {self._unit},\n \ - area = {self.area},\n center = {self.center},\n width = {self.width})' + return ( + f'Lorentzian(unique_name = {self.unique_name}, unit = {self._unit},\n' + f'area = {self.area},\n center = {self.center},\n width = {self.width})' + ) diff --git a/src/easydynamics/sample_model/components/polynomial.py b/src/easydynamics/sample_model/components/polynomial.py index 0263d81b..cd3cd997 100644 --- a/src/easydynamics/sample_model/components/polynomial.py +++ b/src/easydynamics/sample_model/components/polynomial.py @@ -4,7 +4,7 @@ from __future__ import annotations import warnings -from collections.abc import Sequence +from typing import TYPE_CHECKING import numpy as np import scipp as sc @@ -12,9 +12,11 @@ from easyscience.variable import Parameter from scipp import UnitError +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + from collections.abc import Sequence class Polynomial(ModelComponent): @@ -265,26 +267,3 @@ def __repr__(self) -> str: f'Polynomial(unique_name = {self.unique_name}, ' f'unit = {self._unit},\n coefficients = [{coeffs_str}])' ) - - -# from typing import Callable, Dict -# class UserDefinedComponent(ModelComponent): -# """ -# User-defined model component, defined via a custom function. - -# Args: -# func (Callable): Function accepting (x, params) and returning -# np.ndarray. -# params (dict): Parameters passed to the function. -# """ - -# def __init__( -# self, name, func: Callable[[np.ndarray, Dict], np.ndarray], -# params: Dict -# ): -# super().__init__(name=name) -# self.func = func -# self.params = params - -# def evaluate(self, x): -# return self.func(x, self.params) diff --git a/src/easydynamics/sample_model/components/voigt.py b/src/easydynamics/sample_model/components/voigt.py index c261b3f2..4aafd03b 100644 --- a/src/easydynamics/sample_model/components/voigt.py +++ b/src/easydynamics/sample_model/components/voigt.py @@ -3,15 +3,18 @@ from __future__ import annotations -import numpy as np -import scipp as sc -from easyscience.variable import Parameter +from typing import TYPE_CHECKING + from scipy.special import voigt_profile from easydynamics.sample_model.components.mixins import CreateParametersMixin +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -from .model_component import ModelComponent +if TYPE_CHECKING: + import numpy as np + import scipp as sc + from easyscience.variable import Parameter class Voigt(CreateParametersMixin, ModelComponent): @@ -257,8 +260,10 @@ def __repr__(self) -> str: A string representation of the Voigt. """ - return f'Voigt(unique_name = {self.unique_name}, unit = {self._unit},\n \ - area = {self.area},\n \ - center = {self.center},\n \ - gaussian_width = {self.gaussian_width},\n \ - lorentzian_width = {self.lorentzian_width})' + return ( + f'Voigt(unique_name = {self.unique_name}, unit = {self._unit},\n' + f'area = {self.area},\n' + f'center = {self.center},\n' + f'gaussian_width = {self.gaussian_width},\n' + f'lorentzian_width = {self.lorentzian_width})' + ) diff --git a/src/easydynamics/sample_model/diffusion_model/__init__.py b/src/easydynamics/sample_model/diffusion_model/__init__.py index 7291f83e..ceee6588 100644 --- a/src/easydynamics/sample_model/diffusion_model/__init__.py +++ b/src/easydynamics/sample_model/diffusion_model/__init__.py @@ -1,8 +1,12 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .brownian_translational_diffusion import BrownianTranslationalDiffusion -from .jump_translational_diffusion import JumpTranslationalDiffusion +from easydynamics.sample_model.diffusion_model.brownian_translational_diffusion import ( + BrownianTranslationalDiffusion, +) +from easydynamics.sample_model.diffusion_model.jump_translational_diffusion import ( + JumpTranslationalDiffusion, +) __all__ = [ 'BrownianTranslationalDiffusion', diff --git a/src/easydynamics/sample_model/resolution_model.py b/src/easydynamics/sample_model/resolution_model.py index 50fae8d0..3d2385e7 100644 --- a/src/easydynamics/sample_model/resolution_model.py +++ b/src/easydynamics/sample_model/resolution_model.py @@ -3,14 +3,13 @@ import scipp as sc +from easydynamics.sample_model.component_collection import ComponentCollection +from easydynamics.sample_model.components import DeltaFunction +from easydynamics.sample_model.components import Polynomial +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.sample_model.model_base import ModelBase from easydynamics.utils.utils import Q_type -from .component_collection import ComponentCollection -from .components import DeltaFunction -from .components import Polynomial -from .components.model_component import ModelComponent - class ResolutionModel(ModelBase): """ diff --git a/src/easydynamics/sample_model/sample_model.py b/src/easydynamics/sample_model/sample_model.py index 26fad08c..e1ec6b05 100644 --- a/src/easydynamics/sample_model/sample_model.py +++ b/src/easydynamics/sample_model/sample_model.py @@ -7,15 +7,14 @@ import scipp as sc from easyscience.variable import Parameter +from easydynamics.sample_model.component_collection import ComponentCollection +from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.sample_model.diffusion_model.diffusion_model_base import DiffusionModelBase from easydynamics.sample_model.model_base import ModelBase from easydynamics.utils import detailed_balance_factor from easydynamics.utils.utils import Numeric from easydynamics.utils.utils import Q_type -from .component_collection import ComponentCollection -from .components.model_component import ModelComponent - class SampleModel(ModelBase): """ diff --git a/src/easydynamics/utils/__init__.py b/src/easydynamics/utils/__init__.py index 6792d72e..18e7bee5 100644 --- a/src/easydynamics/utils/__init__.py +++ b/src/easydynamics/utils/__init__.py @@ -1,6 +1,6 @@ # SPDX-FileCopyrightText: 2025 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -from .detailed_balance import detailed_balance_factor +from easydynamics.utils.detailed_balance import detailed_balance_factor __all__ = ['detailed_balance_factor'] From 95c201808f737f66a1f8d50ada4fca1556340566 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Fri, 10 Apr 2026 11:57:06 +0200 Subject: [PATCH 04/10] Bump Python support to 3.12-3.14 (#152) * Apply latest templates * Remove unnecessary Conda dependency addition from CI configuration --- .copier-answers.yml | 6 +- .github/workflows/pypi-test.yml | 24 +- .github/workflows/test.yml | 44 +- .github/workflows/tutorial-tests.yml | 4 - docs/docs/installation-and-setup/index.md | 32 +- pixi.lock | 9884 ++++++++++----------- pixi.toml | 28 +- pyproject.toml | 15 +- tests/functional/test_dummy.py | 8 + 9 files changed, 4885 insertions(+), 5160 deletions(-) create mode 100644 tests/functional/test_dummy.py diff --git a/.copier-answers.yml b/.copier-answers.yml index c3886bcb..5743335a 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,6 +1,6 @@ # WARNING: Do not edit this file manually. # Any changes will be overwritten by Copier. -_commit: v0.10.1-38-g85fbe04 +_commit: v0.10.1-41-g508666e _src_path: gh:easyscience/templates app_docs_url: https://easyscience.github.io/dynamics-app app_doi: 10.5281/zenodo.18877180 @@ -12,8 +12,8 @@ home_repo_name: dynamics lib_docs_url: https://easyscience.github.io/dynamics-lib lib_doi: 10.5281/zenodo.18877180 lib_package_name: easydynamics -lib_python_max: '3.12' -lib_python_min: '3.11' +lib_python_max: '3.14' +lib_python_min: '3.12' lib_repo_name: dynamics-lib project_contact_email: henrik.jacobsen@ess.eu project_copyright_years: 2025-2026 diff --git a/.github/workflows/pypi-test.yml b/.github/workflows/pypi-test.yml index 117d24d6..7224f1e4 100644 --- a/.github/workflows/pypi-test.yml +++ b/.github/workflows/pypi-test.yml @@ -45,30 +45,26 @@ jobs: - name: Init pixi project run: pixi init easydynamics - - name: Add Python 3.12 from Conda + - name: Set the minimum system requirements working-directory: easydynamics - run: pixi add "python=3.12" + run: pixi project system-requirements add macos 14.0 - - name: Add other Conda dependencies + - name: Add Python 3.14 from Conda working-directory: easydynamics - run: pixi add gsl + run: pixi add "python=3.14" - - name: Add easydynamics from PyPI + - name: Add easydynamics (with dev dependencies) from PyPI working-directory: easydynamics - run: pixi add --pypi "easydynamics" - - - name: Add dev dependencies from PyPI - working-directory: easydynamics - run: pixi add --pypi pytest pytest-xdist - - - name: Add Pixi task as a shortcut - working-directory: easydynamics - run: pixi task add easydynamics "python -m easydynamics" + run: pixi add --pypi "easydynamics[dev]" - name: Run unit tests to verify the installation working-directory: easydynamics run: pixi run python -m pytest ../tests/unit/ --color=yes -v + - name: Run functional tests to verify the installation + working-directory: easydynamics + run: pixi run python -m pytest ../tests/functional/ --color=yes -v + - name: Run integration tests to verify the installation working-directory: easydynamics run: pixi run python -m pytest ../tests/integration/ --color=yes -n auto diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce03715c..774edf78 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,8 +44,8 @@ concurrency: # Set the environment variables to be used in all jobs defined in this workflow env: CI_BRANCH: ${{ github.head_ref || github.ref_name }} - PY_VERSIONS: '3.11 3.12' - PIXI_ENVS: 'py-311-env py-312-env' + PY_VERSIONS: '3.12 3.14' + PIXI_ENVS: 'py-312-env py-314-env' jobs: # Job 1: Set up environment variables @@ -96,12 +96,27 @@ jobs: echo echo "🔹🔸🔹🔸🔹 Python: $py_ver 🔹🔸🔹🔸🔹" - env="py-$(echo $py_ver | tr -d .)-env" # Converts 3.11 -> py-311-env + env="py-$(echo $py_ver | tr -d .)-env" # Converts 3.XX -> py-3XX-env echo "Running tests in environment: $env" pixi run --environment $env unit-tests done + - name: Run functional tests + shell: bash + run: | + set -euo pipefail + + for py_ver in $PY_VERSIONS; do + echo + echo "🔹🔸🔹🔸🔹 Python: $py_ver 🔹🔸🔹🔸🔹" + + env="py-$(echo $py_ver | tr -d .)-env" # Converts 3.XX -> py-3XX-env + + echo "Running tests in environment: $env" + pixi run --environment $env functional-tests + done + - name: Run integration tests ${{ needs.env-prepare.outputs.pytest-marks }} shell: bash run: | @@ -111,7 +126,7 @@ jobs: echo echo "🔹🔸🔹🔸🔹 Python: $py_ver 🔹🔸🔹🔸🔹" - env="py-$(echo $py_ver | tr -d .)-env" # Converts 3.11 -> py-311-env + env="py-$(echo $py_ver | tr -d .)-env" # Converts 3.XX -> py-3XX-env echo "Running tests in environment: $env" pixi run --environment $env integration-tests ${{ needs.env-prepare.outputs.pytest-marks }} @@ -236,7 +251,26 @@ jobs: cd easydynamics_py$py_ver echo "Running tests" - pixi run python -m pytest ../tests/unit/ --color=yes --cov= --cov-report= + pixi run python -m pytest ../tests/unit/ --color=yes -v + + echo "Exiting pixi project directory" + cd .. + done + + - name: Run functional tests + shell: bash + run: | + set -euo pipefail + + for py_ver in $PY_VERSIONS; do + echo + echo "🔹🔸🔹🔸🔹 Python: $py_ver 🔹🔸🔹🔸🔹" + + echo "Entering pixi project directory easydynamics_py$py_ver" + cd easydynamics_py$py_ver + + echo "Running tests" + pixi run python -m pytest ../tests/functional/ --color=yes -v echo "Exiting pixi project directory" cd .. diff --git a/.github/workflows/tutorial-tests.yml b/.github/workflows/tutorial-tests.yml index 4c9244d0..e976e267 100644 --- a/.github/workflows/tutorial-tests.yml +++ b/.github/workflows/tutorial-tests.yml @@ -45,10 +45,6 @@ jobs: - name: Set up pixi uses: ./.github/actions/setup-pixi - - name: Test tutorials as python scripts - shell: bash - run: pixi run script-tests - - name: Prepare notebooks shell: bash run: pixi run notebook-prepare diff --git a/docs/docs/installation-and-setup/index.md b/docs/docs/installation-and-setup/index.md index 6c928741..243d81f8 100644 --- a/docs/docs/installation-and-setup/index.md +++ b/docs/docs/installation-and-setup/index.md @@ -5,7 +5,7 @@ icon: material/cog-box # :material-cog-box: Installation & Setup **EasyDynamics** is a cross-platform Python library compatible with -**Python 3.11** through **3.12**. +**Python 3.12** through **3.14**. To install and set up EasyDynamics, we recommend using [**Pixi**](https://pixi.prefix.dev), a modern package manager for @@ -62,9 +62,9 @@ This section describes the simplest way to set up EasyDynamics using pixi init easydynamics cd easydynamics ``` -- Set the Python version for the Pixi environment (e.g., 3.12): +- Set the Python version for the Pixi environment (e.g., 3.14): ```txt - pixi add python=3.12 + pixi add python=3.14 ``` - Add EasyDynamics to the Pixi environment from PyPI: ```txt @@ -231,26 +231,36 @@ first. This can be done individually via the :material-download: - Navigate to your existing Pixi project, created as described in the [Installing with Pixi](#installing-with-pixi) section. -- Launch the Jupyter Lab server: +- Add JupyterLab and the Pixi kernel for Jupyter: ```txt - pixi run jupyter lab + pixi add --pypi jupyterlab pixi-kernel + ``` +- Download the EasyDynamics tutorials to the `tutorials/` directory. +- Start JupyterLab in the `tutorials/` directory to access the + notebooks: + ```txt + pixi run jupyter lab tutorials/ ``` - Your web browser should open automatically. Click on one of the - `*.ipynb` files downloaded previously and select the `Python (Pixi)` - kernel to get started. + `*.ipynb` files and select the `Python (Pixi)` kernel to get started. ### Classical Run Tutorials Locally +- Install Jupyter Notebook and IPython kernel: + ```txt + pip install notebook ipykernel + ``` - Add the virtual environment as a Jupyter kernel: ```txt python -m ipykernel install --user --name=venv --display-name "EasyDynamics Python kernel" ``` -- Launch the Jupyter Notebook server: +- Download the EasyDynamics tutorials to the `tutorials/` directory. +- Launch the Jupyter Notebook server (opens browser automatically at + `http://localhost:8888/`): ```txt - jupyter notebook + jupyter notebook tutorials/ ``` -- Your web browser should open automatically. Click on one of the - `*.ipynb` files downloaded previously and select the +- Open one of the `*.ipynb` files and select the `EasyDynamics Python kernel` to get started. ### Run Tutorials via Google Colab diff --git a/pixi.lock b/pixi.lock index acd7cbf3..efafa5aa 100644 --- a/pixi.lock +++ b/pixi.lock @@ -10,15 +10,74 @@ environments: packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda @@ -26,60 +85,105 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.0-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -88,67 +192,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -161,429 +235,235 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/fe/ad0ecbe2393cb690a4b3100a8fea47ecfdb49f6e06f40cf2f626635adc0c/scipp-26.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.52.0-h77d7759_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: ./ osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.4-h4c637c5_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -592,67 +472,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -665,167 +515,225 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: ./ win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.0-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.4-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -834,67 +742,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/c1/0976b235cf29ead553e22f2fb6385a8252b533715e00d0ae52ed7b900582/h5py-3.16.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -907,113 +785,64 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/28/3f8aa247d29d010547d52207395cb057ebd0a40b88f64bc1dbac9e17a729/scipp-26.3.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl - pypi: ./ - py-311-env: + py-312-env: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: @@ -1023,15 +852,74 @@ environments: packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda @@ -1041,58 +929,104 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.0-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py312h868fb18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/6a/9cc5221337a0f47478e4cb91623bf89c99728a43ff682ea8772827cc45a6/chardet-7.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -1101,67 +1035,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8f/a0/7024215e95d456de5883e6732e708d8187d9753a21d32f8ddb3befc0c445/matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -1174,178 +1078,234 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/da/fda01c754dc85aed67ac0b7d3b213ab50b5b39f15f5eb072b2baf0edb689/msgspec-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/17/ec40d981705654853726e7ac9aea9ddbb4a5d9cf54d8472222f4f3de06c2/pandas-3.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d4/06/19ff1efd58b85906149ce83dfddce23252cea5bec7e0fa5f834336cfe836/scipp-26.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py312h4409184_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py312h44dc372_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.0-h77d7759_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.15-ha9537fe_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py312h6510ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py312h19bbe71_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py312h1de3e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py312h6ef9ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/2c/bc6d4f9acbad0bf402ce1fe47bac43324f04036848ca3525f4e53bca8198/chardet-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -1354,67 +1314,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ba/95/a825894f3e45cbac7554c4e97314ce886b233a20033787eda755ca8fecc7/h5py-3.16.0-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f8/86/de7e3a1cdcfc941483af70609edc06b83e7c8a0e0dc9ac325200a3f4d220/matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -1427,178 +1357,224 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b2/34/a66dea16444967e3fc0991aff57ef473e2214e5bbdbe3c2b3139d2ccec7b/msgspec-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/35/6411db530c618e0e0005187e35aa02ce60ae4c4c4d206964a2f978217c27/pandas-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/81/21/4962b1daddf0422e56c5ed4c41bea1ccb6d2a9ab72b795196835a20969c7/scipp-26.3.1-cp311-cp311-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: ./ - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.15-h8561d8f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py312he06e257_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py312hc6d9e41_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py312he06e257_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py312ha1a9051_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.0-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py312he5662c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py312h275cf98_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/dd/d1f18e3f3fe00799c652560521ba699f9698c264a0e1bbfc67e567a6d995/chardet-7.4.1-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -1607,67 +1583,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/3b/38ff88b347c3e346cda1d3fc1b65a7aa75d40632228d8b8a5d7b58508c24/h5py-3.16.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/c1/0976b235cf29ead553e22f2fb6385a8252b533715e00d0ae52ed7b900582/h5py-3.16.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -1680,168 +1626,247 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/bc/16/418ba970f74707e2590954f7fda0b44c1d2242d3835aecf914f1dd3080e6/msgspec-0.21.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/d3/b7da1d5d7dbdc5ef52ed7debd2b484313b832982266905315dad5a0bf0b1/pandas-3.0.2-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/60/54/5011adb56853caabfd90686c2e543d1e3c76a8ef2755809b7e12e3f3583b/scipp-26.3.1-cp311-cp311-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl - pypi: ./ - win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.15-h0159041_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + py-314-env: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.0-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/a9/68387dfc67972bc3547e84f3545af6bc1a53c46a01b6976ffa263485d61a/chardet-7.4.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -1850,67 +1875,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/20/e6c0ff62ca2ad1a396a34f4380bafccaaf8791ff8fccf3d995a1fc12d417/h5py-3.16.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -1923,193 +1918,235 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ee/06/924ab2c12b55b479e41039345e988bf935aabea92fbe90b7faf93166740c/msgspec-0.21.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/a0/97a6339859d4acb2536efb24feb6708e82f7d33b2ed7e036f2983fcced82/pandas-3.0.2-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e6/0d/8882a4c7a5ebe59a46b709e82411d9c730d67250d41a2e11bc4bcd4d431d/scipp-26.3.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/fe/ad0ecbe2393cb690a4b3100a8fea47ecfdb49f6e06f40cf2f626635adc0c/scipp-26.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: ./ - py-312-env: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.4-h4c637c5_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -2118,67 +2155,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3e/f3/c5195b1ae57ef85339fd7285dfb603b22c8b4e79114bae5f4f0fcf688677/matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -2191,177 +2198,225 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.52.0-h77d7759_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.0-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.4-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl @@ -2370,67 +2425,37 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl @@ -2443,605 +2468,62 @@ environments: - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1f/28/3f8aa247d29d010547d52207395cb057ebd0a40b88f64bc1dbac9e17a729/scipp-26.3.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: ./ - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7e/65/07d5f5c7f7c994f12c768708bd2e17a4f01a2b0f44a1c9eccad872433e2e/matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: ./ - win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/c1/0976b235cf29ead553e22f2fb6385a8252b533715e00d0ae52ed7b900582/h5py-3.16.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl - pypi: ./ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -3058,33 +2540,26 @@ packages: purls: [] size: 28948 timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 + md5: aaa2a381ccc56eac91d63b6c1240312f + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + purls: [] + size: 8191 + timestamp: 1744137672556 - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl name: aiohappyeyeballs version: 2.6.1 sha256: f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl - name: aiohttp - version: 3.13.5 - sha256: ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2 - requires_dist: - - aiohappyeyeballs>=2.5.0 - - aiosignal>=1.4.0 - - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' - - attrs>=17.3.0 - - frozenlist>=1.1.1 - - multidict>=4.5,<7.0 - - propcache>=0.2.0 - - yarl>=1.17.0,<2.0 - - aiodns>=3.3.0 ; extra == 'speedups' - - brotli>=1.2 ; platform_python_implementation == 'CPython' and extra == 'speedups' - - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl name: aiohttp version: 3.13.5 - sha256: b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1 + sha256: f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162 requires_dist: - aiohappyeyeballs>=2.5.0 - aiosignal>=1.4.0 @@ -3099,10 +2574,10 @@ packages: - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/75/0a/39fa6c6b179b53fcb3e4b3d2b6d6cad0180854eda17060c7218540102bef/aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl name: aiohttp version: 3.13.5 - sha256: 8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d + sha256: ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2 requires_dist: - aiohappyeyeballs>=2.5.0 - aiosignal>=1.4.0 @@ -3117,10 +2592,10 @@ packages: - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: aiohttp version: 3.13.5 - sha256: 3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc + sha256: b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1 requires_dist: - aiohappyeyeballs>=2.5.0 - aiosignal>=1.4.0 @@ -3135,10 +2610,10 @@ packages: - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl name: aiohttp version: 3.13.5 - sha256: e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c + sha256: 756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25 requires_dist: - aiohappyeyeballs>=2.5.0 - aiosignal>=1.4.0 @@ -3171,28 +2646,10 @@ packages: - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c0/43/8c7163a596dab4f8be12c190cf467a1e07e4734cf90eebb39f7f5d53fc6a/aiohttp-3.13.5-cp311-cp311-win_amd64.whl - name: aiohttp - version: 3.13.5 - sha256: d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8 - requires_dist: - - aiohappyeyeballs>=2.5.0 - - aiosignal>=1.4.0 - - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' - - attrs>=17.3.0 - - frozenlist>=1.1.1 - - multidict>=4.5,<7.0 - - propcache>=0.2.0 - - yarl>=1.17.0,<2.0 - - aiodns>=3.3.0 ; extra == 'speedups' - - brotli>=1.2 ; platform_python_implementation == 'CPython' and extra == 'speedups' - - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' - - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: aiohttp version: 3.13.5 - sha256: 15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416 + sha256: 241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b requires_dist: - aiohappyeyeballs>=2.5.0 - aiosignal>=1.4.0 @@ -3222,81 +2679,157 @@ packages: requires_dist: - typing-extensions>=4.0.0 ; python_full_version < '3.9' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - name: anyio - version: 4.13.0 - sha256: 08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708 - requires_dist: - - exceptiongroup>=1.0.2 ; python_full_version < '3.11' - - idna>=2.8 - - typing-extensions>=4.5 ; python_full_version < '3.13' - - trio>=0.32.0 ; extra == 'trio' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl - name: appnope - version: 0.1.4 - sha256: 502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl - name: argon2-cffi - version: 25.1.0 - sha256: fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741 - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + sha256: f09aed24661cd45ba54a43772504f05c0698248734f9ae8cd289d314ac89707e + md5: af2df4b9108808da3dc76710fe50eae2 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.10 + - typing_extensions >=4.5 + - python + constrains: + - trio >=0.32.0 + - uvloop >=0.22.1 + - winloop >=0.2.3 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 146764 + timestamp: 1774359453364 +- conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda + sha256: 8f032b140ea4159806e4969a68b4a3c0a7cab1ad936eb958a2b5ffe5335e19bf + md5: 54898d0f524c9dee622d44bbb081a8ab + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/appnope?source=hash-mapping + size: 10076 + timestamp: 1733332433806 +- conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda + sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad + md5: 8ac12aff0860280ee0cff7fa2cf63f3b + depends: - argon2-cffi-bindings - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: argon2-cffi-bindings - version: 25.1.0 - sha256: d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a - requires_dist: - - cffi>=1.0.1 ; python_full_version < '3.14' - - cffi>=2.0.0b1 ; python_full_version >= '3.14' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl - name: argon2-cffi-bindings - version: 25.1.0 - sha256: 2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44 - requires_dist: - - cffi>=1.0.1 ; python_full_version < '3.14' - - cffi>=2.0.0b1 ; python_full_version >= '3.14' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl - name: argon2-cffi-bindings - version: 25.1.0 - sha256: 7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0 - requires_dist: - - cffi>=1.0.1 ; python_full_version < '3.14' - - cffi>=2.0.0b1 ; python_full_version >= '3.14' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl - name: argon2-cffi-bindings - version: 25.1.0 - sha256: a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98 - requires_dist: - - cffi>=1.0.1 ; python_full_version < '3.14' - - cffi>=2.0.0b1 ; python_full_version >= '3.14' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - name: arrow - version: 1.4.0 - sha256: 749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205 - requires_dist: - - python-dateutil>=2.7.0 - - backports-zoneinfo==0.2.1 ; python_full_version < '3.9' - - tzdata ; python_full_version >= '3.9' - - doc8 ; extra == 'doc' - - sphinx>=7.0.0 ; extra == 'doc' - - sphinx-autobuild ; extra == 'doc' - - sphinx-autodoc-typehints ; extra == 'doc' - - sphinx-rtd-theme>=1.3.0 ; extra == 'doc' - - dateparser==1.* ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytz==2025.2 ; extra == 'test' - - simplejson==3.* ; extra == 'test' - requires_python: '>=3.8' + - python >=3.9 + - typing-extensions + constrains: + - argon2_cffi ==999 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi?source=hash-mapping + size: 18715 + timestamp: 1749017288144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py312h4c3975b_2.conda + sha256: 7988c207b2b766dad5ebabf25a92b8d75cb8faed92f256fd7a4e0875c9ec6d58 + md5: 1567f06d717246abab170736af8bad1b + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.0.1 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 35646 + timestamp: 1762509443854 +- conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.conda + sha256: 39234a99df3d2e3065383808ed8bfda36760de5ef590c54c3692bb53571ef02b + md5: 3cca1b74b2752917b5b65b81f61f0553 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=2.0.0b1 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 35598 + timestamp: 1762509505285 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py312h4409184_2.conda + sha256: 24c475f6f7abf03ef3cc2ac572b7a6d713bede00ef984591be92cdc439b09fbc + md5: 0a2a07b42db3f92b8dccf0f60b5ebee8 + depends: + - __osx >=11.0 + - cffi >=1.0.1 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 34224 + timestamp: 1762509989973 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py314h0612a62_2.conda + sha256: aab60bbaea5cc49dff37438d1ad469d64025cda2ce58103cf68da61701ed2075 + md5: a240a79a49a95b388ef81ccda27a5e51 + depends: + - __osx >=11.0 + - cffi >=2.0.0b1 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 34218 + timestamp: 1762509977830 +- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py312he06e257_2.conda + sha256: 38c5e43d991b0c43713fa2ceba3063afa4ccad2dd4c8eb720143de54d461a338 + md5: 5dc3781bbc4ddce0bf250a04c1a192c2 + depends: + - cffi >=1.0.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 38535 + timestamp: 1762509763237 +- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py314h5a2d7ad_2.conda + sha256: a742e7cd0d5534bfff3fd550a0c1e430411fad60a24f88930d261056ab08096f + md5: ffa247e46f47e157851dc547f4c513e4 + depends: + - cffi >=2.0.0b1 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 38653 + timestamp: 1762509771011 +- conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda + sha256: 792da8131b1b53ff667bd6fc617ea9087b570305ccb9913deb36b8e12b3b5141 + md5: 85c4f19f377424eafc4ed7911b291642 + depends: + - python >=3.10 + - python-dateutil >=2.7.0 + - python-tzdata + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/arrow?source=hash-mapping + size: 113854 + timestamp: 1760831179410 - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl name: asteval version: 1.0.8 @@ -3310,29 +2843,44 @@ packages: - coverage ; extra == 'test' - asteval[dev,doc,test] ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl - name: asttokens - version: 3.0.1 - sha256: 15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a - requires_dist: - - astroid>=2,<5 ; extra == 'astroid' - - astroid>=2,<5 ; extra == 'test' - - pytest<9.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl - name: async-lru - version: 2.3.0 - sha256: eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315 - requires_dist: - - typing-extensions>=4.0.0 ; python_full_version < '3.11' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - name: attrs - version: 26.1.0 - sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 + md5: 9673a61a297b00016442e022d689faa6 + depends: + - python >=3.10 + constrains: + - astroid >=2,<5 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28797 + timestamp: 1763410017955 +- conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda + sha256: ea8486637cfb89dc26dc9559921640cd1d5fd37e5e02c33d85c94572139f2efe + md5: b85e84cb64c762569cc1a760c2327e0a + depends: + - python >=3.10 + - typing_extensions >=4.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/async-lru?source=hash-mapping + size: 22949 + timestamp: 1773926359134 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab + md5: c6b0543676ecb1fb2d7643941fe375f2 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping + size: 64927 + timestamp: 1773935801332 - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl name: autopep8 version: 2.3.2 @@ -3341,25 +2889,77 @@ packages: - pycodestyle>=2.12.0 - tomli ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - name: babel - version: 2.18.0 - sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 - requires_dist: - - pytz>=2015.7 ; python_full_version < '3.9' - - tzdata ; sys_platform == 'win32' and extra == 'dev' - - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' - - freezegun~=1.0 ; extra == 'dev' - - jinja2>=3.0 ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest>=6.0 ; extra == 'dev' - - pytz ; extra == 'dev' - - setuptools ; extra == 'dev' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl +- conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + sha256: a14a9ad02101aab25570543a59c5193043b73dc311a25650134ed9e6cb691770 + md5: f1976ce927373500cc19d3c0b2c85177 + depends: + - python >=3.10 + - python + constrains: + - pytz >=2015.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/babel?source=compressed-mapping + size: 7684321 + timestamp: 1772555330347 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + sha256: d77a24be15e283d83214121428290dbe55632a6e458378205b39c550afa008cf + md5: 5b8c55fed2e576dde4b0b33693a4fdb1 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 237970 + timestamp: 1767045004512 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + noarch: generic + sha256: c31ab719d256bc6f89926131e88ecd0f0c5d003fe8481852c6424f4ec6c7eb29 + md5: a2ac7763a9ac75055b68f325d3255265 + depends: + - python >=3.14 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: [] + size: 7514 + timestamp: 1767044983590 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py312h44dc372_0.conda + sha256: aee745bfca32f7073d3298157bbb2273d6d83383cb266840cf0a7862b3cd8efc + md5: c2d5961bfd98504b930e704426d16572 + depends: + - python + - python 3.12.* *_cpython + - __osx >=11.0 + - zstd >=1.5.7,<1.6.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 241051 + timestamp: 1767045000787 +- conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda + sha256: c9c97cd644faa6c4fb38017c5ecfd082f56a3126af5925d246364fa4a22b2a74 + md5: 2db2b356f08f19ce4309a79a9ee6b9d8 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 236635 + timestamp: 1767045021157 +- pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl name: backrefs version: '6.2' - sha256: 08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be + sha256: e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7 requires_dist: - regex ; extra == 'extras' requires_python: '>=3.9' @@ -3370,37 +2970,155 @@ packages: requires_dist: - regex ; extra == 'extras' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - name: beautifulsoup4 - version: 4.14.3 - sha256: 0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb - requires_dist: - - soupsieve>=1.6.1 - - typing-extensions>=4.0.0 - - cchardet ; extra == 'cchardet' - - chardet ; extra == 'chardet' - - charset-normalizer ; extra == 'charset-normalizer' - - html5lib ; extra == 'html5lib' - - lxml ; extra == 'lxml' - requires_python: '>=3.7.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + sha256: bf1e71c3c0a5b024e44ff928225a0874fc3c3356ec1a0b6fe719108e6d1288f6 + md5: 5267bef8efea4127aacd1f4e1f149b6e + depends: + - python >=3.10 + - soupsieve >=1.2 + - typing-extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/beautifulsoup4?source=hash-mapping + size: 90399 + timestamp: 1764520638652 - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl name: bidict version: 0.23.1 sha256: 5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl - name: bleach - version: 6.3.0 - sha256: fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6 - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda + sha256: f8ff1f98423674278964a46c93a1766f9e91960d44efd91c6c3ed56a33813f46 + md5: 7c5ebdc286220e8021bf55e6384acd67 + depends: + - python >=3.10 - webencodings - - tinycss2>=1.1.0,<1.5 ; extra == 'css' - requires_python: '>=3.10' + - python + constrains: + - tinycss2 >=1.1.0,<1.5 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/bleach?source=hash-mapping + size: 142008 + timestamp: 1770719370680 +- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-hbca2aae_1.conda + sha256: 7c07a865e5e4cca233cc4e0eb3f0f5ff6c90776461687b4fb0b1764133e1fd61 + md5: f11a319b9700b203aa14c295858782b6 + depends: + - bleach ==6.3.0 pyhcf101f3_1 + - tinycss2 + license: Apache-2.0 AND MIT + purls: [] + size: 4409 + timestamp: 1770719370682 - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl name: blinker version: 1.9.0 sha256: ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + sha256: 49df13a1bb5e388ca0e4e87022260f9501ed4192656d23dc9d9a1b4bf3787918 + md5: 64088dffd7413a2dd557ce837b4cbbdb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 hb03c661_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 368300 + timestamp: 1764017300621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda + sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 + md5: 8910d2c46f7e7b519129f486e0fe927a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 hb03c661_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 367376 + timestamp: 1764017265553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py312h0dfefe5_1.conda + sha256: 6178775a86579d5e8eec6a7ab316c24f1355f6c6ccbe84bb341f342f1eda2440 + md5: 311fcf3f6a8c4eb70f912798035edd35 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 359503 + timestamp: 1764018572368 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py314h3daef5d_1.conda + sha256: 5c2e471fd262fcc3c5a9d5ea4dae5917b885e0e9b02763dbd0f0d9635ed4cb99 + md5: f9501812fe7c66b6548c7fcaa1c1f252 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 359854 + timestamp: 1764018178608 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py312hc6d9e41_1.conda + sha256: 2bb6f384a51929ef2d5d6039fcf6c294874f20aaab2f63ca768cbe462ed4b379 + md5: e8e7a6346a9e50d19b4daf41f367366f + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libbrotlicommon 1.2.0 hfd05255_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 335482 + timestamp: 1764018063640 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda + sha256: 6854ee7675135c57c73a04849c29cbebc2fb6a3a3bfee1f308e64bf23074719b + md5: 1302b74b93c44791403cbeee6a0f62a3 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libbrotlicommon 1.2.0 hfd05255_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 335782 + timestamp: 1764018443683 - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl name: build version: 1.4.2 @@ -3455,16 +3173,6 @@ packages: purls: [] size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 - md5: 4173ac3b19ec0a4f400b4f782910368b - depends: - - __osx >=10.13 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 133427 - timestamp: 1771350680709 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df md5: 620b85a3f45526a8bc4d23fd78fc22f0 @@ -3498,16 +3206,6 @@ packages: purls: [] size: 207882 timestamp: 1765214722852 -- conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - sha256: 2f5bc0292d595399df0d168355b4e9820affc8036792d6984bd751fdda2bcaea - md5: fc9a153c57c9f070bebaa7eef30a8f17 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 186122 - timestamp: 1765215100384 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 md5: bcb3cba70cf1eec964a03b4ba7775f01 @@ -3536,67 +3234,134 @@ packages: purls: [] size: 147413 timestamp: 1772006283803 -- pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - name: certifi - version: 2026.2.25 - sha256: 027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl - name: cffi - version: 2.0.0 - sha256: b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl - name: cffi - version: 2.0.0 - sha256: 2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: cffi - version: 2.0.0 - sha256: 3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl - name: cffi - version: 2.0.0 - sha256: 66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: cffi - version: 2.0.0 - sha256: 8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl - name: cffi - version: 2.0.0 - sha256: 8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - name: cffi - version: 2.0.0 - sha256: 6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl - name: cffi - version: 2.0.0 - sha256: da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 - requires_dist: - - pycparser ; implementation_name != 'PyPy' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + noarch: python + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4134 + timestamp: 1615209571450 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping + size: 11065 + timestamp: 1615209567874 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 151445 + timestamp: 1772001170301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda + sha256: 7dafe8173d5f94e46cf9cd597cc8ff476a8357fbbd4433a8b5697b2864845d9c + md5: 648ee28dcd4e07a1940a17da62eccd40 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 295716 + timestamp: 1761202958833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e + md5: cf45f4278afd6f4e6d03eda0f435d527 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 300271 + timestamp: 1761203085220 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py312h1b4d9a2_1.conda + sha256: 597e986ac1a1bd1c9b29d6850e1cdea4a075ce8292af55568952ec670e7dd358 + md5: 503ac138ad3cfc09459738c0f5750705 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288080 + timestamp: 1761203317419 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda + sha256: 5b5ee5de01eb4e4fd2576add5ec9edfc654fbaf9293e7b7ad2f893a67780aa98 + md5: 10dd19e4c797b8f8bdb1ec1fbb6821d7 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 292983 + timestamp: 1761203354051 +- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py312he06e257_1.conda + sha256: 3e3bdcb85a2e79fe47d9c8ce64903c76f663b39cb63b8e761f6f884e76127f82 + md5: 46f7dccfee37a52a97c0ed6f33fcf0a3 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 291324 + timestamp: 1761203195397 +- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + sha256: 924f2f01fa7a62401145ef35ab6fc95f323b7418b2644a87fea0ea68048880ed + md5: c360170be1c9183654a240aadbedad94 + depends: + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294731 + timestamp: 1761203441365 - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl name: cfgv version: 3.5.0 @@ -3612,144 +3377,81 @@ packages: version: 7.4.1 sha256: 277ce1174ea054415a3c2ad5f51aa089a96dda16999de56e4ac1bc366d0d535e requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/65/6a/9cc5221337a0f47478e4cb91623bf89c99728a43ff682ea8772827cc45a6/chardet-7.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl name: chardet version: 7.4.1 - sha256: c98e1044785ab71f0fee70f64b8d56f69df9de1b593793022e001ba2f6b76dd0 + sha256: 5d86402a506631af2fb36e3d1c72021477b228fb0dcdb44400b9b681f14b14c0 requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl name: chardet version: 7.4.1 sha256: fcaed03cefa53f62346091ef92da7a6f44bae6830a6f4c6b097a70cdc31b1199 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9f/dd/d1f18e3f3fe00799c652560521ba699f9698c264a0e1bbfc67e567a6d995/chardet-7.4.1-cp311-cp311-macosx_11_0_arm64.whl - name: chardet - version: 7.4.1 - sha256: 3886f8f9bb3500bd8c421b2de9b4878a0c183f80bc289338cdda869dfd4397fb - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c0/a9/68387dfc67972bc3547e84f3545af6bc1a53c46a01b6976ffa263485d61a/chardet-7.4.1-cp311-cp311-win_amd64.whl - name: chardet - version: 7.4.1 - sha256: c820c95d8b4de8aea99b54083d38f10f763686646962b5627e8e2b2db113a37b - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/cb/2c/bc6d4f9acbad0bf402ce1fe47bac43324f04036848ca3525f4e53bca8198/chardet-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet version: 7.4.1 - sha256: a9322fd3ffd359b49b2d608725a15975ebc0d66f2dcedefa7ddb5847e54a6f9c + sha256: 3d66d2949754ad924865a47e81857a0792dc8edc651094285116b6df2e218445 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fb/4a/ff2acdb422d32a2440718910da996bd5be03bd67fd504255918409b88439/chardet-7.4.1-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl name: chardet version: 7.4.1 - sha256: 0de8d636391f9050e4e048ca8a9f98b25e67eff389705f8c6ff1ab9593f7339b - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl - name: charset-normalizer - version: 3.4.7 - sha256: eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl - name: charset-normalizer - version: 3.4.7 - sha256: 8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl - name: charset-normalizer - version: 3.4.7 - sha256: 5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.7 - sha256: 5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.7 - sha256: 2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl - name: charset-normalizer - version: 3.4.7 - sha256: 7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - name: click - version: 8.3.2 - sha256: 1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d - requires_dist: - - colorama ; sys_platform == 'win32' + sha256: be39708b300a80a9f78ef8f81018e2e9c6274a71c0823a4d6e493c72f7b3d2a2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - name: cloudpickle - version: 3.1.2 - sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - name: colorama - version: 0.4.6 - sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- pypi: https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl - name: comm - version: 0.2.3 - sha256: c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 - requires_dist: - - pytest ; extra == 'test' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl - name: contourpy - version: 1.3.3 - sha256: 23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381 - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - name: contourpy - version: 1.3.3 - sha256: 8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b - requires_dist: - - numpy>=1.25 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - bokeh ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.17.0 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 + md5: a9167b9571f3baa9d448faa2139d1089 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + size: 58872 + timestamp: 1775127203018 +- pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl + name: click + version: 8.3.2 + sha256: 1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + name: cloudpickle + version: 3.1.2 + sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + name: colorama + version: 0.4.6 + sha256: 4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212 + md5: 2da13f2b299d8e1995bafbbe9689a2f7 + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping + size: 14690 + timestamp: 1753453984907 +- pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: contourpy version: 1.3.3 - sha256: 556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 + sha256: f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3771,10 +3473,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl name: contourpy version: 1.3.3 - sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db + sha256: 8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3796,10 +3498,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl name: contourpy version: 1.3.3 - sha256: 709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1 + sha256: 556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3821,10 +3523,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl name: contourpy version: 1.3.3 - sha256: 3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42 + sha256: cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3846,10 +3548,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: contourpy version: 1.3.3 - sha256: b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb + sha256: 4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3871,10 +3573,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl name: contourpy version: 1.3.3 - sha256: 4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 + sha256: cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77 requires_dist: - numpy>=1.25 - furo ; extra == 'docs' @@ -3936,24 +3638,17 @@ packages: - questionary>=1.8.1 - typing-extensions>=4.0.0,<5.0.0 ; python_full_version < '3.11' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl - name: coverage - version: 7.13.5 - sha256: d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: coverage version: 7.13.5 - sha256: 145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587 + sha256: 6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510 requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl name: coverage version: 7.13.5 - sha256: 66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d + sha256: d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810 requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' @@ -3964,17 +3659,10 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: coverage - version: 7.13.5 - sha256: ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl name: coverage version: 7.13.5 - sha256: 460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01 + sha256: 2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633 requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' @@ -3985,13 +3673,35 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl name: coverage version: 7.13.5 - sha256: 258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9 + sha256: 9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + noarch: generic + sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe + md5: f54c1ffb8ecedb85a8b7fcde3a187212 + depends: + - python >=3.12,<3.13.0a0 + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46463 + timestamp: 1772728929620 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.4-py314hd8ed1ab_100.conda + noarch: generic + sha256: 40dc224f2b718e5f034efd2332bc315a719063235f63673468d26a24770094ee + md5: f111d4cfaf1fe9496f386bc98ae94452 + depends: + - python >=3.14,<3.15.0a0 + - python_abi * *_cp314 + license: Python-2.0 + purls: [] + size: 49809 + timestamp: 1775614256655 - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl name: cycler version: 0.12.1 @@ -4012,31 +3722,118 @@ packages: requires_dist: - pyobjc-framework-cocoa ; sys_platform == 'darwin' and extra == 'macos-listener' requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl - name: debugpy - version: 1.8.20 - sha256: a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl - name: debugpy - version: 1.8.20 - sha256: 1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl - name: debugpy - version: 1.8.20 - sha256: 5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl - name: decorator - version: 5.2.1 - sha256: d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl - name: defusedxml - version: 0.7.1 - sha256: a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda + sha256: f20121b67149ff80bf951ccae7442756586d8789204cd08ade59397b22bfd098 + md5: ee1b48795ceb07311dd3e665dd4f5f33 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2858582 + timestamp: 1769744978783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda + sha256: d9e89e351d7189c41615cfceca76b3bcacaa9c81d9945ac1caa6fb9e5184f610 + md5: 57e6fad901c05754d5256fe3ab9f277b + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2886804 + timestamp: 1769744977998 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py312h6510ced_0.conda + sha256: f0ca130b5ffd6949673d3c61d7b8562ab76ad8debafb83f8b3443d30c172f5eb + md5: da3b5efcb0caabcede61a6ce4e0a7669 + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - libcxx >=19 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2752978 + timestamp: 1769744996462 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_0.conda + sha256: 7736a82ebe75c0f3ea6991298363d1f2edb34291f8616c1d3719862881c3a167 + md5: 407c74dc27356ba6bf3a0191070e3ac0 + depends: + - python + - python 3.14.* *_cp314 + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2778080 + timestamp: 1769745040206 +- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py312ha1a9051_0.conda + sha256: 5a886b1af3c66bf58213c7f3d802ea60fe8218313d9072bc1c9e8f7840548ba0 + md5: 032746a0b0663920f0afb18cec61062b + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 3996113 + timestamp: 1769745013982 +- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda + sha256: ece1d8299ad081edaf1e5279f2a900bdedddb2c795ac029a06401543cd7610ad + md5: 48ae8370a4562f7049d587d017792a3a + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 4026404 + timestamp: 1769745008861 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 + md5: 9ce473d1d1be1cc3810856a48b3fab32 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping + size: 14129 + timestamp: 1740385067843 +- conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + md5: 961b3a227b437d82ad7054484cfa71b2 + depends: + - python >=3.6 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/defusedxml?source=hash-mapping + size: 24062 + timestamp: 1615232388757 - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl name: dfo-ls version: 1.6.5 @@ -4091,8 +3888,8 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+devdirty7 - sha256: 3f004a41593dac54743871a0eabd270141600005e4f3fe898a6018d7bf2f24bc + version: 0.4.0+dev5 + sha256: ff8f55922804cdb622d0eb0aecd00105aeb30e470aa79b05bf6f92556ad8ce67 requires_dist: - darkdetect - easyscience @@ -4129,7 +3926,6 @@ packages: - pydoclint ; extra == 'dev' - pytest ; extra == 'dev' - pytest-cov ; extra == 'dev' - - pytest-forked ; extra == 'dev' - pytest-xdist ; extra == 'dev' - pyyaml ; extra == 'dev' - radon ; extra == 'dev' @@ -4137,7 +3933,7 @@ packages: - spdx-headers ; extra == 'dev' - validate-pyproject[all] ; extra == 'dev' - versioningit ; extra == 'dev' - requires_python: '>=3.11' + requires_python: '>=3.12' - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl name: easyscience version: 2.2.0 @@ -4169,6 +3965,17 @@ packages: - sphinx-gallery ; extra == 'docs' - toml ; extra == 'docs' requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab + depends: + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21333 + timestamp: 1763918099466 - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl name: execnet version: 2.1.2 @@ -4179,41 +3986,26 @@ packages: - pytest ; extra == 'testing' - tox ; extra == 'testing' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl - name: executing - version: 2.2.1 - sha256: 760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 - requires_dist: - - asttokens>=2.1.0 ; extra == 'tests' - - ipython ; extra == 'tests' - - pytest ; extra == 'tests' - - coverage ; extra == 'tests' - - coverage-enable-subprocess ; extra == 'tests' - - littleutils ; extra == 'tests' - - rich ; python_full_version >= '3.11' and extra == 'tests' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl - name: fastjsonschema - version: 2.21.2 - sha256: 1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463 - requires_dist: - - colorama ; extra == 'devel' - - jsonschema ; extra == 'devel' - - json-spec ; extra == 'devel' - - pylint ; extra == 'devel' - - pytest ; extra == 'devel' - - pytest-benchmark ; extra == 'devel' - - pytest-cache ; extra == 'devel' - - validictory ; extra == 'devel' +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad + md5: ff9efb7f7469aed3c4a8106ffa29593c + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping + size: 30753 + timestamp: 1756729456476 - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl name: filelock version: 3.25.2 sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: fonttools version: 4.62.1 - sha256: 9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14 + sha256: 8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -4278,10 +4070,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl +- pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl name: fonttools version: 4.62.1 - sha256: 90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974 + sha256: fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -4312,10 +4104,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl name: fonttools version: 4.62.1 - sha256: 12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9 + sha256: 90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974 requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -4346,10 +4138,10 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl +- pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl name: fonttools version: 4.62.1 - sha256: 40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7 + sha256: 1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e requires_dist: - lxml>=4.0 ; extra == 'lxml' - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' @@ -4414,74 +4206,6 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: fonttools - version: 4.62.1 - sha256: 1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl - name: fonttools - version: 4.62.1 - sha256: e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2 - requires_dist: - - lxml>=4.0 ; extra == 'lxml' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' - - zopfli>=0.1.4 ; extra == 'woff' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' - - lz4>=1.7.4.2 ; extra == 'graphite' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' - - pycairo ; extra == 'interpolatable' - - matplotlib ; extra == 'plot' - - sympy ; extra == 'symfont' - - xattr ; sys_platform == 'darwin' and extra == 'type1' - - skia-pathops>=0.5.0 ; extra == 'pathops' - - uharfbuzz>=0.45.0 ; extra == 'repacker' - - lxml>=4.0 ; extra == 'all' - - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' - - zopfli>=0.1.4 ; extra == 'all' - - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' - - lz4>=1.7.4.2 ; extra == 'all' - - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' - - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' - - pycairo ; extra == 'all' - - matplotlib ; extra == 'all' - - sympy ; extra == 'all' - - xattr ; sys_platform == 'darwin' and extra == 'all' - - skia-pathops>=0.5.0 ; extra == 'all' - - uharfbuzz>=0.45.0 ; extra == 'all' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl name: format-docstring version: 0.2.7 @@ -4491,52 +4215,47 @@ packages: - jupyter-notebook-parser>=0.1.4 - tomli>=1.1.0 ; python_full_version < '3.11' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - name: fqdn - version: 1.5.1 - sha256: 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 - requires_dist: - - cached-property>=1.3.0 ; python_full_version < '3.8' - requires_python: '>=2.7,!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,<4' -- pypi: https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl - name: frozenlist - version: 1.8.0 - sha256: ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: frozenlist - version: 1.8.0 - sha256: 2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda + sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276 + md5: d3549fd50d450b6d9e7dddff25dd2110 + depends: + - cached-property >=1.3.0 + - python >=3.9,<4 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/fqdn?source=hash-mapping + size: 16705 + timestamp: 1733327494780 - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl name: frozenlist version: 1.8.0 sha256: f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl name: frozenlist version: 1.8.0 - sha256: 229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b + sha256: 3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0 requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: frozenlist version: 1.8.0 sha256: 494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl name: frozenlist version: 1.8.0 - sha256: fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93 + sha256: 4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: frozenlist version: 1.8.0 - sha256: 34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 + sha256: cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl name: frozenlist version: 1.8.0 - sha256: 17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9 + sha256: 34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746 requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl name: funcy @@ -4590,11 +4309,33 @@ packages: - platformdirs>=4.2 ; extra == 'pypi' - wheel>=0.42 ; extra == 'pypi' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - name: h11 - version: 0.16.0 - sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb + md5: b8993c19b0c32a2f7b66cbb58ca27069 + depends: + - python >=3.10 + - typing_extensions + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=compressed-mapping + size: 39069 + timestamp: 1767729720872 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 95967 + timestamp: 1756364871835 - pypi: https://files.pythonhosted.org/packages/03/c1/0976b235cf29ead553e22f2fb6385a8252b533715e00d0ae52ed7b900582/h5py-3.16.0-cp312-cp312-win_amd64.whl name: h5py version: 3.16.0 @@ -4602,85 +4343,95 @@ packages: requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: fb1720028d99040792bb2fb31facb8da44a6f29df7697e0b84f0d79aff2e9bd3 - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl - name: h5py - version: 3.16.0 - sha256: dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e - requires_dist: - - numpy>=1.21.2 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl name: h5py version: 3.16.0 - sha256: 42b012933a83e1a558c673176676a10ce2fd3759976a0fedee1e672d1e04fc9d + sha256: fa48993a0b799737ba7fd21e2350fa0a60701e58180fae9f2de834bc39a147ab requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ba/95/a825894f3e45cbac7554c4e97314ce886b233a20033787eda755ca8fecc7/h5py-3.16.0-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl name: h5py version: 3.16.0 - sha256: 719439d14b83f74eeb080e9650a6c7aa6d0d9ea0ca7f804347b05fac6fbf18af + sha256: 8c1eff849cdd53cbc73c214c30ebdb6f1bb8b64790b4b4fc36acdb5e43570210 requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bf/3b/38ff88b347c3e346cda1d3fc1b65a7aa75d40632228d8b8a5d7b58508c24/h5py-3.16.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl name: h5py version: 3.16.0 - sha256: c3f0a0e136f2e95dd0b67146abb6668af4f1a69c81ef8651a2d316e8e01de447 + sha256: dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl name: h5py version: 3.16.0 - sha256: c5313566f4643121a78503a473f0fb1e6dcc541d5115c44f05e037609c565c4d + sha256: 42b012933a83e1a558c673176676a10ce2fd3759976a0fedee1e672d1e04fc9d requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f7/20/e6c0ff62ca2ad1a396a34f4380bafccaaf8791ff8fccf3d995a1fc12d417/h5py-3.16.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl name: h5py version: 3.16.0 - sha256: 17d1f1630f92ad74494a9a7392ab25982ce2b469fc62da6074c0ce48366a2999 + sha256: e4360f15875a532bc7b98196c7592ed4fc92672a57c0a621355961cafb17a6dd requires_dist: - numpy>=1.21.2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - name: httpcore - version: 1.0.9 - sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 30731 + timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb + depends: + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 - certifi - - h11>=0.16 - - anyio>=4.0,<5.0 ; extra == 'asyncio' - - h2>=3,<5 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - trio>=0.22.0,<1.0 ; extra == 'trio' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - name: httpx - version: 0.28.1 - sha256: d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad - requires_dist: + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 49483 + timestamp: 1745602916758 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: - anyio - certifi - - httpcore==1.* + - httpcore 1.* - idna - - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' - - click==8.* ; extra == 'cli' - - pygments==2.* ; extra == 'cli' - - rich>=10,<14 ; extra == 'cli' - - h2>=3,<5 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - zstandard>=0.18.0 ; extra == 'zstd' - requires_python: '>=3.8' + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 63082 + timestamp: 1733663449209 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 17397 + timestamp: 1737618427549 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a md5: c80d8a3b84358cb967fa81e7075fbc8a @@ -4693,16 +4444,6 @@ packages: purls: [] size: 12723451 timestamp: 1773822285671 -- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - sha256: 1294117122d55246bb83ad5b589e2a031aacdf2d0b1f99fd338aa4394f881735 - md5: 627eca44e62e2b665eeec57a984a7f00 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 12273764 - timestamp: 1773822733780 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 md5: f1182c91c0de31a7abd40cedf6a5ebef @@ -4720,16 +4461,30 @@ packages: requires_dist: - ukkonen ; extra == 'license' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - name: idna - version: '3.11' - sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 + md5: 53abe63df7e10a6ba605dc5f9f961d36 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 50721 + timestamp: 1760286526795 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 + md5: 080594bf4493e6bae2607e65390c520a + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34387 + timestamp: 1773931568510 - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl name: iniconfig version: 2.3.0 @@ -4763,46 +4518,88 @@ packages: - pytest-mock ; extra == 'tests' - coverage[toml] ; extra == 'tests' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl - name: ipykernel - version: 7.2.0 - sha256: 3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661 - requires_dist: - - appnope>=0.1.2 ; sys_platform == 'darwin' - - comm>=0.1.1 - - debugpy>=1.6.5 - - ipython>=7.23.1 - - jupyter-client>=8.8.0 - - jupyter-core>=5.1,!=6.0.* - - matplotlib-inline>=0.1 - - nest-asyncio>=1.4 - - packaging>=22 - - psutil>=5.7 - - pyzmq>=25 - - tornado>=6.4.1 - - traitlets>=5.4.0 - - coverage[toml] ; extra == 'cov' - - matplotlib ; extra == 'cov' - - pytest-cov ; extra == 'cov' - - trio ; extra == 'cov' - - intersphinx-registry ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx<8.2.0 ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - trio ; extra == 'docs' - - pyqt5 ; extra == 'pyqt5' - - pyside6 ; extra == 'pyside6' - - flaky ; extra == 'test' - - ipyparallel ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-asyncio>=0.23.5 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0,<10 ; extra == 'test' - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh5552912_1.conda + sha256: 5c1f3e874adaf603449f2b135d48f168c5d510088c78c229bda0431268b43b27 + md5: 4b53d436f3fbc02ce3eeaf8ae9bebe01 + depends: + - appnope + - __osx + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.8.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio >=1.4 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python + constrains: + - appnope >=0.1.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping + size: 132260 + timestamp: 1770566135697 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda + sha256: 9cdadaeef5abadca4113f92f5589db19f8b7df5e1b81cb0225f7024a3aedefa3 + md5: b3a7d5842f857414d9ae831a799444dd + depends: + - __win + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.8.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio >=1.4 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python + constrains: + - appnope >=0.1.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping + size: 132382 + timestamp: 1770566174387 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + sha256: b77ed58eb235e5ad80e742b03caeed4bbc2a2ef064cb9a2deee3b75dfae91b2a + md5: 8b267f517b81c13594ed68d646fd5dcb + depends: + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.8.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio >=1.4 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python + constrains: + - appnope >=0.1.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping + size: 133644 + timestamp: 1770566133040 - pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl name: ipympl version: 0.10.0 @@ -4824,105 +4621,62 @@ packages: - nbval>=0.11.0 ; extra == 'test' - pytest>=9.0.2 ; extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/01/09/ba70f8d662d5671687da55ad2cc0064cf795b15e1eea70907532202e7c97/ipython-9.10.1-py3-none-any.whl - name: ipython - version: 9.10.1 - sha256: 82d18ae9fb9164ded080c71ef92a182ee35ee7db2395f67616034bebb020a232 - requires_dist: - - colorama>=0.4.4 ; sys_platform == 'win32' - - decorator>=4.3.2 - - ipython-pygments-lexers>=1.0.0 - - jedi>=0.18.1 - - matplotlib-inline>=0.1.5 - - pexpect>4.3 ; sys_platform != 'emscripten' and sys_platform != 'win32' - - prompt-toolkit>=3.0.41,<3.1.0 - - pygments>=2.11.0 - - stack-data>=0.6.0 - - traitlets>=5.13.0 - - typing-extensions>=4.6 ; python_full_version < '3.12' - - black ; extra == 'black' - - docrepr ; extra == 'doc' - - exceptiongroup ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - ipykernel ; extra == 'doc' - - ipython[matplotlib,test] ; extra == 'doc' - - setuptools>=70.0 ; extra == 'doc' - - sphinx-toml==0.0.4 ; extra == 'doc' - - sphinx-rtd-theme>=0.1.8 ; extra == 'doc' - - sphinx>=8.0 ; extra == 'doc' - - typing-extensions ; extra == 'doc' - - pytest>=7.0.0 ; extra == 'test' - - pytest-asyncio>=1.0.0 ; extra == 'test' - - testpath>=0.2 ; extra == 'test' - - packaging>=20.1.0 ; extra == 'test' - - setuptools>=61.2 ; extra == 'test' - - ipython[test] ; extra == 'test-extra' - - curio ; extra == 'test-extra' - - jupyter-ai ; extra == 'test-extra' - - ipython[matplotlib] ; extra == 'test-extra' - - nbformat ; extra == 'test-extra' - - nbclient ; extra == 'test-extra' - - ipykernel>6.30 ; extra == 'test-extra' - - numpy>=1.27 ; extra == 'test-extra' - - pandas>2.1 ; extra == 'test-extra' - - trio>=0.1.0 ; extra == 'test-extra' - - matplotlib>3.9 ; extra == 'matplotlib' - - ipython[doc,matplotlib,terminal,test,test-extra] ; extra == 'all' - - argcomplete>=3.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/59/22/906c8108974c673ebef6356c506cebb6870d48cedea3c41e949e2dd556bb/ipython-9.12.0-py3-none-any.whl - name: ipython - version: 9.12.0 - sha256: 0f2701e8ee86e117e37f50563205d36feaa259d2e08d4a6bc6b6d74b18ce128d - requires_dist: - - colorama>=0.4.4 ; sys_platform == 'win32' - - decorator>=5.1.0 - - ipython-pygments-lexers>=1.0.0 - - jedi>=0.18.2 - - matplotlib-inline>=0.1.6 - - pexpect>4.6 ; sys_platform != 'emscripten' and sys_platform != 'win32' - - prompt-toolkit>=3.0.41,<3.1.0 - - pygments>=2.14.0 - - stack-data>=0.6.0 - - traitlets>=5.13.0 - - black ; extra == 'black' - - docrepr ; extra == 'doc' - - exceptiongroup ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - ipykernel ; extra == 'doc' - - ipython[matplotlib,test] ; extra == 'doc' - - setuptools>=80.0 ; extra == 'doc' - - sphinx-toml==0.0.4 ; extra == 'doc' - - sphinx-rtd-theme>=0.1.8 ; extra == 'doc' - - sphinx>=8.0 ; extra == 'doc' - - typing-extensions ; extra == 'doc' - - pytest>=7.0.0 ; extra == 'test' - - pytest-asyncio>=1.0.0 ; extra == 'test' - - testpath>=0.2 ; extra == 'test' - - packaging>=23.0.0 ; extra == 'test' - - setuptools>=80.0 ; extra == 'test' - - ipython[test] ; extra == 'test-extra' - - curio ; extra == 'test-extra' - - jupyter-ai ; extra == 'test-extra' - - ipython[matplotlib] ; extra == 'test-extra' - - nbformat ; extra == 'test-extra' - - nbclient ; extra == 'test-extra' - - ipykernel>6.30 ; extra == 'test-extra' - - numpy>=2.0 ; extra == 'test-extra' - - pandas>2.1 ; extra == 'test-extra' - - trio>=0.22.0 ; extra == 'test-extra' - - matplotlib>3.9 ; extra == 'matplotlib' - - ipython[doc,matplotlib,terminal,test,test-extra] ; extra == 'all' - - argcomplete>=3.0 ; extra == 'all' - - types-decorator ; extra == 'all' - requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl - name: ipython-pygments-lexers - version: 1.1.1 - sha256: a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + sha256: a0d3e4c8e4d7b3801377a03de32951f68d77dd1bfe25082c7915f4e6b0aaa463 + md5: 3734e3b6618ea6e04ad08678d8ed7a45 + depends: + - __win + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.14.0 + - python >=3.12 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - colorama >=0.4.4 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=compressed-mapping + size: 648954 + timestamp: 1774610078420 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + sha256: 932044bd893f7adce6c9b384b96a72fd3804cc381e76789398c2fae900f21df7 + md5: b293210beb192c3024683bf6a998a0b8 + depends: + - __unix + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.14.0 + - python >=3.12 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - pexpect >4.6 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping + size: 649967 + timestamp: 1774609994657 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: - pygments - requires_python: '>=3.8' + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + size: 13993 + timestamp: 1737123723464 - pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl name: ipywidgets version: 8.1.8 @@ -4939,61 +4693,42 @@ packages: - pytest-cov ; extra == 'test' - pytz ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - name: isoduration - version: 20.11.0 - sha256: b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 - requires_dist: - - arrow>=0.15.0 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl - name: jedi - version: 0.19.2 - sha256: a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9 - requires_dist: - - parso>=0.8.4,<0.9.0 - - jinja2==2.11.3 ; extra == 'docs' - - markupsafe==1.1.1 ; extra == 'docs' - - pygments==2.8.1 ; extra == 'docs' - - alabaster==0.7.12 ; extra == 'docs' - - babel==2.9.1 ; extra == 'docs' - - chardet==4.0.0 ; extra == 'docs' - - commonmark==0.8.1 ; extra == 'docs' - - docutils==0.17.1 ; extra == 'docs' - - future==0.18.2 ; extra == 'docs' - - idna==2.10 ; extra == 'docs' - - imagesize==1.2.0 ; extra == 'docs' - - mock==1.0.1 ; extra == 'docs' - - packaging==20.9 ; extra == 'docs' - - pyparsing==2.4.7 ; extra == 'docs' - - pytz==2021.1 ; extra == 'docs' - - readthedocs-sphinx-ext==2.1.4 ; extra == 'docs' - - recommonmark==0.5.0 ; extra == 'docs' - - requests==2.25.1 ; extra == 'docs' - - six==1.15.0 ; extra == 'docs' - - snowballstemmer==2.1.0 ; extra == 'docs' - - sphinx-rtd-theme==0.4.3 ; extra == 'docs' - - sphinx==1.8.5 ; extra == 'docs' - - sphinxcontrib-serializinghtml==1.1.4 ; extra == 'docs' - - sphinxcontrib-websupport==1.2.4 ; extra == 'docs' - - urllib3==1.26.4 ; extra == 'docs' - - flake8==5.0.4 ; extra == 'qa' - - mypy==0.971 ; extra == 'qa' - - types-setuptools==67.2.0.1 ; extra == 'qa' - - django ; extra == 'testing' - - attrs ; extra == 'testing' - - colorama ; extra == 'testing' - - docopt ; extra == 'testing' - - pytest<9.0.0 ; extra == 'testing' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - name: jinja2 - version: 3.1.6 - sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - requires_dist: - - markupsafe>=2.0 - - babel>=2.7 ; extra == 'i18n' - requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda + sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed + md5: 0b0154421989637d424ccf0f104be51a + depends: + - arrow >=0.15.0 + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/isoduration?source=hash-mapping + size: 19832 + timestamp: 1733493720346 +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.9 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/jedi?source=hash-mapping + size: 843646 + timestamp: 1733300981994 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d + depends: + - markupsafe >=2.0 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=compressed-mapping + size: 120685 + timestamp: 1764517220861 - pypi: https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl name: jinja2-ansible-filters version: 1.3.2 @@ -5003,320 +4738,275 @@ packages: - pyyaml - pytest ; extra == 'test' - pytest-cov ; extra == 'test' -- pypi: https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl - name: json5 - version: 0.14.0 - sha256: 56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a - requires_python: '>=3.8.0' -- pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl - name: jsonpointer - version: 3.1.1 - sha256: 8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - name: jsonschema - version: 4.26.0 - sha256: d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce - requires_dist: - - attrs>=22.2.0 - - jsonschema-specifications>=2023.3.6 - - referencing>=0.28.4 - - rpds-py>=0.25.0 - - fqdn ; extra == 'format' - - idna ; extra == 'format' - - isoduration ; extra == 'format' - - jsonpointer>1.13 ; extra == 'format' - - rfc3339-validator ; extra == 'format' - - rfc3987 ; extra == 'format' - - uri-template ; extra == 'format' - - webcolors>=1.11 ; extra == 'format' - - fqdn ; extra == 'format-nongpl' - - idna ; extra == 'format-nongpl' - - isoduration ; extra == 'format-nongpl' - - jsonpointer>1.13 ; extra == 'format-nongpl' - - rfc3339-validator ; extra == 'format-nongpl' - - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' - - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' - - uri-template ; extra == 'format-nongpl' - - webcolors>=24.6.0 ; extra == 'format-nongpl' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - name: jsonschema-specifications - version: 2025.9.1 - sha256: 98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe - requires_dist: - - referencing>=0.31.0 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl - name: jupyter-client - version: 8.8.0 - sha256: f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a - requires_dist: - - jupyter-core>=5.1 - - python-dateutil>=2.8.2 - - pyzmq>=25.0 - - tornado>=6.4.1 - - traitlets>=5.3 - - ipykernel ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx>=4 ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - orjson ; extra == 'orjson' - - anyio ; extra == 'test' - - coverage ; extra == 'test' - - ipykernel>=6.14 ; extra == 'test' - - msgpack ; extra == 'test' - - mypy ; platform_python_implementation != 'PyPy' and extra == 'test' - - paramiko ; sys_platform == 'win32' and extra == 'test' - - pre-commit ; extra == 'test' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-jupyter[client]>=0.6.2 ; extra == 'test' - - pytest-timeout ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl - name: jupyter-core - version: 5.9.1 - sha256: ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407 - requires_dist: - - platformdirs>=2.5 - - traitlets>=5.3 - - intersphinx-registry ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - traitlets ; extra == 'docs' - - ipykernel ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest<9 ; extra == 'test' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl - name: jupyter-events - version: 0.12.0 - sha256: 6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb - requires_dist: - - jsonschema[format-nongpl]>=4.18.0 - - packaging - - python-json-logger>=2.0.4 - - pyyaml>=5.3 - - referencing +- conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.14.0-pyhd8ed1ab_0.conda + sha256: 9daa95bd164c8fa23b3ab196e906ef806141d749eddce2a08baa064f722d25fa + md5: 1269891272187518a0a75c286f7d0bbf + depends: + - python >=3.10 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/json5?source=compressed-mapping + size: 34731 + timestamp: 1774655440045 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda + sha256: a3d10301b6ff399ba1f3d39e443664804a3d28315a4fb81e745b6817845f70ae + md5: 89bf346df77603055d3c8fe5811691e6 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping + size: 14190 + timestamp: 1774311356147 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 + md5: ada41c863af263cc4c5fcbaff7c3e4dc + depends: + - attrs >=22.2.0 + - jsonschema-specifications >=2023.3.6 + - python >=3.10 + - referencing >=0.28.4 + - rpds-py >=0.25.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jsonschema?source=hash-mapping + size: 82356 + timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 + md5: 439cd0f567d697b20a8f45cb70a1005a + depends: + - python >=3.10 + - referencing >=0.31.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jsonschema-specifications?source=hash-mapping + size: 19236 + timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda + sha256: 6886fc61e4e4edd38fd38729976b134e8bd2143f7fce56cc80d7ac7bac99bce1 + md5: 8368d58342d0825f0843dc6acdd0c483 + depends: + - jsonschema >=4.26.0,<4.26.1.0a0 + - fqdn + - idna + - isoduration + - jsonpointer >1.13 - rfc3339-validator - - rfc3986-validator>=0.1.1 - - traitlets>=5.3 - - click ; extra == 'cli' - - rich ; extra == 'cli' - - jupyterlite-sphinx ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme>=0.16 ; extra == 'docs' - - sphinx>=8 ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - click ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-asyncio>=0.19.0 ; extra == 'test' - - pytest-console-scripts ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - - rich ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl - name: jupyter-lsp - version: 2.3.1 - sha256: 71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81 - requires_dist: - - jupyter-server>=1.1.2 - - importlib-metadata>=4.8.3 ; python_full_version < '3.10' - requires_python: '>=3.8' + - rfc3986-validator >0.1.0 + - rfc3987-syntax >=1.1.0 + - uri-template + - webcolors >=24.6.0 + license: MIT + license_family: MIT + purls: [] + size: 4740 + timestamp: 1767839954258 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda + sha256: 3766e2ae59641c172cec8a821528bfa6bf9543ffaaeb8b358bfd5259dcf18e4e + md5: 0c3b465ceee138b9c39279cc02e5c4a0 + depends: + - importlib-metadata >=4.8.3 + - jupyter_server >=1.1.2 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-lsp?source=compressed-mapping + size: 61633 + timestamp: 1775136333147 - pypi: https://files.pythonhosted.org/packages/f4/a4/61adb19f3c74b0dc0e411de4f06ebef564b1f179928f9dffcbd4b378f2ef/jupyter_notebook_parser-0.1.4-py2.py3-none-any.whl name: jupyter-notebook-parser version: 0.1.4 sha256: 27b3b67cf898684e646d569f017cb27046774ad23866cb0bdf51d5f76a46476b requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl - name: jupyter-server - version: 2.17.0 - sha256: e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f - requires_dist: - - anyio>=3.1.0 - - argon2-cffi>=21.1 - - jinja2>=3.0.3 - - jupyter-client>=7.4.4 - - jupyter-core>=4.12,!=5.0.* - - jupyter-events>=0.11.0 - - jupyter-server-terminals>=0.4.4 - - nbconvert>=6.4.4 - - nbformat>=5.3.0 - - overrides>=5.0 ; python_full_version < '3.12' - - packaging>=22.0 - - prometheus-client>=0.9 - - pywinpty>=2.0.1 ; os_name == 'nt' - - pyzmq>=24 - - send2trash>=1.8.2 - - terminado>=0.8.3 - - tornado>=6.2.0 - - traitlets>=5.6.0 - - websocket-client>=1.7 - - ipykernel ; extra == 'docs' - - jinja2 ; extra == 'docs' - - jupyter-client ; extra == 'docs' - - myst-parser ; extra == 'docs' - - nbformat ; extra == 'docs' - - prometheus-client ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - send2trash ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-openapi>=0.8.0 ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - sphinxemoji ; extra == 'docs' - - tornado ; extra == 'docs' - - typing-extensions ; extra == 'docs' - - flaky ; extra == 'test' - - ipykernel ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-console-scripts ; extra == 'test' - - pytest-jupyter[server]>=0.7 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0,<9 ; extra == 'test' - - requests ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl - name: jupyter-server-terminals - version: 0.5.4 - sha256: 55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14 - requires_dist: - - pywinpty>=2.0.3 ; os_name == 'nt' - - terminado>=0.8.3 - - jinja2 ; extra == 'docs' - - jupyter-server ; extra == 'docs' - - mistune<4.0 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - nbformat ; extra == 'docs' - - packaging ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-openapi ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - sphinxemoji ; extra == 'docs' - - tornado ; extra == 'docs' - - jupyter-server>=2.0.0 ; extra == 'test' - - pytest-jupyter[server]>=0.5.3 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e1/1b/dad6fdcc658ed7af26fdf3841e7394072c9549a8b896c381ab49dd11e2d9/jupyterlab-4.5.6-py3-none-any.whl - name: jupyterlab - version: 4.5.6 - sha256: d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580 - requires_dist: - - async-lru>=1.0.0 - - httpx>=0.25.0,<1 - - importlib-metadata>=4.8.3 ; python_full_version < '3.10' - - ipykernel>=6.5.0,!=6.30.0 - - jinja2>=3.0.3 - - jupyter-core - - jupyter-lsp>=2.0.0 - - jupyter-server>=2.4.0,<3 - - jupyterlab-server>=2.28.0,<3 - - notebook-shim>=0.2 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + sha256: e402bd119720862a33229624ec23645916a7d47f30e1711a4af9e005162b84f3 + md5: 8a3d6d0523f66cf004e563a50d9392b3 + depends: + - jupyter_core >=5.1 + - python >=3.10 + - python-dateutil >=2.8.2 + - pyzmq >=25.0 + - tornado >=6.4.1 + - traitlets >=5.3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=hash-mapping + size: 112785 + timestamp: 1767954655912 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + sha256: ed709a6c25b731e01563521ef338b93986cd14b5bc17f35e9382000864872ccc + md5: a8db462b01221e9f5135be466faeb3e0 + depends: + - __win + - pywin32 + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 64679 + timestamp: 1760643889625 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a + md5: b38fe4e78ee75def7e599843ef4c1ab0 + depends: + - __unix + - python + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 65503 + timestamp: 1760643864586 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyhe01879c_0.conda + sha256: e9964aaaf6d24a685cd5ce9d75731b643ed7f010fb979574a6580cd2f974c6cd + md5: 31e11c30bbee1682a55627f953c6725a + depends: + - jsonschema-with-format-nongpl >=4.18.0 + - packaging + - python >=3.9 + - python-json-logger >=2.0.4 + - pyyaml >=5.3 + - referencing + - rfc3339-validator + - rfc3986-validator >=0.1.1 + - traitlets >=5.3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-events?source=hash-mapping + size: 24306 + timestamp: 1770937604863 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda + sha256: 74c4e642be97c538dae1895f7052599dfd740d8bd251f727bce6453ce8d6cd9a + md5: d79a87dcfa726bcea8e61275feed6f83 + depends: + - anyio >=3.1.0 + - argon2-cffi >=21.1 + - jinja2 >=3.0.3 + - jupyter_client >=7.4.4 + - jupyter_core >=4.12,!=5.0.* + - jupyter_events >=0.11.0 + - jupyter_server_terminals >=0.4.4 + - nbconvert-core >=6.4.4 + - nbformat >=5.3.0 + - overrides >=5.0 + - packaging >=22.0 + - prometheus_client >=0.9 + - python >=3.10 + - pyzmq >=24 + - send2trash >=1.8.2 + - terminado >=0.8.3 + - tornado >=6.2.0 + - traitlets >=5.6.0 + - websocket-client >=1.7 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-server?source=hash-mapping + size: 347094 + timestamp: 1755870522134 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda + sha256: 5eda79ed9f53f590031d29346abd183051263227dd9ee667b5ca1133ce297654 + md5: 7b8bace4943e0dc345fc45938826f2b8 + depends: + - python >=3.10 + - terminado >=0.8.3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-server-terminals?source=hash-mapping + size: 22052 + timestamp: 1768574057200 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.5.6-pyhd8ed1ab_0.conda + sha256: 436a70259a9b4e13ce8b15faa8b37342835954d77a0a74d21dd24547e0871088 + md5: bcbb401d6fa84e0cee34d4926b0e9e93 + depends: + - async-lru >=1.0.0 + - httpx >=0.25.0,<1 + - ipykernel >=6.5.0,!=6.30.0 + - jinja2 >=3.0.3 + - jupyter-lsp >=2.0.0 + - jupyter_core + - jupyter_server >=2.4.0,<3 + - jupyterlab_server >=2.28.0,<3 + - notebook-shim >=0.2 - packaging - - setuptools>=41.1.0 - - tomli>=1.2.2 ; python_full_version < '3.11' - - tornado>=6.2.0 + - python >=3.10 + - setuptools >=41.1.0 + - tomli >=1.2.2 + - tornado >=6.2.0 - traitlets - - build ; extra == 'dev' - - bump2version ; extra == 'dev' - - coverage ; extra == 'dev' - - hatch ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - ruff==0.11.12 ; extra == 'dev' - - jsx-lexer ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme>=0.13.0 ; extra == 'docs' - - pytest ; extra == 'docs' - - pytest-check-links ; extra == 'docs' - - pytest-jupyter ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx>=1.8,<8.2.0 ; extra == 'docs' - - altair==6.0.0 ; extra == 'docs-screenshots' - - ipython==8.16.1 ; extra == 'docs-screenshots' - - ipywidgets==8.1.5 ; extra == 'docs-screenshots' - - jupyterlab-geojson==3.4.0 ; extra == 'docs-screenshots' - - jupyterlab-language-pack-zh-cn==4.3.post1 ; extra == 'docs-screenshots' - - matplotlib==3.10.0 ; extra == 'docs-screenshots' - - nbconvert>=7.0.0 ; extra == 'docs-screenshots' - - pandas==2.2.3 ; extra == 'docs-screenshots' - - scipy==1.15.1 ; extra == 'docs-screenshots' - - coverage ; extra == 'test' - - pytest-check-links>=0.7 ; extra == 'test' - - pytest-console-scripts ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-jupyter>=0.5.3 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-tornasync ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - - requests ; extra == 'test' - - requests-cache ; extra == 'test' - - virtualenv ; extra == 'test' - - copier>=9,<10 ; extra == 'upgrade-extension' - - jinja2-time<0.3 ; extra == 'upgrade-extension' - - pydantic<3.0 ; extra == 'upgrade-extension' - - pyyaml-include<3.0 ; extra == 'upgrade-extension' - - tomli-w<2.0 ; extra == 'upgrade-extension' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl - name: jupyterlab-pygments - version: 0.3.0 - sha256: 841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl - name: jupyterlab-server - version: 2.28.0 - sha256: e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968 - requires_dist: - - babel>=2.10 - - importlib-metadata>=4.8.3 ; python_full_version < '3.10' - - jinja2>=3.0.3 - - json5>=0.9.0 - - jsonschema>=4.18.0 - - jupyter-server>=1.21,<3 - - packaging>=21.3 - - requests>=2.31 - - autodoc-traits ; extra == 'docs' - - jinja2<3.2.0 ; extra == 'docs' - - mistune<4 ; extra == 'docs' - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinxcontrib-openapi>0.8 ; extra == 'docs' - - openapi-core~=0.18.0 ; extra == 'openapi' - - ruamel-yaml ; extra == 'openapi' - - hatch ; extra == 'test' - - ipykernel ; extra == 'test' - - openapi-core~=0.18.0 ; extra == 'test' - - openapi-spec-validator>=0.6.0,<0.8.0 ; extra == 'test' - - pytest-console-scripts ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-jupyter[server]>=0.6.2 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0,<8 ; extra == 'test' - - requests-mock ; extra == 'test' - - ruamel-yaml ; extra == 'test' - - sphinxcontrib-spelling ; extra == 'test' - - strict-rfc3339 ; extra == 'test' - - werkzeug ; extra == 'test' - requires_python: '>=3.8' + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab?source=hash-mapping + size: 8245973 + timestamp: 1773240966438 - pypi: https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl name: jupyterlab-widgets version: 3.0.16 sha256: 45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8 requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda + sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0 + md5: fd312693df06da3578383232528c468d + depends: + - pygments >=2.4.1,<3 + - python >=3.9 + constrains: + - jupyterlab >=4.0.8,<5.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-pygments?source=hash-mapping + size: 18711 + timestamp: 1733328194037 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda + sha256: 381d2d6a259a3be5f38a69463e0f6c5dcf1844ae113058007b51c3bef13a7cee + md5: a63877cb23de826b1620d3adfccc4014 + depends: + - babel >=2.10 + - jinja2 >=3.0.3 + - json5 >=0.9.0 + - jsonschema >=4.18 + - jupyter_server >=1.21,<3 + - packaging >=21.3 + - python >=3.10 + - requests >=2.31 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-server?source=hash-mapping + size: 51621 + timestamp: 1761145478692 - pypi: https://files.pythonhosted.org/packages/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl name: jupyterquiz version: 2.9.6.4 @@ -5399,56 +5089,100 @@ packages: - pytest-xdist ; extra == 'test-integration' - bash-kernel ; extra == 'test-ui' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl - name: kiwisolver - version: 1.5.0 - sha256: 0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl - name: kiwisolver - version: 1.5.0 - sha256: 3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl name: kiwisolver version: 1.5.0 - sha256: 2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27 + sha256: 0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl name: kiwisolver version: 1.5.0 sha256: ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl name: kiwisolver version: 1.5.0 - sha256: f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384 + sha256: d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl name: kiwisolver version: 1.5.0 - sha256: beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b + sha256: f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: kiwisolver version: 1.5.0 - sha256: 72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588 + sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: kiwisolver version: 1.5.0 - sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f + sha256: 80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl - name: lark - version: 1.3.1 - sha256: c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12 - requires_dist: - - regex ; extra == 'regex' - - js2py ; extra == 'nearley' - - atomicwrites ; extra == 'atomic-cache' - - interegular>=0.3.1,<0.4.0 ; extra == 'interegular' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + sha256: eb60f1ad8b597bcf95dee11bc11fe71a8325bc1204cf51d2bb1f2120ffd77761 + md5: 4432f52dc0c8eb6a7a6abc00a037d93c + depends: + - openssl >=3.5.5,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 751055 + timestamp: 1769769688841 +- conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda + sha256: 49570840fb15f5df5d4b4464db8ee43a6d643031a2bc70ef52120a52e3809699 + md5: 9b965c999135d43a3d0f7bd7d024e26a + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/lark?source=compressed-mapping + size: 94312 + timestamp: 1761596921009 - pypi: https://files.pythonhosted.org/packages/8a/a1/8d812e53a5da1687abb10445275d41a8b13adb781bbf7196ddbcf8d88505/lazy_loader-0.5-py3-none-any.whl name: lazy-loader version: '0.5' @@ -5490,20 +5224,6 @@ packages: purls: [] size: 1384817 timestamp: 1770863194876 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20260107.1-cxx17_h7ed6875_0.conda - sha256: 2b4ff36082ddfbacc47ac6e11d4dd9f3403cd109ce8d7f0fbee0cdd47cdef013 - md5: 317f40d7bd7bf6d54b56d4a5b5f5085d - depends: - - __osx >=10.13 - - libcxx >=19 - constrains: - - libabseil-static =20260107.1=cxx17* - - abseil-cpp =20260107.1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1217836 - timestamp: 1770863510112 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda sha256: 756611fbb8d2957a5b4635d9772bd8432cb6ddac05580a6284cca6fdc9b07fca md5: bb65152e0d7c7178c0f1ee25692c9fd1 @@ -5529,16 +5249,6 @@ packages: purls: [] size: 79965 timestamp: 1764017188531 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda - sha256: 4c19b211b3095f541426d5a9abac63e96a5045e509b3d11d4f9482de53efe43b - md5: f157c098841474579569c85a60ece586 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 78854 - timestamp: 1764017554982 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 md5: 006e7ddd8a110771134fcc4e1e3a6ffa @@ -5561,17 +5271,6 @@ packages: purls: [] size: 34632 timestamp: 1764017199083 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda - sha256: 729158be90ae655a4e0427fe4079767734af1f9b69ff58cf94ca6e8d4b3eb4b7 - md5: 63186ac7a8a24b3528b4b14f21c03f54 - depends: - - __osx >=10.13 - - libbrotlicommon 1.2.0 h8616949_1 - license: MIT - license_family: MIT - purls: [] - size: 30835 - timestamp: 1764017584474 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf md5: 079e88933963f3f149054eec2c487bc2 @@ -5595,17 +5294,6 @@ packages: purls: [] size: 298378 timestamp: 1764017210931 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda - sha256: 8ece7b41b6548d6601ac2c2cd605cf2261268fc4443227cc284477ed23fbd401 - md5: 12a58fd3fc285ce20cf20edf21a0ff8f - depends: - - __osx >=10.13 - - libbrotlicommon 1.2.0 h8616949_1 - license: MIT - license_family: MIT - purls: [] - size: 310355 - timestamp: 1764017609985 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 @@ -5617,16 +5305,6 @@ packages: purls: [] size: 290754 timestamp: 1764018009077 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.3-h19cb2f5_0.conda - sha256: 24d7e7d15d144f2f74fbc9f397a643f0a1da94dbe9aa9f0d15990fabe34974c9 - md5: 212ddd7bd52988f751905114325b5c0b - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 564947 - timestamp: 1775564350407 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.3-h55c6f16_0.conda sha256: 34cc56c627b01928e49731bcfe92338e440ab6b5952feee8f1dd16570b8b8339 md5: acbb3f547c4aae16b19e417db0c6e5ed @@ -5637,6 +5315,31 @@ packages: purls: [] size: 570026 timestamp: 1775565121045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 md5: 172bf1cd1ff8629f2b1179945ed45055 @@ -5647,14 +5350,6 @@ packages: purls: [] size: 112766 timestamp: 1702146165126 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 - md5: 899db79329439820b7e8f8de41bca902 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 106663 - timestamp: 1702146352558 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f md5: 36d33e440c31857372a72137f78bacf5 @@ -5667,27 +5362,15 @@ packages: sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c md5: 49f570f3bc4c874a06ea69b7225753af depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - expat 2.7.5.* - license: MIT - license_family: MIT - purls: [] - size: 76624 - timestamp: 1774719175983 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.5-hcc62823_0.conda - sha256: 341d8a457a8342c396a8ac788da2639cbc8b62568f6ba2a3d322d1ace5aa9e16 - md5: 1d6e71b8c73711e28ffe207acdc4e2f8 - depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 constrains: - expat 2.7.5.* license: MIT license_family: MIT purls: [] - size: 74797 - timestamp: 1774719557730 + size: 76624 + timestamp: 1774719175983 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda sha256: 06780dec91dd25770c8cf01e158e1062fbf7c576b1406427475ce69a8af75b7e md5: a32123f93e168eaa4080d87b0fb5da8a @@ -5725,16 +5408,6 @@ packages: purls: [] size: 58592 timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6 - md5: 66a0dc7464927d0853b590b6f53ba3ea - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 53583 - timestamp: 1769456300951 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 md5: 43c04d9cb46ef176bb2a4c77e324d599 @@ -5803,17 +5476,6 @@ packages: purls: [] size: 113207 timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - sha256: 7ab3c98abd3b5d5ec72faa8d9f5d4b50dcee4970ed05339bc381861199dabb41 - md5: 688a0c3d57fa118b9c97bf7e471ab46c - depends: - - __osx >=10.13 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 105482 - timestamp: 1768753411348 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e md5: 009f0d956d7bfb00de86901d16e486c7 @@ -5838,6 +5500,39 @@ packages: purls: [] size: 106169 timestamp: 1768752763559 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 + md5: 2c21e66f50753a083cbe6b80f38268fa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 92400 + timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 + md5: 57c4be259f5e0b99a5983799a228ae55 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514 + md5: e4a9fc2bba3b022dad998c78856afe47 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 89411 + timestamp: 1769482314283 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f md5: 2a45e7f8af083626f009645a6481f12d @@ -5855,22 +5550,6 @@ packages: purls: [] size: 663344 timestamp: 1773854035739 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - sha256: 899551e16aac9dfb85bfc2fd98b655f4d1b7fea45720ec04ccb93d95b4d24798 - md5: dba4c95e2fe24adcae4b77ebf33559ae - depends: - - __osx >=11.0 - - c-ares >=1.34.6,<2.0a0 - - libcxx >=19 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 606749 - timestamp: 1773854765508 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a md5: 6ea18834adbc3b33df9bd9fb45eaf95b @@ -5898,6 +5577,36 @@ packages: purls: [] size: 33731 timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + sha256: 64e5c80cbce4680a2d25179949739a6def695d72c40ca28f010711764e372d97 + md5: 7af961ef4aa2c1136e11dd43ded245ab + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: ISC + purls: [] + size: 277661 + timestamp: 1772479381288 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + sha256: df603472ea1ebd8e7d4fb71e4360fe48d10b11c240df51c129de1da2ff9e8227 + md5: 7cc5247987e6d115134ebab15186bc13 + depends: + - __osx >=11.0 + license: ISC + purls: [] + size: 248039 + timestamp: 1772479570912 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda + sha256: d915f4fa8ebbf237c7a6e511ed458f2cfdc7c76843a924740318a15d0dd33d6d + md5: da2aa614d16a795b3007b6f4a1318a81 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: ISC + purls: [] + size: 276860 + timestamp: 1772479407566 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 md5: fd893f6a3002a635b5e50ceb9dd2c0f4 @@ -5922,26 +5631,6 @@ packages: purls: [] size: 958864 timestamp: 1775753750179 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.52.0-h77d7759_0.conda - sha256: f500d1cd50cfcd288d02b8fc3c3b7ecf8de6fec7b86e57ea058def02908e4231 - md5: d553eb96758e038b04027b30fe314b2d - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 996526 - timestamp: 1772819669038 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.0-h77d7759_0.conda - sha256: 0dd0e92a2dc2c9978b7088c097fb078caefdd44fb8e24e3327d16c6a120378f7 - md5: 19915aab82b4593237be8ef977aad29e - depends: - - __osx >=11.0 - - libzlib >=1.3.2,<2.0a0 - license: blessing - purls: [] - size: 1002564 - timestamp: 1775754043809 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c md5: f6233a3fddc35a2ec9f617f79d6f3d71 @@ -5953,17 +5642,16 @@ packages: purls: [] size: 918420 timestamp: 1772819478684 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1ae2325_0.conda - sha256: 10250e2aecd8dfb85c25f88353cee187946a80dd99ab5c65a8489aa977e19195 - md5: 3dc0c1fda95969dbc972eb809a47613d +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + sha256: 1a9d1e3e18dbb0b87cff3b40c3e42703730d7ac7ee9b9322c2682196a81ba0c3 + md5: 8423c008105df35485e184066cad4566 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 923915 - timestamp: 1775754375054 + size: 920039 + timestamp: 1775754485962 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 md5: 8830689d537fda55f990620680934bb1 @@ -6021,16 +5709,6 @@ packages: purls: [] size: 895108 timestamp: 1753948278280 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - sha256: d90dd0eee6f195a5bd14edab4c5b33be3635b674b0b6c010fb942b956aa2254c - md5: fbfc6cf607ae1e1e498734e256561dc3 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 422612 - timestamp: 1753948458902 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 md5: c0d87c3c8e075daf1daf6c31b53e8083 @@ -6062,18 +5740,6 @@ packages: purls: [] size: 63629 timestamp: 1774072609062 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - sha256: 4c6da089952b2d70150c74234679d6f7ac04f4a98f9432dec724968f912691e7 - md5: 30439ff30578e504ee5e0b390afc8c65 - depends: - - __osx >=11.0 - constrains: - - zlib 1.3.2 *_2 - license: Zlib - license_family: Other - purls: [] - size: 59000 - timestamp: 1774073052242 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 md5: bc5a5721b6439f2f62a84f2548136082 @@ -6192,46 +5858,104 @@ packages: - pytest-regressions ; extra == 'testing' - requests ; extra == 'testing' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl - name: markupsafe - version: 3.0.3 - sha256: de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl - name: markupsafe - version: 3.0.3 - sha256: 1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl - name: markupsafe - version: 3.0.3 - sha256: 26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl - name: markupsafe - version: 3.0.3 - sha256: 4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 + md5: 93a4752d42b12943a355b682ee43285b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 26057 + timestamp: 1772445297924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf + md5: 9a17c4307d23318476d7fbf0fedc0cde + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 27424 + timestamp: 1772445227915 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda + sha256: 330394fb9140995b29ae215a19fad46fcc6691bdd1b7654513d55a19aaa091c1 + md5: 11d95ab83ef0a82cc2de12c1e0b47fe4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25564 + timestamp: 1772445846939 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda + sha256: 411153d14ee0d98be6e3751cf5cc0502db17bce2deebebb8779e33d29d0e525f + md5: d33c0a15882b70255abdd54711b06a45 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=compressed-mapping + size: 27256 + timestamp: 1772445397216 +- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_1.conda + sha256: b744287a780211ac4595126ef96a44309c791f155d4724021ef99092bae4aace + md5: a73298d225c7852f97403ca105d10a13 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=compressed-mapping + size: 28510 + timestamp: 1772445175216 +- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + sha256: 02805a0f3cd168dbf13afc5e4aed75cc00fe538ce143527a6471485b36f5887c + md5: 8de7b40f8b30a8fcaa423c2537fe4199 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 30022 + timestamp: 1772445159549 - pypi: https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl name: matplotlib version: 3.10.8 @@ -6270,10 +5994,10 @@ packages: - setuptools-scm>=7 ; extra == 'dev' - setuptools>=64 ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl name: matplotlib version: 3.10.8 - sha256: 18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9 + sha256: 32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b requires_dist: - contourpy>=1.0.1 - cycler>=0.10 @@ -6308,48 +6032,10 @@ packages: - setuptools-scm>=7 ; extra == 'dev' - setuptools>=64 ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8f/a0/7024215e95d456de5883e6732e708d8187d9753a21d32f8ddb3befc0c445/matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: matplotlib - version: 3.10.8 - sha256: efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.23 - - packaging>=20.0 - - pillow>=8 - - pyparsing>=3 - - python-dateutil>=2.7 - - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' - - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' - - setuptools-scm>=7 ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9e/67/f997cdcbb514012eb0d10cd2b4b332667997fb5ebe26b8d41d04962fa0e6/matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl - name: matplotlib - version: 3.10.8 - sha256: 64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.23 - - packaging>=20.0 - - pillow>=8 - - pyparsing>=3 - - python-dateutil>=2.7 - - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' - - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' - - setuptools-scm>=7 ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f8/86/de7e3a1cdcfc941483af70609edc06b83e7c8a0e0dc9ac325200a3f4d220/matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl name: matplotlib version: 3.10.8 - sha256: 6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160 + sha256: 83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11 requires_dist: - contourpy>=1.0.1 - cycler>=0.10 @@ -6365,10 +6051,10 @@ packages: - setuptools-scm>=7 ; extra == 'dev' - setuptools>=64 ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: matplotlib version: 3.10.8 - sha256: a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78 + sha256: 2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008 requires_dist: - contourpy>=1.0.1 - cycler>=0.10 @@ -6384,18 +6070,18 @@ packages: - setuptools-scm>=7 ; extra == 'dev' - setuptools>=64 ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl - name: matplotlib-inline - version: 0.2.1 - sha256: d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76 - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 + md5: 00e120ce3e40bad7bfc78861ce3c4a25 + depends: + - python >=3.10 - traitlets - - flake8 ; extra == 'test' - - nbdime ; extra == 'test' - - nbval ; extra == 'test' - - notebook ; extra == 'test' - - pytest ; extra == 'test' - requires_python: '>=3.9' + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + size: 15175 + timestamp: 1761214578417 - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl name: mdit-py-plugins version: 0.5.0 @@ -6441,13 +6127,19 @@ packages: - flake8-quotes ; extra == 'test' - flake8>=3.0 ; extra == 'test' - shtab ; extra == 'test' -- pypi: https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl - name: mistune - version: 3.2.0 - sha256: febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1 - requires_dist: - - typing-extensions ; python_full_version < '3.11' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda + sha256: d3fb4beb5e0a52b6cc33852c558e077e1bfe44df1159eb98332d69a264b14bae + md5: b11e360fc4de2b0035fc8aaa74f17fd6 + depends: + - python >=3.10 + - typing_extensions + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mistune?source=hash-mapping + size: 74250 + timestamp: 1766504456031 - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl name: mkdocs version: 1.6.1 @@ -6604,15 +6296,15 @@ packages: - sphinx ; extra == 'docs' - gmpy2>=2.1.0a4 ; platform_python_implementation != 'PyPy' and extra == 'gmpy' - pytest>=4.6 ; extra == 'tests' -- pypi: https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl name: msgpack version: 1.1.2 - sha256: d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68 + sha256: 6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/2c/97/560d11202bcd537abca693fd85d81cebe2107ba17301de42b01ac1677b69/msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: msgpack version: 1.1.2 - sha256: 2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c + sha256: 180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931 requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl name: msgpack @@ -6624,105 +6316,102 @@ packages: version: 1.1.2 sha256: 372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl name: msgpack version: 1.1.2 - sha256: 283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0 + sha256: 9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl name: msgpack version: 1.1.2 sha256: 1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl - name: msgpack - version: 1.1.2 - sha256: 70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/da/e0/6cc2e852837cd6086fe7d8406af4294e66827a60a4cf60b86575a4a65ca8/msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgpack - version: 1.1.2 - sha256: 454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - name: msgspec - version: 0.20.0 - sha256: fb1d934e435dd3a2b8cf4bbf47a8757100b4a1cfdc2afdf227541199885cdacb - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 509ac1362a1d53aa66798c9b9fd76872d7faa30fcf89b2fba3bcbfd559d56eb0 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - name: msgspec - version: 0.20.0 - sha256: 716284f898ab2547fedd72a93bb940375de9fbfe77538f05779632dc34afdfde - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 2aba22e2e302e9231e85edc24f27ba1f524d43c223ef5765bd8624c7df9ec0a5 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/68/da/fda01c754dc85aed67ac0b7d3b213ab50b5b39f15f5eb072b2baf0edb689/msgspec-0.21.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: msgspec - version: 0.21.0 - sha256: f2a80db664c75f336cff5e17df7861c23fa47bec6f96c2c3f94be773cc675821 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b2/34/a66dea16444967e3fc0991aff57ef473e2214e5bbdbe3c2b3139d2ccec7b/msgspec-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl - name: msgspec - version: 0.21.0 - sha256: 0634e676eb334fde291310f1d0f23bf48332977c2d0ebdaf98dfcd9437091782 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bc/16/418ba970f74707e2590954f7fda0b44c1d2242d3835aecf914f1dd3080e6/msgspec-0.21.0-cp311-cp311-macosx_11_0_arm64.whl - name: msgspec - version: 0.21.0 - sha256: 47220291d6cbc7980098d0e7593e77d86158ff08b9e61d64b2559928e5457828 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ee/06/924ab2c12b55b479e41039345e988bf935aabea92fbe90b7faf93166740c/msgspec-0.21.0-cp311-cp311-win_amd64.whl - name: msgspec - version: 0.21.0 - sha256: 03c472124cbbbcfbf0d2f429f62a8fb2d12b6633448a884dd1a875ab32aa59b4 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: multidict - version: 6.7.1 - sha256: 439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144 - requires_dist: - - typing-extensions>=4.1.0 ; python_full_version < '3.11' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.0-py312h4c3975b_0.conda + sha256: d651bb4b32f54480f4d161a0051da65db57855e0698ae60b5537c53660f6e46c + md5: d2c0302fd76aa32563ed6d5fb3fa6677 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=compressed-mapping + size: 218811 + timestamp: 1775696215247 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.0-py314h5bd0f2a_0.conda + sha256: ac0883f927d25037bfbea24051216ece1e033b782c84492982d797f85fe741c6 + md5: da5026fdb331d3620516df6d0deeaf22 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=hash-mapping + size: 219481 + timestamp: 1775696242910 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py312h2bbb03f_0.conda + sha256: 104ff84417d7becfac3a8368126ef17ee928fc013f903f0c448fca4be52b9845 + md5: 4e534755318fd2da7d4cdbfbac569bb4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=compressed-mapping + size: 212340 + timestamp: 1775697034631 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py314h6c2aa35_0.conda + sha256: 3957e5eec5815cf81e8166e55f442305843c9cfd65dd2b422f3d612514928e71 + md5: 971a763ade1f152bab9dee1ab004b019 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=hash-mapping + size: 215942 + timestamp: 1775697332597 +- conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.0-py312he06e257_0.conda + sha256: f05694bcfead5fd12a7a9418fcb83eb981e28e59f60837901c665dcbde6e736a + md5: e31166527a61528c710df095d202997f + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=compressed-mapping + size: 199507 + timestamp: 1775696599867 +- conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.0-py314h5a2d7ad_0.conda + sha256: 15482fa258347f1cefc99f6bd5ce151062214873bc2329f60928b36092498632 + md5: df988e54419bb4d8db78bf2fbba836c8 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/msgspec?source=hash-mapping + size: 202257 + timestamp: 1775696433908 - pypi: https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl name: multidict version: 6.7.1 @@ -6730,13 +6419,6 @@ packages: requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl - name: multidict - version: 6.7.1 - sha256: 844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e - requires_dist: - - typing-extensions>=4.1.0 ; python_full_version < '3.11' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl name: multidict version: 6.7.1 @@ -6744,17 +6426,17 @@ packages: requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl name: multidict version: 6.7.1 - sha256: bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b + sha256: 5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl name: multidict version: 6.7.1 - sha256: f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855 + sha256: 0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1 requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' @@ -6765,10 +6447,10 @@ packages: requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: multidict version: 6.7.1 - sha256: 3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd + sha256: 7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709 requires_dist: - typing-extensions>=4.1.0 ; python_full_version < '3.11' requires_python: '>=3.9' @@ -6790,118 +6472,70 @@ packages: - pyarrow>=13.0.0 ; extra == 'pyarrow' - pyspark>=3.5.0 ; extra == 'pyspark' - pyspark[connect]>=3.5.0 ; extra == 'pyspark-connect' - - duckdb>=1.1 ; extra == 'sql' - - sqlparse ; extra == 'sql' - - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl - name: nbclient - version: 0.10.4 - sha256: 9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440 - requires_dist: - - jupyter-client>=6.1.12 - - jupyter-core>=4.12,!=5.0.* - - nbformat>=5.1.3 - - traitlets>=5.4 - - pre-commit ; extra == 'dev' - - autodoc-traits ; extra == 'docs' - - flaky ; extra == 'docs' - - ipykernel>=6.19.3 ; extra == 'docs' - - ipython ; extra == 'docs' - - ipywidgets ; extra == 'docs' - - mock ; extra == 'docs' - - moto ; extra == 'docs' - - myst-parser ; extra == 'docs' - - nbconvert>=7.1.0 ; extra == 'docs' - - pytest-asyncio>=1.3.0 ; extra == 'docs' - - pytest-cov>=4.0 ; extra == 'docs' - - pytest>=9.0.1,<10 ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx>=1.7 ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - testpath ; extra == 'docs' - - xmltodict ; extra == 'docs' - - flaky ; extra == 'test' - - ipykernel>=6.19.3 ; extra == 'test' - - ipython ; extra == 'test' - - ipywidgets ; extra == 'test' - - nbconvert>=7.1.0 ; extra == 'test' - - pytest-asyncio>=1.3.0 ; extra == 'test' - - pytest-cov>=4.0 ; extra == 'test' - - pytest>=9.0.1,<10 ; extra == 'test' - - testpath ; extra == 'test' - - xmltodict ; extra == 'test' - requires_python: '>=3.10.0' -- pypi: https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl - name: nbconvert - version: 7.17.1 - sha256: aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8 - requires_dist: - - beautifulsoup4 - - bleach[css]!=5.0.0 - - defusedxml - - importlib-metadata>=3.6 ; python_full_version < '3.10' - - jinja2>=3.0 - - jupyter-core>=4.7 - - jupyterlab-pygments - - markupsafe>=2.0 - - mistune>=2.0.3,<4 - - nbclient>=0.5.0 - - nbformat>=5.7 - - packaging - - pandocfilters>=1.4.1 - - pygments>=2.4.1 - - traitlets>=5.1 - - flaky ; extra == 'all' - - intersphinx-registry ; extra == 'all' - - ipykernel ; extra == 'all' - - ipython ; extra == 'all' - - ipywidgets>=7.5 ; extra == 'all' - - myst-parser ; extra == 'all' - - nbsphinx>=0.2.12 ; extra == 'all' - - playwright ; extra == 'all' - - pydata-sphinx-theme ; extra == 'all' - - pyqtwebengine>=5.15 ; extra == 'all' - - pytest>=7 ; extra == 'all' - - sphinx>=5.0.2 ; extra == 'all' - - sphinxcontrib-spelling ; extra == 'all' - - tornado>=6.1 ; extra == 'all' - - intersphinx-registry ; extra == 'docs' - - ipykernel ; extra == 'docs' - - ipython ; extra == 'docs' - - myst-parser ; extra == 'docs' - - nbsphinx>=0.2.12 ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx>=5.0.2 ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - pyqtwebengine>=5.15 ; extra == 'qtpdf' - - pyqtwebengine>=5.15 ; extra == 'qtpng' - - tornado>=6.1 ; extra == 'serve' - - flaky ; extra == 'test' - - ipykernel ; extra == 'test' - - ipywidgets>=7.5 ; extra == 'test' - - pytest>=7 ; extra == 'test' - - playwright ; extra == 'webpdf' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl - name: nbformat - version: 5.10.4 - sha256: 3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b - requires_dist: - - fastjsonschema>=2.15 - - jsonschema>=2.6 - - jupyter-core>=4.12,!=5.0.* - - traitlets>=5.1 - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinxcontrib-github-alt ; extra == 'docs' - - sphinxcontrib-spelling ; extra == 'docs' - - pep440 ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest ; extra == 'test' - - testpath ; extra == 'test' - requires_python: '>=3.8' + - duckdb>=1.1 ; extra == 'sql' + - sqlparse ; extra == 'sql' + - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + sha256: 1b66960ee06874ddceeebe375d5f17fb5f393d025a09e15b830ad0c4fffb585b + md5: 00f5b8dafa842e0c27c1cd7296aa4875 + depends: + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - nbformat >=5.1 + - python >=3.8 + - traitlets >=5.4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbclient?source=compressed-mapping + size: 28473 + timestamp: 1766485646962 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda + sha256: ab2ac79c5892c5434d50b3542d96645bdaa06d025b6e03734be29200de248ac2 + md5: 2bce0d047658a91b99441390b9b27045 + depends: + - beautifulsoup4 + - bleach-with-css !=5.0.0 + - defusedxml + - importlib-metadata >=3.6 + - jinja2 >=3.0 + - jupyter_core >=4.7 + - jupyterlab_pygments + - markupsafe >=2.0 + - mistune >=2.0.3,<4 + - nbclient >=0.5.0 + - nbformat >=5.7 + - packaging + - pandocfilters >=1.4.1 + - pygments >=2.4.1 + - python >=3.10 + - traitlets >=5.1 + - python + constrains: + - pandoc >=2.9.2,<4.0.0 + - nbconvert ==7.17.1 *_0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbconvert?source=compressed-mapping + size: 202229 + timestamp: 1775615493260 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 + md5: bbe1963f1e47f594070ffe87cdf612ea + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping + size: 100945 + timestamp: 1733402844974 - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl name: nbmake version: 1.5.5 @@ -6949,15 +6583,6 @@ packages: purls: [] size: 891641 timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9 - md5: ced34dd9929f491ca6dab6a2927aff25 - depends: - - __osx >=10.13 - license: X11 AND BSD-3-Clause - purls: [] - size: 822259 - timestamp: 1738196181298 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 md5: 068d497125e4bf8a66bf707254fff5ae @@ -6967,11 +6592,17 @@ packages: purls: [] size: 797030 timestamp: 1738196177597 -- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - name: nest-asyncio - version: 1.6.0 - sha256: 87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c - requires_python: '>=3.5' +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + md5: 598fd7d4d0de2455fb74f56063969a97 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/nest-asyncio?source=hash-mapping + size: 11543 + timestamp: 1733325673691 - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl name: nodeenv version: 1.10.0 @@ -7002,30 +6633,6 @@ packages: purls: [] size: 18829340 timestamp: 1774514313036 -- conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.8.2-hf3170e9_0.conda - sha256: 6e82ed9c2de2e5a472a9c25f7a4a3a296d33aa38b94151acbbb5a28754962d8d - md5: de36be6257a15d17e85c96b47d290f82 - depends: - - libcxx >=19 - - __osx >=11.0 - - libzlib >=1.3.2,<2.0a0 - - libnghttp2 >=1.68.1,<2.0a0 - - libabseil >=20260107.1,<20260108.0a0 - - libabseil * cxx17* - - icu >=78.3,<79.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libsqlite >=3.52.0,<4.0a0 - - libuv >=1.51.0,<2.0a0 - - c-ares >=1.34.6,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: MIT - license_family: MIT - purls: [] - size: 18382168 - timestamp: 1774517889949 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda sha256: 4782b172b3b8a557b60bf5f591821cf100e2092ba7a5494ce047dfa41626de26 md5: ca8277c52fdface8bb8ebff7cd9a6f56 @@ -7058,56 +6665,47 @@ packages: purls: [] size: 31271315 timestamp: 1774517904472 -- pypi: https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl - name: notebook-shim - version: 0.2.4 - sha256: 411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef - requires_dist: - - jupyter-server>=1.8,<3 - - pytest ; extra == 'test' - - pytest-console-scripts ; extra == 'test' - - pytest-jupyter ; extra == 'test' - - pytest-tornasync ; extra == 'test' - requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda + sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056 + md5: e7f89ea5f7ea9401642758ff50a2d9c1 + depends: + - jupyter_server >=1.8,<3 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/notebook-shim?source=hash-mapping + size: 16817 + timestamp: 1733408419340 - pypi: https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy version: 2.4.4 sha256: 81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl - name: numpy - version: 2.4.4 - sha256: ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40 - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl name: numpy version: 2.4.4 sha256: b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl - name: numpy - version: 2.4.4 - sha256: 86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015 - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl name: numpy version: 2.4.4 - sha256: 8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842 + sha256: 2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy version: 2.4.4 - sha256: 6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e + sha256: 27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl name: numpy version: 2.4.4 - sha256: df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502 + sha256: 8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl name: numpy version: 2.4.4 - sha256: e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8 + sha256: 715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74 requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb @@ -7121,17 +6719,6 @@ packages: purls: [] size: 3167099 timestamp: 1775587756857 -- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - sha256: 334fd49ea31b99114f5afb1ec44555dc8c90640648302a4f8f838ee345d1ec50 - md5: 5cf0ece4375c73d7a5765e83565a69c7 - depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2776564 - timestamp: 1775589970694 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea md5: 25dcccd4f80f1638428613e0d7c9b4e1 @@ -7156,18 +6743,30 @@ packages: purls: [] size: 9410183 timestamp: 1775589779763 -- pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - name: overrides - version: 7.7.0 - sha256: c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49 - requires_dist: - - typing ; python_full_version < '3.5' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - name: packaging - version: '26.0' - sha256: b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda + sha256: 1840bd90d25d4930d60f57b4f38d4e0ae3f5b8db2819638709c36098c6ba770c + md5: e51f1e4089cad105b6cac64bd8166587 + depends: + - python >=3.9 + - typing_utils + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/overrides?source=hash-mapping + size: 30139 + timestamp: 1734587755455 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 72010 + timestamp: 1769093650580 - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl name: paginate version: 0.5.7 @@ -7176,10 +6775,10 @@ packages: - pytest ; extra == 'dev' - tox ; extra == 'dev' - black ; extra == 'lint' -- pypi: https://files.pythonhosted.org/packages/20/17/ec40d981705654853726e7ac9aea9ddbb4a5d9cf54d8472222f4f3de06c2/pandas-3.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: pandas version: 3.0.2 - sha256: 61c2fd96d72b983a9891b2598f286befd4ad262161a609c92dc1652544b46b76 + sha256: deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535 requires_dist: - numpy>=1.26.0 ; python_full_version < '3.14' - numpy>=2.3.3 ; python_full_version >= '3.14' @@ -7356,96 +6955,6 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/44/a0/97a6339859d4acb2536efb24feb6708e82f7d33b2ed7e036f2983fcced82/pandas-3.0.2-cp311-cp311-win_amd64.whl - name: pandas - version: 3.0.2 - sha256: ed72cb3f45190874eb579c64fa92d9df74e98fd63e2be7f62bce5ace0ade61df - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl name: pandas version: 3.0.2 @@ -7536,10 +7045,10 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/97/35/6411db530c618e0e0005187e35aa02ce60ae4c4c4d206964a2f978217c27/pandas-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl name: pandas version: 3.0.2 - sha256: a727a73cbdba2f7458dc82449e2315899d5140b449015d822f515749a46cbbe0 + sha256: 0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288 requires_dist: - numpy>=1.26.0 ; python_full_version < '3.14' - numpy>=2.3.3 ; python_full_version >= '3.14' @@ -7716,100 +7225,10 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/c4/d3/b7da1d5d7dbdc5ef52ed7debd2b484313b832982266905315dad5a0bf0b1/pandas-3.0.2-cp311-cp311-macosx_11_0_arm64.whl - name: pandas - version: 3.0.2 - sha256: dbbd4aa20ca51e63b53bbde6a0fa4254b1aaabb74d2f542df7a7959feb1d760c - requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' - - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl name: pandas version: 3.0.2 - sha256: 232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18 + sha256: b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf requires_dist: - numpy>=1.26.0 ; python_full_version < '3.14' - numpy>=2.3.3 ; python_full_version >= '3.14' @@ -7893,25 +7312,32 @@ packages: - tabulate>=0.9.0 ; extra == 'all' - xarray>=2024.10.0 ; extra == 'all' - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl - name: pandocfilters - version: 1.5.1 - sha256: 93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' -- pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl - name: parso - version: 0.8.6 - sha256: 2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff - requires_dist: - - pytest ; extra == 'testing' - - docopt ; extra == 'testing' - - flake8==5.0.4 ; extra == 'qa' - - zuban==0.5.1 ; extra == 'qa' - - types-setuptools==67.2.0.1 ; extra == 'qa' - requires_python: '>=3.6' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f + md5: 457c2c8c08e54905d6954e79cb5b5db9 + depends: + - python !=3.0,!=3.1,!=3.2,!=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandocfilters?source=hash-mapping + size: 11627 + timestamp: 1631603397334 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 + md5: 97c1ce2fffa1209e7afb432810ec6e12 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping + size: 82287 + timestamp: 1770676243987 - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl name: pathspec version: 1.0.4 @@ -7923,48 +7349,21 @@ packages: - pytest>=9 ; extra == 'tests' - typing-extensions>=4.15 ; extra == 'tests' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - name: pexpect - version: 4.9.0 - sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 - requires_dist: - - ptyprocess>=0.5 -- pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.2.0 - sha256: 62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea + depends: + - ptyprocess >=0.5 + - python >=3.9 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 +- pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.2.0 - sha256: 71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65 + sha256: 4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286 requires_dist: - furo ; extra == 'docs' - olefile ; extra == 'docs' @@ -7993,10 +7392,10 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.2.0 - sha256: 2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5 + sha256: 62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780 requires_dist: - furo ; extra == 'docs' - olefile ; extra == 'docs' @@ -8057,10 +7456,10 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl name: pillow version: 12.2.0 - sha256: 8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab + sha256: 80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae requires_dist: - furo ; extra == 'docs' - olefile ; extra == 'docs' @@ -8089,10 +7488,10 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl name: pillow version: 12.2.0 - sha256: 6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60 + sha256: 4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150 requires_dist: - furo ; extra == 'docs' - olefile ; extra == 'docs' @@ -8153,60 +7552,35 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: pillow - version: 12.2.0 - sha256: e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c4/36/ce5f75aa7c736a663a901766edc3580098c7ea3959a0e878363a54a3714e/pixi_kernel-0.7.1-py3-none-any.whl - name: pixi-kernel - version: 0.7.1 - sha256: 93b51c8a95ca58fb4b743cb2ce5d73b951f467e7c39b0c766f20e05bdf950478 - requires_dist: - - ipykernel>=6 - - jupyter-client>=7 - - jupyter-server>=2.4 - - msgspec>=0.18 - - returns>=0.23 - - tomli>=2 ; python_full_version < '3.11' - requires_python: '>=3.10,<4.0' -- pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl - name: platformdirs - version: 4.9.4 - sha256: 68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl - name: platformdirs - version: 4.9.6 - sha256: e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda + sha256: 506c9330b8dc5ae98f4c32629fa59fa40e6bdd42a681c48d2f9554693dd01156 + md5: d57ef7cb7ad6b5d62cef8b9bdf1d400b + depends: + - ipykernel >=6 + - jupyter_client >=7 + - jupyter_server >=2.4 + - msgspec >=0.18 + - python >=3.10 + - returns >=0.23 + - tomli >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pixi-kernel?source=hash-mapping + size: 39509 + timestamp: 1764156429044 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda + sha256: 8f29915c172f1f7f4f7c9391cd5dac3ebf5d13745c8b7c8006032615246345a5 + md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25862 + timestamp: 1775741140609 - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl name: plopp version: 26.3.1 @@ -8278,6 +7652,78 @@ packages: - xarray ; extra == 'dev-optional' - plotly[dev-optional] ; extra == 'dev' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + name: plotly + version: 6.7.0 + sha256: ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0 + requires_dist: + - narwhals>=1.15.1 + - packaging + - anywidget ; extra == 'dev' + - build ; extra == 'dev' + - colorcet ; extra == 'dev' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev' + - geopandas ; extra == 'dev' + - inflect ; extra == 'dev' + - jupyterlab ; extra == 'dev' + - kaleido>=1.1.0 ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - orjson ; extra == 'dev' + - pandas ; extra == 'dev' + - pdfrw ; extra == 'dev' + - pillow ; extra == 'dev' + - plotly-geo ; extra == 'dev' + - polars[timezone] ; extra == 'dev' + - pyarrow ; extra == 'dev' + - pyshp ; extra == 'dev' + - pytest ; extra == 'dev' + - pytz ; extra == 'dev' + - requests ; extra == 'dev' + - ruff==0.11.12 ; extra == 'dev' + - scikit-image ; extra == 'dev' + - scipy ; extra == 'dev' + - shapely ; extra == 'dev' + - statsmodels ; extra == 'dev' + - vaex ; python_full_version < '3.10' and extra == 'dev' + - xarray ; extra == 'dev' + - build ; extra == 'dev-build' + - jupyterlab ; extra == 'dev-build' + - pytest ; extra == 'dev-build' + - requests ; extra == 'dev-build' + - ruff==0.11.12 ; extra == 'dev-build' + - pytest ; extra == 'dev-core' + - requests ; extra == 'dev-core' + - ruff==0.11.12 ; extra == 'dev-core' + - anywidget ; extra == 'dev-optional' + - build ; extra == 'dev-optional' + - colorcet ; extra == 'dev-optional' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' + - geopandas ; extra == 'dev-optional' + - inflect ; extra == 'dev-optional' + - jupyterlab ; extra == 'dev-optional' + - kaleido>=1.1.0 ; extra == 'dev-optional' + - numpy>=1.22 ; extra == 'dev-optional' + - orjson ; extra == 'dev-optional' + - pandas ; extra == 'dev-optional' + - pdfrw ; extra == 'dev-optional' + - pillow ; extra == 'dev-optional' + - plotly-geo ; extra == 'dev-optional' + - polars[timezone] ; extra == 'dev-optional' + - pyarrow ; extra == 'dev-optional' + - pyshp ; extra == 'dev-optional' + - pytest ; extra == 'dev-optional' + - pytz ; extra == 'dev-optional' + - requests ; extra == 'dev-optional' + - ruff==0.11.12 ; extra == 'dev-optional' + - scikit-image ; extra == 'dev-optional' + - scipy ; extra == 'dev-optional' + - shapely ; extra == 'dev-optional' + - statsmodels ; extra == 'dev-optional' + - vaex ; python_full_version < '3.10' and extra == 'dev-optional' + - xarray ; extra == 'dev-optional' + - numpy>=1.22 ; extra == 'express' + - kaleido>=1.1.0 ; extra == 'kaleido' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl name: pluggy version: 1.6.0 @@ -8322,248 +7768,168 @@ packages: - pyyaml>=5.1 - virtualenv>=20.10.0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - name: prometheus-client - version: 0.24.1 - sha256: 150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055 - requires_dist: - - twisted ; extra == 'twisted' - - aiohttp ; extra == 'aiohttp' - - django ; extra == 'django' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl - name: prompt-toolkit - version: 3.0.52 - sha256: 9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955 - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda + sha256: 4d7ec90d4f9c1f3b4a50623fefe4ebba69f651b102b373f7c0e9dbbfa43d495c + md5: a11ab1f31af799dd93c3a39881528884 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/prometheus-client?source=compressed-mapping + size: 57113 + timestamp: 1775771465170 +- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae + md5: edb16f14d920fb3faf17f5ce582942d6 + depends: + - python >=3.10 - wcwidth - requires_python: '>=3.8' + constrains: + - prompt_toolkit 3.0.52 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 273927 + timestamp: 1756321848365 - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl name: propcache version: 0.4.1 sha256: f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl name: propcache version: 0.4.1 - sha256: 15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf + sha256: 5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: propcache version: 0.4.1 - sha256: fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 + sha256: 15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl name: propcache version: 0.4.1 sha256: cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl - name: propcache - version: 0.4.1 - sha256: cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl - name: propcache - version: 0.4.1 - sha256: c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: propcache version: 0.4.1 - sha256: 6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e + sha256: 8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl name: propcache version: 0.4.1 - sha256: 364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6 + sha256: 9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl - name: psutil - version: 7.2.2 - sha256: 1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 - requires_dist: - - psleak ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-instafail ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - setuptools ; extra == 'dev' - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - colorama ; os_name == 'nt' and extra == 'dev' - - pyreadline3 ; os_name == 'nt' and extra == 'dev' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - psleak ; extra == 'test' - - pytest ; extra == 'test' - - pytest-instafail ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl - name: psutil - version: 7.2.2 - sha256: eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 - requires_dist: - - psleak ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-instafail ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - setuptools ; extra == 'dev' - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - colorama ; os_name == 'nt' and extra == 'dev' - - pyreadline3 ; os_name == 'nt' and extra == 'dev' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - psleak ; extra == 'test' - - pytest ; extra == 'test' - - pytest-instafail ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - name: psutil - version: 7.2.2 - sha256: 076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 - requires_dist: - - psleak ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-instafail ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - setuptools ; extra == 'dev' - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - colorama ; os_name == 'nt' and extra == 'dev' - - pyreadline3 ; os_name == 'nt' and extra == 'dev' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - psleak ; extra == 'test' - - pytest ; extra == 'test' - - pytest-instafail ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl - name: psutil - version: 7.2.2 - sha256: ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 - requires_dist: - - psleak ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-instafail ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - setuptools ; extra == 'dev' - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - colorama ; os_name == 'nt' and extra == 'dev' - - pyreadline3 ; os_name == 'nt' and extra == 'dev' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' - - psleak ; extra == 'test' - - pytest ; extra == 'test' - - pytest-instafail ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' - requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - name: ptyprocess - version: 0.7.0 - sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 -- pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl - name: pure-eval - version: 0.2.3 - sha256: 1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 - requires_dist: - - pytest ; extra == 'tests' +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + sha256: d834fd656133c9e4eaf63ffe9a117c7d0917d86d89f7d64073f4e3a0020bd8a7 + md5: dd94c506b119130aef5a9382aed648e7 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=compressed-mapping + size: 225545 + timestamp: 1769678155334 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py314h0f05182_0.conda + sha256: f15574ed6c8c8ed8c15a0c5a00102b1efe8b867c0bd286b498cd98d95bd69ae5 + md5: 4f225a966cfee267a79c5cb6382bd121 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 231303 + timestamp: 1769678156552 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hb3ab3e3_0.conda + sha256: 6d0e21c76436374635c074208cfeee62a94d3c37d0527ad67fd8a7615e546a05 + md5: fd856899666759403b3c16dcba2f56ff + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 239031 + timestamp: 1769678393511 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py314ha14b1ff_0.conda + sha256: e0f31c053eb11803d63860c213b2b1b57db36734f5f84a3833606f7c91fedff9 + md5: fc4c7ab223873eee32080d51600ce7e7 + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 245502 + timestamp: 1769678303655 +- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py312he5662c2_0.conda + sha256: edffc84c001a05b996b5f8607c8164432754e86ec9224e831cd00ebabdec04e7 + md5: a2724c93b745fc7861948eb8b9f6679a + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 242769 + timestamp: 1769678170631 +- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + sha256: 17c8274ce5a32c9793f73a5a0094bd6188f3a13026a93147655143d4df034214 + md5: fd539ac231820f64066839251aa9fa48 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 249950 + timestamp: 1769678167309 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pure-eval?source=hash-mapping + size: 16668 + timestamp: 1733569518868 - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl name: py version: 1.11.0 @@ -8574,11 +7940,18 @@ packages: version: 2.14.0 sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - name: pycparser - version: '3.0' - sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + md5: 12c566707c80111f9799308d9e265aef + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 110100 + timestamp: 1733195786147 - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl name: pydantic version: 2.12.5 @@ -8598,24 +7971,24 @@ packages: requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl name: pydantic-core version: 2.41.5 - sha256: 76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe + sha256: 8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core version: 2.41.5 - sha256: 7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b + sha256: 22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl name: pydantic-core version: 2.41.5 - sha256: f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 + sha256: 1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' @@ -8633,20 +8006,6 @@ packages: requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: pydantic-core - version: 2.41.5 - sha256: f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl - name: pydantic-core - version: 2.41.5 - sha256: a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 - requires_dist: - - typing-extensions>=4.14.1 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl name: pydoclint version: 0.8.3 @@ -8657,13 +8016,17 @@ packages: - tomli>=2.0.1 ; python_full_version < '3.11' - flake8>=4 ; extra == 'flake8' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl - name: pygments - version: 2.20.0 - sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 - requires_dist: - - colorama>=0.4.6 ; extra == 'windows-terminal' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 + md5: 16c18772b340887160c79a6acc022db0 + depends: + - python >=3.10 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=compressed-mapping + size: 893031 + timestamp: 1774796815820 - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl name: pymdown-extensions version: 10.21.2 @@ -8673,6 +8036,70 @@ packages: - pyyaml - pygments>=2.19.1 ; extra == 'extra' requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py312h19bbe71_0.conda + sha256: b015f430fe9ea2c53e14be13639f1b781f68deaa5ae74cd8c1d07720890cd02a + md5: c65d7abdc9e60fd3af0ed852591adf1b + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-core?source=hash-mapping + size: 476750 + timestamp: 1763151865523 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda + sha256: df5af268c5a74b7160d772c263ece6f43257faff571783443e34b5f1d5a61cf2 + md5: 75a84fc8337557347252cc4fd3ba2a93 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-core?source=hash-mapping + size: 483374 + timestamp: 1763151489724 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py312h1de3e18_0.conda + sha256: 3710f5ae09c2ea77ba4d82cc51e876d9fc009b878b197a40d3c6347c09ae7d7c + md5: f0bae1b67ece138378923e340b940051 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pyobjc-core 12.1.* + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping + size: 377723 + timestamp: 1763160705325 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda + sha256: aa76ee4328d0514d7c1c455dcd2d3b547db1c59797e54ce0a3f27de5b970e508 + md5: 4219bb3408016e22316cf8b443b5ef93 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pyobjc-core 12.1.* + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping + size: 374792 + timestamp: 1763160601898 - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl name: pyparsing version: 3.3.2 @@ -8686,6 +8113,31 @@ packages: version: 1.2.0 sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca + md5: e2fd202833c4a981ce8a65974fe4abd1 + depends: + - __win + - python >=3.9 + - win_inet_pton + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 21784 + timestamp: 1733217448189 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 21085 + timestamp: 1733217331982 - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl name: pytest version: 9.0.3 @@ -8718,14 +8170,6 @@ packages: - pytest-xdist ; extra == 'testing' - virtualenv ; extra == 'testing' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl - name: pytest-forked - version: 1.6.0 - sha256: 810958f66a91afb1a1e2ae83089d8dc1cd2437ac96b12963042fbb9fb4d16af0 - requires_dist: - - py - - pytest>=3.10 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl name: pytest-xdist version: 3.8.0 @@ -8737,33 +8181,6 @@ packages: - psutil>=3.0 ; extra == 'psutil' - setproctitle ; extra == 'setproctitle' requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda - sha256: bf6a32c69889d38482436a786bea32276756cedf0e9805cc856ffd088e8d00f0 - md5: a5ebcefec0c12a333bcd6d7bf3bddc1f - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.4,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libxcrypt >=4.4.36 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.11.* *_cp311 - license: Python-2.0 - purls: [] - size: 30949404 - timestamp: 1772730362552 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e md5: 7eccb41177e15cc672e1babe9056018e @@ -8791,31 +8208,37 @@ packages: purls: [] size: 31608571 timestamp: 1772730708989 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.15-ha9537fe_0_cpython.conda - sha256: e02e12cd8d391f18bb3bf91d07e16b993592ec0d76ee37cf639390b766e0e687 - md5: 93b802a91de90b2c17b808608726bf45 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.4-habeac84_100_cp314.conda + build_number: 100 + sha256: dec247c5badc811baa34d6085df9d0465535883cf745e22e8d79092ad54a3a7b + md5: a443f87920815d41bfe611296e507995 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.4,<3.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.5,<3.0a0 - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libuuid >=2.42,<3.0a0 + - libzlib >=1.3.2,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.6,<4.0a0 + - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - constrains: - - python_abi 3.11.* *_cp311 + - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 15664115 - timestamp: 1772730794934 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.13-ha9537fe_0_cpython.conda - sha256: fb592ceb1bc247d19247d5535083da4a79721553e29e1290f5d81c07d4f086b5 - md5: ec05996c0d914a4e98ee3c7d789083f8 + size: 36705460 + timestamp: 1775614357822 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda + sha256: e658e647a4a15981573d6018928dec2c448b10c77c557c29872043ff23c0eb6a + md5: 8e7608172fa4d1b90de9a745c2fd2b81 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 @@ -8833,55 +8256,36 @@ packages: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 13672169 - timestamp: 1772730464626 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.15-h8561d8f_0_cpython.conda - sha256: 9a846065863925b2562126a5c6fecd7a972e84aaa4de9e686ad3715ca506acfa - md5: 49c7d96c58b969585cf09fb01d74e08e - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.4,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.11.* *_cp311 - license: Python-2.0 - purls: [] - size: 14753109 - timestamp: 1772730203101 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.13-h8561d8f_0_cpython.conda - sha256: e658e647a4a15981573d6018928dec2c448b10c77c557c29872043ff23c0eb6a - md5: 8e7608172fa4d1b90de9a745c2fd2b81 + size: 12127424 + timestamp: 1772730755512 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.4-h4c637c5_100_cp314.conda + build_number: 100 + sha256: 27e7d6cbe021f37244b643f06a98e46767255f7c2907108dd3736f042757ddad + md5: e1bc5a3015a4bbeb304706dba5a32b7f depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.4,<3.0a0 + - libexpat >=2.7.5,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libzlib >=1.3.2,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.6,<4.0a0 + - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - constrains: - - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 12127424 - timestamp: 1772730755512 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.15-h0159041_0_cpython.conda - sha256: a1f1031088ce69bc99c82b95980c1f54e16cbd5c21f042e9c1ea25745a8fc813 - md5: d09dbf470b41bca48cbe6a78ba1e009b + size: 13533346 + timestamp: 1775616188373 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda + sha256: a02b446d8b7b167b61733a3de3be5de1342250403e72a63b18dac89e99e6180e + md5: 2956dff38eb9f8332ad4caeba941cfe7 depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.7.4,<3.0a0 @@ -8896,40 +8300,49 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - python_abi 3.11.* *_cp311 + - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 18416208 - timestamp: 1772728847666 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - sha256: a02b446d8b7b167b61733a3de3be5de1342250403e72a63b18dac89e99e6180e - md5: 2956dff38eb9f8332ad4caeba941cfe7 + size: 15840187 + timestamp: 1772728877265 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.4-h4b44e0e_100_cp314.conda + build_number: 100 + sha256: e258d626b0ba778abb319f128de4c1211306fe86fe0803166817b1ce2514c920 + md5: 40b6a8f438afb5e7b314cc5c4a43cd84 depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.4,<3.0a0 + - libexpat >=2.7.5,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - python_abi 3.14.* *_cp314 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - constrains: - - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 purls: [] - size: 15840187 - timestamp: 1772728877265 -- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - name: python-dateutil - version: 2.9.0.post0 - sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 - requires_dist: - - six>=1.5 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' + size: 18055445 + timestamp: 1775615317758 + python_site_packages_path: Lib/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 233310 + timestamp: 1751104122689 - pypi: https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl name: python-discovery version: 1.2.2 @@ -8960,30 +8373,49 @@ packages: - sphinx ; extra == 'docs' - furo ; extra == 'docs' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl - name: python-json-logger - version: 4.1.0 - sha256: 132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2 - requires_dist: - - orjson ; implementation_name != 'pypy' and extra == 'dev' - - msgspec ; implementation_name != 'pypy' and extra == 'dev' - - validate-pyproject[all] ; extra == 'dev' - - black ; extra == 'dev' - - pylint ; extra == 'dev' - - mypy ; extra == 'dev' - - pytest ; extra == 'dev' - - freezegun ; extra == 'dev' - - tzdata ; extra == 'dev' - - build ; extra == 'dev' - - mkdocs ; extra == 'dev' - - mkdocs-material>=8.5 ; extra == 'dev' - - mkdocs-awesome-pages-plugin ; extra == 'dev' - - mdx-truly-sane-lists ; extra == 'dev' - - mkdocstrings[python] ; extra == 'dev' - - mkdocs-gen-files ; extra == 'dev' - - mkdocs-literate-nav ; extra == 'dev' - - mike ; extra == 'dev' - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8 + md5: 23029aae904a2ba587daba708208012f + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping + size: 244628 + timestamp: 1755304154927 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + sha256: 97327b9509ae3aae28d27217a5d7bd31aff0ab61a02041e9c6f98c11d8a53b29 + md5: 32780d6794b8056b78602103a04e90ef + depends: + - cpython 3.12.13.* + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46449 + timestamp: 1772728979370 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.4-h4df99d1_100.conda + sha256: 36ff7984e4565c85149e64f8206303d412a0652e55cf806dcb856903fa056314 + md5: e4e60721757979d01d3964122f674959 + depends: + - cpython 3.14.4.* + - python_abi * *_cp314 + license: Python-2.0 + purls: [] + size: 49806 + timestamp: 1775614307464 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + md5: a61bf9ec79426938ff785eb69dbb1960 + depends: + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/python-json-logger?source=hash-mapping + size: 13383 + timestamp: 1677079727691 - pypi: https://files.pythonhosted.org/packages/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl name: python-socketio version: 5.16.1 @@ -8998,113 +8430,259 @@ packages: - sphinx ; extra == 'docs' - furo ; extra == 'docs' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl - name: pywin32 - version: '311' - sha256: 3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503 -- pypi: https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl - name: pywin32 - version: '311' - sha256: b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067 -- pypi: https://files.pythonhosted.org/packages/79/c3/3e75075c7f71735f22b66fab0481f2c98e3a4d58cba55cb50ba29114bcf6/pywinpty-3.0.3-cp311-cp311-win_amd64.whl - name: pywinpty - version: 3.0.3 - sha256: dff25a9a6435f527d7c65608a7e62783fc12076e7d44487a4911ee91be5a8ac8 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl - name: pywinpty - version: 3.0.3 - sha256: c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl - name: pyyaml - version: 6.0.3 - sha256: 652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl - name: pyyaml - version: 6.0.3 - sha256: 5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl - name: pyyaml - version: 6.0.3 - sha256: fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl - name: pyyaml - version: 6.0.3 - sha256: 9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.1-pyhd8ed1ab_0.conda + sha256: b5494ef54bc2394c6c4766ceeafac22507c4fc60de6cbfda45524fc2fcc3c9fc + md5: d8d30923ccee7525704599efd722aa16 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/tzdata?source=compressed-mapping + size: 147315 + timestamp: 1775223532978 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + build_number: 8 + sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809 + md5: c3efd25ac4d74b1584d2f7a57195ddf1 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6958 + timestamp: 1752805918820 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + build_number: 8 + sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 + md5: 0539938c55b6b1a59b560e843ad864a4 + constrains: + - python 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda + sha256: a7505522048dad63940d06623f07eb357b9b65510a8d23ff32b99add05aac3a1 + md5: 64cbe4ecbebe185a2261d3f298a60cde + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/pywin32?source=hash-mapping + size: 6684490 + timestamp: 1756487136116 +- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda + sha256: 6918a8067f296f3c65d43e84558170c9e6c3f4dd735cfe041af41a7fdba7b171 + md5: 2d7b7ba21e8a8ced0eca553d4d53f773 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/pywin32?source=hash-mapping + size: 6713155 + timestamp: 1756487145487 +- conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py312h275cf98_1.conda + sha256: 61cc6c2c712ab4d2b8e7a73d884ef8d3262cb80cc93a4aa074e8b08aa7ddd648 + md5: 66255d136bd0daa41713a334db41d9f0 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - winpty + license: MIT + license_family: MIT + purls: + - pkg:pypi/pywinpty?source=hash-mapping + size: 215371 + timestamp: 1759557609855 +- conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py314h51f0985_1.conda + sha256: 048e20641da680aedaab285640a2aca56b7b5baf7a18f8f164f2796e13628c1f + md5: dd84e8748bd3c85a5c751b0576488080 + depends: + - python >=3.14.0rc3,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - winpty + license: MIT + license_family: MIT + purls: + - pkg:pypi/pywinpty?source=hash-mapping + size: 216325 + timestamp: 1759557436167 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf + md5: 15878599a87992e44c059731771591cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 198293 + timestamp: 1770223620706 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d + md5: 2035f68f96be30dc60a5dfd7452c7941 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=compressed-mapping + size: 202391 + timestamp: 1770223462836 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + sha256: 737959262d03c9c305618f2d48c7f1691fb996f14ae420bfd05932635c99f873 + md5: 95a5f0831b5e0b1075bbd80fcffc52ac + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 187278 + timestamp: 1770223990452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252 + md5: dcf51e564317816cb8d546891019b3ab + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 189475 + timestamp: 1770223788648 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda + sha256: 1cab6cbd6042b2a1d8ee4d6b4ec7f36637a41f57d2f5c5cf0c12b7c4ce6a62f6 + md5: 9f6ebef672522cb9d9a6257215ca5743 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 179738 + timestamp: 1770223468771 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997 + md5: 0cd9b88826d0f8db142071eb830bce56 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 181257 + timestamp: 1770223460931 - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl name: pyyaml-env-tag - version: '1.1' - sha256: 17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04 - requires_dist: - - pyyaml - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl - name: pyzmq - version: 27.1.0 - sha256: 226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86 - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl - name: pyzmq - version: 27.1.0 - sha256: 190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97 - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl - name: pyzmq - version: 27.1.0 - sha256: 452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: pyzmq - version: 27.1.0 - sha256: 5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - name: pyzmq - version: 27.1.0 - sha256: 43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31 - requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl - name: pyzmq - version: 27.1.0 - sha256: 9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf + version: '1.1' + sha256: 17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04 requires_dist: - - cffi ; implementation_name == 'pypy' - requires_python: '>=3.8' + - pyyaml + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + noarch: python + sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 + md5: 082985717303dab433c976986c674b35 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + size: 211567 + timestamp: 1771716961404 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + noarch: python + sha256: 2f31f799a46ed75518fae0be75ecc8a1b84360dbfd55096bc2fe8bd9c797e772 + md5: 2f6b79700452ef1e91f45a99ab8ffe5a + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + size: 191641 + timestamp: 1771717073430 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + noarch: python + sha256: d84bcc19a945ca03d1fd794be3e9896ab6afc9f691d58d9c2da514abe584d4df + md5: eb1ec67a70b4d479f7dd76e6c8fe7575 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - zeromq >=4.3.5,<4.3.6.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + size: 183235 + timestamp: 1771716967192 - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl name: questionary version: 2.1.1 @@ -9133,17 +8711,6 @@ packages: purls: [] size: 345073 timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5 - md5: eefd65452dfe7cce476a519bece46704 - depends: - - __osx >=10.13 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 317819 - timestamp: 1765813692798 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 md5: f8381319127120ce51e081dce4865cf4 @@ -9155,102 +8722,182 @@ packages: purls: [] size: 313930 timestamp: 1765813902568 -- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - name: referencing - version: 0.37.0 - sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 - requires_dist: - - attrs>=22.2.0 - - rpds-py>=0.7.0 - - typing-extensions>=4.4.0 ; python_full_version < '3.13' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - name: requests - version: 2.33.1 - sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a - requires_dist: - - charset-normalizer>=2,<4 - - idna>=2.5,<4 - - urllib3>=1.26,<3 - - certifi>=2023.5.7 - - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/57/4d/a7545bf6c62b0dbe5795f22ea9e88cc070fdced5c34663ebc5bed2f610c0/returns-0.26.0-py3-none-any.whl - name: returns - version: 0.26.0 - sha256: 7cae94c730d6c56ffd9d0f583f7a2c0b32cfe17d141837150c8e6cff3eb30d71 - requires_dist: - - hypothesis>=6.136,<7.0 ; extra == 'check-laws' - - mypy>=1.12,<1.18 ; extra == 'compatible-mypy' - - pytest>=8.0,<9.0 ; extra == 'check-laws' - - typing-extensions>=4.0,<5.0 - requires_python: '>=3.10,<4.0' -- pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl - name: rfc3339-validator - version: 0.1.4 - sha256: 24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa - requires_dist: +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 + md5: 870293df500ca7e18bedefa5838a22ab + depends: + - attrs >=22.2.0 + - python >=3.10 + - rpds-py >=0.7.0 + - typing_extensions >=4.4.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/referencing?source=hash-mapping + size: 51788 + timestamp: 1760379115194 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + sha256: c0249bc4bf4c0e8e06d0e7b4d117a5d593cc4ab2144d5006d6d47c83cb0af18e + md5: 10afbb4dbf06ff959ad25a92ccee6e59 + depends: + - python >=3.10 + - certifi >=2023.5.7 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - urllib3 >=1.26,<3 + - python + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=compressed-mapping + size: 63712 + timestamp: 1774894783063 +- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + sha256: 619962bf637f5cadf967adcec2c5ad1d408418b56830a701aec19e876e5197d0 + md5: bec7ce42bd4cc803e21c43e9b7fb8860 + depends: + - python >=3.10 + - typing_extensions >=4.0,<5.0 + - python + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/returns?source=hash-mapping + size: 100610 + timestamp: 1753812221549 +- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda + sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 + md5: 36de09a8d3e5d5e6f4ee63af49e59706 + depends: + - python >=3.9 - six - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl - name: rfc3986-validator - version: 0.1.1 - sha256: 2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl - name: rfc3987-syntax - version: 1.1.0 - sha256: 6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f - requires_dist: - - lark>=1.2.2 - - pytest>=8.3.5 ; extra == 'testing' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - name: rpds-py - version: 0.30.0 - sha256: a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl - name: rpds-py - version: 0.30.0 - sha256: 6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: 47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl - name: rpds-py - version: 0.30.0 - sha256: dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: 33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl - name: rpds-py - version: 0.30.0 - sha256: a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl - name: ruff - version: 0.15.9 - sha256: 4965bac6ac9ea86772f4e23587746f0b7a395eccabb823eb8bfacc3fa06069f7 - requires_python: '>=3.7' + license: MIT + license_family: MIT + purls: + - pkg:pypi/rfc3339-validator?source=hash-mapping + size: 10209 + timestamp: 1733600040800 +- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 + md5: 912a71cc01012ee38e6b90ddd561e36f + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rfc3986-validator?source=hash-mapping + size: 7818 + timestamp: 1598024297745 +- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda + sha256: 70001ac24ee62058557783d9c5a7bbcfd97bd4911ef5440e3f7a576f9e43bc92 + md5: 7234f99325263a5af6d4cd195035e8f2 + depends: + - python >=3.9 + - lark >=1.2.2 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rfc3987-syntax?source=hash-mapping + size: 22913 + timestamp: 1752876729969 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py312h868fb18_0.conda + sha256: 62f46e85caaba30b459da7dfcf3e5488ca24fd11675c33ce4367163ab191a42c + md5: 3ffc5a3572db8751c2f15bacf6a0e937 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 383750 + timestamp: 1764543174231 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda + sha256: e53b0cbf3b324eaa03ca1fe1a688fdf4ab42cea9c25270b0a7307d8aaaa4f446 + md5: c1c368b5437b0d1a68f372ccf01cb133 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 376121 + timestamp: 1764543122774 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py312h6ef9ec0_0.conda + sha256: ea06f6f66b1bea97244c36fd2788ccd92fd1fb06eae98e469dd95ee80831b057 + md5: a7cfbbdeb93bb9a3f249bc4c3569cd4c + depends: + - python + - __osx >=11.0 + - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 358853 + timestamp: 1764543161524 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py314haad56a0_0.conda + sha256: e161dd97403b8b8a083d047369a5cf854557dba1204d29e2f0250f5ac4403925 + md5: 76a4f88d1b7748c477abf3c341edc64c + depends: + - python + - __osx >=11.0 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 350976 + timestamp: 1764543169524 +- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda + sha256: faad05e6df2fc15e3ae06fdd71a36e17ff25364777aa4c40f2ec588740d64091 + md5: 2c51baeda0a355b0a5e7b6acb28cf02d + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 243577 + timestamp: 1764543069837 +- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda + sha256: e4435368c5c25076dc0f5918ba531c5a92caee8e0e2f9912ef6810049cf00db2 + md5: e86531e278ad304438e530953cd55d14 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 235780 + timestamp: 1764543046065 - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl name: ruff version: 0.15.9 @@ -9271,11 +8918,6 @@ packages: version: 0.15.10 sha256: 28cb32d53203242d403d819fd6983152489b12e4a3ae44993543d6fe62ab42ed requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl - name: ruff - version: 0.15.10 - sha256: b1e7c16ea0ff5a53b7c2df52d947e685973049be1cdfe2b59a9c43601897b22e - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: ruff version: 0.15.10 @@ -9286,10 +8928,10 @@ packages: version: 0.15.10 sha256: 93cc06a19e5155b4441dd72808fdf84290d84ad8a39ca3b0f994363ade4cebb1 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/07/d9/5c57a38ebf73df9f1992ce7c6830efc4b341cba8dfbc546e1a40155e922c/scipp-26.3.1-cp312-cp312-macosx_14_0_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl name: scipp version: 26.3.1 - sha256: 60f7e807803419cc40203c955d03ad457a0be7a6746cc26421f5a6ccbe323401 + sha256: 1f103f6c5a33b08773206c613fe2dd9c02585f5c4e44b77311c54b7828a758ed requires_dist: - numpy>=2 - pytest ; extra == 'test' @@ -9364,62 +9006,10 @@ packages: - nodejs ; extra == 'all' - pythreejs ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - name: scipp - version: 26.3.1 - sha256: 2608ba21e2c550abe864598e8cfffe22d7e7be70ff9f9b03d44868e353b241c9 - requires_dist: - - numpy>=2 - - pytest ; extra == 'test' - - matplotlib ; extra == 'test' - - beautifulsoup4 ; extra == 'test' - - ipython ; extra == 'test' - - h5py ; extra == 'extra' - - scipy>=1.7.0 ; extra == 'extra' - - graphviz ; extra == 'extra' - - pooch ; extra == 'extra' - - plopp ; extra == 'extra' - - matplotlib ; extra == 'extra' - - scipp[extra] ; extra == 'all' - - ipympl ; extra == 'all' - - ipython ; extra == 'all' - - ipywidgets ; extra == 'all' - - jupyterlab ; extra == 'all' - - jupyterlab-widgets ; extra == 'all' - - jupyter-nbextensions-configurator ; extra == 'all' - - nodejs ; extra == 'all' - - pythreejs ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/60/54/5011adb56853caabfd90686c2e543d1e3c76a8ef2755809b7e12e3f3583b/scipp-26.3.1-cp311-cp311-macosx_14_0_arm64.whl - name: scipp - version: 26.3.1 - sha256: 67d275fc83b062053df9aa7ce3af4d2205109c2bc3ab22467bcd73ceb0a83df2 - requires_dist: - - numpy>=2 - - pytest ; extra == 'test' - - matplotlib ; extra == 'test' - - beautifulsoup4 ; extra == 'test' - - ipython ; extra == 'test' - - h5py ; extra == 'extra' - - scipy>=1.7.0 ; extra == 'extra' - - graphviz ; extra == 'extra' - - pooch ; extra == 'extra' - - plopp ; extra == 'extra' - - matplotlib ; extra == 'extra' - - scipp[extra] ; extra == 'all' - - ipympl ; extra == 'all' - - ipython ; extra == 'all' - - ipywidgets ; extra == 'all' - - jupyterlab ; extra == 'all' - - jupyterlab-widgets ; extra == 'all' - - jupyter-nbextensions-configurator ; extra == 'all' - - nodejs ; extra == 'all' - - pythreejs ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/81/21/4962b1daddf0422e56c5ed4c41bea1ccb6d2a9ab72b795196835a20969c7/scipp-26.3.1-cp311-cp311-macosx_14_0_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/1f/28/3f8aa247d29d010547d52207395cb057ebd0a40b88f64bc1dbac9e17a729/scipp-26.3.1-cp314-cp314-win_amd64.whl name: scipp version: 26.3.1 - sha256: 7c90e78fcba1d272df059fc01350c9e18f017aec26369b03def723a3702d763d + sha256: 26291c0a882b9d5aac868c6d6f2508b79baa821ed30060a22c50620dbcce9e75 requires_dist: - numpy>=2 - pytest ; extra == 'test' @@ -9442,10 +9032,10 @@ packages: - nodejs ; extra == 'all' - pythreejs ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/d4/06/19ff1efd58b85906149ce83dfddce23252cea5bec7e0fa5f834336cfe836/scipp-26.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/43/fe/ad0ecbe2393cb690a4b3100a8fea47ecfdb49f6e06f40cf2f626635adc0c/scipp-26.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: scipp version: 26.3.1 - sha256: ab5859a24b3150b588dd2c67e68b0c7f07c9444eae501f3b6326d6b4a34cbf10 + sha256: 2ef08ba8d83542807f9f9833ba8f01583215c1629693bfadb1d6508cbdeb335c requires_dist: - numpy>=2 - pytest ; extra == 'test' @@ -9468,10 +9058,10 @@ packages: - nodejs ; extra == 'all' - pythreejs ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/e6/0d/8882a4c7a5ebe59a46b709e82411d9c730d67250d41a2e11bc4bcd4d431d/scipp-26.3.1-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl name: scipp version: 26.3.1 - sha256: 37877cf07b4f54f224d5465c265d6a1e591d605d0c23dd350a4b48d95c26ab7b + sha256: 2608ba21e2c550abe864598e8cfffe22d7e7be70ff9f9b03d44868e353b241c9 requires_dist: - numpy>=2 - pytest ; extra == 'test' @@ -9483,109 +9073,21 @@ packages: - graphviz ; extra == 'extra' - pooch ; extra == 'extra' - plopp ; extra == 'extra' - - matplotlib ; extra == 'extra' - - scipp[extra] ; extra == 'all' - - ipympl ; extra == 'all' - - ipython ; extra == 'all' - - ipywidgets ; extra == 'all' - - jupyterlab ; extra == 'all' - - jupyterlab-widgets ; extra == 'all' - - jupyter-nbextensions-configurator ; extra == 'all' - - nodejs ; extra == 'all' - - pythreejs ; extra == 'all' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.17.1 - sha256: 02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458 - requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: scipy - version: 1.17.1 - sha256: 43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4 - requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' + - matplotlib ; extra == 'extra' + - scipp[extra] ; extra == 'all' + - ipympl ; extra == 'all' + - ipython ; extra == 'all' + - ipywidgets ; extra == 'all' + - jupyterlab ; extra == 'all' + - jupyterlab-widgets ; extra == 'all' + - jupyter-nbextensions-configurator ; extra == 'all' + - nodejs ; extra == 'all' + - pythreejs ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: scipy version: 1.17.1 - sha256: c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b + sha256: 02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458 requires_dist: - numpy>=1.26.4,<2.7 - pytest>=8.0.0 ; extra == 'test' @@ -9626,10 +9128,10 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: scipy version: 1.17.1 - sha256: a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee + sha256: eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118 requires_dist: - numpy>=1.26.4,<2.7 - pytest>=8.0.0 ; extra == 'test' @@ -9670,10 +9172,10 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl name: scipy version: 1.17.1 - sha256: d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff + sha256: 3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19 requires_dist: - numpy>=1.26.4,<2.7 - pytest>=8.0.0 ; extra == 'test' @@ -9802,10 +9304,10 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl name: scipy version: 1.17.1 - sha256: 766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd + sha256: 3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b requires_dist: - numpy>=1.26.4,<2.7 - pytest>=8.0.0 ; extra == 'test' @@ -9846,71 +9348,58 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl - name: send2trash - version: 2.1.0 - sha256: 0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c - requires_dist: - - pytest>=8 ; extra == 'test' - - pywin32>=305 ; sys_platform == 'win32' and extra == 'nativelib' - - pyobjc>=9.0 ; sys_platform == 'darwin' and extra == 'nativelib' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl - name: setuptools - version: 82.0.1 - sha256: a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb - requires_dist: - - pytest>=6,!=8.1.* ; extra == 'test' - - virtualenv>=13.0.0 ; extra == 'test' - - wheel>=0.44.0 ; extra == 'test' - - pip>=19.1 ; extra == 'test' - - packaging>=24.2 ; extra == 'test' - - jaraco-envs>=2.2 ; extra == 'test' - - pytest-xdist>=3 ; extra == 'test' - - jaraco-path>=3.7.2 ; extra == 'test' - - build[virtualenv]>=1.0.3 ; extra == 'test' - - filelock>=3.4.0 ; extra == 'test' - - ini2toml[lite]>=0.14 ; extra == 'test' - - tomli-w>=1.0.0 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' - - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' - - pytest-home>=0.5 ; extra == 'test' - - pytest-subprocess ; extra == 'test' - - pyproject-hooks!=1.1 ; extra == 'test' - - jaraco-test>=5.5 ; extra == 'test' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pygments-github-lexers==0.0.5 ; extra == 'doc' - - sphinx-favicon ; extra == 'doc' - - sphinx-inline-tabs ; extra == 'doc' - - sphinx-reredirects ; extra == 'doc' - - sphinxcontrib-towncrier ; extra == 'doc' - - sphinx-notfound-page>=1,<2 ; extra == 'doc' - - pyproject-hooks!=1.1 ; extra == 'doc' - - towncrier<24.7 ; extra == 'doc' - - packaging>=24.2 ; extra == 'core' - - more-itertools>=8.8 ; extra == 'core' - - jaraco-text>=3.7 ; extra == 'core' - - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' - - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' - - wheel>=0.43.0 ; extra == 'core' - - jaraco-functools>=4 ; extra == 'core' - - more-itertools ; extra == 'core' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest-mypy ; extra == 'type' - - mypy==1.18.* ; extra == 'type' - - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' - - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_1.conda + sha256: 8fc024bf1a7b99fc833b131ceef4bef8c235ad61ecb95a71a6108be2ccda63e8 + md5: b70e2d44e6aa2beb69ba64206a16e4c6 + depends: + - __osx + - pyobjc-framework-cocoa + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping + size: 22519 + timestamp: 1770937603551 +- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda + sha256: 305446a0b018f285351300463653d3d3457687270e20eda37417b12ee386ef76 + md5: 6ac53f3fff2c416d63511843a04646fa + depends: + - __win + - pywin32 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping + size: 22864 + timestamp: 1770937641143 +- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda + sha256: 59656f6b2db07229351dfb3a859c35e57cc8e8bcbc86d4e501bff881a6f771f1 + md5: 28eb91468df04f655a57bcfbb35fc5c5 + depends: + - __linux + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping + size: 24108 + timestamp: 1770937597662 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 639697 + timestamp: 1773074868565 - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl name: simple-websocket version: 1.1.0 @@ -9923,21 +9412,45 @@ packages: - pytest-cov ; extra == 'dev' - sphinx ; extra == 'docs' requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - name: six - version: 1.17.0 - sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 18455 + timestamp: 1753199211006 - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl name: smmap version: 5.0.3 sha256: c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - name: soupsieve - version: 2.8.3 - sha256: ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95 - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad + md5: 03fe290994c5e4ec17293cfb6bdce520 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15698 + timestamp: 1762941572482 +- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + sha256: 23b71ecf089967d2900126920e7f9ff18cdcef82dbff3e2f54ffa360243a17ac + md5: 18de09b20462742fe093ba39185d9bac + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/soupsieve?source=hash-mapping + size: 38187 + timestamp: 1769034509657 - pypi: https://files.pythonhosted.org/packages/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl name: spdx-headers version: 1.5.1 @@ -9960,19 +9473,20 @@ packages: - pytest-mock>=3.10.0 ; extra == 'test' - pytest>=7.0.0 ; extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl - name: stack-data - version: 0.6.3 - sha256: d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 - requires_dist: - - executing>=1.2.0 - - asttokens>=2.1.0 - - pure-eval - - pytest ; extra == 'tests' - - typeguard ; extra == 'tests' - - pygments ; extra == 'tests' - - littleutils ; extra == 'tests' - - cython ; extra == 'tests' +- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + md5: b1b505328da7a6b246787df4b5a49fbc + depends: + - asttokens + - executing + - pure_eval + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping + size: 26988 + timestamp: 1733569565672 - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl name: sympy version: 1.14.0 @@ -9989,34 +9503,48 @@ packages: requires_dist: - wcwidth ; extra == 'widechars' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl - name: terminado - version: 0.18.1 - sha256: a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0 - requires_dist: - - ptyprocess ; os_name != 'nt' - - pywinpty>=1.1.0 ; os_name == 'nt' - - tornado>=6.1.0 - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - pre-commit ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - - mypy~=1.6 ; extra == 'typing' - - traitlets>=5.11.1 ; extra == 'typing' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl - name: tinycss2 - version: 1.4.0 - sha256: 3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289 - requires_dist: - - webencodings>=0.4 - - sphinx ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - pytest ; extra == 'test' - - ruff ; extra == 'test' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda + sha256: b375e8df0d5710717c31e7c8e93c025c37fa3504aea325c7a55509f64e5d4340 + md5: e43ca10d61e55d0a8ec5d8c62474ec9e + depends: + - __win + - pywinpty >=1.1.0 + - python >=3.10 + - tornado >=6.1.0 + - python + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping + size: 23665 + timestamp: 1766513806974 +- conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda + sha256: 6b6727a13d1ca6a23de5e6686500d0669081a117736a87c8abf444d60c1e40eb + md5: 17b43cee5cc84969529d5d0b0309b2cb + depends: + - __unix + - ptyprocess + - python >=3.10 + - tornado >=6.1.0 + - python + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping + size: 24749 + timestamp: 1766513766867 +- conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 + md5: f1acf5fdefa8300de697982bcb1761c9 + depends: + - python >=3.5 + - webencodings >=0.4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/tinycss2?source=hash-mapping + size: 28285 + timestamp: 1729802975370 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac md5: cffd3bdd58090148f4cfcd831f4b26ab @@ -10031,17 +9559,6 @@ packages: purls: [] size: 3301196 timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - sha256: 7f0d9c320288532873e2d8486c331ec6d87919c9028208d3f6ac91dc8f99a67b - md5: 6e6efb7463f8cef69dbcb4c2205bf60e - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3282953 - timestamp: 1769460532442 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 md5: a9d86bc62f39b94c4661716624eb21b0 @@ -10070,90 +9587,129 @@ packages: version: 6.2.0 sha256: a152bf4f249c847a66497a4a95f63376ed68ac6abf092a2f7cfb29d044ecff44 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: tomli - version: 2.4.1 - sha256: 136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl - name: tomli - version: 2.4.1 - sha256: 52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl - name: tomli - version: 2.4.1 - sha256: 5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: tomli - version: 2.4.1 - sha256: 5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl - name: tomli - version: 2.4.1 - sha256: 4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl - name: tomli - version: 2.4.1 - sha256: c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl - name: tomli - version: 2.4.1 - sha256: 7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl - name: tomli - version: 2.4.1 - sha256: f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl - name: tornado - version: 6.5.5 - sha256: 6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl - name: tornado - version: 6.5.5 - sha256: 487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl - name: tornado - version: 6.5.5 - sha256: 65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - name: tornado - version: 6.5.5 - sha256: e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5 - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl - name: traitlets - version: 5.14.3 - sha256: b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f - requires_dist: - - myst-parser ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - sphinx ; extra == 'docs' - - argcomplete>=3.0.3 ; extra == 'test' - - mypy>=1.7.0 ; extra == 'test' - - pre-commit ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-mypy-testing ; extra == 'test' - - pytest>=7.0,<8.2 ; extra == 'test' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 21561 + timestamp: 1774492402955 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a + md5: 2b37798adbc54fd9e591d24679d2133a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 859665 + timestamp: 1774358032165 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_0.conda + sha256: ed8d06093ff530a2dae9ed1e51eb6f908fbfd171e8b62f4eae782d67b420be5a + md5: dc1ff1e915ab35a06b6fa61efae73ab5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 912476 + timestamp: 1774358032579 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py312h2bbb03f_0.conda + sha256: 29edd36311b4a810a9e6208437bdbedb28c9ac15221caf812cb5c5cf48375dca + md5: 02cce5319b0f1317d9642dcb2e475379 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 859155 + timestamp: 1774358568476 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda + sha256: 4ccc4a20d676c0ba85adee9c99015bec7f5b685df0cf8006e34573f1d6c2ce75 + md5: 3f81f8b2fe2c26a82c0abf57ab2b9610 + depends: + - __osx >=11.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 910845 + timestamp: 1774358965067 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py312he06e257_0.conda + sha256: 1220c986664e9e8662e660dc64dd97ed823926b1ba05175771408cf1d6a46dd2 + md5: c6c66a64da3d2953c83ed2789a7f4bdb + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 859726 + timestamp: 1774358173994 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda + sha256: 49d64837dd02475903479ca47b82669bd6c9f7e6afde61860c6f3f2bd57d8a03 + md5: 87b1215adf7f0ba1fb9250af9fc668e1 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 914835 + timestamp: 1774358183098 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110051 + timestamp: 1733367480074 - pypi: https://files.pythonhosted.org/packages/bb/4a/2e5583e544bc437d5e8e54b47db87430df9031b29b48d17f26d129fa60c0/trove_classifiers-2026.1.14.14-py3-none-any.whl name: trove-classifiers version: 2026.1.14.14 sha256: 1f9553927f18d0513d8e5ff80ab8980b8202ce37ecae0e3274ed2ef11880e74d -- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - name: typing-extensions - version: 4.15.0 - sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 + depends: + - typing_extensions ==4.15.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 91383 + timestamp: 1756220668932 - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl name: typing-inspection version: 0.4.2 @@ -10161,11 +9717,29 @@ packages: requires_dist: - typing-extensions>=4.12.0 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl - name: tzdata - version: '2026.1' - sha256: 4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 - requires_python: '>=2' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda + sha256: 3088d5d873411a56bf988eee774559335749aed6f6c28e07bf933256afb9eb6c + md5: f6d7aa696c67756a650e91e15e88223c + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/typing-utils?source=hash-mapping + size: 15183 + timestamp: 1733331395943 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c md5: ad659d0a2b3e47e38d829aa8cad2d610 @@ -10198,43 +9772,32 @@ packages: - python-docs-theme ; extra == 'doc' - uncertainties[arrays,doc,test] ; extra == 'all' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - name: uri-template - version: 1.3.0 - sha256: a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 - requires_dist: - - types-pyyaml ; extra == 'dev' - - mypy ; extra == 'dev' - - flake8 ; extra == 'dev' - - flake8-annotations ; extra == 'dev' - - flake8-bandit ; extra == 'dev' - - flake8-bugbear ; extra == 'dev' - - flake8-commas ; extra == 'dev' - - flake8-comprehensions ; extra == 'dev' - - flake8-continuation ; extra == 'dev' - - flake8-datetimez ; extra == 'dev' - - flake8-docstrings ; extra == 'dev' - - flake8-import-order ; extra == 'dev' - - flake8-literal ; extra == 'dev' - - flake8-modern-annotations ; extra == 'dev' - - flake8-noqa ; extra == 'dev' - - flake8-pyproject ; extra == 'dev' - - flake8-requirements ; extra == 'dev' - - flake8-typechecking-import ; extra == 'dev' - - flake8-use-fstring ; extra == 'dev' - - pep8-naming ; extra == 'dev' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - name: urllib3 - version: 2.6.3 - sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 - requires_dist: - - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - - h2>=4,<5 ; extra == 'h2' - - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda + sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0 + md5: e7cb0f5745e4c5035a460248334af7eb + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/uri-template?source=hash-mapping + size: 23990 + timestamp: 1733323714454 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a + md5: 9272daa869e03efe68833e3dc7a02130 + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 103172 + timestamp: 1767817860341 - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl name: validate-pyproject version: '0.25' @@ -10315,13 +9878,19 @@ packages: - python-discovery>=1 - typing-extensions>=4.13.2 ; python_full_version < '3.11' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl - name: watchdog - version: 6.0.0 - sha256: c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860 +- pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + name: virtualenv + version: 21.2.1 + sha256: bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 requires_dist: - - pyyaml>=3.10 ; extra == 'watchmedo' - requires_python: '>=3.9' + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs>=3.9.1,<5 + - python-discovery>=1 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl name: watchdog version: 6.0.0 @@ -10329,13 +9898,6 @@ packages: requires_dist: - pyyaml>=3.10 ; extra == 'watchmedo' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl - name: watchdog - version: 6.0.0 - sha256: ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2 - requires_dist: - - pyyaml>=3.10 ; extra == 'watchmedo' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl name: watchdog version: 6.0.0 @@ -10343,10 +9905,10 @@ packages: requires_dist: - pyyaml>=3.10 ; extra == 'watchmedo' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz name: watchdog version: 6.0.0 - sha256: afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c + sha256: 9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282 requires_dist: - pyyaml>=3.10 ; extra == 'watchmedo' requires_python: '>=3.9' @@ -10357,38 +9919,73 @@ packages: requires_dist: - pyyaml>=3.10 ; extra == 'watchmedo' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl - name: wcwidth - version: 0.6.0 - sha256: 1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - name: webcolors - version: 25.10.0 - sha256: 032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - name: webencodings - version: 0.5.1 - sha256: a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 -- pypi: https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl - name: websocket-client - version: 1.9.0 - sha256: af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef - requires_dist: - - pytest ; extra == 'test' - - websockets ; extra == 'test' - - python-socks ; extra == 'optional' - - wsaccel ; extra == 'optional' - - sphinx>=6.0 ; extra == 'docs' - - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' - - myst-parser>=2.0.0 ; extra == 'docs' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa + md5: c3197f8c0d5b955c904616b716aca093 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=hash-mapping + size: 71550 + timestamp: 1770634638503 +- conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda + sha256: 21f6c8a20fe050d09bfda3fb0a9c3493936ce7d6e1b3b5f8b01319ee46d6c6f6 + md5: 6639b6b0d8b5a284f027a2003669aa65 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/webcolors?source=hash-mapping + size: 18987 + timestamp: 1761899393153 +- conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6 + md5: 2841eb5bfc75ce15e9a0054b98dcd64d + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/webencodings?source=hash-mapping + size: 15496 + timestamp: 1733236131358 +- conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda + sha256: 42a2b61e393e61cdf75ced1f5f324a64af25f347d16c60b14117393a98656397 + md5: 2f1ed718fcd829c184a6d4f0f2e07409 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/websocket-client?source=hash-mapping + size: 61391 + timestamp: 1759928175142 - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl name: widgetsnbextension version: 4.0.15 sha256: 8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366 requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f + md5: 46e441ba871f524e2b067929da3051c2 + depends: + - __win + - python >=3.9 + license: LicenseRef-Public-Domain + purls: + - pkg:pypi/win-inet-pton?source=hash-mapping + size: 9555 + timestamp: 1733130678956 +- conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 + md5: 1cee351bf20b830d991dbe0bc8cd7dfe + license: MIT + license_family: MIT + purls: [] + size: 1176306 - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl name: wsproto version: 1.3.2 @@ -10396,6 +9993,42 @@ packages: requires_dist: - h11>=0.16.0,<1 requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 85189 + timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac + md5: 78a0fe9e9c50d2c381e8ee47e3ea437d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 83386 + timestamp: 1753484079473 +- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309 + md5: 433699cba6602098ae8957a323da2664 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 63944 + timestamp: 1753484092156 - pypi: https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl name: yarl version: 1.23.0 @@ -10405,55 +10038,37 @@ packages: - multidict>=4.0 - propcache>=0.2.1 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl - name: yarl - version: 1.23.0 - sha256: cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c - requires_dist: - - idna>=2.0 - - multidict>=4.0 - - propcache>=0.2.1 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: yarl - version: 1.23.0 - sha256: a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51 - requires_dist: - - idna>=2.0 - - multidict>=4.0 - - propcache>=0.2.1 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl name: yarl version: 1.23.0 - sha256: bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46 + sha256: 23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719 requires_dist: - idna>=2.0 - multidict>=4.0 - propcache>=0.2.1 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: yarl version: 1.23.0 - sha256: 99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598 + sha256: 1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52 requires_dist: - idna>=2.0 - multidict>=4.0 - propcache>=0.2.1 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: yarl version: 1.23.0 - sha256: dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432 + sha256: a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51 requires_dist: - idna>=2.0 - multidict>=4.0 - propcache>=0.2.1 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl name: yarl version: 1.23.0 - sha256: 411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069 + sha256: 63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70 requires_dist: - idna>=2.0 - multidict>=4.0 @@ -10468,6 +10083,59 @@ packages: - multidict>=4.0 - propcache>=0.2.1 requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 + md5: 755b096086851e1193f3b10347415d7c + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.21,<1.0.22.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 311150 + timestamp: 1772476812121 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda + sha256: 2705360c72d4db8de34291493379ffd13b09fd594d0af20c9eefa8a3f060d868 + md5: e85dcd3bde2b10081cdcaeae15797506 + depends: + - __osx >=11.0 + - libcxx >=19 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.21,<1.0.22.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 245246 + timestamp: 1772476886668 +- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda + sha256: b8568dfde46edf3455458912ea6ffb760e4456db8230a0cf34ecbc557d3c275f + md5: 1ab0237036bfb14e923d6107473b0021 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libsodium >=1.0.21,<1.0.22.0a0 + - krb5 >=1.22.2,<1.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 265665 + timestamp: 1772476832995 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 24194 + timestamp: 1764460141901 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 @@ -10479,17 +10147,6 @@ packages: purls: [] size: 601375 timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f - md5: 727109b184d680772e3122f40136d5ca - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 528148 - timestamp: 1764777156963 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 md5: ab136e4c34e97f34fb621d2592a393d8 @@ -10501,3 +10158,16 @@ packages: purls: [] size: 433413 timestamp: 1764777166076 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + sha256: 368d8628424966fd8f9c8018326a9c779e06913dd39e646cf331226acc90e5b2 + md5: 053b84beec00b71ea8ff7a4f84b55207 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 388453 + timestamp: 1764777142545 diff --git a/pixi.toml b/pixi.toml index ac6a7e02..c711a178 100644 --- a/pixi.toml +++ b/pixi.toml @@ -29,7 +29,7 @@ PYTHONPATH = "${PIXI_PROJECT_ROOT}/src;%PYTHONPATH%" [workspace] # Supported platforms for the lock file (pixi.lock) -platforms = ['win-64', 'linux-64', 'osx-64', 'osx-arm64'] +platforms = ['win-64', 'linux-64', 'osx-arm64'] # Channels for fetching packages channels = ['conda-forge'] @@ -53,17 +53,20 @@ macos = '14.0' # Default feature configuration [dependencies] -nodejs = '*' # Required for Prettier (non-Python formatting) +nodejs = '*' # Required for Prettier (non-Python formatting) +jupyterlab = '*' # Jupyter notebooks +pixi-kernel = '*' # Pixi Jupyter kernel [pypi-dependencies] # == [feature.default.pypi-dependencies] -easydynamics = { path = ".", editable = true, extras = ['dev'] } +#pip = '*' # Native package installer +easydynamics = { path = '.', editable = true, extras = ['dev'] } # Specific features: Set specific Python versions [feature.py-min.dependencies] -python = '3.11.*' -[feature.py-max.dependencies] python = '3.12.*' +[feature.py-max.dependencies] +python = '3.14.*' ############## # ENVIRONMENTS @@ -73,12 +76,12 @@ python = '3.12.*' # The `default` feature is always included in all environments. # Additional features can be specified per environment. -py-311-env = { features = ['default', 'py-min'] } -py-312-env = { features = ['default', 'py-max'] } +py-312-env = { features = ['py-min'] } +py-314-env = { features = ['py-max'] } # The `default` environment is always created and includes the `default` feature. # It does not need to be specified explicitly unless non-default features are included. -default = { features = ['default', 'py-max'] } +default = { features = ['py-max'] } ####### # TASKS @@ -91,9 +94,9 @@ default = { features = ['default', 'py-max'] } ################## unit-tests = 'python -m pytest tests/unit/ --color=yes -v' +functional-tests = 'python -m pytest tests/functional/ --color=yes -v' integration-tests = 'python -m pytest tests/integration/ --color=yes -n auto -v' -script-tests = 'python -m pytest tools/test_scripts.py --color=yes -n auto -v' -notebook-tests = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=600 --color=yes -n auto -v' +notebook-tests = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=1200 --color=yes -n auto -v' test = { depends-on = ['unit-tests'] } @@ -150,6 +153,7 @@ raw-metrics-json = 'radon raw -s -j src/' ############# unit-tests-coverage = 'pixi run unit-tests --cov=src/easydynamics --cov-report=term-missing' +functional-tests-coverage = 'pixi run functional-tests --cov=src/easydynamics --cov-report=term-missing' integration-tests-coverage = 'pixi run integration-tests --cov=src/easydynamics --cov-report=term-missing' docstring-coverage = 'interrogate -c pyproject.toml src/easydynamics' @@ -165,8 +169,8 @@ cov = { depends-on = [ notebook-convert = 'jupytext docs/docs/tutorials/*.py --from py:percent --to ipynb' notebook-strip = 'nbstripout docs/docs/tutorials/*.ipynb' -notebook-tweak = 'python tools/tweak_notebooks.py tutorials/' -notebook-exec = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=600 --overwrite --color=yes -n auto -v' +notebook-tweak = 'python tools/tweak_notebooks.py docs/docs/tutorials/' +notebook-exec = 'python -m pytest --nbmake docs/docs/tutorials/ --nbmake-timeout=1200 --overwrite --color=yes -n auto -v' notebook-prepare = { depends-on = [ #'notebook-convert', diff --git a/pyproject.toml b/pyproject.toml index 9e75a4a7..17452cd7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,10 +17,11 @@ classifiers = [ 'Operating System :: OS Independent', 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', ] -requires-python = '>=3.11' +requires-python = '>=3.12' dependencies = [ 'easyscience', # The base library of the EasyScience framework 'pooch', # Data downloader @@ -47,7 +48,6 @@ dev = [ 'pytest', # Testing 'pytest-cov', # Test coverage 'pytest-xdist', # Enable parallel testing - 'pytest-forked', # Isolate tests in subprocesses 'ruff', # Linting and formatting code 'radon', # Code complexity and maintainability 'validate-pyproject[all]', # Validate pyproject.toml @@ -256,7 +256,8 @@ select = [ # Ignore specific rules globally ignore = [ 'COM812', # https://docs.astral.sh/ruff/rules/missing-trailing-comma/ - # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc + # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] + 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc # Disable, as [tool.format_docstring] split one-line docstrings into the canonical multi-line layout 'D200', # https://docs.astral.sh/ruff/rules/unnecessary-multiline-docstring/ ] @@ -303,6 +304,12 @@ max-doc-length = 99 [tool.ruff.lint.pydocstyle] convention = 'numpy' +[tool.ruff.lint.pylint] +# Ruff counts `self`/`cls` in max-args; traditional pylint does not. +# Setting 6 here matches pylint's default of 5 (excluding self). +max-args = 6 +max-positional-args = 6 + ############################# # Configuration for pydoclint ############################# diff --git a/tests/functional/test_dummy.py b/tests/functional/test_dummy.py new file mode 100644 index 00000000..b45b191f --- /dev/null +++ b/tests/functional/test_dummy.py @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2025-2026 EasyDynamics contributors +# SPDX-License-Identifier: BSD-3-Clause + + +def test_dummy(): + calculated = 2 + 2 + expected = 4 + assert calculated == expected From 87a9cc609357d61fe89ff1067bff22df44b71802 Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Wed, 15 Apr 2026 19:47:14 +0200 Subject: [PATCH 05/10] Create base class (#144) * create bases classes * use base classes everywhere * add test --- pixi.lock | 4 +- pyproject.toml | 3 +- src/easydynamics/base_classes/__init__.py | 10 ++ .../base_classes/easydynamics_base.py | 69 +++++++++++ .../base_classes/easydynamics_modelbase.py | 109 ++++++++++++++++++ .../convolution/analytical_convolution.py | 14 ++- src/easydynamics/convolution/convolution.py | 14 ++- .../convolution/convolution_base.py | 66 +++++------ .../convolution/numerical_convolution.py | 14 ++- .../convolution/numerical_convolution_base.py | 16 ++- src/easydynamics/experiment/experiment.py | 4 +- .../components/model_component.py | 29 +---- .../diffusion_model/diffusion_model_base.py | 41 +------ src/easydynamics/sample_model/model_base.py | 82 ++++++------- src/easydynamics/utils/utils.py | 7 +- .../base_classes/test_easydynamics_base.py | 70 +++++++++++ .../test_easydynamics_modelbase.py | 80 +++++++++++++ .../convolution/test_convolution.py | 4 +- .../convolution/test_convolution_base.py | 40 +++---- .../convolution/test_numerical_convolution.py | 2 +- .../test_numerical_convolution_base.py | 10 +- .../components/test_model_component.py | 2 - tests/unit/easydynamics/utils/test_utils.py | 8 +- 23 files changed, 500 insertions(+), 198 deletions(-) create mode 100644 src/easydynamics/base_classes/__init__.py create mode 100644 src/easydynamics/base_classes/easydynamics_base.py create mode 100644 src/easydynamics/base_classes/easydynamics_modelbase.py create mode 100644 tests/unit/easydynamics/base_classes/test_easydynamics_base.py create mode 100644 tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py diff --git a/pixi.lock b/pixi.lock index efafa5aa..0d173a32 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3888,8 +3888,8 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+dev5 - sha256: ff8f55922804cdb622d0eb0aecd00105aeb30e470aa79b05bf6f92556ad8ce67 + version: 0.3.0+devdirty8 + sha256: 23d0790d25938acbe8e96780e087d1b29916963a0f6b4d04b906012d906c5cfb requires_dist: - darkdetect - easyscience diff --git a/pyproject.toml b/pyproject.toml index 17452cd7..befd67f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -256,8 +256,7 @@ select = [ # Ignore specific rules globally ignore = [ 'COM812', # https://docs.astral.sh/ruff/rules/missing-trailing-comma/ - # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] - 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc + # The following is replaced by 'D'/[tool.ruff.lint.pydocstyle] and [tool.pydoclint] 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc # Disable, as [tool.format_docstring] split one-line docstrings into the canonical multi-line layout 'D200', # https://docs.astral.sh/ruff/rules/unnecessary-multiline-docstring/ ] diff --git a/src/easydynamics/base_classes/__init__.py b/src/easydynamics/base_classes/__init__.py new file mode 100644 index 00000000..cb15f1dd --- /dev/null +++ b/src/easydynamics/base_classes/__init__.py @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +from easydynamics.base_classes.easydynamics_base import EasyDynamicsBase +from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase + +__all__ = [ + 'EasyDynamicsModelBase', + 'EasyDynamicsBase', +] diff --git a/src/easydynamics/base_classes/easydynamics_base.py b/src/easydynamics/base_classes/easydynamics_base.py new file mode 100644 index 00000000..1f38c9d3 --- /dev/null +++ b/src/easydynamics/base_classes/easydynamics_base.py @@ -0,0 +1,69 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +from easyscience.base_classes.new_base import NewBase + + +class EasyDynamicsBase(NewBase): + """Base class for all EasyDynamics classes.""" + + def __init__( + self, + name: str | None = 'MyEasyDynamicsModel', + display_name: str | None = 'MyEasyDynamicsModel', + unique_name: str | None = None, + ) -> None: + """ + Initialize the EasyDynamicsBase. + + Parameters + ---------- + name : str | None, default='MyEasyDynamicsModel' + Name of the model. + display_name : str | None, default='MyEasyDynamicsModel' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + + Raises + ------ + TypeError + If name is not a string or None. + """ + super().__init__(display_name=display_name, unique_name=unique_name) + + if name is not None and not isinstance(name, str): + raise TypeError('Name must be a string or None.') + self._name = name + + @property + def name(self) -> str | None: + """ + Get the name of the model. + + Returns + ------- + str | None + The name of the model. + """ + return self._name + + @name.setter + def name(self, name_str: str | None) -> None: + """ + Set the name of the model. + + Parameters + ---------- + name_str : str | None + The new name to set. + + Raises + ------ + TypeError + If name_str is not a string or None. + """ + + if name_str is not None and not isinstance(name_str, str): + raise TypeError('Name must be a string or None.') + self._name = name_str diff --git a/src/easydynamics/base_classes/easydynamics_modelbase.py b/src/easydynamics/base_classes/easydynamics_modelbase.py new file mode 100644 index 00000000..abc167c9 --- /dev/null +++ b/src/easydynamics/base_classes/easydynamics_modelbase.py @@ -0,0 +1,109 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +import scipp as sc +from easyscience.base_classes import ModelBase + +from easydynamics.utils.utils import _validate_unit + + +class EasyDynamicsModelBase(ModelBase): + """Base class for all EasyDynamics models.""" + + def __init__( + self, + unit: str | sc.Unit = 'meV', + name: str | None = 'MyEasyDynamicsModel', + display_name: str | None = 'MyEasyDynamicsModel', + unique_name: str | None = None, + ) -> None: + """ + Initialize the EasyDynamicsModelBase. + + Parameters + ---------- + unit : str | sc.Unit, default='meV' + Unit of the model. + name : str | None, default='MyEasyDynamicsModel' + Name of the model. + display_name : str | None, default='MyEasyDynamicsModel' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + + Raises + ------ + TypeError + If name is not a string or None. + """ + super().__init__(display_name=display_name, unique_name=unique_name) + self._unit = _validate_unit(unit) + + if name is not None and not isinstance(name, str): + raise TypeError('Name must be a string or None.') + self._name = name + + @property + def unit(self) -> str | sc.Unit | None: + """ + Get the unit of the model. + + Returns + ------- + str | sc.Unit | None + The unit of the model. + """ + + return self._unit + + @unit.setter + def unit(self, _unit_str: str) -> None: + """ + Unit is read-only and cannot be set directly. + + Parameters + ---------- + _unit_str : str + The new unit to set (ignored). + + Raises + ------ + AttributeError + Always raised to indicate that the unit is read-only. + """ + raise AttributeError( + f'Unit is read-only. Use convert_unit to change the unit between allowed types ' + f'or create a new {self.__class__.__name__} with the desired unit.' + ) # noqa: E501 + + @property + def name(self) -> str | None: + """ + Get the name of the model. + + Returns + ------- + str | None + The name of the model. + """ + return self._name + + @name.setter + def name(self, name_str: str) -> None: + """ + Set the name of the model. + + Parameters + ---------- + name_str : str + The new name to set. + + Raises + ------ + TypeError + If name_str is not a string or None. + """ + + if name_str is not None and not isinstance(name_str, str): + raise TypeError('Name must be a string or None.') + self._name = name_str diff --git a/src/easydynamics/convolution/analytical_convolution.py b/src/easydynamics/convolution/analytical_convolution.py index a835f215..1162381e 100644 --- a/src/easydynamics/convolution/analytical_convolution.py +++ b/src/easydynamics/convolution/analytical_convolution.py @@ -38,10 +38,12 @@ class AnalyticalConvolution(ConvolutionBase): def __init__( self, energy: np.ndarray | sc.Variable, - energy_unit: str | sc.Unit = 'meV', + unit: str | sc.Unit = 'meV', sample_components: ComponentCollection | ModelComponent | None = None, resolution_components: ComponentCollection | ModelComponent | None = None, energy_offset: Numeric | Parameter = 0.0, + display_name: str | None = 'MyConvolution', + unique_name: str | None = None, ) -> None: """ Initialize an AnalyticalConvolution. @@ -50,7 +52,7 @@ def __init__( ---------- energy : np.ndarray | sc.Variable 1D array of energy values where the convolution is evaluated. - energy_unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default='meV' The unit of the energy. sample_components : ComponentCollection | ModelComponent | None, default=None The sample model to be convolved. @@ -58,13 +60,19 @@ def __init__( The resolution model to convolve with. energy_offset : Numeric | Parameter, default=0.0 An offset to shift the energy values by. + display_name : str | None, default='MyConvolution' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. """ super().__init__( energy=energy, - energy_unit=energy_unit, + unit=unit, sample_components=sample_components, resolution_components=resolution_components, energy_offset=energy_offset, + display_name=display_name, + unique_name=unique_name, ) def convolution( diff --git a/src/easydynamics/convolution/convolution.py b/src/easydynamics/convolution/convolution.py index 32d3fb96..449be1a3 100644 --- a/src/easydynamics/convolution/convolution.py +++ b/src/easydynamics/convolution/convolution.py @@ -56,8 +56,10 @@ def __init__( extension_factor: Numeric | None = 0.2, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', - energy_unit: str | sc.Unit = 'meV', + unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, + display_name: str | None = 'MyConvolution', + unique_name: str | None = None, ) -> None: """ Initialize the Convolution class. @@ -80,10 +82,14 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. - energy_unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default='meV' The unit of the energy. normalize_detailed_balance : bool, default=True Whether to normalize the detailed balance correction. Default is True. + display_name : str | None, default='MyConvolution' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. """ self._convolution_plan_is_valid = False @@ -97,8 +103,10 @@ def __init__( extension_factor=extension_factor, temperature=temperature, temperature_unit=temperature_unit, - energy_unit=energy_unit, + unit=unit, normalize_detailed_balance=normalize_detailed_balance, + display_name=display_name, + unique_name=unique_name, ) self._reactions_enabled = True diff --git a/src/easydynamics/convolution/convolution_base.py b/src/easydynamics/convolution/convolution_base.py index d328dbed..dd98d5e9 100644 --- a/src/easydynamics/convolution/convolution_base.py +++ b/src/easydynamics/convolution/convolution_base.py @@ -5,12 +5,13 @@ import scipp as sc from easyscience.variable import Parameter +from easydynamics.base_classes import EasyDynamicsModelBase from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric -class ConvolutionBase: +class ConvolutionBase(EasyDynamicsModelBase): """ Base class for convolutions of sample and resolution models. @@ -22,8 +23,10 @@ def __init__( energy: np.ndarray | sc.Variable, sample_components: ComponentCollection | ModelComponent | None = None, resolution_components: ComponentCollection | ModelComponent | None = None, - energy_unit: str | sc.Unit = 'meV', + unit: str | sc.Unit = 'meV', energy_offset: Numeric | Parameter = 0.0, + display_name: str | None = 'MyConvolution', + unique_name: str | None = None, ) -> None: """ Initialize the ConvolutionBase. @@ -36,10 +39,14 @@ def __init__( The sample model to be convolved. resolution_components : ComponentCollection | ModelComponent | None, default=None The resolution model to convolve with. - energy_unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default='meV' The unit of the energy. energy_offset : Numeric | Parameter, default=0.0 The energy offset applied to the convolution. + display_name : str | None, default='MyConvolution' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. Raises ------ @@ -49,28 +56,29 @@ def __init__( sample_components is not a ComponentCollection or ModelComponent, or if resolution_components is not a ComponentCollection or ModelComponent. """ + + super().__init__( + unit=unit, + display_name=display_name, + unique_name=unique_name, + ) + if isinstance(energy, Numeric): energy = np.array([float(energy)]) if not isinstance(energy, (np.ndarray, sc.Variable)): raise TypeError(f'Energy must be a numpy ndarray or a scipp Variable. Got {energy}') - if not isinstance(energy_unit, (str, sc.Unit)): - raise TypeError('Energy_unit must be a string or sc.Unit.') - if isinstance(energy, np.ndarray): - energy = sc.array(dims=['energy'], values=energy, unit=energy_unit) + energy = sc.array(dims=['energy'], values=energy, unit=unit) if isinstance(energy_offset, Numeric): - energy_offset = Parameter( - name='energy_offset', value=float(energy_offset), unit=energy_unit - ) + energy_offset = Parameter(name='energy_offset', value=float(energy_offset), unit=unit) if not isinstance(energy_offset, Parameter): raise TypeError('Energy_offset must be a number or a Parameter.') self._energy = energy - self._energy_unit = energy_unit self._energy_offset = energy_offset if sample_components is not None and not ( @@ -202,62 +210,42 @@ def energy(self, energy: np.ndarray | sc.Variable) -> None: if isinstance(energy, sc.Variable): self._energy = energy - self._energy_unit = energy.unit - - @property - def energy_unit(self) -> str: - """ - Get the energy unit. - - Returns - ------- - str - The unit of the energy. - """ - return self._energy_unit - - @energy_unit.setter - def energy_unit(self, _unit_str: str) -> None: - """Energy unit.""" - raise AttributeError( - f'Unit is read-only. Use convert_unit to change the unit between allowed types ' - f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + self._unit = energy.unit - def convert_energy_unit(self, energy_unit: str | sc.Unit) -> None: + def convert_unit(self, unit: str | sc.Unit) -> None: """ Convert the energy and energy_offset to the specified unit. Parameters ---------- - energy_unit : str | sc.Unit + unit : str | sc.Unit The unit of the energy. Raises ------ TypeError - If energy_unit is not a string or scipp unit. + If unit is not a string or scipp unit. Exception If energy cannot be converted to the specified unit. """ - if not isinstance(energy_unit, (str, sc.Unit)): + if not isinstance(unit, (str, sc.Unit)): raise TypeError('Energy unit must be a string or scipp unit.') old_energy = self.energy.copy() try: - self.energy = sc.to_unit(self.energy, energy_unit) + self.energy = sc.to_unit(self.energy, unit) except Exception as e: self.energy = old_energy raise e old_energy_offset = self.energy_offset try: - self.energy_offset.convert_unit(energy_unit) + self.energy_offset.convert_unit(unit) except Exception as e: self.energy_offset = old_energy_offset raise e - self._energy_unit = energy_unit + self._unit = unit @property def sample_components(self) -> ComponentCollection | ModelComponent: diff --git a/src/easydynamics/convolution/numerical_convolution.py b/src/easydynamics/convolution/numerical_convolution.py index 87e6b49e..17fc3904 100644 --- a/src/easydynamics/convolution/numerical_convolution.py +++ b/src/easydynamics/convolution/numerical_convolution.py @@ -32,8 +32,10 @@ def __init__( extension_factor: Numeric | None = 0.2, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', - energy_unit: str | sc.Unit = 'meV', + unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, + display_name: str | None = 'MyConvolution', + unique_name: str | None = None, ) -> None: """ Initialize the NumericalConvolution object. @@ -56,10 +58,14 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. - energy_unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default='meV' The unit of the energy. normalize_detailed_balance : bool, default=True Whether to normalize the detailed balance correction. Default is True. + display_name : str | None, default='MyConvolution' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. """ super().__init__( energy=energy, @@ -70,8 +76,10 @@ def __init__( extension_factor=extension_factor, temperature=temperature, temperature_unit=temperature_unit, - energy_unit=energy_unit, + unit=unit, normalize_detailed_balance=normalize_detailed_balance, + display_name=display_name, + unique_name=unique_name, ) def convolution( diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index e2d6f5b6..d6bdc1ca 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -42,8 +42,10 @@ def __init__( extension_factor: Numeric | None = 0.2, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', - energy_unit: str | sc.Unit = 'meV', + unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, + display_name: str | None = 'MyConvolution', + unique_name: str | None = None, ) -> None: """ Initialize the NumericalConvolutionBase. @@ -66,10 +68,14 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. - energy_unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default='meV' The unit of the energy. normalize_detailed_balance : bool, default=True Whether to normalize the detailed balance correction. + display_name : str | None, default='MyConvolution' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. Raises ------ @@ -82,8 +88,10 @@ def __init__( energy=energy, sample_components=sample_components, resolution_components=resolution_components, - energy_unit=energy_unit, + unit=unit, energy_offset=energy_offset, + display_name=display_name, + unique_name=unique_name, ) if temperature is not None and not isinstance(temperature, (Numeric, Parameter)): @@ -434,7 +442,7 @@ def __repr__(self) -> str: f'energy=array of shape {self.energy.values.shape},\n ' f'sample_components={repr(self.sample_components)}, \n' f'resolution_components={repr(self.resolution_components)},\n ' - f'energy_unit={self._energy_unit}, ' + f'unit={self.unit}, ' f'upsample_factor={self.upsample_factor}, ' f'extension_factor={self.extension_factor}, ' f'temperature={self.temperature}, ' diff --git a/src/easydynamics/experiment/experiment.py b/src/easydynamics/experiment/experiment.py index 0d305400..909fb35a 100644 --- a/src/easydynamics/experiment/experiment.py +++ b/src/easydynamics/experiment/experiment.py @@ -7,15 +7,15 @@ import numpy as np import plopp as pp import scipp as sc -from easyscience.base_classes.new_base import NewBase from plopp.backends.matplotlib.figure import InteractiveFigure from scipp.io import load_hdf5 as sc_load_hdf5 from scipp.io import save_hdf5 as sc_save_hdf5 +from easydynamics.base_classes.easydynamics_base import EasyDynamicsBase from easydynamics.utils.utils import _in_notebook -class Experiment(NewBase): +class Experiment(EasyDynamicsBase): """ Holds data from an experiment as a sc.DataArray along with metadata. diff --git a/src/easydynamics/sample_model/components/model_component.py b/src/easydynamics/sample_model/components/model_component.py index f4d0c15e..33235025 100644 --- a/src/easydynamics/sample_model/components/model_component.py +++ b/src/easydynamics/sample_model/components/model_component.py @@ -8,13 +8,13 @@ import numpy as np import scipp as sc -from easyscience.base_classes.model_base import ModelBase from scipp import UnitError +from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase from easydynamics.utils.utils import Numeric -class ModelComponent(ModelBase): +class ModelComponent(EasyDynamicsModelBase): """Abstract base class for all model components.""" def __init__( @@ -28,15 +28,14 @@ def __init__( Parameters ---------- - unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default="meV" The unit of the model component. display_name : str | None, default=None A human-readable name for the component. unique_name : str | None, default=None A unique identifier for the component. """ - self.validate_unit(unit) - super().__init__(display_name=display_name, unique_name=unique_name) + super().__init__(unit=unit, display_name=display_name, unique_name=unique_name) self._unit = unit @property @@ -163,26 +162,6 @@ def _prepare_x_for_evaluate( return np.sort(x_in) - @staticmethod - def validate_unit(unit: str | sc.Unit | None) -> None: - """ - Validate that the unit is either a string or a scipp Unit. - - Parameters - ---------- - unit : str | sc.Unit | None - The unit to validate. - - Raises - ------ - TypeError - If unit is not a string or scipp Unit. - """ - if unit is not None and not isinstance(unit, (str, sc.Unit)): - raise TypeError( - f'unit must be None, a string, or a scipp Unit, got {type(unit).__name__}' - ) - def convert_unit(self, unit: str | sc.Unit) -> None: """ Convert the unit of the Parameters in the component. diff --git a/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py b/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py index 177d5e79..0e83351e 100644 --- a/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py +++ b/src/easydynamics/sample_model/diffusion_model/diffusion_model_base.py @@ -2,15 +2,15 @@ # SPDX-License-Identifier: BSD-3-Clause import scipp as sc -from easyscience.base_classes.model_base import ModelBase from easyscience.variable import DescriptorNumber from easyscience.variable import Parameter from scipp import UnitError +from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase from easydynamics.utils.utils import Numeric -class DiffusionModelBase(ModelBase): +class DiffusionModelBase(EasyDynamicsModelBase): """Base class for constructing diffusion models.""" def __init__( @@ -56,48 +56,13 @@ def __init__( scale = Parameter(name='scale', value=float(scale), fixed=False, min=0.0, unit=unit) - super().__init__(display_name=display_name, unique_name=unique_name) - self._unit = unit + super().__init__(display_name=display_name, unique_name=unique_name, unit=unit) self._scale = scale # ------------------------------------------------------------------ # Properties # ------------------------------------------------------------------ - @property - def unit(self) -> str | sc.Unit | None: - """ - Get the unit of the energy axis of the DiffusionModel. - - Returns - ------- - str | sc.Unit | None - Unit of the DiffusionModel. - """ - return str(self._unit) - - @unit.setter - def unit(self, _unit_str: str) -> None: - """ - The unit of the energy axis is read-only. - - To change the unit, use convert_unit or create a new DiffusionModel with the desired unit. - - Parameters - ---------- - _unit_str : str - The new unit to set (ignored). - - Raises - ------ - AttributeError - Always, since the unit is read-only. - """ - raise AttributeError( - f'Unit is read-only. Use convert_unit to change the unit between allowed types ' - f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 - @property def scale(self) -> Parameter: """ diff --git a/src/easydynamics/sample_model/model_base.py b/src/easydynamics/sample_model/model_base.py index 1b5d9363..7949f217 100644 --- a/src/easydynamics/sample_model/model_base.py +++ b/src/easydynamics/sample_model/model_base.py @@ -5,18 +5,17 @@ import numpy as np import scipp as sc -from easyscience.base_classes.model_base import ModelBase as EasyScienceModelBase from easyscience.variable import Parameter +from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.utils.utils import Numeric from easydynamics.utils.utils import Q_type from easydynamics.utils.utils import _validate_and_convert_Q -from easydynamics.utils.utils import _validate_unit -class ModelBase(EasyScienceModelBase): +class ModelBase(EasyDynamicsModelBase): """ Base class for Sample Models. @@ -54,10 +53,10 @@ def __init__( If components is not a ModelComponent or ComponentCollection. """ super().__init__( + unit=unit, display_name=display_name, unique_name=unique_name, ) - self._unit = _validate_unit(unit) self._Q = _validate_and_convert_Q(Q) if components is not None and not isinstance( @@ -145,12 +144,12 @@ def clear_components(self) -> None: @property def unit(self) -> str | sc.Unit | None: """ - Get the unit of the ComponentCollection. + Get the unit of the SampleModel. Returns ------- str | sc.Unit | None - The unit of the ComponentCollection. + The unit of the SampleModel. """ return self._unit @@ -175,41 +174,6 @@ def unit(self, _unit_str: str) -> None: f'or create a new {self.__class__.__name__} with the desired unit.' ) # noqa: E501 - def convert_unit(self, unit: str | sc.Unit) -> None: - """ - Convert the unit of the ComponentCollection and all its components. - - Parameters - ---------- - unit : str | sc.Unit - The new unit to convert to. - - Raises - ------ - TypeError - If the provided unit is not a string or sc.Unit. - Exception - If the provided unit is not compatible with the current unit. - """ - - old_unit = self._unit - - if not isinstance(unit, (str, sc.Unit)): - raise TypeError(f'Unit must be a string or sc.Unit, got {type(unit).__name__}') - try: - for component in self.components: - component.convert_unit(unit) - self._unit = unit - except Exception as e: - # Attempt to rollback on failure - try: - for component in self.components: - component.convert_unit(old_unit) - except Exception: # noqa: S110 - pass # Best effort rollback - raise e - self._on_components_change() - @property def components(self) -> list[ModelComponent]: """ @@ -315,6 +279,42 @@ def clear_Q(self, confirm: bool = False) -> None: # ------------------------------------------------------------------ # Other methods # ------------------------------------------------------------------ + + def convert_unit(self, unit: str | sc.Unit) -> None: + """ + Convert the unit of the ComponentCollection and all its components. + + Parameters + ---------- + unit : str | sc.Unit + The new unit to convert to. + + Raises + ------ + TypeError + If the provided unit is not a string or sc.Unit. + Exception + If the provided unit is not compatible with the current unit. + """ + + old_unit = self._unit + + if not isinstance(unit, (str, sc.Unit)): + raise TypeError(f'Unit must be a string or sc.Unit, got {type(unit).__name__}') + try: + for component in self.components: + component.convert_unit(unit) + self._unit = unit + except Exception as e: + # Attempt to rollback on failure + try: + for component in self.components: + component.convert_unit(old_unit) + except Exception: # noqa: S110 + pass # Best effort rollback + raise e + self._on_components_change() + def fix_all_parameters(self) -> None: """Fix all Parameters in all ComponentCollections.""" for par in self.get_all_variables(): diff --git a/src/easydynamics/utils/utils.py b/src/easydynamics/utils/utils.py index 3d383d9c..d9fc27c0 100644 --- a/src/easydynamics/utils/utils.py +++ b/src/easydynamics/utils/utils.py @@ -84,8 +84,11 @@ def _validate_unit(unit: str | sc.Unit | None) -> sc.Unit | None: if unit is not None and not isinstance(unit, (str, sc.Unit)): raise TypeError(f'unit must be None, a string, or a scipp Unit, got {type(unit).__name__}') - if isinstance(unit, str): - unit = sc.Unit(unit) + # if isinstance(unit, str): + # unit = sc.Unit(unit) + + if isinstance(unit, sc.Unit): + unit = str(unit) return unit diff --git a/tests/unit/easydynamics/base_classes/test_easydynamics_base.py b/tests/unit/easydynamics/base_classes/test_easydynamics_base.py new file mode 100644 index 00000000..a020fa97 --- /dev/null +++ b/tests/unit/easydynamics/base_classes/test_easydynamics_base.py @@ -0,0 +1,70 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +import pytest + +from easydynamics.base_classes import EasyDynamicsBase + + +class TestEasyDynamicsBase: + """Tests for the EasyDynamicsBase class.""" + + @pytest.fixture + def easy_dynamics_base(self): + """Fixture for creating an instance of EasyDynamicsBase.""" + + return EasyDynamicsBase(name='TestModel') + + def test_initialization(self, easy_dynamics_base): + """Test that the EasyDynamicsBase is initialized correctly.""" + + # WHEN THEN EXPECT + assert easy_dynamics_base.name == 'TestModel' + assert easy_dynamics_base.display_name == 'MyEasyDynamicsModel' + assert easy_dynamics_base.unique_name is not None + + def test_init_raises_type_error_for_invalid_name(self): + """Test that initializing with an invalid name raises a TypeError.""" + # WHEN THEN EXPECT + with pytest.raises(TypeError, match='Name must be a string or None.'): + EasyDynamicsBase(name=123) # Not a string + + def test_init_name_can_be_none(self): + """Test that initializing with name as None works correctly.""" + # WHEN THEN EXPECT + model = EasyDynamicsBase(name=None) + + # THEN EXPECT + assert model.name is None + + def test_name_setter_and_getter(self, easy_dynamics_base): + """Test that the name setter and getter work correctly.""" + # WHEN THEN EXPECT + assert easy_dynamics_base.name == 'TestModel' + + # THEN + easy_dynamics_base.name = 'NewName' + + # EXPECT + assert easy_dynamics_base.name == 'NewName' + + # THEN + easy_dynamics_base.name = None + + # EXPECT + assert easy_dynamics_base.name is None + + @pytest.mark.parametrize( + 'invalid_name', + [ + 123, # Not a string + [1, 2, 3], # Not a string + {'name': 'Test'}, # Not a string + ], + ids=['integer', 'list', 'dict'], + ) + def test_name_setter_invalid_type(self, easy_dynamics_base, invalid_name): + """Test that setting the name to an invalid type raises a TypeError.""" + # WHEN THEN EXPECT + with pytest.raises(TypeError, match='Name must be a string or None.'): + easy_dynamics_base.name = invalid_name diff --git a/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py b/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py new file mode 100644 index 00000000..8d7612e6 --- /dev/null +++ b/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py @@ -0,0 +1,80 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +import pytest + +from easydynamics.base_classes import EasyDynamicsModelBase + + +class TestEasyDynamicsModelBase: + """Tests for the EasyDynamicsModelBase class.""" + + @pytest.fixture + def easy_dynamics_modelbase(self): + """Fixture for creating an instance of EasyDynamicsModelBase.""" + + return EasyDynamicsModelBase(name='TestModel', unit='meV') + + def test_initialization(self, easy_dynamics_modelbase): + """Test that the EasyDynamicsModelBase is initialized correctly.""" + + # WHEN THEN EXPECT + assert easy_dynamics_modelbase.name == 'TestModel' + assert easy_dynamics_modelbase.display_name == 'MyEasyDynamicsModel' + assert easy_dynamics_modelbase.unique_name is not None + + def test_init_raises_type_error_for_invalid_name(self): + """Test that initializing with an invalid name raises a TypeError.""" + # WHEN THEN EXPECT + with pytest.raises(TypeError, match='Name must be a string or None.'): + EasyDynamicsModelBase(name=123) # Not a string + + def test_init_name_can_be_none(self): + """Test that initializing with name as None works correctly.""" + # WHEN THEN EXPECT + model = EasyDynamicsModelBase(name=None) + + # THEN EXPECT + assert model.name is None + + def test_name_setter_and_getter(self, easy_dynamics_modelbase): + """Test that the name setter and getter work correctly.""" + # WHEN THEN EXPECT + assert easy_dynamics_modelbase.name == 'TestModel' + + # THEN + easy_dynamics_modelbase.name = 'NewName' + + # EXPECT + assert easy_dynamics_modelbase.name == 'NewName' + + # THEN + easy_dynamics_modelbase.name = None + + # EXPECT + assert easy_dynamics_modelbase.name is None + + @pytest.mark.parametrize( + 'invalid_name', + [ + 123, # Not a string + [1, 2, 3], # Not a string + {'name': 'Test'}, # Not a string + ], + ids=['integer', 'list', 'dict'], + ) + def test_name_setter_invalid_type(self, easy_dynamics_modelbase, invalid_name): + """Test that setting the name to an invalid type raises a TypeError.""" + # WHEN THEN EXPECT + with pytest.raises(TypeError, match='Name must be a string or None.'): + easy_dynamics_modelbase.name = invalid_name + + def test_unit_property(self, easy_dynamics_modelbase): + # WHEN THEN EXPECT + + assert easy_dynamics_modelbase.unit == 'meV' + + def test_unit_setter_raises(self, easy_dynamics_modelbase): + # WHEN / THEN / EXPECT + with pytest.raises(AttributeError, match='Use convert_unit to change '): + easy_dynamics_modelbase.unit = 'K' diff --git a/tests/unit/easydynamics/convolution/test_convolution.py b/tests/unit/easydynamics/convolution/test_convolution.py index 468df680..ad70ad5a 100644 --- a/tests/unit/easydynamics/convolution/test_convolution.py +++ b/tests/unit/easydynamics/convolution/test_convolution.py @@ -76,7 +76,7 @@ def test_init(self, default_convolution): assert default_convolution.upsample_factor == 5 assert default_convolution.extension_factor == 0.2 assert default_convolution.temperature is None - assert default_convolution.energy_unit == 'meV' + assert default_convolution.unit == 'meV' assert default_convolution.normalize_detailed_balance is True assert isinstance(default_convolution._energy_grid, EnergyGrid) @@ -110,7 +110,7 @@ def test_init_components(self, convolution_with_components): assert convolution_with_components.upsample_factor == 5 assert convolution_with_components.extension_factor == 0.2 assert convolution_with_components.temperature is None - assert convolution_with_components.energy_unit == 'meV' + assert convolution_with_components.unit == 'meV' assert convolution_with_components.normalize_detailed_balance is True assert isinstance(convolution_with_components._energy_grid, EnergyGrid) diff --git a/tests/unit/easydynamics/convolution/test_convolution_base.py b/tests/unit/easydynamics/convolution/test_convolution_base.py index 44ae133c..393c4af3 100644 --- a/tests/unit/easydynamics/convolution/test_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_convolution_base.py @@ -78,7 +78,7 @@ def test_init_energy_numerical_none_offset(self): 'energy': 'invalid', 'sample_components': ComponentCollection(), 'resolution_components': ComponentCollection(), - 'energy_unit': 'meV', + 'unit': 'meV', 'energy_offset': 0, }, 'Energy must be', @@ -88,7 +88,7 @@ def test_init_energy_numerical_none_offset(self): 'energy': np.linspace(-10, 10, 100), 'sample_components': 'invalid', 'resolution_components': ComponentCollection(), - 'energy_unit': 'meV', + 'unit': 'meV', 'energy_offset': 0, }, ( @@ -101,7 +101,7 @@ def test_init_energy_numerical_none_offset(self): 'energy': np.linspace(-10, 10, 100), 'sample_components': ComponentCollection(), 'resolution_components': 'invalid', - 'energy_unit': 'meV', + 'unit': 'meV', 'energy_offset': 0, }, ( @@ -114,17 +114,17 @@ def test_init_energy_numerical_none_offset(self): 'energy': np.linspace(-10, 10, 100), 'sample_components': ComponentCollection(), 'resolution_components': ComponentCollection(), - 'energy_unit': 123, + 'unit': 123, 'energy_offset': 0, }, - 'Energy_unit must be ', + 'unit must be ', ), ( { 'energy': np.linspace(-10, 10, 100), 'sample_components': ComponentCollection(), 'resolution_components': ComponentCollection(), - 'energy_unit': 'meV', + 'unit': 'meV', 'energy_offset': 'invalid', }, 'Energy_offset must be ', @@ -173,48 +173,48 @@ def test_energy_setter_invalid_type_raises(self, convolution_base): ): convolution_base.energy = 'invalid' - def test_energy_unit_property(self, convolution_base): + def test_unit_property(self, convolution_base): # WHEN THEN EXPECT assert convolution_base.energy.unit == 'meV' - def test_energy_unit_setter_raises(self, convolution_base): + def test_unit_setter_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( AttributeError, match='Use convert_unit to change the unit between allowed types ', ): - convolution_base.energy_unit = 'K' + convolution_base.unit = 'K' - def test_convert_energy_unit(self, convolution_base): + def test_convert_unit(self, convolution_base): # WHEN THEN - convolution_base.convert_energy_unit('eV') + convolution_base.convert_unit('eV') # EXPECT assert convolution_base.energy.unit == 'eV' - assert convolution_base.energy_unit == 'eV' + assert convolution_base.unit == 'eV' assert np.allclose(convolution_base.energy.values, np.linspace(-0.01, 0.01, 100)) - def test_convert_energy_unit_invalid_type_raises(self, convolution_base): + def test_convert_unit_invalid_type_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( TypeError, match='Energy unit must be a string or scipp unit.', ): - convolution_base.convert_energy_unit(123) + convolution_base.convert_unit(123) - def test_convert_energy_unit_invalid_unit_rollback(self, convolution_base): + def test_convert_unit_invalid_unit_rollback(self, convolution_base): # WHEN THEN with pytest.raises( UnitError, match='Conversion from `meV` to `s` is not valid.', ): - convolution_base.convert_energy_unit('s') + convolution_base.convert_unit('s') # EXPECT - assert convolution_base.energy_unit == 'meV' + assert convolution_base.unit == 'meV' assert np.allclose(convolution_base.energy.values, np.linspace(-10, 10, 100)) - def test_convert_energy_unit_invalid_offset_unit_rollback(self, convolution_base): + def test_convert_unit_invalid_offset_unit_rollback(self, convolution_base): # WHEN convolution_base.energy_offset = Parameter(name='energy_offset', value=5, unit='s') @@ -223,10 +223,10 @@ def test_convert_energy_unit_invalid_offset_unit_rollback(self, convolution_base UnitError, match='Conversion from `s` to `meV` is not valid.', ): - convolution_base.convert_energy_unit('meV') + convolution_base.convert_unit('meV') # EXPECT - assert convolution_base.energy_unit == 'meV' + assert convolution_base.unit == 'meV' assert convolution_base.energy_offset.unit == 's' def test_energy_offset_property(self, convolution_base): diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution.py b/tests/unit/easydynamics/convolution/test_numerical_convolution.py index 29e5dfd6..de28a2bc 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution.py @@ -48,7 +48,7 @@ def test_init(self, default_numerical_convolution): assert default_numerical_convolution.upsample_factor == 5 assert default_numerical_convolution.extension_factor == 0.2 assert default_numerical_convolution.temperature is None - assert default_numerical_convolution.energy_unit == 'meV' + assert default_numerical_convolution.unit == 'meV' assert default_numerical_convolution.normalize_detailed_balance is True assert isinstance(default_numerical_convolution._energy_grid, EnergyGrid) diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py index 3934eefb..1c462608 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py @@ -46,7 +46,7 @@ def test_init(self, default_numerical_convolution_base): assert default_numerical_convolution_base.upsample_factor == 5 assert default_numerical_convolution_base.extension_factor == 0.2 assert default_numerical_convolution_base.temperature is None - assert default_numerical_convolution_base.energy_unit == 'meV' + assert default_numerical_convolution_base.unit == 'meV' assert default_numerical_convolution_base.normalize_detailed_balance is True assert isinstance(default_numerical_convolution_base._energy_grid, EnergyGrid) @@ -63,7 +63,7 @@ def test_init_with_custom_parameters(self): extension_factor = 0.5 temperature = 300.0 temperature_unit = 'K' - energy_unit = 'meV' + unit = 'meV' normalize_detailed_balance = False # THEN @@ -75,7 +75,7 @@ def test_init_with_custom_parameters(self): extension_factor=extension_factor, temperature=temperature, temperature_unit=temperature_unit, - energy_unit=energy_unit, + unit=unit, normalize_detailed_balance=normalize_detailed_balance, ) @@ -84,7 +84,7 @@ def test_init_with_custom_parameters(self): assert numerical_convolution_base.extension_factor == extension_factor assert numerical_convolution_base.temperature.value == temperature assert numerical_convolution_base.temperature.unit == temperature_unit - assert numerical_convolution_base.energy_unit == energy_unit + assert numerical_convolution_base.unit == unit assert numerical_convolution_base.normalize_detailed_balance == normalize_detailed_balance assert isinstance(numerical_convolution_base._energy_grid, EnergyGrid) @@ -502,7 +502,7 @@ def test_repr(self, default_numerical_convolution_base): assert 'resolution_components=' in repr_str # Important parameters - assert 'energy_unit=meV' in repr_str + assert 'unit=meV' in repr_str assert 'upsample_factor=5' in repr_str assert 'extension_factor=0.2' in repr_str assert 'temperature=None' in repr_str diff --git a/tests/unit/easydynamics/sample_model/components/test_model_component.py b/tests/unit/easydynamics/sample_model/components/test_model_component.py index 9e47d4e9..24f3ac57 100644 --- a/tests/unit/easydynamics/sample_model/components/test_model_component.py +++ b/tests/unit/easydynamics/sample_model/components/test_model_component.py @@ -8,8 +8,6 @@ from easydynamics.sample_model.components.model_component import ModelComponent -Numeric = float | int - class DummyComponent(ModelComponent): def __init__(self): diff --git a/tests/unit/easydynamics/utils/test_utils.py b/tests/unit/easydynamics/utils/test_utils.py index 7aa72a78..680d2a28 100644 --- a/tests/unit/easydynamics/utils/test_utils.py +++ b/tests/unit/easydynamics/utils/test_utils.py @@ -92,13 +92,13 @@ def test_validate_unit_valid(self, unit_input): if unit_input is None: assert unit is None else: - assert isinstance(unit, sc.Unit) + assert isinstance(unit, str) def test_validate_unit_string_conversion(self): - unit = _validate_unit('meV') + unit = _validate_unit(sc.Unit('meV')) - assert isinstance(unit, sc.Unit) - assert unit == sc.Unit('meV') + assert isinstance(unit, str) + assert unit == 'meV' @pytest.mark.parametrize( 'unit_input', From 4acf563f6a2a09650867e5b1c9a91ac18b6df204 Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Wed, 15 Apr 2026 20:02:47 +0200 Subject: [PATCH 06/10] Add more tutorials (#153) * Update tutorial0 * more tutorial, fix analysis1d bug * Add another tutorial * Add new tutorials to index * fix minor issue * Update link to data in tutorial --- .../tutorials/data/create_fake_data.ipynb | 123 ++++++ .../tutorials/data/fake_advanced_data.hdf5 | Bin 0 -> 409056 bytes .../docs/tutorials/data/fake_simple_data.hdf5 | Bin 0 -> 409056 bytes docs/docs/tutorials/index.md | 5 + docs/docs/tutorials/tutorial0_basics.ipynb | 396 ++++++++++++++++++ .../tutorials/tutorial0_more_advanced.ipynb | 320 ++++++++++++++ docs/docs/tutorials/tutorial1_brownian.ipynb | 6 +- .../tutorials/tutorial2_nanoparticles.ipynb | 10 +- docs/mkdocs.yml | 2 + pixi.lock | 2 +- src/easydynamics/__init__.py | 8 + src/easydynamics/analysis/analysis1d.py | 40 +- src/easydynamics/analysis/analysis_base.py | 6 +- .../easydynamics/analysis/test_analysis1d.py | 13 +- 14 files changed, 893 insertions(+), 38 deletions(-) create mode 100644 docs/docs/tutorials/data/create_fake_data.ipynb create mode 100644 docs/docs/tutorials/data/fake_advanced_data.hdf5 create mode 100644 docs/docs/tutorials/data/fake_simple_data.hdf5 create mode 100644 docs/docs/tutorials/tutorial0_basics.ipynb create mode 100644 docs/docs/tutorials/tutorial0_more_advanced.ipynb diff --git a/docs/docs/tutorials/data/create_fake_data.ipynb b/docs/docs/tutorials/data/create_fake_data.ipynb new file mode 100644 index 00000000..ccf3aa19 --- /dev/null +++ b/docs/docs/tutorials/data/create_fake_data.ipynb @@ -0,0 +1,123 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "106d6b6e", + "metadata": {}, + "source": [ + "This creates the data used in the tutorials." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c87bc1c3", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import plopp as pp\n", + "import scipp as sc\n", + "\n", + "import easydynamics.sample_model as sm\n", + "from easydynamics.sample_model import ComponentCollection\n", + "from easydynamics.sample_model import Gaussian\n", + "from easydynamics.sample_model.sample_model import SampleModel\n", + "\n", + "%matplotlib widget" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5823f28f", + "metadata": {}, + "outputs": [], + "source": [ + "# Create data for tutorial0_basics.ipynb. Data is called fake_simple_data.hdf5.\n", + "\n", + "Q = sc.linspace(start=0.2, stop=2.1, num=32, unit='1/angstrom', dim='Q')\n", + "\n", + "component_collection = ComponentCollection()\n", + "component_collection.append_component(Gaussian(area=0.45, width=0.1))\n", + "\n", + "model = SampleModel(components=component_collection, Q=Q)\n", + "\n", + "for i in range(Q.size):\n", + " components = model.get_component_collection(i)\n", + " offset = 0.0\n", + " components.components[0].area = 3.79 - 0.2 * Q[i].value\n", + "\n", + "energy = sc.linspace(start=-3.0, stop=3.0, num=756, unit='meV', dim='energy')\n", + "\n", + "intensity = sc.array(values=model.evaluate(x=energy), dims=['Q', 'energy'])\n", + "\n", + "intensity_dataarray = sc.DataArray(data=intensity, coords={'Q': Q, 'energy': energy})\n", + "\n", + "noise = np.random.normal(loc=0.0, scale=1.55, size=intensity_dataarray.shape)\n", + "intensity_dataarray.values += noise\n", + "intensity_dataarray.variances = noise**2\n", + "\n", + "sc.io.save_hdf5(intensity_dataarray, 'fake_simple_data.hdf5')\n", + "pp.slicer(intensity_dataarray)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8e4c806", + "metadata": {}, + "outputs": [], + "source": [ + "# Create data for tutorial0_more_advanced.ipynb. Data is called fake_advanced_data.hdf5.\n", + "Q = sc.linspace(start=0.2, stop=2.1, num=32, unit='1/angstrom', dim='Q')\n", + "\n", + "component_collection = sm.ComponentCollection()\n", + "component_collection.append_component(sm.Gaussian(area=0.45, width=0.05))\n", + "component_collection.append_component(sm.Lorentzian(area=10.45, width=0.4))\n", + "component_collection.append_component(\n", + " sm.DampedHarmonicOscillator(area=1.45, width=0.1, center=1.4)\n", + ")\n", + "component_collection.append_component(sm.Polynomial(coefficients=[1.2, 0.2]))\n", + "model = sm.SampleModel(components=component_collection, Q=Q)\n", + "\n", + "\n", + "energy = sc.linspace(start=-3.0, stop=3.0, num=756, unit='meV', dim='energy')\n", + "intensity_values = np.zeros((Q.size, energy.size))\n", + "for i in range(Q.size):\n", + " components = model.get_component_collection(i)\n", + " offset = sc.scalar(value=np.random.uniform(0.05, 0.15), unit='meV')\n", + "\n", + " components.components[0].area = 3.79 - 0.2 * Q[i].value\n", + " components.components[2].center = 1.4 + Q[i].value / 10.0\n", + " components.components[2].area = 2.45 + Q[i].value / 10.0\n", + "\n", + " intensity_values[i, :] = components.evaluate(x=energy.values - offset.value)\n", + "\n", + "\n", + "intensity = sc.array(values=intensity_values, dims=['Q', 'energy'])\n", + "intensity_dataarray = sc.DataArray(data=intensity, coords={'Q': Q, 'energy': energy})\n", + "\n", + "noise = np.random.normal(loc=0.0, scale=0.35, size=intensity_dataarray.shape)\n", + "intensity_dataarray.values += noise\n", + "intensity_dataarray.variances = noise**2\n", + "\n", + "sc.io.save_hdf5(intensity_dataarray, 'fake_advanced_data.hdf5')\n", + "pp.slicer(intensity_dataarray)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.14.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/docs/tutorials/data/fake_advanced_data.hdf5 b/docs/docs/tutorials/data/fake_advanced_data.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..d83903fb0b33a1e3acd00db35e6c3eddb975f709 GIT binary patch literal 409056 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
<~4@YUE|(S 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 z zZ96^DH+QO5>qA&0BZS>~xRqgq4I;7yoR=nO!KHrd8{FZ+_VOQo0k}^t7wiyyt;`BR zY*XzF`1+5lOtSXzq3{0yJg9cy0MXk4i~%2+K;qSpaYF^v<;8ZZr|w|~tH1+8iYjcN zt7RO1tQLJ%Z}e`bVD4S7!!cbMee6!7`UPGF955#7Kd{pU`7UqfgD9BiFW4x(?Rg11 zC`~O1N!Vi#?2Le{Wh511O-g+q-sS-MZJDFeQrzHr;ao{6&ePPAzh3uIUL| zVbrJ8YOg3E2j?Z1{=aD|L_NJF_t1zF*ajW$jv=3>OI${?b(|BDT1E96gpgnJ?!UmN z$gg*ElwAB|$PN1K;UzkjRM>MQ`YP-e<9yk|~ zrLBFMA9lZTQ21<#Jr&Y*I;xj>A+T$>Nvwz$dzoALnvd{7m9e8qhbD4ud3V^b5QZSLsA}6t%+XJF&}SN;4siK>)v~Jqm_GFy48Mjx{Bg#|VKzcQ z8~@*-q;{MSvg-<@#tMT&7Hzr@et+#X9GV_Qj_%M7ts8Y?Vvr`MG5r~N;YSso8*y-n z0lPtR!TWe|aFssfoog!wQNE)L7nlJ3T+ z+iJ`=SDDs}!zV^RCba z^GiXJ_HSMGy;9IEqs(yx{oIYObI8ZXGGL}4|K46u8uB_19Jf)Gf!aIq2BIHi;aS=d zj(=-1kk4GeUE90?Y7?(z)qL3myY9US`(~;L$Diz@=Dt;e%Mn+oz-GIigd#N< z+O2D7_Ieu_F^=*q-qZj|>RgoXfF_ug94o!Qstr{^)9VUV1hVzH(>6{6{JpGLW;~+@ z1_v7wjQ8sU+opn+_+ot+3=znj^wI~9C%%EL0{XB+{NG+NZ#_7||8XnVBY(o3^zvN=;VONtM^PlQ@fm(b6e za%_;vjt^RHa)n8-^TKY{J@JuvpB_B(o}q=8AFj@tuEYv+gF?3GjK(Z4+L_`ioFu?CdKK#KHNa(=be~<{p~f5+20gbxnZv6QlHBrFEGTn+?wsH@wiI%uj0<>vi%~_h*uZ%C%sxw6?AKt`qpTwLPqrxM zzx+}*P_dm>{`sB*-n@Mid;)o4Jz}e^cW)s7#z?j(Ee88bv9>dKiU}S%jT>LAp+duq z>`v2z9B^CDcW!GR8z`=;4>+LD*{DK4PR)lMUYeJBSz=DKQn;O8yUOv07F?{b5L@~2S~U|4^cu+jpW~9WE#Qu9 zBKByC&Dg)AXMpbiMB}O-GQgZc?2fHh(69MU{d+CW3z9fUdCgB&IP%%Pb>|`zXw!eA zOlmTK;7&mUy>E=LVmbKUUKhE;U)AD@u*dc+{|6QcT(>rAx}+S_VuHOrFTO6a(81G( zS^+92nSthSmg$>A__~a_b)Lw-4$3;sFuR=jV>f7N~4~Lh}&k4%w-x$IbBmOn>;d+isi_{O4%5JkLP`mczEMcu{ZP z9Lp%W-wEduc~-gR=tulqC^Y^NeWk-CHu^f)J21nbsXzFe0Xi4&mMWd3hv(GDkOTwN z@6C75o6|AFrY#nf*C!Z2fx1t1N*#U4gBcy#`|07p%~RH7iVoTYBHhf+GlA&#s%$}L zoO9Qyp1zgA2-ZP#`rZ1hP-SOQM|EO{t=ARHIWTWfn*8qzCakKCpguRBiA9ADoP=AM6R`1)BS^ zJY6;TKGz$yS7kH4Ppqu$zf;Nyr-L**4zO{9sX6=D2Y2LR(Z)-D`iDHeqDuzqyEtK! zdy3LkW_B=&(`E}%V1{sC!KADYEa3ksy3HFoe?2F(6SFkYPjEst%nCgWhrc$INAF;R zEhfh&kF}xabfqEXKJtw&Se}rG>ZAjTsTh|re!m~l()jMvM$dBE@vC%Fj3CHkk?Dp# zn8eUuC2N@5eVw8ta1XuD@)~~5M)7#P|2fQ2Ndval}uz(nI~xlFBv6vEt4avdD?o|H(+@6-O=R<@Sc>X)c6?6<_w^M(!{+*8()qNf9|2gh}0 zl9oxS7wgSbRrDVAOwTTaEfER*yjDxrHPU`))zRW0?(GDO?}dge6FoZKMXv5yG96Q^ zn{)~Ny0IU+e|oMF=iyQx4+9!F(b7G!#e9X({tYnSSh7IEK8CPHu;4tq%_}DQ8x7D! z+Yi2P9PpmH zw6z}R_;tc_W>d>6B$je(g8kz%F*_yHmGwSO^o*U^x-^T|@mP^wF+a|&d+Y>%1>$*G#`T1E`@{m_PD`u%gFc0` z^GMfIxi`@h@d(T6nb zZ#4W8=zd8HIal?@mZ%i)Kjxp5uxXWui_CpvMc&O(j(*!i)eGd3K&q<0B?a#6;95D3 z_p6Y8$MXoY^$fa4_W~`9fja~)u^2$KW@t@mTUwI7qMj6an+=UhEBqL`v zCi*&ZVGnL-7T2J_;82|vy$kls7lb6o(BqfUSH_ZhZ=L8h%%0809=)Tf{MP_Hhr7CO z{t<1xNSIxrz?$93qO9KEjq_!f)2Px zd#^n@Geel{{5y6zBp)~9%Ruy>9y zTY6aXTOenJTwwltVS=a}J;5b`K8>Eo4Gl(rKamgZ|FO4joFe=)!^k3d+afU-a2ygs*t(-a;-j<#c?l9VTw&2K1`82Z@)ek;L7` zA;PctN^?B{n}v1uBI=JZ2TWrosfT&s{3l#%wI`4Velzygqu~K^Ct+jwu@}fsIeJ7k zDSnY8u$&dp4Vop7dQ`q`?ieFxZLG)k?OY;FaocFJKHxn2vdFCE+$0HIk=VfCKR|4z zy3|~6%n?1NI6h{rF;ac>A$yMAZz3wFOebD7L*(BbqWWV4s(-tlSw-eBQ5u?fHW)TZ z(nF4&(|y!KltTK&Hz^=DMYUQ}lWUH=)L2O@knAQZY)#7rmj;M_#-wxJXfsK&elF$k zxtf$)rRka?e|}$rQhqmnoT0G(I@=xWH{|w(d)^)(xjp{OXV&M*HoO1S4je(=Jk7y^ zMBMY{(m$!Vk8^+12h}C>jI$)e)l9U`qMrnP6!fUxKS4rvE9|BsM+GjKT(d^r`lr30 zERW~l_qnhu=CH&h`Jj@(zkhm&1V$Ww=!Sc&frIyLgp9k$-&W~Zm456!6fX*F;r>ky zzp)W`v1^zZn!JALym6ceirU=T{IQi74l-(H>Y*Qaq#?b_Zh-8kcbiVfIr?Q;PMP4E zDboMK@Uu&EKcW3+A!msB`sOWxyF!>32-60yhD78KF=yX)b3;$W!rqa%O+x6su*m%A z@qC&{Tr#=m-i7n)*n7U(>f>Z+#pKrL^%08UZ35+L^>yKJn3IqC0$Zw)lud@ z$?AW%YImyO`{dDqy(jOHcP%1mq{3&B*g0?c5XC-0?&%(TGP#U?1V`VPl5ASwq^&!kiu2b!=i5W{ z#wN%!Y2YFnYvj_|KIXUq^jRe_pYuST*`I=oe!>s&{y3g-QAm#-Zmb#7{6l`pr(FJ3 zC-h9c=$F^+SHXP1Td8MX;~AjhYp-N9=06(Sws>rbVgTCbZP!Ll;Q8Sj-3NyYc&>D5 z70mRe!bTbsK}G}gO5HjmCd7?>VTYE*Xc;#6)$#SyHl_{eN4l`neuV=#bM`D=?&F3} zO`X{?uAERg{^^IM4sxUWZYEsqmW@RYpTh&h<4zx%6~xj=VR%G?EcxNv&L9UKO&Z;ST&Meo9E70RwPRmmm3(PRBeQ@uG3|1((pIjb~ zTooOaQ(9Z?>ER3AbrI?POfW6%a5R|UxonU)Bw;>4#h;~Ns}eq^t>$bX-?$SiF4 zpFr-_a3E#*zZm%E%Nk`_0qEJAoj2GmUQ-15_;hJ z_L47MkPaHdsGV!v6c}lm(nwueBR_Hn1X`SDNx0h0l?CJ>hA|xUE}+MA_usPrP8Bbc z^B41r8nS5dymOI*ihH?|y%*D4HsapouG%X_HS{0<Yv?$UZ#oekN(tZd3T%+0a(koCMh?jGS)6DvWk;Vur=Z#a9#~bW$oY4K3nJLXtOO@GA<;ir zy^tRL&JX7n90IvuyKkiB1Dw|#Yt*7k5>b`VU7C(GaIUkW}i+STuroMV^ zLhwP*;}ox<0I0pb{mOYx5Jc`|eLC_>0EFZNf&uf(vtLT37^X4z_bHV#=OS`S-rlPl z*ARo18w+eTzCz%1d7UMuUI=uQx>mj$iGXMK;&Q8iD9j8dxIBsy1CKU2Rdz!$h+-9g z{_~dzB;9y_G_70|^z8rpR{m2QPC!n+lD#BQ>1sHlmPBD>QkWVqE(tc&(*i=sO%X9@ zF|m@9g5HU9OHw@&AmAFPm0u$XkH#-s3O7iCfRf42*f`|bnC_yreku(?u>!??x*Nfo zWy678+oZuELF9rs!zQSjx61wSXcMH0ZmGP?AP=EzH@qh|D}j>iV9`IG&7e?_Hpz*6 z8v*L?xa|+O0=vNwZ;ISDaO#O<{i&n{y-97C*3W8#RGxHGR-+!+Ol<#UrvO0x;PtV5 zuK`?7{JekpnE_Z`)ViaSY6xD*72Ebo7(w&5xn8*>L(n-|to*s(01Q6am~Is_fY@!U zDdRr~grt`T^-}cVo|(0u%61(nzwUX*r9=zN4@_wvqtS%s7x!K#du;^)9es;WDr(@8 zZE<6%QWf$n!gpl!D1ll&|Jz5;V3};WD7fbdR#Jw?V zQ^mR1=x!5&JGznA6I%J??JSH6Nalyywc>1g^u=Dx4H2Egp4)(} zP~yusybu)gIdMlG`eHwgUigeTdbiA{Zcn9o;P8Pl!43rhu=~ozXQjvuy@Q|kCV%4w zXQ!aP-JAJg>4HA?EjU4O`SQZRA#NxNI*541mDcGI5V0-3a-21)#T zp2z3oTanbiKKF50-a)FuS5$pJ0 zoY3pJ*Ea|A!8|1&%^Y#Ap3!&Lthi$XIC!fmM;39wr4ySj4CZWr5|(u7E25lWu`lUR z>K}Hvdwk;c%gGH;#}xJfaya1TN_KIf56=HP8|mvdq38OQK!$%P?mN}3gZSIn;ab!z zqpch>BscggpNwFI?r*V=B{Gq(E~Yb6`2+dj*KS`aK;BKR#VS)a_R$Jv{`>TgoegA@ zQsx*MnZdnU{@Wn>Mg|N8*^Z21@2*`hsz3^J2vXO+-BjQPR$hlDHxU+4cVu~R8t)rr zg(RUK{jr``c8wXkGeO6S-ytaqGi2+e+*ZbYG-K8)Xu^J@tW#jRY#Gjp7fmRxxZh3M zx>?!oJ3c2+Q`Fx5p@RD668boNu1J>{5q*kWe3^`ISLHQmK`5xX{*D$i45>6IDcCW= zt84A8(!bHOdj5Lxs~gxWt99|I6l4ck#&W+R7VQ7k>u);Wg!koP2i-2rnVVntoj%~i z0Fr$xDy&6JuzQ2=V^(Dx_Z(D002iQ!l+cfb*k@?51CbG1tGi(@uH# z8FGY~6X|H#*dQjQ@q~;mGel0a4F%7ykt(^a`N|k7WS{=;=|dVue0`qq@bWRjUxfoF z1MOL0;K{3APY-5@VKLsWiJqD2))WTajjKc{$dY-=iU9_;^)~##dG=RXrw^0^nv+>hjbvq z{PS6*Fa_)#?93W$>7X)RX^YYkMktBc)#Bel1-I<3C(2hSpz|dW=8s_RzutZ8re*X) zF(uf!Q5eATO6rPZJNj#8s$cJkqJ{E3w<4e8-v458c3xT@162RqXyp2W9!55o{*H~M z!dqRN36DlvxH-)AnX=3b`x{u2-=#8x@`8|MTq{0jN-?!p8Dbt^*oSUl9D5f|dGs8C z%#boH&b5Y|o6OXmf1ba>>&{b1#n~Tw4Z_Be7cn1xn=0b)Y>gQpn?Jn`&jnArbDgsA z=Vgz~!ZQ~(4oKdv+%|~&FN=5ME!A~wAjI7yZ!QgLGI0;o!tnQ!w6-ePZn;#*6r1#cm>GvjsnJrHY>q=I4gC z>~Kz7Pj2XWdl@R;a>AEM!7(`_^uRl*T;MhZmg#Bb?oLC4f%` z^X)(S+s>#kz|QVJwG%kEw-z!Cv&VcCus#_pW5hjK-I?oOo$z}4Q5N**J{>&&HOKq? z8U;44e-l{2-liyP9y2@gw{0YKv(H_igC(h;7ek7e=P=|uEP4`sM*~B$*|)JL8rTu# z)PNk6GtTTL=yM)8&iQ88Y>oJZaeR*2#sFU|oL5YWS4p+!r^`hu$id=Gq;hf~zy1y@ zlZ+xQ(C15Wf5+$d`ennDWs%sI?VoXdaR#~Nha&<{SEJXKp|kk!)n(EY804t_1A8(z z%lAA+K8T|DM2hYEb#ijBWT8oDouvJldfP9BxoPSQyDl3AwjUe&9KJvYV`4T=>DDyh z$QnNqaUT2jUb>C!tt%w)eu!tPKF)XL61Yc0XrM_~X!MZjI;n`bS@lGHmKgbdng8vx zMs#)0jlR7yM>?okb8$6v;8}2RyT}I`sOvej+gM?qeB9OfLLBF=OcPPg%#+9~_uaTk zd9_Z44;}wmgk1OJ>>Y_K59i4)?t9@q$Pe*3Z5Femj}~knHmGWFA@5|x?|ug6>{yr< zE^A@WSKV0Exc(j;lsvrAa@vv(EG25U@BO(*UNrtmYevtUaL7i7E0Z|yjNnMW<4*zE zShp{f$T_n2pZw1spO;81Q)uqz{w4CS+nVli5b|jcX8oGlft>IYS^8g*Uw^SyaL2QT zRq~PAGJDct1?LyF$-H>3?3OxRuRpjz(sqYjta4f;OjNmXvr?R&_lz0vH!hQ?EY9G2 z%v3mjc>m@wg(XsAAHB~angVL|w)et!VBgwl`bakJS(qK4itS*dfl-BcwSsN9x5@v& z8}pYIWGbC6MjlurDlaFxg*|EDqinsa^odoH$$5@hp<;z7#~uFRfgk_t;#HnecAOJi zPs`hmEt69w@#7|8E96x2GP@;LkmNjE}I z@1w959poxa57rLGw5^f%_6oADx-`(xVVj)FOAGtz5<56vAqOcS>Xb0#19PbFs?MsZRw?{H*$FMj{FD87y9y|6-Ps`*(~CGhJtb^oEhpAL*nM}4YG zD3G7xL0dvM3N=gPUs3f+|)?=B>9FGezCpjpgFuk;+d{&a!y$$cLeJb z!=sV+6sbAGj@QlFO#!7XxcBIP1Npg~^dP&d=JbBcu=QWcjs3?zwP`IxMV^3aM?fXXqHQ z-|V4bNLeNarK`VoHB6JH{W_8&q!SlYlP1vp*xW_PFFzZH+6`$x4*=K1Jq*AN2MnQ0l_#|6jEciA=7)#px zgN{!TKTfqvbs>L9qQ@IcbMz&OtI0YkYLAk$j|R+G-2Wr3JLP1Iz52=UwXYJPXC{f{ z!-#G5aYdx3P5dfj-WQ@dAvW6RGe-LI6leZ=V_y8pM&7x;Ub0_gC5|zBnCvTvtmWC; zL(YCBGlARnup^u-Ve8v0ZHD;3+Pid3OkkU zLW^_xzdffj{3gf)w-?eUvVIfR9XqDj=?6(-z*<__%?@%-Ci>u`m2rZ}lN(C+dq{)C zDM(YEAcCH;{e`EONH~3RwXD}5vE6MivCX}QxV@EFl)h0+{xyUIYSm!Qow8{lO0lu0w%ie50 zLD=`Y-%g>QAdl5u&i)(gC1T9|9La!OmnY(UZignwi{no2TpI_;lUJsKUooG1u_^b| zaP|yQsoY_Z9yUmx1O2dmUJrTh&{eptte@oCL~<58PLR+a>`Fgbaehv@@MoZXl#Gcl z1pc(|BU+rgxh)nGByQn>oRa$t`JUaodr5JUa0)eV=}!EQ%sn;veYbLgoGmITb(HFb*Ar3c?Oa{Z6Ul*;EUp>Om6>-c;cdU0=$IEcL}Ya%UW0ASlZ$2|>Fn#n5tWcO9~ z$%hJzAq9#|JRek$Zc=B{%o*RYm!8toQF1s33ATWsOnDcG%=2DlehoXhI@-38!0C2 z{d7Nz{mZpPh(QhdL(%Wh_+#kUo(YmE>BwuUKS2(=#qQDc;STp47qonUGZ4cU*aKG%%^;4fw(a23Aungt)m>%6$5iaYSD- zjHUDv;cFxDjGi5&&{^yu{8%I|IkoKO$RCoGcVm!0+D3fX>^`vO&k(Zu?g&l)GU?1< zxV;niHgk#8MvBTbv8g+rcIm@7*ead)-m_)a3%vzlxu3X9{J3{dL z`;1;C-)4are>I~XKz`1T&6#MGyAMC< zZ5BykL14-0y9?x3{f?_wQpd?YvyIc|S|>^7bH5y|EBJauyLKtEphtk#eQfhb^sc_H zXgq)%8`J-qx10{1Ci}JrsHvY=CQ6g*i6@VvH$F<-cy;d**+$dCeOzmvXhO>Fa zMBU%xZO9=Db8fHi#N2VA_@w!i!VKXbp_SWtewo;Qz3=t<&pP=XIG7(Li+T9M^bv>6 zYeYFL!CgUjk;puZSdLsrjvNom2HX3{=Ppf%WEZ3b@7XV!pE%HK$>1;VgU>0i3=1_Z0K7AOxd!+eDd)kyv-1DLRM7V>M34OV6C>3PD=!4$`K!PCTGRO9?_p=1Lzu&Rt22Mo=PCLV(>%gmqxsOY zb?SFW2p>d1x>3!0UT|V6pyz53fcT$gFN@JT8FM{<=!DhpNGI_t13Mo zxlZM0@@Ma6)4;aOc8*%i*_rGmVm|y-Xm<@Yvs*(?QLIHxMJf%<%&W}rIfL9OSH>|> zyB6HC-(K@)7q6e<}(zYp5{2Is0&NG9%PR?&RfSrhz=a<Wu*i8x^uU! z&h{gJCYpuqb)N`5_`iI~H-fLLyV7Qp`PZ0}j6bSB@CQF{a{bkA4=SvW1n|eU;Xa7X z`!|;^6F8+z3F@Fe@Ss@bN(zyi+ar$i`;OyJcg zxjq%l1QU(I=S%D80aZ`@1}aSOCjHLpW9tpDbES7YF^CPWi)sh4M<9Qu`dfJw3(mU^ zEznJwvp}hOYF`uP0SC-@4%;E`RPNt-hR5ic+jzY-F?0(%EZo;P_7`~z_o~7<>K)jD zIkblP10M%^6%1*&ZpQrkds!0&&Q@QZ>+1gEeEjVD?B@4qg#v{dy*io(p7edJS=6 zFGp$Lvccd5E?~80Gx&vh`lZ9ioD|*J;m_`<)5^A7aBeVaa&?9e`~;bL25hzFik_n=^j2VU=H9O)Ux^LVU-hRY3pFm~-4s6-ED>p$Np z+HyYdaIv`9g#7JmrO$}hWj@$(uzEdQknof?zR5cOykx0EQR7 zt0hqcAeHyx)cyhiaGe%4WGN9sAF(P3WC}vdNxmc-10mSEZ+OSVT`>siToDf2AOcmZ zuLgppgyDDkes%i4BFJxcdFtIF3daJcQ)cDFpl7oA^Z?E!j_KW${3M5Sd#>AFH~dB6 z;W;s;?a>lYC%WkB>n{Zyq&ww`g#^&=6g}9~ECzR%_1r3#CE)6AyN!aW5|HpPg?`~a z`e9jOLT6JYf!0!_$FNWe#!PP=Sdv2Cyb#;tfNE(lH17=TWR`|m9SzlLZ)wo`7dY{< zQ5r7&slS?$ECU~DDq?O;ZvyVkln3wmuG@CD_yuZm(YNI#Xi^o<&W`5y+)aexJN%CS?c#`h&HTHkh+#s`bK{DHzwD zRch1LhmsQ#q6-CBba^eChWUN#rs0zx&89 z1^bTBK9vZ?o^?3~S6T*P39NaD61wPGN=N1Wrx z2~jv*wp;waog(md=5%$uw+OseG0w9GQIOti((L1>2R{k8Gg*SIIr%1xRRIVJ$Sq9fy6IG?v_ zOlJ`K$_JxY+p4n$a6UgR??sc%4@Xiicz*oK3-*^f_TPHX2ad_IqBn>6KwG7TrZ~})%ZGg^_Tf$In6uwiIJ3bA ziM$4TJA9Qfce`W7lnpsk1$Q?uh9z=A;f-FFH=OwV;3-{sT$39t6bpNraXxnAT`u>A zS#B`e9Lsyx9=X!W?CiPQxnSbE{*_~091!*0uI?i419?*4DQW^YeEl!eDOuSnwDnt>F z!$d0}g&93J`Le%eWmtgovhbF@SJ{C{UGBnz66Cm-Crr8E-dCrAyL#pwGhC^%)rh~t z2s_dg-v8fQ^Qhcx-@pkbNM;nLBBrJrQFKl6CIolF3Fy#W`vggc^Xel7=ZIdK1TTG_88iz zjI2>cFpb;T7)ix>puWFSEyEUFFpLndEgC87@v=vi@ZqxPQ(N_NQCL{Nk6$ z68Va=^l*mp!Z*!NRM>R&rTcF?dT^30?atsrUd;8caZ~vJttoU2*@}Lin}l}!>>4ec zH5d^Nc*}_QH$8L83N2J5^WD@-K+esFnN24>89><6Ur}3;3JS-PFBCBx`H+`ruO*U(C( zqR%F_WAQlhxPf~E-2^@8nYMi2gFGVh3=V6#Yqa1q(O(jec}|u)LQhLDmoJh0nDU8< z3Buf}qF;AzfMaj2B(|Y{#`MO|xZU{m$cvo!iN!sAQ}ONQFUw5uZ42+L5AOe&wm9j| zy=8}i#g?FCZw~N2DztU0=LXm;L|2oIy$?2}U+Gr08{pioi4Es57gP7&Eq56PE}-S1 z^^qQ9ht`LIPsO)!LFgXMiu(q9!1LBtQWJAEB281f6%Ba7_}b9S)@eTY72jmHF%)w+ z#mB$w!d$(S%A)%_RXz~^_*Nr?LkKcVt@e|2eh@F2EHp_K1Ul=lE;sR=i+{e7nGWU=NjgVe^bfRQ&WaL4jArw6_dJUUvUXV%LE6$*UptH_~mDl_JFL%)#@k3h?v z+ib9WQ_0rn2ovyx3rcPRM)-V5XB&esBjjk-GX$$LK@kNlK1iuJh#oX0(_43K6;4yWc{ z)fq!ZuoXD#WQ959`sFi)NAE9_8)+2<^G{aDr}Z6OcF4mI+#q&ebcF(VVHXXE;Lo$? zHGx77>|4(dyvMFne3!rE|5Jjjykk?8uR5pSHdf2F!%m(l|MXZ zomj-(H52iohc@$LYpUM3AJAj))j^K(mISreTMcQTp{a%fY)O{(%&#O(!QtA8y}7<1*$>io?`%?squ znRnk^vepS@!J(}XbAvHU1^oMXXrO?$#MT!34L7;h66?@knsu0`*YyGo{Cq?tI>*sl z;HEC`g#7m4T`r#S_ZP_McgVRHvPvSB-ZJmeMh{v?%d8ms(#GNkYnE_MelbdEp}G@u z(5jD5{1KyvvV`tka#Qmp_<+5)$^0^*VPDx=E;vW(lis%R>|G?9275xf!;o_$I5MSp zlL8$Zdz6eMSIDJcNtbm&DkSA`$`s=39x&{~FVC}1Ms^BNF62|--MP038X0S3qQkCh zPdg1fJE&U8ZA}YD{xCGY$NN;E>GzKdGxJ2}c|LW(9k~XNPxA)$%@a>qx&`wH8sPZb zFRnE)M{IP|_guw(fakWbJ37eMv3soamg^1`%98l(GVuNvm}ve}Uy}~b?K$;I{w5vB z#Y`$b{||dymb1YNuB*g0GGQCn739x5#ybR~M}}*P zsV}pPZg0ZgNW`5ZMa{UcI^D68^IH$OJ-#tU8T0WeNA5b5#?F(g8}GB6!kl=eZ02Iy zn^tnnH({yl!4O$h{b+DAu94K*uE(&KbrDMKhrJV7&LlG<+SlC*=g;PEVt1S!Ai~mg zuN;jA$PaVX;v+x0iDLARfY`0*cQm_L{bj9<*uFZetbTKnOtuUxzx&%qME&yeN-!6^ z_A>7)J@!`8|5~bYb4-)6B+0eoB|`+%zPr?3c}@=B_EUaywUPWcQk9)~Y?=s%mxOg^ zO%SrlZg0xRW}=+FG-pxrjqujC(wiqO5w=GL{BGsL#N$O%LJ8*BRgUkw$( z^F6^cmN`J|j^|1DE%lNZe-2p_uHPi1>Z0eT@8cwdMoZLGbd*Gum5=1(m!cW(}9 z<{pp72>Ye_+(evDp4*s~x#Qj+QhfZ<>=)l5@?asns~NfIscyW!LbPLK?YQXGGURR0 zKX{rhb!D8yMT;edjZctrpFouAjS$1HRI0~VCwbpu9cJFsPr5G-e0R7wO0uU~OO)Bj;RxiTpJ+4=y!ZdnhXdU(%} z<~J7|8@8dxb*z4oX?HJ4@X_Ad`+l0d*)uL8<~dHZ8q=$%geQoy4ehMlhAGmU862b} zIz`xK?afYBPZ7~xy8XvYCWz(_&*!h_`-o4@!*?hDj1pzbfSZpBrwI{TqFY68>ATF} znmtEwPa}Etc#gmvxw9i*v+CR|$rT?w;!A5$ri_jf&~3uGSvL8 zeQ2Ul&Z0PJ{7+BB2SQ@r7Q}Z{i;j-dePgJX#{hwdgHv@$+Sx z-P;@Rafs{`GHZRJh(20oQP`b0N4U+{q>_V1iBornz1dORUvx>N?zlQfrbt5M@xT|F^MqD}^{5cuCx#64Z%TNN5nBBd=f!#_h(&e%jECoFH0?E5}m<=8EOeq=e{=TF4trpWuE$8JyFqkq@P`z$T;hV1Sp+^pX;MQR@3KK*v0 zpAdb|_pGUtq`QdLvNsdC^k=@L*B-#V)9;EfU#mG%H?MnZ?_V1D?LF{5=H@zKz9DdY z`}J{hC?aOBAo@s{yT3hj(5Hdu);{n4@kKH>$?*9H?x>+xkaWX+YcGb)ggY3?g2l z|JJ1ziTt_7Q16~a;-i{&e%Wu8oKKllh^$;9VM4SoQju5EK%*wi^@j%f)9u(2h8IZ3 z*|q3_yV%Qm>tAJAh&kfW2MHP`Owiu<`O?Y)6I30)wx?1A&jp@dUHPT<>Go| z>>>b5S`Uq*1rsT$%Rr-!o|jBGson1i9wEeiUH z&pXZm9EEQvppk!=T||x!jM;}PYmF(O?3(g&$%z72k6Zm|$KG6q;~v+~6r9^mf3;`C zdG<(WW#Hq3xNnL4QXhm~-UEXY!JXT&XU*~`?v%$2v0CC-VZVs^gAZey4(THQ&O_F7 z%PD$zYzoWw@VSJd`bDR8h6=WFOq`WsbYRff8^d>+9x}8aX79qhMXj>C_*<btK?{5y z+}8T`Gv*eQJBN==A6h4NTGx{)?Q0~@nIr7+682QLe=8MiqlM3!`QKDos8Hi<%y1z9 zpQn6wQuU}*Xc{h0vChSO%fw5SZi_YIvD9AiCZ7S?x6*j)V2+)a`PP;$*E6A`n?d3w*rX%n4=7r21Ts#B21Yb&Lj`F~sw5Zmtr`0nDe^Eq+hP zX{3QA$K(+6=@l}4s&ME`Iey=ZYU?+>!E=A1Toi{edfoh&FFTFle&ul)jmrznE2@|Y zsP4f&z{WOriG1Yg4%S?W#B*?v6-P`t<{pK4Ey`Y6u|N;)gz^S_z5k9!D>ve~>+{u# zToy}akoT>YPi1F;N`a)Pi}>$s2X+}JyCDrT#6J%_ zxt)^@+6CVpK6IE47)&fL*-0=$(x0mrHe>FOaEh6p=wW~Z56+AEbF+cxnzQWUUq)#3 z6nAA$@0~awbiT$^ehqooK~K{CJ)Uwy*xl~QBUd?~XTe){FAsVwZCB5^ z?BT^Zz||iA2!5!)rB(hMxwd0UiobQ6_<*8c&g+I;j`9=%O=o}fT(ZwbDO+MbpCvwf z;Uwnu_B7dfpAdu>+YjNN0_`8Kzl=jNV615|v?<*UFH+s4Er2h~7viKXjdusUS+{tE5a(L~znqQUuME!ghq%;fi32dux+ z+!_9)2chzo|8=j(>>BKz@L*c(HT*ksrqch3+~ zvL?Q|tQ){{H&&I#RlvSMkIlAy0Q_fr8P6u_0U4J6_jyVibnmO`6#Ux`(uePk)|}b~ zGNJBMRoUtwdw;a)SHc!Bn_73FPANkk&1~50h$8f%M1@6SN%pcHBz}_ULOS{qU54_Ud+FChRrzz4eto zsVoWq+GbAni;F>D?{5X;w-O-VN4d)$Aqiq5E>E{+Ny0&jfh+B#7;yiJqUwGTh5ufi z{ZCU|9Q^*=lYJy62`1i0vnQ;Po5Ou0wDgoPJT(v=Qj`-$K9ZJgaVO^Gc?J_>tHgkI z{+(Qor6`%(H$H4nB67m4r&Mg}WpJM$`nBHaF$-L}b~J-a1oQ0b-K5P2kx&)Dk^axlZc3lzUD zALM8#dex;@v4O_cD=GVpHo%*Nqr3v|(d$0vD{;Mw0R$SZ>E9k<4mY(ki3cy52KEMBBNXe-_w}Y&QBO9fQB0ozLg2#tzrtpNlq5MnCSDf?LEbM&Rz} zh#Y#x2>ar`e|m&m7{b(c;Q6`dvwaFZ#Im+tZR24Di9;V`>~IdhVf#wtEe#eR zZ>ujp)4*PVNbtV)hb+LLyZ`h}F$Tyu=wVg#g&yiWvU<)vq=y3Qk-g^VGykI7^l4ur zBj~xh-z&+&`&gX#)-TAL3%|yx%=LpAich~d5x~a`UwJ}UrLc!4{XG2QyM4&1E8FvK z`8@9X^ZXi8(vd?V<}iI{FFouSH`{G|ngRGO96@nCdTpb^{GKx*$BtFF;3x8kp4rB} zEG$LujK+SMqvOoLmwl_nMTimn*#klh&f4(jWNm>^t0&aByp9XxhCxP5+|0i-2g z?=%m^=bq@yD{g_9-+%4TXQ)LF@h?vQmBPG)>`h9~q9zUK+HLl>$LE&*C!gZC#nS<6 z8;kAh3Vg2jqHL4Ff0u;_445O=qd8POjbj_~%wH5p?aiP9ONzR+x)b&X#0_9S_7>KR zrC$ERexQp_Oc}XO#rv|afny*&ICt(8Qb!&HhtcMnL!~V6w4pfTls^;lk0NSV{xU%H zyMfh{$j=$5-4XE0pB(~>w|AF!GsE*09Sy;w%+PggkXrL1f!WkeaFlAHWa#q=UqtSy|juo|JpLSy3tg zCXxPW2XlqMV^8Ui0Q@TRy~O@6FF#Ox3jTbUO#ngyA8Q+z@F-^GnD6jjXNlD@s~ayZ^^ExE7E{XeI!Qu&11`%GrH>`9C_gflYRh^NOa^vGd@fyDF z0)Na_fkN^#^;8A$jA9NH%EIa z68V>k4%fC~uG%Z5&SMGhTb+3C+aFUyj?V>_Zco)!varjI<02EXUeZJlxExJkMSk7sbKOZG$ zsGd(+99km-ciz2-!8z%>mOm$=F?Ubt>`%Y{ASH-5ahr_>V_)WCIqNyCHFE8TWLDri z*7zgA$dL<^sfp}X=*#UC+epM17=Tiyc6bsX9zhdl(Vz(#R{_F{3+( zJ>z$QreSxGgAq8f#c&sHlmC9@+2VqGS`M*+-`n*mz-F$P`i==TjQ7O%ToR*zxG%jD~}u<{7jWs*3VYIflT739C& zKJqh+0_aSdt|WTV!;TM}IeGKgyJ47nD{Zn#b{)#`7{cfGZi@Uy7{xlNuw7=I!TV45 zWMHrFriR4fXD*d-$nO+8;;>_5ooqYEa>7?)l?)p5GV|f*-b~nOdZBp=sCAg5+Nnwf z{;I!1{C^=YA)Vd0`P3SD<9`b$uGBz%(8SL`V3TC>UA|o3yFogBo;Kf^PXX0#(kmyh z|G-&dx3vg+<*9@9RmKCWWW-0ry6w#-Xt2r!^aOf8DRc#by~1`k^?QX@Jk6X>uqpFt`Bc7e4AubWt*Jk zp;fZu@?`;D+?zkV@``>KxmfvaV^eV=G|;unV`AbRa?T=5dJVKGAhlVE1enbeU0Z7- zE7?&pHV}GQ0OzVVxdWv9I*<M$A5Da-hC3imMfJvOI!XGwU_XUcQ@e~ALuGdU&mNivsww~wWMo-9gktrq2) zBwPA#*Th9m5)T@6_h^YpvOQ}caD#h*FeL5RttZw;76cW%C2VHM$0+ZYbQH6MC%K%_AuG7KBAyNRO`061NT@AusOIPZQGf39;O_n@()POTfT`jD zvCFM--M@mIpvl0eU(+VYJ$c#R{`mZsaO9<=$~kbQr$RQ4 zYmsc>DiJVp#?R}|Tk9_Uno?9DnnN^X`WvYGxJA!)Hxq8;aO&g;~) zqMp4-t~i(!Y~frY7L-y+3g`<8sn5Z$3g_!Z)4t#jD7DZ!MX5yZVbLWt$tcp>N~K)2iDm zF>_?z`GO0@rDftBDRZnAdj+c>SgRcTS4dx`%xKH|AtIr1?og1yB>7dWEbZ1mM|`SO zKZ{{s>s0u8C*y?`vgd+0!&2TH`Fm~rlgfVVH9XeI(LjF8r&C|Hh+E_9Ntu6LA# zmvcH+3C^HrdNDk`b&>qNTjZIaGf7NWZ|qsc_e~M^MAyHv4x--Oq`x1zPA|`WF4%j0 zhWM7Y*Zt61AeXFJ7ld#>bA-SC_JczcM6vjxq{RRIAjY4PBBRIAv#tBeGJS+x?!Fjv zdS;odhuWNy*)v7vyN&%0hs=`e&tB^$MlBGUJf0DC|7GGU-+cPE*D}fODX~mYm?Q2? z9wi0XmlGa&zoA;WO3n>2iMw(==* z=3>ga*6bMZ(XQ{lkG_e(siDiYbhwY$O>ubPk7_N#}uSEo%0%P#*a2Xl7Rd7dQCakUm}foF7`pDe`t#8x~1kGP^be7xMU^)9{&kY+6NLLKGz(dUp z8HTwXf0H>uIrL?o0`fBSBJWBT?_dN|hkUW;e)#t``3EqXVczNc_mXx`I&jnoKkeer z0DNy1{%T|XfQPZMe8G+yj4ho6uliuW_)+dns~rr$@Kg7{w_niHbe~#R0J$ySU)>D7 zqK0|#_8l2I_h~_8^rebdDHY602&i3A#@v)<>wgk>y<;@dW7{-Duc>|gf78eajMs1Z=3Ik z?8QFxMg8VX8#{Ok{YmkzD_?M)`}{*&(|hdky*5#{el1S}nVHnp%5N|y72CC?9M3uG zVKm9|40v8G{v2CylHdr20`I?-qe|Vw|53a-Qpi z?Ly_{*G80Za%7`;wU8RrJS3vt;W_chpQ({bp1x^+qlV5d2!IUp0tFGl0It zRg*sl(5o8k^Iw21J=`qF+1%Mk2lPiG#!WFVe%AjG8=njfEFIhtF!+lB4rhGf4!X$* zPNpY!dS61n>$bz!eygH?u6o+@2^TfwB~BQePGSJA@PD+;gdL>gB-z^-nSlG9x7q~y zZM}uAozA?$43DPnzqZ8p@Aa(U^q<(XzQUmFueHJq0k2!>N8hjlvv)-KC0Z8nTRVE5 zuagzdo*Z?|MsM>#Q*Vgl5F@l4ieEJHWQU4nt8=SgIY4N)_R*tdY#{L?=mal68~l86 zQgb$t19~$520AM;z?V0u?uK^oacvKrwA?JSlDevP@Bkc5 z958$Ny+XSOdZU}(^Iveo`8jXEY!L@Hd~+yq>96MjA08vYOq|#CaXc81Im-irPp;3z z=y1c00@0X=1|AS!)jzE`%L583_iVC+c%kRK&=MW`DzlFS`44R6g$D{cUGin1<`C(EdNr->hWt`(+w%kjgNnnEtya3PQ@nLRi$$g^-ax1SRRSw{M4w=+W6o%h^56ekKt z|Jn_0=NE#2Kc49e-vl7(5LL|XJW+@?Ensz4+XCL~_G=@^ssE{JY2ZI22L3^5Q)%U5 zaR0z1`-fv<(3^79FS9@tK2da78{QKG6H4*9AmpQzzx%+QI42IPKSQ{Aq$PkgbH0fA zmju*pFtg=bNq~dmc4w_TNhpcW&j0jM67CLJn$iD~f?cKE+JU#Fpgi7QN8eorHf`D7 zuP@31a|d&+NT>pk0uQ|pAC-VpB(X2-pb9X^4mW;oRRxE$Z9*edyTCr-qiD!m4d}IS zPhC&c1Y7S;#xDE)U}qu_gX?H0)Z?NODF%3|eOTMJObeo2Hd%G0wBcrqcizi;+TdFA zsnaG$8eYQ1i9S{-PE@4f9CQx!3#Q^tZOH*P`~qv(=wxrDJzP zMnOXOs)suKNo{+wA+r;LNUd_K=MHFhvXfwHQUbq&R0Tol+u)&r{NRR|JY2I~db!9c z1I1R`ce{;AL*=LA;~ZvEpx?RJf3;r{s`sSw7vb~p+V~5R+Jl^$ZzsdKE=s^H1sV1I z9um;Q;O%uuW(#DEW_MGJh=JRsS=Vnr#KGTLyK2v!Ef9D<`pOrazgu4|HoTK81`KX~ zX74o6=bGiTqF*Tr=VYB{^+!ZtDQf5K7UUf5eiQP8T0$7^BpyjJ=oA5unDG+BouVKu z%k$~jA5mz&a5z~i5$En-EE_aG;yfuOh=E^J2v$NW9*3D=TK4v-&VPKu@F|g6aT}!| z)W6S+ z4s)naCcD*U1>oO-+5P4Jkmqbh$^Jf)AN-q5ew|?8gLRwIlA%uIOY11|Zb6@`*qd+N z>y|v|ThvI^kKuy!r<>vjoOnP+`t!%XYJ4DU+@SWWkOxw8BbAj2k9-o&N2Z&#O85od^J-vOp0$j_S@Uo}o?=D~iKAFwe0b=NP zeUlg2-h&*w$MrMq=(o`Oe|yi}?bH@Qm{f=Irom?x`0qUT2D|A}{swF+t&W`)4OB zk@LkVF2JbB0*%`7;g3(CSCgA3@AFK=g`yry;qL^I-bYm{hn2;i=aQW&a|Qz zIU(O0*<1CHPjc?p%bl-1SmBU@wdUmyEYRWM%}|$!KDU5+wJYOzE-^A}o8>`X`bxRn zUF3!P)5nxY1TnyQuhODo^wCB4k+YWN*kfe zg_U9+Tc7)kFZSmsP8P2>9OP}wgPxWQ6J%djpfo;)-1e7d0V(g8U_`9> z1O+t{$Ui;9(B8}d1=+OEs&K#iDB2*t$d?`l8FD;l*J&WnKiA_g2LptOsyDCr(!z14 zudCfSpKpAf{6G{riixY+>Qqedx>xS4m9NhTze92y;++{FcB;b5vI6(qJ2Q2IwopLl z)~a;vOq{24p0Fy-M!qlo$lFH-YISwG!{ZGb}C&J>wV<^ zc{6wd^4OXyEB2}q3ZU;h-y?|E*}#MkYiq7F;4a1AQHFbS>jMmevwF0!>=F`Ibb=O| z_J=D`;W^w(^y1MUxUbhdvRhdaJvnb@oRjXbVZUJc!RO{tMo_%Xeg85Kdf=T8f8I@x z-uGDKa_?k>@e#%!5y7-zx37!Q9s8G)`eBBen8)Czy&n~`n+8g}3<9#zGvio2q$`8m zpe4I%hC?Hm-+1sktOdCs(Z%-d-E;rnm(*0V{9=USRM!L@S@er4Z`+rNJqyh;=JB1_ zgUm^~C2TCl0Mw@X>btNZ1Ca^^hdMn487k5n^4(BQ=& zV?hRRWJ+t^s>%eBva?yiOUMNh$m;rK!h)Rm>7zL#OrUVRjOyeI7KnSJS8-_wpTFY_ ze>la^&p?%9)U_A+NxRKWwg_@SZpn84*G^pU?QL+PiZTa;eVRaF1PAE&El8^OxS=?`%~SKpzfm%$GT z|8}YOW(q)ssL#}aTtVRH7;HZ!D+sK`Q>n+}_~HBBrdfRlL4fslGAcX*V903BpP9@L zCUeie8DUS&j3YPk{I~!}$lX5QA}atIMVTs`INz_FF<`cm=Y^l?nO=?9!zTpYf?e@*%ivmZG4EL}@Hw1&hGUTv=sa{!zph~ezX_w_OHLeMu0)|b@5}+Iu7wXO zmslWPIA(~O9$yc}@1rC5@cC6V75&?dzT%7p)j>)+c>c>+xE%Ra6~zw?^u!=qs?c7jkTsXMh`Bhxg=p!Aj`#eNp7EsC$2*Tm7?2j>pgm-Yua3 zUf;jptv=Dgsf&;9IN`aQ-8}yn6ZW{T?uq&0e+&Jo!vouIV}9k{>774+RZ#-jcB!To zxi}&gZ99T7&vI4vle5kk4X9VO{+C&Y=YGoc(}UO(y^*#_-&VXz8lySlyEZ5w$@q$v z-cIa$oZVxwlO6N-Cr!3}L0%8Vmt2E?gP4c+QgZ7@{>fLWxGAAO|L4>XtX2n5gTeFh zc=zK}@SmJs_iuc^D-9dureDK8Y~?-=8qC@A?(e$I>_&;)A?;JOxoc!1lku1(`n8H~ zNVGYwqAyFPFO?5-*Riu$(+Z)4XHy~B6P?Ka=DnqQ@$f3?%MZU9t@NIH3&ZmpCKI~AA zSR|!6`5kv~{(Of~O!cV5CduWD@N2}+i+8e)rqmTHgnQ%*>ou`;5*rowPxBfD7`;`` zhz+0xZFL$8mZ4Q5G*flD(~k;7`*(+x6;ludiB|t&uKY z^KCP1i$vsEvC0poDdMDXJaBjlIYfy^MM4TFp=<1-#k&*hB#dG7p2zuB^1`u}ChPyN zpGL<#)&D4g=fo$9W}gkBvB|a8egfx#>Q1t0@6eA>nj{55<7J9u@TQ@B7eoh5`yd7XH~|wn}2xKXOUhBiA+L@58KTYebu+=9VXV z6h<^EA0Jsw0SE#~F*N*+gKJmHO9B1@O)E@---$JVpo>hXs~!YF>g zSYgX53EY1yXXW@J`SGwWI12YOnqHxMGSDBJTh?~GIbI}Rh=Lx>EGHm}% zxxKyZAAf`K)NVrh4qjG$(Mg_2dcG;Z zyz=jVCKq{f|06%I{ioFOVVZ!d=ZhVYIi=g1x3-^l!ug>#Z9$4wH<{q#**7gcOe8Zh zRdo!8NV8zl`PaJ_$ep3}uN18b#FGEtrvn9J#IV3_BetcKqF(f#R4$@+H!u6D1p>K_rcw0jE~yZVXjl}xi3Ir%i1~KcGi7fKlbk z`k^5bdFYu`PRKm+*%Ninof#!bq1w*c_oj&e{_78$RH`UF=V-DGDKYch5ma4nBQi#w~&*ZCu4Q5TEA>`k#xhy zdmHinu~Aba>S#MgW3 zKFLYV6DoV-os9LHL@ciV*L%4omg0D|SDwT41 z5zHgI-cna)!};#{66zJ)-x$RTvIuGju!be#*3oC zH_+GR8g0?=+hvWkpJmCkH>Jlp_s84-oF}%Y7RPkE|8d#*49@SRlJwiCwaZ6B0a&;nJJ^fTWS2Jp{vd!jx=3wjb6PJ0)SBW@E-e{vMPEe|iJco;IlWX#(S zVSd!`W@8U^?H%-}vHW58bjLh;S3*;+03-7EX3bm5sUXVb>w_v*Fz^}MyuY8m?|y0-t>WB&W{ z-JKixY1HuN51&gO_8Bu3qKcGKH;G@P-r16)lrZsa-{DaTDmXGfZ5cU)9GZI{JWOn< zU_mDPR=nH>QP?N{NJ9|)FW(ElyLCd0Qr zYY@Wo@lpBwU6*i)V4aVHszX%Y2$1 z3N8s(oWcI#pGoNH+DQjU=-hVm73R*fWUpuK2)11A=NEJL>k) z!WX8au2kq#qFNeh65B=tw`S+ew+i4~pmEF9JJ>(wvgq~bJ4p)){JBB}m@m{im18&) zLkFAIy&c@OG~oE@gkC829eW==Gau?hU)Jfo@?gyQP}vGHmsK%<#KO4`7G=zkH$0l_ z_mB=8KDh@CZD#;;<|r#aA13e+xgBCuMh|AfI{O6%nBgen@V+zYv>l zkB*MrEyVlH{bd0+pD{x$rv(@PJ2tqP%riL7$p#`SW&C^5)37#Xtdfdz5bp0w+n1x* zq3Dm){*pE1F*CXCzS+qMj)4(bsh`=Q?l{APMSbKBGnVJp_pw2)yK^|51t+ZeQECfP zpnvsj@ww~Bqxo6YX)f}E0~{C|?k8U10P7d5%Wv_k;>m!CX?AwFJJ4lXnaKqqw*M4N z{^J5M(aMe+*&Hx)$j+%3zc&mm+O4sZ3wo6DQ-1B`fo)mM?fkKv=oxe|JcxceX+tSB z#yjYvd!-W{=)?!rcS5CeDUc6;$%Fn!HxJnC&iy>v#{)l0?BDB)^1%n?(YAU{KA^As zEao{P0O9Pe>)fV1AmS|R7}y~Iw{~20xh2F8)5R6{`)c^$McP9n7Y#uWI^{cmOiKv% z&Y9h0M^2Y>A*;YRH*#?8{gU0SgkUwcspk>;VZ&t9o?CPX!_t2Z%Q%TfqC{k|0}vWV!(dPn>EN< z6oSknzRlZ+!!^2t5^P(<;l5kc*Kr~a5}*~Zds!Us)6aa|6)gcS(#-FrR>dLe)t<`8 z+mdj-Ypcm#3*@aNTzz2CCkZ1h7yOyTr6IOJ`MZyi3^)pU(SJ+X3KWf@{#h>a@U505 zNAbiqc(U)d)1i~deMz{cc;?U!c)st*%T(mTXnEZF{LEb)`mG+wWQFg6D}OzX?|riu zM&uULRnHti{FTR`HQ ze9OHRF({eKIGExk3dQ{QrLWG2!1KJ3j}~7+p4P(P zl0D)|hdg;1qwXuPOBf7%{(5!%7J~B@mbF2j_bwttBx( zFF3ZzbzDLaD2o|u9@p}N{j1Q|A_s-wgpu2cJD5+e?cUk@C6OO!s{=TQDe{_i*k3B_ z!hQH9BR^W?G5_wrTJYjJ56*KFbMoGC!@%;Wt|%Yw(~agj`~r9(=G3E~S?GJUP_3-r zlfVN`cONlcT1S6O{PSicnU z?t&sG9P$|}zDUCX-wXg}_lU4tC7lUie6BbnfpSkbLE zYgRb3uEV$;JuEaFd9n|-BR9R>`A@?e29UYanEV{CZ(S?PL-J3Ni!)}ENM zU$>ayOcZ~h1Lm18Uk@y1aKIj2nby&pZqz{0+C6i{j{!_|3lc8!Fu<+;29wDNyxu+A zZ%HS|1lm)yPoZgpoOy6_;UYCF%uT-ir}hYaq7mQMeX#c??L-b8s-^;g7b(XA>^8`$ z!*a){8fkzkJae)Tdu+O?+V8H*Fkp-8IZwqEw?chth_-pj)zm`+ zdg=~3|B%PgYWJxpkCFzCACtdE#Y+pvghgY-kP9^YuC?0#D01U=G&@F>AfM;3jXOsP z6=<8M9@+H=J*Nr_Z~Bg+k5%wueU2~%tY16ZcX2O0Tz^*95KDvJ7E=luN-IiGxRsuo zgY(Lfmt+4bY|)Q2`03T&12iDl@nxzo0{ITVO0>1su=gkbBCg;d71%;>tMm^CG=f3#MWJda-9jtggx4dFb^ z{_#pKH~MjZTKm~JqSv!tDEMVLBfN}WiHQ9{4{p&SeE0A?HbEVgY8j7nUX!z=^E!G) zHCyZ=5*T4>Z=m#)4IOwh#!U3;F~DdLX?>4|KgW*@kT?ro%zl$$Iw<4H;XcQ~43&>)Oo!N! zgGBo$FWL-wPotgEq8ISI&?aVMiurN6_@t|YB_!$)m9+ z+j&5#N%1Wc&e<95@9|d{;vT&7LHj0h;)Vz0_iXYA0v+4MbFb$FK(lWA>KR`F=$nWV zP1(W^o%$*TJth2bS0wFW4t~A`&ir-r>EHnlBi)#Dc08c{rYiS-5jR|WvR^Henj7jj z8;(e3a6^hS{{`tY>|h!HdEje02YR1c54caTLDGT6Gq0T(VTS6a<`dkvopCL@B=-Y* z0Sse1eKYCdNQ1|x2_05=IPKPX0rzvAE}v(@HJIQ{iu1^D1TDN9+x*-q$_Q$znKojW z_sN%F?`Szp11%Pd&zw)M5^n`M%bSXna4BrUkQ3i0yhpZuy>^`*H2give8aJKx&7vE zIXuV4`mdBW00X>?7=D)@jeOF-rrY+6(u3qt*A{C5oTG+wpAccCg`@9!rWN9`ANoh} zeC_xu`5;#L@u)5Gm%2wdO3q+@W@EPeAhPznAtdhNrr&}Lmp1kfy=A~=s+f=+R>&(qS3F(DVbq6x2fI>v;=T~a< zh^}eVgc__9eHww-WSmP|J&ZSD`M5^dJr2?!pxc1HVEwu0=|Lvm!JimX8EU8hcAM`<Bc^zU!` zguL#5>=_$-K5mlo56X(ABb3lIF?r}1^3U~OuH@X-TPFgC3Ts&(V9$J(`r#(dp_qZ& zZ-5W|%yI|arS7Z~o{lN+&tAxxaV%d55)e^o+wm;jjlAB&9 z4A+b6J`Pbp^gXV)UE7w(bjZOSI#nwqymsHAkI1?G9>i~#wTfI)Td8wy$Om%Y-Cp0@ zh<%t18j;61e?MkKGd`0`4G#MxdFJu?zYrw0CW4Q1+vk%1>fS6938lVQa-DOSC=?CtZec4@C?qf^5e+t{{{Po=u;i;jyHf6d%6h9?2rLixP z6Vi^4?xZderxeK-7xdX>^L3NxF?ZH#H?0#jx3*2s-J8UA*YCj*%*nG~6cQPB z*&zG%_Ua#2q=4sl68b{FtP;AHGKGLWhkUJdEp6I0Vx4Q<>KnIAUewpzD?Ebx24lxG zm(+DKrPK4{EbeJ98Y~37dA>mo7`~O;iTBU^RA%KDzHN}W(?WU)nz(l+n~7%qn}pYV zpAtjsDoOK*RN>!;9Auu+`eW0}#Ew(^Rm{VAveD>S_FS0;j+xCfrCvhc>ugr5pvx*z z{m#d-%8hy1!&!_S$n&2VQ9DXXS4nT}sk+v06kz&KZrAs-o22d9;pH*(I%htwn|X|! zVxepFd+*%ZBuPHky-w>dlfMyn55AD!APIXZZk_X8B6jR`b%wYXP_4XV7vr@?RG)Tc zY_~wZeDiyz%oGaH6LB+?aL4}ljy2Ao2Do1lWLjcz+9Wx8cR1trQNm00h%qkpbt1T6 z;^HYZK~k)Zb~(k&5-)af3yt%GM8K`(Q#$&ERX_fG%%0s#7&~fs5J zw%n*1;M7laZ#9IZZs{QF4zd@bkfT1;qO%o!RvV5#URF&7q1+!F<2pW`R6)B7JA5uI8UDJdov_M_kKGQazsia#`hhqYA13I z+@6k_f5-+6XUXx4zlq;+^-ON-KXP62NZkZ0=7`-Nh3-xmAhvT@=|Vf5oW&iTEl&%WTs`K_r}n9-%?9->+FYOPjzfs8G< z+})2}jtX=5aWVk=AL?fgMqV8!B4wdh?PhDp5t9qAId>xW>|}otrTYx|Z{J9`^pl^2 zsZjKf+?hqf|1aG^ZgGx;vBy>INEs%%rqOFRaZlBJ=%{-78RXsz{#|;=F+}=!rZ)Vk z`pB?PuZe@-0Qs!{TO#Q&*6)@^D@>_{@oU;(a|q zvQhxO-5(|!Gf!{s65 zBC$k;U7#tMCoc{$vE9ab`UuHTT}^KzPKFlSZGuOL(rQ=LQ1UWi)l6laE9xbM7DCzz z3KL|6QA@>hdWt;euz7#%(-b*A8}T9P#SCfK{f>U7aE@f!9k9)y7$BRp4O!Vp7Rl5*^*tY`kW=UW z@`uZXW%Mz8`QVDYtQnV=66#BHM7=uA^&swL%1-YQNEXEX%u^aE`whHqzSwcZ4bKf{ z**8>+Lg$Fn!7QD77pF+S&r`1v_XXTSC>xm_#GLT02H#=iS-te(Hdv&cB?ebL_epO#^_Waj1(r56OdJX*wIf?3qZ|WCGzhZDP9p>%-*$jE`C(M$4k1Nx- z+R!s!;28v$SBUZrd*6h7+^^o^5)IW{AwIS%``rB|iNtE|#xU+Ti}$@bQGi^Ip7UlV zls4#_Wm5Bc!HIk7=q5KSE=tf9IJU(a?~jb)q_+lLL%(YntAxA?4YX!$kMMDz1{t%0 z!syG$^OTuPvZ11dmN!S{6|k?EkoI1)1bHZ%|4rr7H)1YB-f>H!I`%6g52akj9Jm7` z_x)sB?6>9@Jv3G40IbLlSL|Yk7v^s)CjN22oEKvYFV4ZPWQ7OW?cfH!{ZpM{soYTQ zaLu-`g%?uC)zpO7c!An&Pdt~eKR2r|#vI-@OX2)D zF8DWjp^wm|cr|7ggKx<454Ms)x)p=>as7?6Y4pU0F{G)wha64WvCmj7Y_s|0U z`{BJBr&b7ia&gTwPwYLbR6Tl|vq7lC&Q{bruaU*g_Nym^Xn@w|sGtb`eB>Sa$JZCB zKxON{heCKRbh31q=_54ooLc#KIo>~R-W2rz8n#NFzdv?ZJCp|MlO|`99%2tNFurFi zp7Z7+!RlpLj?be)R;9&n6h%LY~e@0+K|g^d_67f)1xgut$X8iR%rxtz3*6JN+T`=$Uwwrh8IL;&dKDesfVF1^+ zPd8;tSz%A?+3?GE*`eE4?`oG68{FBd@AlsjHn>J53omgW#gM3C<|>Z+GG964@2ngU z%OF{Pje`@Az3Lr;`TK(=9(^Bz*x~92n!MjHIbkrQMl9+V@}nf*Cv~>6K;hH#DSED~ zAa!wkZ%GpmL@;mO8*OI+o4B_#z37WIb7f;GjNt$_sy)unX}Dm%CeCONGZ&~1Gxy~s zaf3ofwr$J?=JCVXn2erqLTS`>LFHO*r~}LNsW~2)(5v0Z?%)Q=dkSJSc>gWmB4Nyl zxp_D@RP!N)2j18Wc+q|5fnh!q!z}bom&U(I$sH90+Q59JY!N<4`*N2<>I7PYV(r9g zJow?rO4pfG76H(HynT;S79XrVm)UiGh97LJoc}XGUX8-Nr{usI&gZKfwm1pt`EnX@qHHx#`O6+us3FmG%yw+INZ8mQm06o$4!%T)C?F*bNvEN0nTE;!*xr;6aO5K#GlsFEkf`sLg|>$3o&?8 zfA~-1rWn-8B_zGWe0(?v-)zej2TF$ z7H=)C4sIyHw!l=53e_E;ObA3v4BQ1=zkk)HpWY45OHxM<{?>%`$b9|V z>HDG5Zs+icMgm*endXm}Yr*y5q~88|Eoi2+KE5!f1uM%hu18vEgGEqu&4#5m{MvF- zbNeGLc(u)BCSw7>OOf$m7i^hh zQ~B^z6&!=(R3pBtKpVq4Ew8B(WJ!3ol`C!or)FP@{~pPKsu-(-T#^hp-PXu2TawAF4&91B!}CQ2F~N#j*HDbx*!HV+iupgh>L-IdSQ*vJ#qNARgzaA zXA4Y*et+p(DF&2k5=)vB$Ri3)yF7bU1e(R14}WVBK`zfslOpos_xdWcMn#FiDH@5y za!wJrk*!3TRQE4bXc~p&UYo9Ec~^nCa@VpT@`_)8UP;XVWq-*Soa>`1_oS z4G-nTxsITKS{*l-NsVW;((uFe(Hx&Ew8)j2Ig)iYn-`9Jx%R&DBQF>?rP7=|hq-$3 zWcGerZYU4XACG><1t(y0M7x#?y6@NDr25JU=9TZR&|Kw#(V|Zh^_aKsw<`9L_{j#* z&$F|Y_oCOKi1btZ;RETUD{*Usm{WC7IPoft18#RL@e9py!E^i435`Hb5d2;t)hxmZ z`Ud|gTiY=KvypGG+#fF3KX}UW2J&Z$+xbhno^pV2LXhWwH#mUh9o@q@?CVV6-&B== zoO!A14NZb9@by5J->ZF`Fv5N{;u-ogjD|*iCvdO2yhWDs>N+bJwf7rX-(`Xti=_6i zmCV@3uUO8qMLzeoeLr0?Fu$KsXeyY*3R!0-@0nS1!Y#$Eca3scz}PfL_Vr6mEk1QB@k#K94zDJG;&RPkK=KR&4ugi2>RlMP}qvF+=#S z51lKs^dNll#T&g6W^g#rBFkNi9{N)bT_?inp*uq3g+D*ey{u)8GZdM?{mULxI^?+= zGT67P1?PdRPmjyK#$M#^gIB6O(fhs6bF4J`5;M$EG-XX=Z!*t1L-_419ems`E8B>9 z-BQu<4p)5K!JS*LxZ&tITvRal)m~aq^C~u>bY_IajF7#nc%L7k&zpMg6AkP(Vac|@ zc@pKE=xyqTc_ zBg}`MQ7s;L7)c9$KYIHVqR`X+Rr?!FH$A9NOol(3rGx{kV{f-7<8}UsP8aJeBX}4t zx*6j9i(xC>#t9kR3p{6Xc#G!)X(<8gYUFsRX=^Jr5aimN^z==xrviC{=HGWPAD$}N ze{VdO5`@fGo0bLW!7e2Hdm1G*_;u__xK_&mEsryz*3uJDn ze8+DOf_smSYTpbMx+boC@cj?f@weNi3a(K8(UDc zQQY1$d#|#R$jGYuB1uMR+o_*QMkSGiXqp*WA(4clP-aD?WJ?NJS=oDU@AdxGhxqV3 zo^jvjI_G=3{_UQ4s=^5oGMy#|rMN))pVo}66eqksGO6#3JgOm{Q_`g)%piC?K7JT| z2{k;^3@h|3*w5uPVyj07flKrP{$>o&uU`=&x`!3St2j86eQICA>7?HQ!>ge;i z7I(x=bdF>?{V|;RKm`>8+_k3@H%Xz~9^p_~O7On?A&FsZolqr}G&_A-CSHfnh-xBd_Xcb6C-H_K!c*jTl zemLjY!O%|u4b_yN5A4QyL*u(v2lTHmCnpfa78);c@>%)PL;j|~_v)!FL&Y3n-g5;~Y z$~?+-^7GWlByT7M=%lVL?Bd>dlF!?>Eu^rNKA6atC=Tjw8v0lLE{LRsHS;>X7))ZvL_dwm@oXLSDVi)SMy~kmVIHp+}&#Nqu=!rq&`OlO(eG~R+;BvZ610;(I&vwll0O{bZBomqlNT9fOjP5(5lh)3{w)xk z^)Vf!Ss{|M+?6rNrMWoy-Fz7N{KorCSp;#uJ0bBtF++wQwFcxYf z_O(gUl)CTc1>;6CeXGKfdJH);(kDd!6pWCAKVN8=S&k9aH}bmQ&h-$F@Xsa68NZ2A zxt`^W*gOgEztH%?KbkLTrS ztz6{V=odH6arY44iT+zPXJ*O!K=;b>8}(za?A}TG`n3U) zku^f|!=sL59=;f@EIvY5BFiVZMrz12)@M4Aa^s}*;M0Lr=Xp}uYVBc?@sCh=JQ=Z( zT_DsJ6||drBgCfVZ*Q3^`t0-RCPkZ9$Xv|IfrJ?3*IU0DXDS&b-ScY~oXaOjzCeEa zoZl!(Uf|EYXNCNs?(jyQyk-({xogb8W{4dA8q$!Gw?H~$zYT3Qog#G45(JqF#|c-( zOuIV^`pH{6MV;$s2+ePeROiRj8+XRuWkCp#YI7zrKudqlD4UyJRW|Ok| z8WPw`?{Vhn01*usvPfzi!uNz_JqON5)+%q%E4vR86LHH<{(?E;XxY83K6j9;zmJ%7 zg*h^mIRzR_v!uy5)ykZGkZk>>7Oa9ipX$12^!d~aBw29#lLeDea=yc5quYI$B;QbI z8ZuiXQaU&6k03w2s_}Z(^_$3xd9_Y0wr!EjWL+r_QEw-SUPG<>opFA$Ab(DvWSUGC z-zzzxJxvNc#e#f$d+<6gp&mfpUWCr}H=ol88G2yMVt)mDeFqa(ndldZA>~-<7S%a2 z+APDJpoDWA$IcQ4$z{^!qF417{r4qj@n&8zxM@uPJ ziL({Gg|+`W*>{kkm3woZNT!Gh{awNwLgRAiIqWqy5qD#_wu;wdm>=_#uN!2Rc3;f> z*fnBHYi+ib8|NSjGJi`yY!GgyVv~r)HKJqxLrJz9pU(w6pWV4opI&|TmBWhxEL|3o zB)(C=v_;@9xvov3Gt~d~6e9zeeWFkPf^+)H?CTx{U+IBOHD)!d3wfvfHf&E7kq^$Q zxVPaca=GK4w6R}f1lm+SJ|Dsa9=<*;SC3$?TB+*IX47cYo6VYI^Voj%~7^gZYaJm#Uk&3 z`(&0I5s%lmfS066Rv+>(e3c8bT?>#;T|V)r^gmWeA6VBm8s-G{(x{NeTI4lee{?$m zbxT^W^QE~DkPn;pR(CBCebrY}+K*t~pgJwvYQmlczDGshw)%_fz>9^uI*_|4_K9a% z>Js`_`dkO8gEooGp`BXU$iule*0;cg`DXSaF0zchX07ZTtb$Kyz&rHa`AmJ(WsN`H z|M(I2nIFuq`|{Ai;hnj~JO?n(ZMT^Af`JM=6BA!*nPRTZnf1B{`tWH7%nfwrsKJVo zPyIU17plf<=JL^>meb+(=2tWJpZ%lqklRNOYx;+b4S!L9cTmrO<*&a4vV#uRT_F=|ko;PkkR{2H&gLCwA=*hf2Uuqq|6L9X55ba~>qN!EFFgL*fp zKu0lzc3=qoV51Jh*V9(XR(gwv${#n0>&%f=N#v;oh9@vd;d&v~ETrIp`Ur%Tcx=&n zW=sm#De)Gi&FIre{gyA4kLR`Cdi%w}4Hm>sRz24g9N)U!j1=7$N%cSz36!Z}`skarE~EJ0=F2Q-kaI+f;8DP=^V!|2-yv zeRH{Ay%*o0&*$E2*H;eokpHhIoSl&#>U|tV7#49ICmN=5`Zxp3SVeGhV6ST#WvODQ zIX&F5&F(Y&hq}J(vk(2ZseoA`@}pD%H9RwYz;hY>K6{d4Uz8oj{J}fVm~^~;LaBQ8 z@L$IJ_5l^GKl4cNRJLh77xV3>hK&=Busrtjs`DJ#|&woB{Uw^jaIQU~j~D zg09N}RtPgUrPyxD2otKJykBJ*q58c{)3Xu=XqI3w&=1Fc*PMs!mB$$2;r=8l#~>zn zVfrf%|7KnJb~+KbI=) zT-Z}C7-YWXU3_2*e2ew!4SLH7zI0S2wK#8d+}WhUDY6C3Z+1$bvf%=wE?eDd7cRKI z&EWV4|erCtp$l;J@FtXF)g2O7!-j*u7Ap3ditIG*o@a4gY$md^pAmsg&u(dxXHll7Tn)uOQe9(**D^iNNOv3QyaEMc{&V!RZx(y`XG3?f;Iwp{=2D zcYljQO8(B$AALeFD}31L;88K4ce@eE{YnJHy0`93j}V1xH`5jj*TUstLZ7abMSLfm-Z{1R)2b4jD9K&Q zxS;~d(;|;s2Grp8pLYi-({_V^(%a4n4=re0>^i$6We*7Ti0r{}0x&ZVvWZdaLY#S| z2-`bd%)R#=eXgws<@KUnMLYFCZ9E{=^|T&{Up|&86Rr#XZ@atfvH-UKY56Amm_UI^ zc?G%Z)31~Y`C)4X9 ziT$RgMXb*yU_GI(?`@4ZOsV*-?cFW`2V@&n_g#~Krnet-<{iXnSgHLr^Ry*#n})^9<0sej`%?JGfOy>Rlmt+p^M2>e=g!5)K7 z);31XVj*b0e#WVYT^LyVrS@y1?tjjHpfYO^{r5v5Y?g|Gz~WqF;Xfe&Ek3df<*tH| z;AUH~QH;EJrcb$9hJ3&_olwU=j&m_7mBgxB{Mhr^bELtU2ZC*W2{Yl>jaf$pzWT!p zS#^8P9ectBMIm2ie-a*We>7X&kA8buNrv|88`uY%t8e+pm={7)zUk%M;|A`}d6Whe zT(FH|t8t7b=4tlc`EE;zI{)@4y~_u;z{lSUKf45xHfF}=Y77j1>koj1U**Q-?w zdd&f5?Q!2UkpVHY?KJ0wI-C~_2+eikoUwjiEamDIb~r?}vR|c^1OAv@cL`GEfRT`& z|JLg`;F?XI{SxxJ2(x{9>Mi`fEeeK>hdJS&wu=u%8-w#wgLCQ<&3~C8C}3Ut7zY#ROKthAUd;@v zUWGHR_c@SP_Os(Ba;UXyb`3u}jQyJ=Pf;qG4W0`LJXh9chU;vg8&_L>zD7e5T}Kb=`Ujgw6yTlE5-dkL0T9sn4iD+jsemu!`m(B=|NsgUoL3xz#ILH8OhRO-o&_n{x*q2q{{CvuR?cjrV6RsCNRGH-gj7w4MxcO zza3F5P;mZPvlR!aHA@BH z@~48wr8?-hfBHQ3?DnuL>?Y-Kl%?joasyHuaJ+Eke+-=Pmc?fy&l&1 zyvJUP1kb3F9^`dBT)U!x{r0@xGS747nP84?OS7OKE6}L-boC&|>SIu!H8R zSAji5Ca=ri`0}DZKiwv1|1>ki|A?ODP-OtU5av5K@H+FK`eSKsMhlCxX5pnjnc&{l z7wvr6^e~sNz;${nJi4 z|LfjL0X?M zDd02HP=d_9O%fG#hvkwi&Lf>$7xDve1;_WhQ)USJ<5sHmcq4G%-g)(U-{vB@N~=cy zVUYq(h9=mosmzhxu4*^`^Uz}#)aIVH-5G*RaG>Qv9$Vue`SprT$2t^oS=l(yX72goD;p1Y z4Ow>L^K|PrrGmk!HFC>g*NUq2IthtcrK0XwCW)O=BPY?veC++r+Zy}l$(kGI{x_IY zP!oG$=#+;^mo8+W)`_I`CD~#LYVf@!YwUJrg;-jAjH~#t zN%#*J)rm1;Uz>j7>A?#dWM)YEhBM|^tScVhrpF%KexqeGfpR=A+}X>oxR;5aoxW;r z79~`T%%r-sZ4yrnPt)0M>{+P)`k&QPYWOUCL5n?ph1gMfo!D!)LAK2EGMM4qnFLwr z`)!*dZy3*(%0C()*&LF8n`TLI;UQ7HYc{OS~goMzqop}4u?Dkk&Kh6#&+k>Z?5vhQ~`bAre4=46-p+Fi}B#ey#X`C;=XY8 z)r=03r@KF6j4Ti}=|H2Y=3m%@`MTEg=nQ%I-(*sM?>|Bn<~_+8I!kf{^hYRfwG;hU zGl4sfpr6_pL!5W>iI7eBQP!e9a^a>(ru}Fyxwet_A)RWDEN$+VXLp^#z2FlEf3@|75rHlF!cHZahGJkyBvE*=)}Qd2ae5!ykJ)llt5%IgQ#$c9<)d z`fwNV3JG<|-ri4gvflBw$Ssf-NmZ&d)Dwg=uc=#td4|N*G<1A;^qI&k$+mOeMPIX! zZ{Vw-K5~4r?%3In3BE$napvED=Kv z|2Nea90yy;uY-G%vSSy?GfJh7>f|}nsvf~=(mhIAmG3k-v`>)cG?l1pj=kisP*_wG z$2i%w+haU{YmpfFbiLZ8u}XeDcS&Q;`$JOhvp6=s949_|4(BHiVXx?s$@+Yie`L0O zq&Fm}i~QKIQwlF$B30`-;uM3!gvQ^=Dr*&a;};fo4BHQpGo>dv`OJFAYtj3syoM%7 z|DlZi*L`P*=NI9`w>Rd9{wIflFPuY!3ZKDMQZ0mM@B3ZZ*ylNsQR>lDHBFwXciOd5 z&XW%z25feVi-cp5MRD;s{=H~ux{Z66$d&W%8Y~ZMiF8KFMj%%&VN%R?Su7eOMR$ZY zd*05IWZswod-ehHqi9A(I&GA=mgs?Y!~_`+O`mB(|2%WAP$57hnynA_#E~ZuU=TZIY!1FjHtJB zuMl6^u_ktV{J4|jrZdiMY%QL4RojdbNSMStUM199uI#B=-^5<oaE20k;y>-Wu|NsJHzyg&KT!dF#lLd@ZM5)Q zzCoo~x}fD;RXyVi1~5!=y)GbxeOs$T^Nzb{;l=x3`=VT!K$TYUCQ0Xn zwyj>jR^M*{s;9yKwqf2oC6Z>761k23Gyi6 z`ekGn4YxD$L6Kwck&pDe;Qc6%JtKq{1Snl8uioN;Vab@XFHF2pEWahjX>|)URCSwB zeC7g?TWpLN3o-JwoiW1sEn$amQ%GsxLAH59c&e-QU!CqcE-EI_*$Qgld>0)}XV znAIs}Ft(db;$$BxQ5KjjxfhT6Cu+Qt#wFhIj=4jzwf$z0k1Vh)$J20fFp^uwNHi$R)^Jw<1ybC z#CYU=cm_3WaDL5?LI20c7g?*L`2HV=zqOWgkOIEx$j{ncKp#Bq_5}0f4N}T-H4uL-I^!J2C7#Hf2;7~ zEp1BpB3`&_`Y8=;wD0INM4!zif0dZ4y~t1e7?)s}P6IY>9j)KcZx=RFtduf?y-5Gv z?rk2&{OfS#4O^T?c*`;=ioK?R#bZM@KFH5Mp7XfkUeE@Sd?di5dI9}!`x%0O|U-zlefspz=Vb&}3a8y2N&r4jFH%*7|{FjSd zLHoBy9WCg9l#R$xnbX1gZFgPEE}SQXduKo#6}-H=dex2rdyKd*ylQ)gJ*O@F2|AiI zkoWMbqf#d31U!+n-r5Zdz6B7S^>)Lc67QUtG~jn!J7X5A<0_Wz-P&>5M9+FD{~QhqA6(K}j2P?Xr>< zfykflwxYNlYex(3^fljP%An5E8BApFvt1s^_}Kr%*)H# zJ~ENJE%^xb>J29f4p9|somk!ycmRK)f&>TcVD2X{Wd!3B@T%P!r=K4=eSo$c{fTVQEKR^-H8 z0Hs*1h}dOj{FUy}2v#yn55#`veb z@jMWA)y7369QpR8#k}U2$7i3^D9&c#g8pw*ldP%&P|6mcksHeofu7$za$S-4z3@o9 zU=IC$wh1N9$oo2d>YhM2@<#5+@!6OeW-kS;mcNE(nn_lFAZ>7BSMqe1d-u~MDm`)g)>sQBGScPFk z-;9=RLlCO$>Z{k|g~8=^>Z|KABH&qCXdY!I4x4{n)QUcdKt!>Y#tQ1aTzAb~OfHB4 z-3Kj5IEs80x{BvXs1s)lE>;$Ws=CsDLZ z9Ng=N`e!eS!+n=F>yF*x5KMh(gVA3MuD{-Xy)jt~d(ShN4}vI6eahBwuM~l`j+-XA z^&*fES<$GiD++5Yyf-r(gdpMhQsEgFVOVRjuasC7f`RiV^y-&H@VOcKKIG zqC6!8<}YXWM!5^aoj5_JqhEwzyp`?&?EwK;sCg{9*PR#Mm20`J=m~&kr65Z&@Wa+z z33J&jUbvWKRT5&!2dODXpB5qaSu>bo+VVX=q=j!5?|#AypN$5)Yf=AV;R+UixXKNE zmE2VRfxN(c`Pv~T>|6excUGW}gBN1DZ~1ZB@W3-)QTo_kZul4}`7aE)Q7U0Ej7L?t zLE1y$)l(gA`1Qruumb)0DH;X)WlwOy^bO@J@`_u)P%5+C?#*Yw0}Je;K6}D0k^}AwRR-m$GJ~%1 zk-gfy?2ytbu6MGT4I(YSj~b#*Ui8)YU&(VekS*)2e~fwYWp zNVoegQx_u)SyMc76+>Rmz0O;|>Tn&RDoc@T!~knIZ60Kdvcko0ZL>zGpHF3*$o|GW zS#igg3j0Rn=Ls9NPd0FrKXr6J za>TEE^o;q4R5%|+g25;QxTg)$)uX>~c|tyw5%qMFOD3O0aXqUNQ?by5JUXrI ze=|00sG1hP7f8j<0jfk z*aK@65~qT5{HWf!GM=stVpJFBasYM5{IKSYf*I65&2=9cY(sr8@hQ($bL0w|4eC4{vTE;4tO^f{wG-rA^R6g(_n~)$#`E>wd?09=XWb9MvxT zw5Z?if5Lu3mmYj1Gu-#5(84iiy5JMrX@NDw?3FY6KIpkCgZE9-g8Jn#ixo2(8jwC`t?3#wqrpIM0uNXDsC2hkXGutcvboj1Uw5O?fXT>ar)k z{eFNs-^4R+#VIPN7qhDhTBovt)hiF`#%oNVki=&yC5gQ`x8FVc%*_H>{lDLB6~+6e zRxbR?IHG_S-?b|BFhXna-r7;J1-Q?L{veTT@b0Wh)_E^>5coRxllB+R*SXFt++pLy zx!{GQfk#|G|2!`&0sABpm|q;RmEnfGu5OcFMs8T)xFg|OhIu)$Q-jY+QJ=qgf3`u9 z4^}=p1xA?gLMzfU6)tf@L)K{YY6w59{AYZqER_!~%=1#Ky~Q4D<*4HeaRTt`-As!9 z5w!@#>dpU;(GN zPZ8eZED(7>X&3K#7I4%IOTA`~_oY&Ue8wT{SC&x*)X=COT!%xhIP(2r&L|+f%aH8?ivsA$JF7rz#u1{AILgY+4@qSQNU|#)* z`PgGN{X^cHBY6#1zhIp=}~r`tBsU-VMC zP9fh8dleRbzaK8b{;KrSf9~3w#7*S&*Pc{LV3L? z+5E2}Koj*L(-5`j6rBy?Nh$s!Fr5~@${*&EJw*q1U!Q1s{9ui^y!)$l6??kwiW(oN zwx)!N&Y6+B$Rko4+kS;Ic!P}F@8(&@xrOLxynIzSH57PubG3_Of9;IVljf%@YGK@T(KNI8; zFY@0#FO73^ualfb8V~)u*pE=Lb^5;nN{CEIK5Xz~ibP30%ocx&y<@Hy$5T)rcR%mi z=_<5Ajy_Eb&-7X$f?1P|CsZhb+Ufe4nkZVB&Sp2^AHyC2qtwf~=zkhM8KrX#^=@Uh zuEde?CDQ%5;L~;^%sGu_e)M|1N^W&%9CY7F0kHzYH6xzL$G2!GIgIni#V<91@41k( z@9iDSgSm_I>(Bpa2Klf1M*}}RSX(8ja)}QEqBcoNwX5_G z^o{NKZ#1S6^{s7ESmvop2}bmLtyO;0!0yv$rQ>ca6WOB?BZ=zBR#us#~|lCp7Ri?S zkHU|X)<|gT)Sm^+fU7hOt>4bjTqTx58ffLwQ$*x8nH%%N4(=@~($Gchi*u6#je!|HTVNxzV zOrpMzQ@m80CO@aIQ5xQ#AXyt9q+RI;NSkr##tYjiqESj~<@0@(u$I0|-(NUQYCbO= zx6|k)p0>qntXtocnf=MKjQ=f@zKm01{&l0|oj!`b+<_NV+t=5YNWzideEe%8WZ#@6 z`^m=>L_fdukI^>t8yC5MU^+WZj^B3W*5{fgpB}xwb5w4WwAJkQt~!p_T^eaq%FHAN zDIEo56ZtL1N1b#m=g2{p=q|e}1LP5lYo*VB)8uuIzhZSIa=7pNKQh5SX@kHWirEg+ zq=gJL{_q(gOf7aIIqHqX{`fJ;Jfm)+a)^d|eIMorT=*i+y0;MqMS-{9`(a%l}9(ow2{pz9!<%c5T@Y zIW93ZcT26-k>_$R{k|7IPxo}~A7=eMMcyv|Q{+IdN!ImZT_Gp1I^bck=XpB+GVhi@*2a!Yom&YUHUgT_F1!^l~)+Op~pG&%P^4FOf-a&)_>MQ$#=e z!Se*g3Bs|P%iI0=JE9TxOG(BGxlH9RqC(|*NTr!hj2g`}DI2OziusIvBqJI%7suwv z#+I=RmXSj)UJ*4b@!!%85e@_>ioSq@~=+5)^?HVMs9BOLp!t+FTcYnTe z^b{Eu-KSFXbB6pWJQ=aLJWXcg3LNXqmI+mz@FPR6Ns`dbskRH}8Sy;Htu)BhZ|Fas z9sC>l_M#^z^ic1XJ++PV@LA;UZ?WF;^y3ow$sfwZX){3Nv!1f@V*hH2ji2`+_GPl) z=hMg6DR@7w-`n5ua+u64vp%lONB-T6y=tm!FZq7C<(PCf9|YT9@Ly zWA{j4(V<&-ezTqLNhZ#d#$Ba*5@pwj&vMzb7Ub^#N(?vAKRZtx?LCTI-KNR8m`^Fi zAFz)$>~qs%!z}q7ddRCteSruvf1Qneu}B^;Pj__~QNVrsomzf@Go+BQh`rMR-%C?W zAH1k>XuXl?hWnIU%`97?>MbC+x3+q2 zlns7vUTu4gyi|F!dHOQc-J49VNKp-M0UxW?Uw2T?n%P#&;){G5!P9Ob>AU%0*`~qS zaU ziWjkY$&9@_gKu)p86miAlfpZd9g15RM@~Fq1Ue5t$uLm{;4Z6JX8((RuR{)XAFp5^ zSD>WLYy}-yy)Auz2KQB7T9t<7_t58og~MB!(Kpgr8RNLZ08>Es-NUyC+5N`^9q|)+0i%h_46@ZZ|tT2@89MXeQL;5Nxn8{Kmq($wqCc* zq=6$IPs>}*Qv%2LlD=aXS4fE17>k`C`Wv(tc+=|9=gr@ttcmYy^Idy34!y)2WA+iQ z=f1d}>8Cu=9kW7?pFMsgAM@g^vFraBx8R(dci4BE7V6+*BcfX|N0^gdx@e|{{_+Bu za%I%-z59Q=QDV<)71M!P8Z`>|#aR3;9&^=tGxtX-Ha3ZY&VHx7EyyeFPp{aHy=ui$ zM|vO2P{QDIxqi3v8^l24=4^~44LF{w@-+!wC$aH44#v-slTVc=H$h1U@sh2J1pri+vJ+VRgIDfytUi0GyL^G4*(VOut@T)L$Zr@o7RV_o(4&R=7!aCGu9EovW(t zMxR80R3{IvKS!13`gMbGeRAMJx8@QR7-)Waa*U4#!kzCuIo(eKa_fF@=pb^6b{_K$ zD#G8x=v0UKCKGVC1~(d`{viL9=TR%_>^Ba6*}pr27P3CN+73TMZj@eAV0QrOCExFF zRIoCF<^A-;wk#@8*>~$RbW+303fpdLyl(PKemLc$?;_&p?xp|m_gv0ATyVb?=Q`d! zLgS7sU_F@gZVGe%gAO}SN55bK%6PLdaZ6gTj(JnpHb4iLINh}${l@~wIfe&<_cK9S z)XS?of{{ZT@Z>+SS$g>4s<^rw&j_8GK6L!;=y!j`c<)0s1BgGoCrBxV|H|F@l#5&h z=?L*?f7Jhv@Z7eqHDCtM7S=5$m~)Xjo2z=g0&_0Y^f?2@%s|bgOCiU=25}1XL-TWN z@M7FS#;pBHACVtr{nhlH0UZYnCs4LFj&@&n+7J+*D4Tzh%t@eY$lv+gf>GM}ycWrVehH z3v8KA*1{gxr(RwUFCd53XSp#GIa+hJ>8ZardBNbw%q1_>39ocG3Lo3a3u>c3QmDgt z;g?Y5S_m5-WZQqaa7P{aHLr8_a;NjboGaB}jS4?>E6_dIHi7+h2ZC)T-y`={RK<&< zh#yXd{C3bg%?B*qik#e@{6G^Fx!tc+5MHc)xfB*E2!6G{X1G{HAd=+DzO)yGoeNpL z7qvxTPo?&(*^n@VMRuj1uD~8qzL{?0UBYlg{t8=diYVNetP{H;D+b3B)y01w76;XH z@0 z1t>|GODmXD1ZV3= z#67@O`MQ2b5dpTFJFBx(0nCeZ)bn(7!L3(Zu3l6RIEPFR=HJl+%d#^U@6+o+PI{i+ zY`ZR4%o{mA`wAe@9J+PuOB`!EMSCm6?}5qk&Y_vF+F+%pf!q-d@DF%YB_5~-%EgIK zqdir?SVQrL(Q_qmcwVSpUM^BHQ2u zn_R8rxD*`Pp`vc;Apv*xo#Nh2DFyr#H9b9t6z(~?!Qo>ynM&5oCRG<`vo|i*u(Y>PZ%jC?>uoK9oZ(M6*MxEW~R;kH~ zhX`B>ef<8aj2Q6x_jJd-LB4!P{{??@5eS`i^~l9}3-f_Z5iU1j2r2$kM6pKzVsCHl zJ;javv3-FKNk4>P$NBTS=7a>GO?`ttCPWxKZtFhXMJ)u@ss>tI#eyKUm~mJ$54rPC zR;-k=kwc$kTh6x33-0<+m1U)T&`x)}m(?5n?EAM-Dc|OWhf_B%L_OhyM4$P)1u;Bu znk6hWB8(5zM>o&y)o(Q zFlUD+S2FAV&#Ce6=4vx)V~6r$hFu((+j;QM=F~lJ4p5gZyExdv2`_4r*&B`_uWO^U z-3fi|vP^|l8OXhNqWbPu+rkD{jZ=kV#c>XJhI`7dp9S*InAgXMvB2|lWfMD)Kf^%f zbOB7+;BoUv+M~;CuyOokY^o*pZF>ue{5=P8J&EC43ql)hb z2RWPN@E?@$MrHVZ4DxKM&+E=8TtluQ&0@7J`YYsuZj)ThFC85V9sb_P08Nym8cE5F z;PF+iaK@b;x@6nkyV&WV@?e^F$9G!blm7naBnt~X?Q;DkgzrI1kJ}tCaK1cu=gB3X zDH?Ff_4_WDk3D?CH{>4gW`v~wPMoZZVuj88@wyqDONWp2pGo_JIl(h|{Cuj&yYp6- zty`c*9V4v%;0`J{Dcm`4sE%CkONWi`FJK?3)TrZBEfqME5nDGyY6#!5dV4zs6{I|V z5S6UQ2zSn1HIj_NeBi>oRjVQc2pbyZtTy5NojK8}{XQLB%j#}SierGs%x_LS+n|N0 zNyjusO-ji99)4vJ=iG5q8tDlI8^nG%`0#_PG$7+8+S_)67C_EDr*@4AVA3o98S?Go z!*^`1exiox-gMO-%moT=(@cw)p#ol2h4Z!nOdu=KShTD{2XIQ?bo&WP@EdBdFhsw9 zaF5!K#JewK-eT*c$LOQ9V)awZJB8;ZVDm!i zG$ZVxj~5pZpalw{!6Y#@oF_#k?e4Ikg#@1vKB|6tsC3km@8@QMjFQENZr|zPd5Vo} zSqAd!>G|$m*ok@Ar!Nkr-oc*Ij{JzdBY52>Xj0Qg;5u*hQ;WF~_Tn6ooK4%0oTqVj zR$+G*_~Xt#{q83_Jj@^8FhzN%w*hBg#+4! zhjX|hIAQ*bPRxNN4(K+DO{i$W_qy_{q?llCDBU}LO4XbTG`1VI>_k3&vUS1Hi|@GM z_ms?gp1@SN+Lc;O&F9IpMUV4lDOS4%p@w<@DPUmkGNKL`Ew=Sj2T zT`n-487#bpKKsnTup2jSY=JoXr>@^@x#57eNQ2WnCvstmR98bep))Y}cbgY0=ojYG zch#|hB#n%}PX#MzBvo&o!p|pbIIrKn#SV?lwKB^%&oErFjcfkM0*}iFm+oH09%#-N zcjcKeANxCvHTXLtD3v{PvRr3?v^O;2)px1?N6~r5bN#hp+}?ZdY(;j3hWnI6l+iCM zqh&OxY!x9ijm%K8MMn1C**k^o?3KOubDn?W<=gi&&$;gFdS8euiO({F^bnRAk~X8I z$dSBXWpWGWeZi_LlAn$ z{ngtG-~S{oHm-Ocs4B$R@OBjUv)+GrJiBTiqIMIjI`eiRw18J-Np&Br$Sy^{yhDnI z^BaaAaero=mE3R(_VL_%`Kj_?oB(A%`f&Z9KJK}iQwa(FLx^syYqUhBV|_U($x)&R zuh&H^IR0TiH{sdkAww<9+pe_O`a*@DM;EeMbU5(-x%DdVd%A6CIq-QCpo;z9lcpi{ zm}~OAKc;Z$9ucy)7HMAV*@JR*62c^$s~z=>tUoQd2C`yIAC`U-qQKvjoaZI>U}JId zTQJ^_xAfQ`<)M9evRvx3i}i97jpIxga88zi`r(W**87J#7)gul@o_5A>T6%bK4xb3 zW6Afn;dhn0j5zkkx!pcFScC6-!IiiUd*WT-r221k-irjCwNd!i^Ku{h?hn~%$zhJp zN{2W-e%-wa$*#xKDbi;Gjhj4V}vTmI+<~xhYXQ`ks3r@2eB|@gwHK4C@xj#A9wzQO)jOPn^T2JHD-s{oRT$CJA-62+-8=UzgX~ zh*7~s;@clYu+D8mF`|I^Hudj|H#Fx6kym0N8R>D%u^&4f5{`2k&;I>zAI18|E`#*> zZ#bWPV}4XYPlpH*G|as`UQ3AR^!|JKZD|cWf0%YGW8SA_xy6^uR0OCb_TK(icdT3d zB7MHdO@wH5&qllM9)QfPj^UZ)9q6;m*&@Y#WAA$J_)7o9b5jz6`bb^^bY7%d%ES|M zf}7-*W-%YER!Gy_KWY~mE*Y@V8DXw_fzx!W(+V`dmJF}ObD0t2P9=N0Ezo+g^U(Vx z?(dtR)!xON0n58sbqV=kRrV^wrT-j{I%hpO|p}V=N)!Xe?1= z%UA`gn&AUdHrz)-Xb|uc@4GP~cfh(~4~njL_%LIi{Xx_-VZr}!KPTho{4U(Hppx@& zgVuup1>XH|(;w&5jVL$?cJN=I0r@5;M$pT0RE9Z0b6RsNLI#g)axA~vVSI`6)Ho3DrN6?e4Hgf z0^XmVU1Z*X++h2HH;L;IzmQv(KXw4?l+A7Ncn;(1ZzoNJ&)Z^l?AHgU_kpx)JAl7+ z69NhYe%V+Y!ZdwNedgc>XtepA=4yCo6qv_3Fa8_2QLL3&nG}NLF^Tu zz7e9W%_Qby)H|^G=V76&{4|g>t>~oKZ^HX4+Lx7`JK(%O=l9A?%$4!~U=yR?14npV z>LRgzw>m|Y7@PDP)E|GI=%AUw{3?f#Ezb^^dFiwu&ou`#A(wcR>c`;55#i0Dr}L1> zm3!_|=^C`O-jnjaz6#+racbYrEP_(YulLpMv#`WN5%~`5{;JWsfg9~paC2!(d$42% zKG&z}iod};lxId$?H0pu=bzGpBFwL$upZIfO{fR6w_n3{qL$!NsChZ3(hTtalBPGQ z837f=FPY3|N1(+oRTV>zfXdH7V)M%eI3FSWtq@D8W5>(d7B)aMh!H?f0);h#9VEOXD z;+1EeFtJimy52MZELKE(r-_%~3Y~)o*U}iM@7xy-e}_5!f_Lm)P6pCnAeXgHS)+txB9MC^nT1pS49>cr-~$Z-g8*f3OgS%z0qjP}EH>tLu~RbY$f z6t7%1Svu?RaZ>oPJ9%{->rf}`*Q~0b*!m3r-&ov7YQ&fyk+=+|Hv@Jb$4r5vxwe#j z@;(&Ido!71y?I(qWtO9A23)QLmQ~YYKmEkwlc*`&k4q_1=E5-r)vgjjdUx%p>G_*^bDlST&6+)H4D-8g*{06 zH4$SgyaHLD?htf;#(fhfl=-Th$Kh`|s*+(D2eZf;PKksGh|N`dc@%SSBn9~DBUM(w zlCAMwWGwcV4?Vv3p=kw(*k6RyM&bJ-lXbbLbQAh#<_}Ir?m`;LhSyR5F)05Vdd1EQ z&n?$*+8xhpBtv)de`CEpIc=kN_WlCstV>*ZO81x=A_*c z83Y@*#K+E;)_`0=QimP;_kHeD4!`ihy}L2A!RAV1@R(mb={4rVFfkz}S?)DZuNYBt zi`aum?uu8(<7S{tM>deNYZchJyPiG3c@2i+W09uKi%>zu%&?p}0)D#$1TmQ3zcbA> z%K2gwHfhMT_B1iSMsSe6Tyqibk*7WNmN*2

-7gELiteQ`ks*vjN)n5)=30Hb9g> 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%0AjcqfK0S!gd1u1y^XkZ;QwNPrr2+ z!bl%EQ@(g~eHg6qC$HuubmPF@pQrDRyhfqldE>bIUYLo$WwMt$1vdkt+zz}Vy#G#i z_fE4OP$-<4K6||ZlFGk+4D0JbzB)&B?Vtwu4&`ioR&&Jy-`a%_2~D{9l-yh7oBpv$BQoY(_k3{{cX{drI$+KN3_#4Q{T5U=&;xsNyK z+YqC*aC9uNSJH+)U`v-+3Kq)$o}pGDe}8+qL91)6P|SX?Jw<3#k~QB&rJ|Q`U%I+O z-cvomv7=lQlB;u=KcKMu$59>Obd?XyvNgdot!@9J@g4c#EVhq7%E;IG7p1>G9k@54w<6;fZ%1h(^iVcB=}32q(aDDwN0 z0h`FNkDFH)A-Cg7k#$uo22vG-2R9dCR{oLy)$ak|-2S6*%W>j$OQ(B1B%g|-7p&|2 z3#%}GkpGZazbmr$jQ2CF_TcQonL?>A??4+WZK!bB0^a@F-uAnF5aS(j<$|9S{Py&m zm`#<%CC4)+Y8$E8MRPHv``R2-7tS@BzScoAy*+c^^%rQoKT@80i*U-HUFM%7Jyw@S z#lp@?0nF8oKKgGdi1ffo>hYH^yqLEvm&!cF&w`N$D%QlG_wu1J&n0aHUaA_}AxyXw zlD{S-s=MJb=1UV6dLL1Gj-O9Rq~Oh$`(F(G>rr9ArQk_^E^YOSjCj>mtXJ%yE7ZD9 zJUc0)c1^|TYbm<@#CxmnJ6irn z(RqjE_`YFWOGqL@p-D;+MJd%;DIyIiWR$cc-%=Vhm9(|@-h1!8_ukrzWY40a-~Ic` z;UCBGruTX7`?}8a^J%h!Jjd|Oa?^Soez4SJ_Gl4JC4V?nNY78$k*dz^iU;0U&Ryft z+J$d4cei@U1mPV^nnc}dEh0nyc8(HGf$n>z!cgW!^ssNT*Cf4efkxX{`Q5}Lb8YI` zv0*((vn=0`Gfl+Z3$)iY`liS^Z)8yI-jHM)=iOH(t` z*u5(ke6Yv!`q`7EkvP(_NGIRqhuz_}-;a>~iuS;UsT!FZ$Y)A@;{UaXOA;&$KZHy0 zaWL*+=~a^7y>`~memVz->%LqQdszf7qaXXTwg!SnWV6(uP(Nfw?(a9fDh{8=js^$E zYcbW3x0Q=N4_?C(39mBZ{`KI?{RzE-+5MmAEUs7_Fk0ytdpVzA1JA#fFn)-)FS-y>}t$dvb^H zJu~gY;m(#Yy@*l-g-jm`ovneuq3`&-kc7EsS^0mZ38!bibm{44@;y>X|E^?~0V}^W z`F*GA!9C<7qW1AC*w!wbwDJhW=DtmAdLcK_rA)bpMkyRY_vT(Jhb1BEuo7);whp*s z9oO2({;Ou*K<5QT8Wt_j@cAg2;bzR+b0uZ(aN}G{+zD0>41BUR80zx{k45!*|N_G#m9`DtL};c@>cpMbG_qV7M=$D-+Yo92Ra zIq|F|F=cvIfM>TdBkR8s=yqNEr1*OjjJI9&JWe(sPVGVkDEvGcB`-bZ!Y$4E3_HZV7H5(kHe!$j8&ZqtP z0jwIL3E=wpOqBnOH|`o8nZ=baa7A+yu<1Dgdsh1sT->eG-iZd`3W~?>b#`Gc84MSJ!~KwPw9#CpAU?-hqWT9AvC-^ z!hq~cFUp^ZdW3ksYZg);i3j(wbCPzdAryChWfWu}e&B2S6LSw_pmB{y&yRSJg8Hw1 z$UU2i3&*4ax8Cx_?#H}BTzV#O6{Y+B)%qjUQ_Xg(T!=!%qT!po%{id$+;>uDITJgB zGs-V8_u-n=32n`}Mflwu3EasufY>;Hujuj$Xgry1w?9tqwdNx?Z`DV`x947*!mmh( zu$*X!%$&mO_~#SVNeu`qrvDO}eH#aOkDJ)=l%troK=SNS;v1|#|5M>tIgaiRbykUe zfIr5DhNZgWxXGtY6?H-!f|6JBR%%HP*~X%o`ZD4BOT1qjj&4Ru+U1&7uRMf1<~fJ) z_<>)2*Uk?wdQmd}>&c6yp^Nko&(&MKKav4C>!&9U zHkRSbX*NZpzpIk;3my+y^rdn3-WRRw=8mv7z4P6%jr6yxW84fE=MijR8LL{tj!F)% zaR&7fT=w4XmPYdY>v9T|_2F*oj<4nSn!;pET6-*!lap>*nRAj1mW6Mu*X?CYI$!p_l`ro#Y zbHg1v{q=8Vpqupzcyc}zgM^0WLeWUP5L)T;4gp9IXqqqnqX2iWvlR;w572GvtZ}Q{ z8_wDE|Ixf1$2Ft1+mZkI5ncj4eO*@^W}k9wv3Bi|IdP1`eI_oLqJOYu|eU!$Ql zxnF_~JG!qI1s3r|Ec*3iBFW`HuK&(z(hpC!a-)q{lArW?Dy+JZi#q>b6k7>zjA}=D zkfoO=q%R#(IDN?vpS+(;N_Ag?j$GWD@!R)Uo=jciQlCewIhVzc;Tee6hbZfhUBa&1 z(CGqw;+cW0rVH_SB=gjyd}eqJA*PywqMyVw_)`5Gy=yGesO}{mNhpJwS#ltceJ+$Q z-V?2ij)jQ;YkFlYIX|x0cF&|-LRGxvXU_u>Sn7=N%H2AG^wt0J6sNT@-11}xb4wuj zlv>;VS=iuq>e+33W*V@(`Ly|gfpDDhy{}V4uM6EXPXgowJ@77_;+WH!1_+Oo(G`!_ z!~W0hkbS8UXzA2AoX5Kx&+|%ONw##O@~M}2goi5jN+BbWz7dD$|eBAZWP5gMJ{qV?TQ~a^_Y!V#~f%6Vgzx%7n*c;Ga{FUTj?dg{q zmR6JzedNpRVTXQXZt6+9q!9@jDYFl{Lb0fNktHkltqA8Ex5p^bR^mJB+Fbm{UQGTl zRfu8tM^lFghYQJ1&*?hIB_Is58!@i;uDnJ<;fpoO$wFk)etD-Y?Tl;koSc_Q-aTKK z)~a5Z?EU9v&8v9&;KA%z(r}h|Wf@DfE!`*K8F^-xX0{m|>OQcP%n={zGpWcuWN&vP z;L7oR_Z-o+_bqi`Z!Ot(J^zrotq3>nirA=2slfAj(|x`kYM3S~Q=|x+{E3w{$ zXP`2b_01#=!-JPg_710E?;`IqNn_$_7_YBt;sk!)d^596tpH`-^0t=#?g+i8d*IQ_ zF0fIRiZeC`Ld=+nd1>=rOrE4E-OQJYod4DxE35<2u#Nxsp~W&7j5x2;IhUYq^Nt-( zJ-5IY!$=`URl z_p_;hlxy1O`IcZf_0Z34?H@%|f``MKvu$YDv~7Ob#T>F*gg)~wllh}3tF-pD7`*K+ z8++V351U_4^4I@+4Q{Vu+LtOjpi*4_k8N#~_=6ki)dwqj%zh83?yEG5=|vg=>6q{qh1!cwY6s+b63X^uDZpW`w)4{h>pG2CD!QM3>H^V!EqqRw?47mk{;C`&`-`Gh)}Ht)z3{5`iJOq0fQF}MdfB@}@MEy!ed22X zN#{Z_-PbWdlx3a(*$118ep{2Jx5D<^yz~#V4Vc|jK{qNY3_+LjnVE97%dcWs z^cn?Q@Q&gq9Ok(2lFK`estYSapZYkaRG?LC*PlxEfZLNAm+~d9!?ae}?tzACT(RwS?4Eu0#(BHV_Ex{scZ$-al;qFL3~dC8~aXH7YR zb75uqt?c^Mi{O98{a+-RKe%Nc`;h%G7h8O@pNwrOLFdvQAr>;fc2iRjVm2o{H>P(I zN~U?lSLnHtaVL%Vx5Lhi*~j5u$a&f4g7)AN7qAi%vI7sz$)}n}V)1m~%L(_eSD>-j z_EPF(2Q=(Cb2t~@pzC!$Hlj>qS zUUxit{DN{GG6JWVV@OYR?!m3hug6}%&yRg&<6tdD#N@b@RqG&VAsxUT7J$+d+D|%_ zdhy==&Rq*JvTx`yd?9GpiCniyzU1>Zq#yk6-3@Y&PtG$f{nX-$?_RmVQCSTzq`itY2(miW08;vF)njiZ+n&a~fo2kuqc zoqDe$VR&IerR0zWmg6Sh#J?myAL&h2-j}>^RrdI)V`h!`{LyH42xlS!uB+T=OmYVM z{>5j4hC|2^ms0+6ig-<0re&9YXF+VI!{cYVwXm>f$UmptkMmUjY&45Xkig=0Okr~# zzQpzW&Ym8`$%M=cta1AI5k&t(k#IC8jc*SKU&_Ylz<3iQr9T-LbcMYtc*<_uC5#|A9wD>U!g{=6QeKC)2+~XG&ciEU(SBw z_aS+LONL=Pi*+&4Wq3i}M-nnLJF`CLIzdd4J#FWwCU_{g7g?5i<8&h`)dn4*JLB(Jm4i2SNcqrcKK|Tt5P!xS3>*1Pec8I#P_pj1Hl5gx-?w0K@@oR# zA3rAV6q+xtAVcJTwK5EwNyvfgKNG^W8qgi@W_9bRa&tZTg1cu z#`eu%DS_tLa%es2)z4Ilvps;(=6yzI4itjb!7}vgL@F+JD=~brV#oKOHQHSjO9fUkfwp4;jxwl!*-D-R?7HW?o|Xn7JwaJKlJL}{lJ|=acjkhL zJC2WkFdx?ZUHfzlYyoeJTsNON*i8uXGx4|)j#$=&pwKYRK1>h}AUT_n@lNcb;hbCji&|&f>=%E1~79_lDK>GyHz6B>jsl$K`qBt;ZefAvD2vSWvwK z;(lg<^YZB!p+CW%Jg$Uvz4!=iHYey`Ddb3$FonTgo*kF^Tyd;1MB2hJ9H(~VUu7Zp zTd_0gn!YR2;5~R#;5dCP@I&pt=~*4T@fH^{E+IYCK{}oe9>N=<`FN?Hq)lVA0iUli zHVP6S+7w%ESJaCPJPw??@ti9N%qx6cF57FNk)Ki7?>(FqSM)Wn|kVH#6mqv1z5N}J(p2N2jNslOe=dMoD z1OKNP>Th8PQjv{VGkcHL@rzpX921ym8anKB;xRUTS>3)(ApzZ|@4j8!I}YA$&%@r6 zxg0nppbtfv^+!>{f-cNodx?QD-)RWVwCoTEo2!^d99kY;PSkjZIiiuy`x z$@wE}^R|k>tR5u4vM81yd6Kfdvh#luiQnch*NVhT4Lo|_lXYA<6%83`K_zKS1F2pvwl?2pAK~#bA#@pWOm|h9uOYqV`1%=fkQI8Br(fqo!Hd2E_S5Av=UCP6! ztDRq(Z^ohJY)3Hdjy4#&FumvZ^@GKJ83VRdKU`B$I(X5g2}d%br7XfS5cls++FDK! zjC`L6@>`7Hp)9S#h132}VWpP&>C}Xvv!XiXMg>^stC4Foa)s_6=TrCn-oSB0+c}=9 z4VEj1ENgWZA$@+OLt%3aKKuT5DqJP~DdU8nE+alDvMbVv8zy{-LsOS!h8(a&Q7x2U zaSyDTow-VsB-ix8Wa8d!vLChjt8O}`h<0D$UpHQa;iW>#ISJ`O(EOYznIv4Lh+nS; z!#&lI)U<2yixJ^Jm{>AbadeSAe7ad5bswm2dQ0d%NP^9RW9Zf_S4hpBel&P86J}ZF zU0i0PxM=dma>v&Rn47M%vhsD{pX4jif9!-)Q5&Hv#+m{>inY=U0wu`f`11Hckrht8 z>}f5IF4l!J5N zSCev&S>-v5K8K1aD5T-79I^Z*m14E$ME&y(-i=+y#jzNvaM5aC282`ClRC*3cnh^vJ&|>^hE3@AjEiAIk-uwaeUPp_`C*H)LifImF5l-J|YZ zK{#4z7|zbSF6-i7zeeaqt)`(VMsPw~1q5W9AN4jg1Q!w$AP z$8Q_dgY~h3<^2$n7kjyHLsD}mvd?GjkK04`%r`nl_!W%6pGZxAd3QA^s<|ummi(c$ z-S*f;;b44G+4xd({R%#?w#D-cCt=HSZ12I0PH-jWQ@ndqLHInP`t6kYSh3%<6tv?B z)OS7eXL5LsKx^wCwZFl&!mT zCL4O9CF+b-AHg}vO37Z{2e}h0>%Rq~KzD-jtW=m0R(yA>2;q~ggv%qv z@bm0fz#lQ&Sx)8-PshLR4O?B3{Mw^U;X&<%5gu{oLr;Ujq!>o!MR>Hzk^7(DD0f2d z(CesF7QTdF!zgk0rLfj;SKWYjN>iCOwV z!_vDt|4J;DUHOLXSPHRVE#VbS?%8Rb3r|b-l*3)@qQ-%e$0&@=82y!AhbqYrU+?Z8 zK}XTcNRP1B*e0nQs>0AoxT=Le1AJO>e&C0MB4D z8gFF2*eh<39Dv`aG-_YTJjYDz)y33T19&}h!KUAMmJ|nj3|2|rf|g#pD#^$06ou;%gbc?w=$=-Yybt?wz%* z!{04GQ&}S0F9M;9I!vy?UUx~qw12D66Xyc_cY4C2$s`j`LZ9sM%$&$u;@rC%MHOdy(Wq*$C3%?eU*3sUWn6p=s()`*?i23$ z>bAPNR4+5Ep4WKpSJRGv`#z1ougu5RYsc%pAK8rWfqALduP?xaMKY{IwF=ofXEHvU zW#Nj$4)-v{XiT-XoO5Baf-vjO*(AO1V98=)eQWE42hVnKTxTr66}$ddP5o_<6(~L| zsc{dtwVk#1pKrnP5w%Tp&n=Ll{UbO3<~bCv_I(anEyNZjgL(c}c6d>sTlF-(8V&0s z$zz;fv4uKOooiPHLeH-K)TZx6rp)x8kW6=JWf4(XZkzS!H_@C;!EnZ7dk! z@8U{{xMCaX&6=YRdZt2FJ<0jzY9%5=nfF>2wcyz+-SA=2R50X?O@)(r@6tP$Y|Co!}3F5+Xjuu5C;=Z6ERw!S%gt*->RRth04 zPr7hTFF}s#&MHR4=dG{ZBHrcia|W_DKCoO9dnl*sjJ=!bzf1l(iK0KI!E~itAYIOu z{ysMpSH^A}u@EYUZ|SbH#oHo@_idv%;S-Pbs9 zzLgu$zpsV?HkQ72K%3S1hSptF{( zhRw_H<2Umwz?by)W{NT4$2u+j%4&1Q{#$MuVl&owqIOQ_rAi{MG-=+O&%aT=;o7AG80l zRLWWPBT)4K!&GW10@kyCoS-K;-FH0Z_nBw#$N9(j_Sj||n+vy6uORuqLH$5WEV$zHDj@IT|=Rz zmGJ23P3aBzj1m8Xnfn|rXFsZ;Ol+la}G_8>}K!rE8(rx|uX4G*P)%38v_!LY2fH>c|wK3IG_ zk}8yp-r0kXzTZf|YL{&B?Fr(UFl73fq2CPV-Ok#DAF>Ij-JsWfrU0BTE+#YbBqD;7 zud2YS7)|QCS(a39!Xq_}vXAgH9T``HE*>HItCgHfV$G!6@bSdW>a1XdNQYQE>AONh zZfK$}x)ACcl0J{PXK>Z#$h6Gf2^_xIZo+Hij@`!kcXsOV(6b(=0S68d1Ufwx$+S>8BDUi-weQ1 z@ax%Ep>~K2?~|gwl8eW&Y)vaI${Ss5a0A z_Io9BLK$PQm>lAh6DK`&y4Sb=atq>4^$lTe(vw@__TpPe97k%g?VF}IO(YMmcju6a zH`KU9{aX%X<9L`YryiNhh1aedsj~QE^po#zKmWgyAB}t6u4j|HUPqhSD#?Lz7;r4} z?T$tGx4Kbww#SgXC_m<*)e1rNHy`(iIAhuRTKBv*JM44rI}MUO?}?NjOmBZMW&g>6r4jbB5v2 z4isCPB3|oMs>#?~!2*o?hb%OabM`6ehf~L%lKU*Hg5(eP)A+TI>z(mnHk_o&6)g{Y zLwPZFdpWuwyYT9U+rcQfn5rhvO--Wu{F~q!3KzIKNDN%7YQ&xN;v3BBU7+vOdhSd3 z(1BYAEGa)G!q}K4v4EoqinlqK{%R>z*`NYqwpPAnr^vo_B#iHM zCE=TQ9xe=eD2R*gJM||zLcr_0z#XuV3}3D3&xxcrSV+sBmC>MsJ;63tr`1UBEYH={ zINB2zRZ6{5q)YI6xSC;$rxmP~jraTt?;||L##p1O7;rc2e-TGGWe@Ig&qmM=V^(Zy z&`#3dpv!J|vCeA7CXFu}%c6crrD)|EUvr1Z?rsX2yA#+G5ms|ctO#``Kg+&&hN3jC zN={*S3)ZRsW>OXqmGIh^8{Lce zOF~?)N(;fSBM~~(S^>pZ5+dbIod{!!ycR_`R+Mq}KX%v=KAdQ{{Zh6ac)#s=ckOQ- ze3{J7DU=L=wKyXvy_NKY7;`7grw;V0kuSyi1*ZUd!i#)KL&Kua`W%rW+EpB} zgd4G{r1$S`BqsYeUR~nO$6l?9^^F6M(7aph4o{FC%IOPQT7{m&P<>)xzQqa`^7>5| zD$G!>a8*Y$r4-LoY)*t~_u_Zup6=~;yO8-tVQ<2d8KmzBIxirUf-g^>Qb$t-VYl70 zG|$gha5+7vF^E$KREeA3rQIFE`)W`Bw^K`!zg^^dELqx6AjdTnrl^gR^5aF4cO4P8 zCUtk&zY1FxkEysFRfUCsv8O@};TNbiyETpSVNZx!v_L^BOm^gd-I<_<->rY{4$M_T zB!`W%ckB(=nRQ35&S&CE^1sGZSq;LM>Y_3nH^H*s#;+HLzu;W-?PrZY33on5e|LA~ z5Db?@FPOi$^O7&nJs(wrS_X_wP>6 zWDQ>wJpaC_S@9seR~(nwMjEgybosDJU?1Lls4Dr(bs^VNj4zeTlW=;i-idkj;rF<9 z`x}We_&9KkE2`bcL@KM5(s(-FtAsp~SW|@G&y^3tbK$s}_I2rSh&cAGC@1V$R3U$7 zW570Ty^A5@aQL3J3zKdM$lPYWLD+L=r4A<11)s`JEG zy%;8uc?Dm_s5(uCUt(>rlOnqHIq^d?i>M`6V=OeHaM2(fU&@k`6xjT*nQwmm3h^HM zt;x76x{|!X)el$2uTJ8;zH0Habt%k@C??tKwPR-cTFS(U5lPQW2mEwIZXtHL@rGUL;ulFUz0!)dUe@MNe4erYbh6i#_<^I@Mhg2rz5w^YA+!6$=b=g0f59)=7Z!WXCp(oa zBwy3oHwG2pSseJ{R&oR{g?0HCXe~cjiNQdK-l4b$;=@!3r z=sJVy$FCHtK?Be#1$?adFoKQdK8sEbKXfzfK6;DrP6jGvOT-LbVIOrDW$J5d6c5L% zqiPK%@92@`pk#y)glj=L0LLm6{G{*Ek*s&dog;y*GyAPS? zD91027yhjUW%?fvh0k+X9b|iSHS``lKQE~>oe#r4zVk2U?o=Z4e*J$2GK2A8ca*~=Y8UW*>~2u>R5pYzO|#1Rr{K*U?x1__Z8*wI z)%UDrjPN^LOLgf2k;-FOXYAt&>vYAw^oUHn;qTCoa(4y=t?S36G9T3ZC*`xkECh+a zQMOmINY1n2VN2y8;RC7H(Jy>YLiWjh|H`&I;__V5v2#MHu&BSRUu>?2{|-+#g~#7R z*w@XxmeJ){k`t9YpK6MocWq1R?lj`Qt65Tgk{v2}&;JODZ@^M;^8NUhG14;5x1 zTnBN7#J955#J9t&qbINP3rJPBnoCQ-S59qnQCn*aF!Sh0{PxBklU~lf>C;F}+Mn9b z9gLMQRmlKOcew2NYsEA8372|0-E3$Av3uvpz;B^wJPd5)za$@mO9?9n%^9q)+lVVl z@pv0_u6RBR4tb2?eJkHI)Jd=YICBtB;A^+xZLLOT3fFrtbl zsjBImz`7cdy7fjJl(;=zA{yHPZrv+edx@{M>tG=cXTYY#iSn&)J63kyA5GfPhdh?) z2n=^Z^w>2Q&$uXTq)Mc(P#;3MWK`jS1D$x#NIT6L6pf;}2bwwq&k>h0lv@>(2nHJw zm2LD@nCRC|JbL9nl8e2c*fr-wxWcRLg0gT0gw%zIbaIEkeks;lr-7GWe-*R_HvBg3-MF?C1>Hi+0QeXwg(a zy+&!sH!=_R>>RTq&Bw7_|L>pfJbm11Fq>40@BpjTWm$@i+mP09Z{;hVfN)RpsFU``c0w1!W)UJr%U z^@F!{=m^g}NmN_@BNrGB1)ChQY6GRywrd@h3jo=E57Fks;8}%V-T5jg(24B)SZ#$5 zw#8;)y!{ZqV7#fYrV9V|u3oS6jz@~?TD96F*{ch?PK7pQf|5}S==@^xl;UKA59@qQsef5sNh#^-K0RC*G%sr=`$tv#yB9ufOTkX%9|~@&T~I8w*FCkK zj=?Agy$iHqNW$pbDxugX%~0mzrNd!MSK&Psdv)*zNLW5+2Z8gA;R~&dMa`4Z4E*TlEuPfh!axplh=(V+;9UjkA}VfK`;k1AX@P6cQU+d}3gfLlGlm&?9=pzyR$zH)(ziD) z5-FSRT^>@J#;k6U!tS|Z+_*Ey&@Dpp8!_31|E{}3`M|Y&|G{CjdMs7Q>6V~y#pcA- z%6QCra~hsIQiY?1ywoKJa|vfxiQ?%h@q-U{DUa|Mfo;hxzo^0$;&*2sv+)GrRlV)H ztwKHS9P|^Qw|WNFk5&Deqz8NF#HRkA<;CFQ_+E0v;}z*GQaJ5pw!_siiq~g?#~|x_ zY{6o*82TkM=YlV2VNWM*dpr4en1-egU*BDbqnkb78MozQH$_s>%ZO*>UOV-z^lmK# za%+s<5pJ&7`(U%j#|Sr0zvFEEy$J}3t>5i*uf^446?%Wj+;2#KQQjr!D$IY0Z~D?u zfR82gyt|H+ftrq?XyZyCPV+c5Pd+Vxqmpiq$D3gI@PD}fRke`t?2r5zE}4b(cf;^E zqDi2&9P6KpGGC#(lhRj{(GQ)> zFfqgThS>B-{9W4%e^gZsep?o91B=Y=+aHd4!R)xM4(Odw#r>66LU95G|6+wNwJYEx zN6!J8`F8TYIohyaF$_N}GnVGF2BB13n$XZQfS+X*w+czF^XQ88S!2?RUK`nE6xWfA zU3GW77~;*)Agh~x=ZFI|a`>OpI}O5`@e{@S1`$~1K2sLz9fD}6-|fY#MM!e-tnb@H z_!7SE>(Uon;Dp+Zq}MeFs*;ut3AMr=hNNI2Q+tx5N-0!#T!271QzRD^;o|ae32@9I8FvHn|(YLw@0cyXH9J4_uaa7$JN1+Ga)7@;tD;w0U7c z?zta1Tn1`&H6XnHTH}k876M)#J2e#W4t2-B<(X^@KrWb$#ln0J=VndF@-l>QX|#_@ zg?fOCxy-UC&;eUK8$0%HjYE6Kqn~^rKimxbMzz zx<&_*ehkm@*w0G5d!}sBcp@4Wk`cZ)wF&R$hOli5nZGUJ@eS>q4u~1PNsX}00&8-u z1l5lm9N#HC>abr54bn_*^18(+cw(>|#nypMBZ19pYKcg1R(do-=DBawH>%c3(jXXq z`*_{$O}Mza-Woc{gF(?d2L2Yg_!_0RTB@ChD&A-J2Nt7nVmJN$*(eV*53rtTy{-zs z9Gf&jjhEn3jdf&^8N^SDs8~4%Gi>{KsWq{^2wM4rlv}lmaNV+GXMs-@ra7J_^F>tQ zTQRrvo|Hs@ z(o5W$a`d=m1r(fhZI1<$eGaQ$*jBQ4xNtZ7Momc$U~s{b?`I!+^l4sp#-xB(=FUlx zUQ498A9|@v=ZKeHHzjw;7h$5|@8QQ8Hu(4A;ns-vN#I-R$gLEbKy7YLvYlEH%-r~j z6jd$poa_857mX~2<@jcJOoAXl5qU#I<}LgLubc`XzJph_hb4G^J;zRZ$E+@ka5$V& zk!btR4z_>Xqh|Q~Ft9Ip&(pvC_|Y!%TBQFr_H>UN)?h0oeB}Hy79F+7c1&j)+7TWc0Z&&k#LV(#bx&GzjuDe zFEYP#xmt;~<=dFO{(YUj@c`CXUAY;~)M1}(zjnPrFp`dDPHkMshfI7ynC2lWF;;ootp?(e zqv^xacc2Y)!jF3%VjMeH`F?1P*@Ecu)QSBTYJLwmw#H9DLDbJ*faJQ_pF~$L_!f|J zST1$W<9e7TbkDgohT&mG*kz+!N_pq`Nx+~F7*jLXd;1%R=pVceBxnDU+8^5lL61e0o@{bFR&4pInkb6u->MH>oD{W@J9MKk0|Cqzt8lgoE;c-~4-b zHTfK&;dY1KI6|Md=eX=>4wCPck3`Vc;s$pqo3`M0#17q1jaefe><`O#PJVGDbDB(p zbM`j4_-;j@e?1>ZUp%s{uy(?l!laPF@H7hC#>}6lR)X4%KA7XB84Nu+%+>yp-W1KD z7e*(u5ZnIhrauGWLA!k1#M}`Hg`bryv2^aRkJ002?TE(3Mw0^)`+d>n|EidweHJS; zJQoZ6LLhXvY;IjJ8>d8!rDB80UislS{?XeBI35&`JhsseFQ@3(2b=04?Cp!5Ya zsQ)>KetV6Jp|4Z_5f5=h@!o;zkphIC(f;oi?_HRETeo#c=s=&Uy-js)H%=kt_K;3E zzR4JOdgQuc^DV#MoTmD)XSf@7M)Vft&;d9n?6y!h`;3W5+UGCn{XnTH)zta35qo_^8_RCEk$vs5Ck2HC+?YA% z_1AKUmwr!4><_|4T2Xy}y|o#aHmaLMjPgLeS2q05LK9Z|g3bO*o5AR#7Ez7pCgPvj z8Rf(_fVk;HyN-GLLW^NPqZVT!ZdHiQZu^so&AWy>yrz4hH7|C3p`{0cXU=6!(1( zLYrH<+STkCtnF1{DswGBp?6YvI60^IWmhIA^_HOTm7z@8>sH*THuTKtEJMLTH|nM% zb|`Z8+e7t76N?q^Os+AXf(hH5)>@++6e%p;TuE)|GAwRzuMX@&~0-z6hpY8pI50u}o zT&r<)gDa2xdwtv2*!$$*d81lu@Y}1#a*{c`;h^(Pf#yQYoo&>(GVe${jLxfnhXc?q zU^04Pu^jeVkNQtD=0k4ywe&gLW^kJDx;#D}fseNSL19$&gv*+L^kwI5P`}j-GCSvr zj$4OWZm(66{EgG6_>ZqKv0b5EQZNP6oBn*7T{1#;)ns_Odnqntw3e>(W@1+vlV^8- z5Zn)DKl@4eAHEv<^=C~dkQQ^bXHZ=Mob53+O@7Vz6z+D=U7ugHX+;tw{OhQtcWmJ`)d%k-v zyUrGlp^aBX?^e|i1Wu`iZml5Rpi|SLFR5jr_W8z;{1ejUhiF3AWq3Xy-7rAYpW z;NiFP{q6yR()tJ&$(L4+5SYt%IsT%h-*rB>Z>RGy!=ZhuGFt^ zV2|fzj<#0#I)|IveD6SXy)>PvUMvT`~@%fNH_{q>2*zX;Oox8A%QtBuzEN#bB^5y?|+Zq zN)E@OIr9Y1fm`uV+1~MJW;qz``{*cLz3+i?=$J$+$?sq7eaD>ZB#R^dR#_rBUoaU? z%{^xO4v%i_vO-Kf5@kK&StqhlJC^lD?jhmH+!xgGTPAt-^6|g5#-aG}Mp(RXmkDH_ zjy^4(mPMYO!Q!3HCUkO1XMUwt0L@Z%;Usy#i?N+uZ!(d?4VT<^!mRgD^-Jhj0Q(po zP%krS98DpAZeeO5TH7Kz4?o0 zW5FLTWgS9%Miu4koCP(VXg3hX}q)l?S+S3M5K z&L+d2|HZWS{yL19AEu!t-}k?pejcG;9f9|HclwmIHsKSPOefF;;KZwK^a@(8(DXKE zZhV}Jd&`$*C_>3R=^5^jE*C<@2 z*=gQ%{2M%-tnIiW+t91RF4^_qHQv=tQ&o|BNIa`+UuxI@8V?r=Qwfyfrt7luv9rWq zcPV1?$Jzqy{`P5padQI-{a(0OtgC>{w6@!|A`mkrZ5fw{hp)|H-`btZOsIMXY3))a z+{hDskLWqlv8Xj)vcs$Z5r2147Lz<@&NBD$t0W)$pN!q*Ge$v3-aqAY$;y@ZvOAJh zBpYE+*|oU%z#N)Us)xjHhG8Ppj<4YV_XMiYr;bMka3W|!mgRCN@+M*uG%ItFq0|um zmT_djU@~Q}3BL+AO(*oXbLdaCj za*MH`;Yb8VZ@v9=V6csRZ&kb0W16w~zIdnYz9uY{ieHQDcZCVB zsnuddG`I@Zno9nGC6k`T@#d`eN%>||6H82ll(x}U;Dn%sTn6U zo24V*58pqG|3>ZVQKkAniq6BYr@s%wDJe=s5waRaDw2j$clu>DjEXeT7AfsXduVCz zy_fdX*4}$+mlPE;GJ8JHAHd7YIp1?W=l#C#>x$KGNi9U;S{UVpThaI_p(;7I{0I)* zkMvr;<`OS}9h?1+8l=(KuHM}}0y(S1myvm$$e5C6olluYMNp6Xq31o&*nKIvqaX?e zMI%9WYkAm77a=PXKZJPq6OO|rSMiMF_{Y5`Ylw$JF#dgJ0tCeQX^*Crfzd*aP246Q z-_4j~_&u`mgm*oO?LOf~4h3D(Cb`fK<4TFvN>0$ZgiL;2*Mo7nl<*X*F{<)cHHOLi zrRckB+)F>wPnJ@*93~v(;u}{chhyX*;CwC1WaJsnm4Az-wM)UFEuKPrN5-JX#dd2q zT2Nlo=CI^zhwc z-dT9mS*qr;Iga#jsZ8%3n8HZ(&rj2O_5aT=JDT2b1e3wGZDv-rSW8-q)MO2TX=lww z!rmGT@N%E2h?YX5=JR*|sgV9csSa0yYYH?6x3~(p@uA+i_Th#j@vXmU8M8WShey9D zF0=8I{j27S+0WO>zKpf!I9n>2t7`Ekdhx!2C(RcM_Cp1PPj|zkgXWdb0~A{V zaBJjucXUu0Jo5c#`c~IFo;@}V{>F(AC`nQ;R~H9K?`ZOzy6JdZq=1luRk zwg~f*sE*l^g{&QK!UuCnuIOup3ju7STJmKra%*Aq>`TioX;xi1y2Jp0~z9y=6# zgMW~H8U5nj%arN$IIi-dN_1;4_NLyWG5`Gv!t-1~EJ=G&+vfIKetQ7+t5NZ5@2f%Y zss2+d{lwq5C@cMjFCA5u$5R<}CrEEQ^T(0j@km%nV`yU=0qPA}>&f|zvuQob@?<^o zI4&ReB>lHKiQvoZ$_|Ljt;}d@B>aexK?X+2CRqKl{?_0EJkl0h5?#Fk?%ZoE%fbF| zaM0e}Vb=ifF{>E<pF`5RhHz@lqDpnIqWYboh0fMeo<0lw?cS(LpAc23&n7~ zNo9G-G8vC$7N(gv<-vP=fJRun8pYhP^>lyYkPu@=WJ*rBmAKrpv=RqCRq35AEwGVm zAF$1xj}6B~Z|mvto26(}wvgu!sY7}yUCW89FJRWt&+|+s8Otu~2je+SK(lWuOf4c8 zQGueNyw^g|9reEZfm{B1>r05n{eqUwR#z1y*CFrFHG%bL!b9@Yz9(LZ@wzA* ztK);%ev+Ij$YaQCuia!SPKZD!)!TTk| zvwk66J~^52i*|}?bWjMn*- z?G3oBR2S2|zZ2pWfAyWS3IF`+Nkf^vpYYwm{O`o51)Qx|kG~nKg21CAynk)AA$^mL z=lOZ!4-3n6oMLW3cJskIQW|yO_5OXnx!Dbz*R|i#ZB4=ZkH?R8G(5+@%BN#hPug&^ zZ8dS@R0T8)AI-k1SU~>my$cLR30T}c-1bVN8`2F-LqX)6`)^)gJ9BU}_Wcpeevzb! zt0D4vb&l`IdB0=G5s{Ezc(Qgz5rIkYYGE- zFv9+W#`~-(95Np<4m8)I=O@?Jof-bHrB8jA%_|2VsxPbK6U8{X@bt7zK@K!oR$NO? zwt~fAoaPQYc@DAWpVQ@V!$2^@;c2Q6Z2EPjq@=ZqxUOE zJ`C;8L27Jub1mtk{HDw5ZOhC8ovF0#UR!g#AAPv{aw73kKM`1bT5|yh^@*SLx-6^$ zM3;m9BXhz}Ap!S}6yn<6m7U3ZC!iZXvbAEJ_zW3M{N!4n!&UP&Kl?}!o*6Fud-p3A zYBCJTi$Ouq*uQ<)=KL!hXK$r)B|fMd_MJ1$`SXMqq^cK0{{IZpUdw7Z2qJMuSlh7J z8+a{I%r75l2a|i^6J4G-w9;=Rgm#XCd8C~2>Ol^)nfP^-eQZIWmrkxYM=b82GTaE4 zsRYGh-IkSo#khSdkz?~a6ELgqbJ`PQ2{y?O4Nw2R0jaVj(qFH_>ank-k4lJN?|tD& zUdwy@Jw9LSbkP_32@PkTt0dz;#rygDSMtDiswit>wh^Y~&70*4!tq^mOQ$noSLak! zTmCcmhNAbndcQ{@gc!g?WAjA1lCb$CBqA@z$Y8BE_c2j$u(5D(>t--2{0 zDEQAxkLkNOs@jsD*WT!c=I-)4Un*R%zac4iG`STVnv@M(wbE!PTHlqO-w(qUf}d6K7`ya)j_9tI+#1~?%eaB3#_xyJ@sCB#e?*KSC5>W zxDWu>Wb+WZsT%xIS#l|k^oGERpq!}hg)mD${(e!z85+)qzIKpvcXi0Hgush3h+8S% zlIp((+Pv?L^n0ElXo2_Q{-kWIby@7~Yn;U

2bo$lgTW{cviSR4i_MOz@F5@4?m| z%{}UkuhCf%{PcOPDmc#SI)>yE|42(t`5)_EBd@&VW*4`@XFwUZ^&M1oX3@rn}_qwo`L{! z9nE{YA+@wu#5!&ci-r>0KgN|o>uJP}pE9Ix@^YzS^?eUCMVa1k--*G{{$0CUHWfkj z=J0Cm0v|44-b9s6a(EXuW%XEP_2JQ>7?akpF3j;PO>2C30eRQ^?-SPx@vq2d>jjP| zcylf2yKj_`eox~uqq<7mqY`VVT?r*Ue<^ELXnnf>7e9_&~fyLgx&MbWntD=Xnt^Tv&WM$7;C(fn&4bQX3H7N4Z#USOE}R# zI2VL}I|XT@Y_cG2HgxIkW|EUqRq^=ML%w@W_DN--nMnLQds7pbt_Flj$Aa(F0xO(mM71Nt3L(ilu4dEk$HJtrw``!{9?S<7qGR* zU947N2pY{7KJNJT5?0jw7uFP{;PCMzAcuBxDA_dHpK?yD$ANlHB@3o z{iHw$dkjRQM$gr}dxPlT;%RgbT9Hwy&fE0e0ljzs=xqJmf)d-Qw}KWGxSm*8YP(jA z75A}co2N6#_rt}UieK$ea18i!E7A*gJKrKQE*sq=LgNZQ-@-t0#eGE~9gFH|TtWAP zv3Hav;`NE!kbGu#B}x4a_J$T}b~Sb*$j?vRg2NFi@}Ju8{qBX!&#Y9X$wzP+ySQ@Z zP7*e5hOo_^CO55--MbLsLCB~uX6(1`K-81B)`oO+RX zPLJn~W8`~2$$0RiWp@VVMq{}i^~B*~sDthj`A#Jhah|sn0ibEDSoqgah-js*zmg~F z@HvP(v&SqPWp`M|nVp>Ql)aHZdaoZC&c-WQ==UHY$nsp&r2t$FiYj*5*#J7tV)~Ng zWkmlG;Cz1WJ`ON%QV?-YLcX%c*~veqc+JF7{Ue4Q1NCAqx`dNU+jHANiLU`Gr*&3t z{8tCs|Xv?l+ape@Fl;r*bR596HKAlyrp%R#kWnIzv6 z=d&SE52|4ieGV@Zanp8_CYq;tAgiS}IuQ-TAAXhXirsypsU-`A~7lO_2?VVR7hdgjrP*fv=G+FNLAKH0C7W3@gxBp}B!@O!(`h^d5 z2sYed&GKqZ{6v7Xz4Ve5j^~+_Oj6jx&9q@eQM-?D=yx`>-l~I{nX5gyj)jq1ZCrITv9=^7+p3n0)sYkty<71Z9dCFsovaCkgNxpg)tLyYZ+AZZ zB@bu6-&c6_unf<=20x1h2EovZL6+Xc39o{;K6fB{>hL2U^z8Zg&=nx~ws3nZN>{|X zCD;PV-u5DA>(NmhJJ!=b7?THvF6~0rXYJ5xzj){rZ8*a2$(5fZyh4Fa8H4A^4RAHh zJRdXk0gv5_c-Sc)fv)L~n(6~9;#nB^Ccsk(@%>wqO26O7>%0>-N+gHeIDgi;jGF?i zA+xR=2SO3NFSKsuTn>^-_2XZ96HZ35f#jF$Ib2BSeJN?T2x*EN)@tOt<~~hWUV3CB zvZQ7^A_%W4uFRMFKetXS|JHYCzE}vy%&S3+8##D78>i<*_(rsQw;p4da6z-G-nhC> zA;hw1Go9!&V0*#y7{!&Ba3B8t{m+pa9DZ~Cx3y&t7R1i^N_8|7zD~E4q*^u14Z~&X z?v-KbpgqI&?EN@y>A>?NB>}Zvo#lr=XkmW5a^L*AH#xs}XorT%;bysXr1Y^UbT4$u zea|F(h;{LxD`X$O{LscQ@ec9K`Q_4@TZN&g_TW!*MQ2Ec2o)b*QpWOvd#q7(3A}m! z{CK{50>$s_K8V{}LakQz!R&Cjj=eekWXc5} z=eb)QVg^8?)S&W+-XA~AJe>+}WJ74_cWTc+2bgjF*Ky_Kdqh*V)F*sOMp4^Ve6P+& zC$;8gzAFJ(^$--f8WjWj;oT`QJDPCW#8Kt2+)I3mOslC_E5-7)f$USdbdYA5MP#>6SY6_@o>^+TU=u4!AW+b z&c*>tMBb)9!gwkHPYtfFWs~0C$woIj--r~XZZ?nqaLx)_IqOZXKQ@Q;OSxf&tfz=p zy>97V^%V0Qw1p{z+vA+HuVMW_z4#*^s>`1XU!hjMaNGHfAV})}bNxX2GgbABD>=&Z zPzujgcsFK;J+Dvq(fM|esK+hq2+<65N3KX33XuMfxQw%FbpfI~iXAAp;)!2a<+EIL z0*Li2?ECqr2sFQ+xQFvKC@!5C+9cP5tC~yS?ljLL&c1J$VRtoR^mp2D%rzouT6oVf z!Xa+nq0bkyBMBcK_UUL?7eHk9rYq?jI>>z<$~&V~3HxHcS9j7>&=Pas@B2|#th&FA zDct0b9v`-KDydfR@HrW0U+F->f&JUR+WLZGxZ{z~xe082{GQHL$rE?JajXv9YRBk~ za#m#z(r1_6{HWz*9xOE9HeB822;-=SB1JT{cvkBnV$dCf?ZJPyRs}g>u4TEzpY$c_ zWYp|}CVC)q)4#EC*&Jg*Pdk%!ryaaq!xwsFTEQ!!aj@2p^c_-D-U`u;;5%2-L6K9Yn5EJG)O0-=I(75Q zv7UNpIJ8~dSG@rK59VLFFkb`3?KRc?Ka(Mt$-Dn2O(yX?CqE5)lZV^t0xUfC{pe{b zz3qH^6!qUloi}tW5PHKUvxi;=7J2G%G3q&Z>$~A^(@cR9;}h)n{*;J+54p+6O5cK? z7mWv~yJv9B!nOORodqtBa^_#U*DUWK1RfB5I4ou>j~XHY$GhYQu6`Zb;08w9;>Vc8J;s?~4&xNtSMDVi_?}QJ{WDbU+$DIeD{n90I zmw5}$($AmqDk?@L9UF_IYc4!@TWGf=1j1sxP4k)xd5>xdb7tx0V1v1NJ+|o={tPc4 z6}!-f0ETNP{@=5xXJq7CI`JAD6zj!I0Rzad77==4Jc?@X0(Zs#-@n^V=jpnpW2M8a zkmd{Nn~lr&=|4-x>N}gZmm_t=qqHwK)FPX3MOpm#NIxaeCTw8L!5@Lrqp4&&jHH*A zv>$fKV6#w%^3i3oH@KfnRVCv^_Uo2<-h1M(m*M<{ZStL{GhCx8)hFj~3u?za!o!`> z*vFnrINTY$D_ZI#|J!3KRjC|BgE_w7xXE=pxZb(S^^xQ$zbMmF(6YFq#BpVP<4^tn zJxnY57WD{5ocfV-q`!a3;Api_6G9tDi<3i>(Pgg1eMeOXl`CU+xF3-@-?k%LUj~n1 z_QkVfN)Ac5T2# zb-=4&Z*}*?5xm!zdusk67Y-&T&UOV4p)C1*wWtdn;+0CWf7dz@Ud_J2;R6FO(Q696 z&Zv%!Q)P8;NFJ`k?EQ_?&tAfV>EqO|Ons97ypwdaFA}EiGOJCirC=PjJ=rhchFAFs zht_JX;r(62Xvm@f=a@$2n*aFWv?SZb|JKq-{`+LleE1Z){*LZD7oCTxa}07hrha(D ztEDDIk&d49{tZX6*J}JFdBx*>5KPUE+@QIVh$u(b7bnT}|I~TeO86V$uTT5By~{C% z_`&95`x7M*`eXm+$<-Lprb+G0ZK%P=w&U#f2D$iQNu6d$DS#8zj_>I=YlHgina3gG zP9Pbt%%oUv6y?km9xW|`0()NDHo|u{-p9l{(>#K2+`pskQ<7owA$3J0Ko7&deeIor zwQ$a|bq;#r4l^yfz#JJPRP8%^KTC297iIrhIPy#(BvZD$hU{-f`nJW0bwnW2%`M&a zKmp`=raYhTRlzn(9i18RQUs`(zr9%+hpdpbsW#~btm(7zQ0xi@6?IzZ$OU82-Z+p# zLFUc0mtro`bx@9-Je6@NynPciwG>VYi)1lK+ z_jBnm;o4+=U`rgd6{48g^?Hc!W~KMsNfT6yv-awL@kUda>8JT^$#@ytq%-o>F-SA|U5!uuPTy;kXRwC9_6 z)o)S0xZX5~3*J3UDdr31rgz0&`)i?fHTC#jM@a;XK4cNmYC*~d2RHR1>CGSiS;|X1 zsP~@y{;J8*ii46n#-Q+y`@N%@e1L4S5ao>#znk3%82jvIt zRQe!2(spW7P%)ksr97Bq&V{+kmM>E$?2)z5=ETG0i3U6C4IYhn7#DRqJ&;Vs@5)TZ zzVT_$o%?rU;lpbjv6eRXC3E_RlmjZl8~$ieFO+5=+&7iww~qvFClGJe)#0xzWw=e- zwe4TT2xQb>%kMR*MKbH8-o|-Fu$A|g$sWulo(9EV0fM4VBO`_yJyh4?C!NGw@aX4p#1GsuPFW`f+0C zv5j}c3sB_4p!%8c+f7wp9r#>Na>X=P*$s(DC*zczXba&ZpZC_^)iPp;IER+P|CETQ zmd){F@ry33JC(Iq2(_bxJ9P50b1!z+SsbQa^CahhpKTXUXy69L#oH78WZn_|`=*pu zE`qtNekr`#5Z@vw&og1cKMrr@WbVVlPhVzroht!`z zIacdvMdtYyvltH}e1{3{?4#lNb$EVBRVYn#91$iQW1B_WAwZ+@&Qsk9d#@!dZ;`D* z^4y+Aqt)lw{DYQ8rkb38LZv=EP-({T8^X(9Op0N|c6rshxD9k6(U#KJonYqgs(*s; zi^lt}1_k@{g751!!yUgmp%&SqQ|m^&8MJI+Cl=~an7;kH*e=2wSh1MVWeS3C<+l*q z;y6V6_!@;g8^l>(@fQuUoft96+(ubljssbiqqW?%5O_D!eJw!|3NjayD|M+bGM`l? zwGe^``MGVvj8=%&9d6nvjloxU7fY$4GW=EW{F3-nhs?9P%(X8!-~g9HWq0U(2r_lv zd&@b8jL|ihGlz0uy1S%y7dPSH(MbG$E;WFa@*7&do1;N>o$vAI)3y-YnU-DnxePN~ z7b4eh^h3qh2rpXVW*ps#1E|5Ei<5bpiwCT8+onh-_Vm8g(Ge5KbySNC_o zo=H*mf%%tE%`~j26{zH$GdG z;z*iu_#MJ^yx#mkSGu>45c)Zd4I(RO}(98PY!!@%!3) zDjUIkd6ljKnPB@`WfJExh^3t>yX(o`!RFQLJC!5mc+>O8o|_>MF>#9iKTZvRx>A^D zf%NNpo&N5mG8}=J37`IF`#FRqJfT+8@`hGb@ckVRg0T>Olf9oY1-opyPM^_A#9^%5 zRkkN{vQ^fRb<+D3X4W%QrEP@d{nUw5Kv2i`EA+F&g`bpb($@dKRyjZ9SaXPa(-)ympH3(sSZ9;XA^EQR-@u@X77Cw zb+Bg|RY#6ifJ&C{%woC_7FpM<9a&W%C+U&>i_E8wOzCXyx?P9BjA*$>L*zMRf0#3r zy&7(rcQ==gro-&PSEq%cC-~V!tId>Zh>@o|uKzR`LN%|?CZh@;1h;VijELoc`?q|h zzWa9gHTm34i*WD*cir?$%w)#JBia_sq%V3Z(r}GM(-hZ_Zl|&E55dt;c>f{S=ZE{d zeMM|jUc-|xuj;~8{r~($6g$D7-}Khk9r#zgR{V=_1V#OCb+%CUBgoBn zJVxU%gakRCn74R+M1*c+jUFeXGbq`flnBJQ?vavGz(y{ z`K-#df6?H&toTQD#F=>eET8}4x`n&D3uL3B;-R^pI>2CTm*0(xuL4-p*K)CXCWd{nn+23HPbGtB z$oZGL^TF1p8cf&9JX>k$N4L;+<|^i6)jL=v>M*t}`k|H?1I#dG_^ zD1IpunojA{+kbdsOC(A-cMZYwKUbsEJIOvhp|(!hyO00&cU-g zzC}W-Z@~XrICP|u^gP_|=F)P9;vv6L3q@%qlD6`jJ(zZZBo~7r-Q74CvxeyOkGG!igzBL2_H}q8M%|e*Gtlg2xD#F{n@Lu%0AJ&IANw@D! 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 G;PoHVxqJrz literal 0 HcmV?d00001 diff --git a/docs/docs/tutorials/data/fake_simple_data.hdf5 b/docs/docs/tutorials/data/fake_simple_data.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..c2399db9c94a79e9f789c37e97e6c97f38adcb8f GIT binary patch literal 409056 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�-Kq7cZzKXb@!SYs4wHobE4x1%yn~MhLYlX6| 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

IZ-ENc{aEj+PU4>E(9|x3^8^AgFf4Yrw8z6(D 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

cJINUTuiJk@&+N+e8wNeN4$ z&;46@G;-~5L9d5r81rCD>^N8_`V)cCUUxLIx&TyOIBC}!6hP)^k+5sSAv{ps{g!$w z2V`#Dj5(|sgVcpfi_fACLBua)udi+nnj;^ygs2gr3uDD^Y^4vOBx{H^>&7?OGb1po z7NkN{kG#kW@;xEoI^A`b302GmDr0LY+XceHD;Jh-jlm%6qi>=DgAgXptY2KT1bn}* zH8qWnL&RORZWKQczNa4_@Cj8yH{phi{F?*NeD7nBqB((cTdR)4I3Ky><6(0}k{vba zJ~Wj&6gu`%cdoer-*f8jZW;NNgZMze?$xf)UQ`qVYB|~3In<5k$ z*5Ld#OH(V88KCtO?con2L1ZK_7N|G{im@gfukpOh->~iatjRWX#-^VvnwCQsCGuEX z@ww*4=A#Xz19|jwZ^59lnF8f)eXff5Lx~1nUGO_wj5);i^t#bPbV$R>`7l|Z0l5oL z=Es<=02K-6m7#q?OmiXW};S$vw4FJ&17 zUMqe1aD5+|yf_nE_CFz@-=y?ri3f($fm2|tAjd;R z!jB|B{EErr(ge{B3a9l4Bxs7f?3}quFX;Mm#Se}hs^pp}I((X-M$YlJmcIj=K)d(! zxqq0q^wOwxxPE0DeDfp^hlM4O=~)*qp=;TA&YhjJ+fIV6-FJvlrNTcqXTDq>?GPNB z54%&5Z;btAMrJ3tTYx9K-c#9@5qjnvGAmJNYGoXVoc$wqsjwKR30wdEIV44=QdiV|>0v(c%MIq&HiaPB>OM93brab2 zJ#DP7382}8JjtUcaqoR$GE)ZoMDIb1L~txA%Hps!P9EBU=8l&fFZTPvhs@nm{bDIh zl$7hPeC0a{P#0HE!)3?kRGX|O~8V>sB~3MW0vPK`XY zv)p36@p*ZkP)8JV4F`42)Wp4O;I($)-Rjz9c)B*X_&{_98nW8&VX-ZwE6AmiCSVW9 z>wiK$AJ%~HFgt|v&MuV4-!BsJ+J|W$<*toeZNM!#cR^!y7QV;+_8-FBoqh+=?pq`4 zAfjisI_XG>$Q(9v^D!U(r0rFOKfL^yU$hv*YE6IyJi0U%{VE}H<#$3IzQ?z`uJZP& zU_&V@+qZ;$s=$sTP>nF*1nLwfCL8W=19S+o8OnbkNh=J!y?F==p?o9jEMLGOI<`0G z?;N!HDGWS(C5*Vk;&XnllOT#5`NS_iv+yPPXafJGD#)JB?r%OwhG!FR=-TVoL9p0X zuT8le6zPrc?0p!7-s^m4^7|xE3j5Q#*IGE&sZ?2dpMD$u%l|8_;K74ZPUsXw+~@<2 zCzqyGQ`u0GS-=^auT<#E8!=k5)CGuCF{H`m5JPob7Ma!w|A4->AVW5|7c9nI825Fz zLHOP~4r(=e6mp&K?T@!?h=Zqg^D1o~bZ)fx_VJLSgl|TwnXBed_IJEC<|^jPsPd~w z2>pTYDeZ8)jRuvUa(k&Ka04pddK|HCzEkr|1}_f@RQIcYU#l^Mk+o?ov*V;;)+|q zgT`PCA?^XNePJj4@oF6I2o;d3En%+Ko9p)+%2r@_-Xxuv5_>Yf`IR)(<-v!{_g?Gr zIiPZoZm)~?DvW_zVG_0k=$UR_Vdzjd&VdyY1V~b$=N_)*nuqHk)$yP1RO$en?`9!a zYQ%l&-*(rtW(AQgNdHy0`&!*Z>>qFkKyuOq zN0ZG_w5)z{*m5=wrY_oXWIqdqyS-0{j@IDZLzN4$*9!qO`EQG7$#N8eu#vp^CeGiG zpIrCeTH=UQ z^fdJh_8Hxf9~;#4nS_doZ{fG`JmJ9!?D={tktvh|-ow38cS?~$EVjm8_w*Cm-fmGY42q@5dQs{KMFa?>^14^H4 z$7DQ}@8Y|L@_R zC-zi+Fyp*^(yUPlvgW^6=uSSzx9ajBk=_Yo2`yb6(L2hO^A{XcG%F!ggS5IMNUL7>M@it zzYQ;VuAXbd{t`-e*7r{&2@$oa!3>oI3EHwx=AsrIfdXSg_fcEChe*D7p z{GS++HwicCpQJKS&TS%7=^{ZE{C5}Rw%HLwN_zaS)nV``D$TRR=a1IB!Xle@lt^8f zVf{5NJxUV}zC$a~1Br}hISP_U5c%qI$fH+2aHT7b`O1$YX#Mi$LO0tX)K-_@^}zmE z5z%kQe47R#L{z0Zl7nUz3g>xhE_G{Uk%J$$})4Lx*ybA9Gq@&a-Hz1be{Aji_ z56V2zc&}Ye615eh8HO;tXYAO^V{r`y>E9KD53%o{PJu;Y%aUV)YBhB``rcC zHiC|zizPb7fn=CV5`8%T#q=*cRrASotlb2%tMd29FfUNiv0D6!0p=E8YTu5-{WewE zCo@U;JEbN{bv#$i1C#JcD_Aot@gNX*+NxI7VRyd-JSq%zm=r z=VB(Imk)0#0eTr`o0g4v0Wn?MQCEl(z?JdasqJAIB&&ClQAnT~x@7J-sZY7UZuSxK zYrY+j%GxMN#}Wn}AHE zYkUuJ?(4eX^t8Kk9}HYeA#Snh2L+jY)rL%ZWN_RisY1FDO6P_c{f}{?*G86S=Md(R zJ)Cat85{*xjb++Gs~EU4TgGY@wG6>RABvbxa-&$=R@Y$mbfA5xB`-nX2&r-l@2Sd< zqD#Gds-xvA@bALcn}zgDD8on4?fXF%G_o*^OvbiA)VS{^H#6={4A(#S^P~{|Tn*#8 zB#GxN8P;M-*R}xmp4bREV;__av*G2|YA_O!etja21tnz})HtNgz;to<7oWSepz-7N z;*F2Y$l>CZ`0=+Z_@4cE^q2!7+AoR=d#zmpiTqByG*Jy8k|1Pd$W{w7JYP?rlxIdS zd;TzYiA%r;L8FT>;}0OQQL6fs#DJ#lh7t|le208NAJuq`PN-H^kZ1^KhucJjH+_6I zvBxaf^sVP8Y;|~*^I`57dDHBjn#x^Zo%l_7oq7=DW=N@R%a~D!fZy8$$0O+U>Qvdv z$4_uw^5^7-V(gpYosze89fad*@oou6|A5-VqtV~W<5l2A z3DvL&j#VN+SC{EU$W0r_GN7 zVG4!pJppB z1+twHFOBx0L@dei*UE9;Pebt2RD%u9Q#kj|i(cpjrwpYj(`stO_4wQ1Ru1OAvpUJi z>?}Zl{z%;l?z#RKVfmgt6MK1*6K$@n4+69NTpMdHJsO~C^RdUi<)Tmw9IWI(Hs)0N zcNmz_@0nG^A-M?U8fFR~5`Kf-KgD}IJ~$`z_>auRvS|<7J6|ziR8IKt3fZGXbch&K}u=gUzC1!G3G#wSvb~d^PpU=%Vn~#46 zD<&#afoeQwn64$($G(UkdJ^i*?99lc|9H}T{W9eEUppV_aR_Oh)Rw_x-=MV7Qq}x;bRZEGmXdnEyFWzXy9Q%dcShs&Uq|ld% zvg42Ppf4Zzw6gClgV?SBzjt;cP}X;aU*f9+OQ%x*YQuFj|F6@7ob~vR%fPP+(H;uYNf=uns-G*jz#QBcaGN70g zk(o?hXud3nIQvb8(|kAJubSYdrG7Ec&2GKl8UGFyp6_Rp_oWd0>+kEG zoeeIA4be{Z$3uK*!={_fn2-)FShw~m@kT&d3z?>ozzn3`+CDB>TLEumPd*7*5`#A- zXY!jK#Db~a)xq-I5vWQOO1^ZH3bFq;H7oXu45d0rF&pdfAV&SS5~TEnP(Na*7CN#C zz63N@dhrD?CAapACt?}?9wGYRQO$sKb6TYA6A~eUSh$3Nhykrc2QwF~k&zO|DcNu$^zZH13s(9TSXOJ+EPT$0qCQ2p_g>Bff)fJ+ zwY%64vtOOfB7PKASWF7tVG02kqZ)DA5;Da0LvKOI9p}5*LT&Zg=~3XFg)2dsgE*&F zvZMc(9xaaTrMt5cqZp0bD>I1^(DLNThjR^M&`Vs8>h!8q1cFVDov59Hp!?P;U+hOP zf9^}e^q3puJ2?>0S&O2H-xqfr-vvQJAnbEvn)=&z<f;KCkdw zPhF`bXK&&XI)T#J*mL*$!1TqS*&~LD^xig%|Kq zpnax*V;bK4+El;7$A_4lnk6&!-u%epo{qw=uDBW3CpcPNRQHpGyl2|BWf**Zo+#&vURWaS}OtC zo-ke0D*p~YqH}I;lJFrX`kHZN?{r|B+sUN6wgeg8F&9P&vLM>Om8OVg3y#bFmp4l$ z1j#2u?gu28!bw)P^apj!$ocy(wJBfhlf7~(W}>7X1g;s!Si0f-v4CP^X#f%WA!fd% z(^UoW@2a+z@xF7wgOt1@V*os=wtzzBa1Si-)DP>sWP_ix*o7PAm~Ac2jI|q;}5xzXr^QDpMX~5pfKK?dun`A2uq2#|H(jYvTtH z$>npxF>nmTyFHF=R!xCJ`B?af6e-F!wSFA&jtxDS_su{~nA2i6k|KS(0n$`&>lh_) zpd5;Q9mQMp=ts*X%SFjRNKbtcBw+a!+HypM{qQ-g^~D2FWdDZauZZ`>&pozoggMy5U_)2tyt30ZgjKUE6v^gcj)IlF6-`fiH)6q+Y28nyiE6 zzEY8(P9Dkpip&PEky7Fb+57-|)YODZgIs9zm`>Pf^*UH7dBe(jVi}CmF2+h>&+zw# zxBA*LwZJ$`ulCiL7PS*)osDj-0racJbva)UT{Ig=7Yj*%`|&M#zF|~|R-q%Jq=^st zrmc}^6{kV%N#6%y_lF@WPcdEEMGWtwMb3BZZa^+oH*=2yHA)Z}=&wrQKhxK-P#AMsL$+`hw3swAnQXS<<{4Y5$MIv}J;U~H z?d~`Dq$#6&UaA!ou6>wV=FGtU1bJ1q@DPY$BRgY<{XUT|HN0YJsZjMQy)g9}=E&LQ zxvaY5-gfp@Br(-4yvq2x{K#w>j!EbJZ4aAds|#aa9X=2Bx*NsMEn#0L z%|#dfU(0aUYEIoqz6Oq_Rm#*Q?f|Q~vR2Y75|qCAJ-nN91?oz_0vGnPT{f^iBD%?e zJ&GAIg7+{7HigC{%2gJLdtM-o!yIK+l?pd2)=fBs@k_hd%SLfVf*p*`h_`?05e>U?I7XF>Q!731Ge`|$bc z?KA2t`1~lPcVzD`CHk&+XQ1G56HqQvl%=Y$pwA8VHuVg6KdR7M--+ko^DhXTUSJ=X ztY4Gg9rsCieDd1;Yf2O-IimTn72;v#h7bLbYu6w}@+wuS3Fd7^yn@rXN0Rt$ChPIS zD2!YQyvdZrg}AGkV#A&2(abSw;$YmjkKK~0RPbqna`nq~ahEyKQixqi)Bqi#lo0Lh zRo;M2Yoa@x7Q4Xvbp3=o-m}PPUG*}~+XRhwS0@D1JHYkv?@!E!0w|`ys?yCT5%1~! zvmelOLBK?U&kFA6n<>*C$$QQM&QfiSFGrL zSbv1^3uXBIu;}y$%nO>eq=_+3!}sQ^CdY@%cY&Sq-+4VB64Yk zY-1JO#-~+ql7FRA^k@JA6$MMzF<NE{2wenWT^b+EJcZP;7DD(5KmXj>b&b&B!5)L}ymmB~X! zlWeH|VQT~pYxyE_w8;}q&M3jK{Ft@l`-&U-XB87gBH^IMy;n`T_ z{s(UxaLijWiE3?zbDc;2v~$oS;$5R<2h1B*+~(wPeq069j)y}(ih?2a(EM21fEY5r zJN0e`_i^dwz1mcFjw3yBhu<&oN^xaL^yserN4Tm)BG`ua%ddSbSI#D9gO2BXsPQ*q zB*9i6BEh|m`MwVAH}Yzs_tur^d5s~^^-AQ**(iiH*7NfD+D&}#m z_;kAqB!f5N(@S@ud5Edb%Ks2_Plv_5$=U%<79sh0-$lGH`HPGDEE$WiNRcfvGid6jz4gb%;Z6{;TSx4FoVtZ6*v!N`eE_TG?2-GwR6!_@W9kk(d76X>Eh%`9U(DTdTlx_v($G}bXR9BAR`Ye@{ksxKlluE8Blfh} zlvoO}9V>!FK61%TZUQtBcjo>5a}3B~zLdEC>>O~g8N9Ljb_7X|M=_oq#=NRokK^Jr z+n}~?w%>TF7nsL6W=B=HP+?S*-K&#M5L09)dFAOIus+s$E{}6ZgwY1NYemP9lRVLJ zTk3pZSaSI2^XmghF58A*N+CoY`rXW87JE=eb9{oCoEYiLpGk>0&5u@Dorg2dawAGO zf1rbT7HmSVXx?b$LL8rpVB9Jts@geIQ#|??ZW4R(@+zmnjh%qd8~mimk*QEwD+T+( zeUAKQpk_dthr>&onhfZ!ru_w4?3bwy>f@FU?g!)b`P&kNjL7D1n0Uh4D8wyE9b`Ym z{SZnA$%kv~NM|llq1|Z>UZw6>Jf6ddY;oN< z{kjbbGF^Wb*ifO}8e543^EHr^t9#)s_z8?Z%;l_F(;zn;QkQpK)ez2^8Gd`)3TA`k zWun5`Am?pRba`Ss96P!p-Egu7q`f;jDc8S2O1w4Ef*3dQd0w#TW{Uk*2cngAmFjT& zL5lavjbmu_Wr%%501GZ&YphnD7in?kjfVuNzyy-%3uP+0E z1*2rf-@lL@JJ9oEYYm(uDLL^T zl(MOr?tI!KDA2u>wnw!NmCw6}>)nYFt@X1_x3*=t#H4QCOU8=orQ+|?P{!kV9@$=S zDfX9Iy}kZhw;2}XgrJ7f8?F<0udlaLqNmAc*a>kCOwmZ=4ISkeC<|mc9Gt>Ep}V^K zM|reBJ=X>;lUIQ2Es-JuH9VI--&3O{HVLN~2MTjqmVs=oE8i+#7)^bjenq8)dwJSn z;`_I!AYf|KClz}XFMo^{l+Iv8zmG?V+VSD<|58`zS0x!*-O#)J-G>!bOr;wRdALDL zd%=aKS?nEEI5)TNiajmwMg^p;We}aCgTy8SDI&DZsB#j-J@l1;m+(rCS&Z5`UqZ4vIrPDAEbwY@6`-$0e7 zuS&wB0Zv`j7WpqN2MD{R$bJYGg3yCQr?9n32=~1gxYs)Z!&h%?H%k4471d~0qK-_s z|F+EWp^G3oNhLL>*oyr)=||@b+56#-4UJS9AMQC%{tYl(|ZDQp1MV%yDuj0LiM-vg9KvOAG+ox$KN*qdSc%1g=ul` zzv0)s#t|`O_CZpZ^j!gjCS830?OQH%hDe+fipIPcZ60a5y>VzM&R=wWwE>rHHEEVH zzku1_ST>7+0Og(IE85~>K%um~*BMPokgznZ$P(_6Us4T{%QfhR8TrWpeqI(7%MG-e z=ZH`~-xs$c?4NCTMRW2m=2M39N(G(Pi2~1+NcU3FJZQ`s`1Emy6MepsOu*~i2b&H* z;wE;I|#x0PQDL_halvp~tm(LO*l}?{t+Joa>m- zFtbF>pXfc!c{C#iQN6|U?oxA|dyNTBvPLt#@Qk3>-gafZ^^7iCE1yZ>dN5|HebBpCj<~2?1+6&L0V!B1=~COaKB=L2)hPROs5+pgCc104HdO3m(75JV28y zj@vzK$o(kKd>iiqyxwr>*1`NZVb$nqkKGo`V_tQsS4shm`qHbhqRsHIU#k+k0@o9BC0_QU-}cT`abpcrUqkr?a>}7sL+35(NndK{`Y0a%I9#&<`Xqj;)>r z>R^LZ%fc~mV_+@6U$6@E@6KfTw2PtdN6j2h;r^$VnKy$}>I!J8N(RZ3@ggbB-vZpX zD{#L4=A}f6K`5#1vCfnE3@Pd!zcaltuiwZpt>_(o-i+O`I7?9jUeW7Er_NS`bGn_# z`6*Jwd{?lltC0m!n{0;MJ57v)*){`vBu62UL+WMbG6$;hVvwvJ#QEzl@Aqe4k)a}o zW-sN45?InDtj>Iz4cx~*lYamF5B}Jm7x-R@`&Or>BZS^Cq1{#IQ#xUuVDa2*5ijSZN_iLG= z|hZdc+yu(A-U9w{%vMdDIV>Y?%IA20J>n=W%>j^r6 zj;-%+WP=LDf#I#o^oYDwe%Zm#3uw0MEUOPG(Gkr_y4%$hC{Am9u1JPU!6dv9sB`H=7i`o8stvJoWQE9UzGl-u^{o~ev)(P zJZK_(ORv!-8nUkr%GM;T!qe2M6aVMoKJRGFFA5?>#?1Zd(zHjBO>bX^H_opXv%HeL z^tIdWmdde;c}*l@DY-rk zaF;V8Od~@8&Acx!Rl>fI?}HgzY1}?AH`MJ!J@*Pm_rj*0`4+)&o7sRj?gR9#YN-k--342 zulDT#zhKYwiwt_CJLDFd&dH60mS(Bc&l91IW`p(&YU~A1J9RIku@ltvQybNJw?RNP zadhY#6|#uDd%x3R6Yh$Mx=%STg5UMy8RJH5h>s%WqID(CACW&WEm2yBuf#0>==Eno z`}l~IWGVI|>VA%AT-t@2a@Q=EQyE}==EhI@>-Es|t~6-85p#5w%k_ir?ZBGm$Mkl# zF(6VT;SYJa1^?N<hMj|Vx$b*9V#q{y`mt; zwch)AQZ)RRL|xD&$AI)LHk!}<#`zA#knZ&B%xIa`jvbjWpqsV5h0O&_NZiBd(#6ZP zDAPBpFfhv>HggvqFxCm9M*s307IU1FxiP@;Izt%6H~cp``9m4;)lgFl26CdxzXBZ3 zaR1oUS!gpQ=R5Y%tf-I|;Q5ngI*W%m8PdPFS*lIB3V%BVM>?LD!js`+-Y<>a;n`vO z-kYIn7=3h#1DdCSQ7O{v@G1U$vVJNWEoDYDLfhe?`Nhy7%I$vLyA*B^z6fCA3InTf z)h7v4<9yb+E%o=Y{qUTe3@dP6L=$UD9m(R>3o=t6g8=Q!M<@OB?|Dt;E z^W-5`k|9G}EjgpJ5+3wXA!_92Mf^r=CoE`kD|`zrUe&^S=Zz?|OPq{uYY-OAN(HnZa;Kf1+n5n|1ZAO=%mzP=gTvg zOGfj9=9R%T^j%5g;5iHc;sE>D3J=^L*j89fw2A=j=FLUJ&)Xn+vySwOt01Du^%*4n zL62whD1IC+shsz) z#r$tm2YJ?Vn=UAM_vw-6uEz;xG@9D4eJhC{nP{KAp{d1*tUU{ZjctB`VfPT5>M8|N znqZAsI@Jal`+MeDMqOai5PDCiDh@6W`rjJEe2ahMt(-RrY9UcK!&9Sp0!+Et(&+aH zQQcFrC5r!=fMX%(m3ZJPOmFXMaNceQ5&e~3y9#`N-AT_ERbfU+TCW~X=2T<g17q)gn$8IerHox@eki}iM*C^316doJDD9+Bj^VDZE9u3FtM=zP~3 zI%jbb5#=ZTu;2IxtX)N9svO*C_{c@IBqhvAiIfxH%VS2XiX%@{v2X7YkBw=nHWhkC z{NM1%Vg)P}3N%GX5F_!MWx0mq6F`Dk+|T24(klUqX^Uw)aDA;~-RDh(6mrfu8;Rq+ zXw8?mClmW{DMY4Q`+YaWeOlOZV*deO<>`(dmzajoliC}n8(9%c+yV^&=CBgI@nFhN z5=6^!dhh;!PCC9R&EqB-1!<=P&MnbXA^pv^>)e(&|#6#`8ZM`E?sDQNQMmA#xH$~7enXvZ{Op&TnGJL z_S&f?!|?XtQg`H8oWnws>o3nRpmC|J<;t=EhzYtjsrUx-dFEeNTj2fWhF!pI#t=>< z`&>`#9OggF7GqDUzfaftG8-`SY{>P{OGZ6#iuxeto%TA99Nk zX;OU;3x3Xr#`!Ojj4h5r?X_Ly_RuA0x90=IaIfV^ms) zR!rzdoLLr41NK9w40AoI-i28PgVm{ZJnuIYV3Af9MC@*>GmHzvxcC3;#pMWMB%mJ8 z{HgQ{G}1qF{7>;ER1kRUt%@wer-YBA<(5pScSx`&py&Y4n?BWq_!41$82^=9e}_Oh zDkzL!5a-QXYE~Whcu#H)HiWQ*$6Nrx}WowylqdwdSYGn%JV762=EOi!{>V=mRC2@ z*;ip$Z|~ZMBMbVX>&nI`&xZu8znvv>`3u728Q!@UJb|!0H%?<~3>4_^q|=QbM?1~8 z`EJURASjOgcHfW|U8oXVdr&zDwCIX6JI*6qAX=6WFN}pRdR9A@w5&)bIw$eU>=yh~ zI`1^+I1j7uIXOJcF?adM=bc#hEfD5o%b74FL4^%9XPyKxq4nb$AH2-GATF)({TjOv zQsnle4koCCA5kL1G{Xnb&&KawkwAtL35nKjg<;Mc^N(@8Q^bhmQTuCt!)2JBqcLke zUjiRvDOulZv_R--p^BQD(=eO+siLQD8w!%HcLyym7hhHKQ)M&F~^75l|4h|D>Djm{y{0ONrFm>+m2hw+Q9k8 zWYfCz&*8L<^^8&hDVpXsl=Z^n1M6af--Gv+t z?B9?LB*uLZp~=zlh5=ZNE)Og4>H#rF(Sfx}@M2O0C&m?W46lOdLE0DQ9{H8?Va!ZGh^lV7va9aS0&5*tvpO}O)S-+Gh zWis^S6B%4@8UahW-<9h`v!EBn5V2md0Y=x9BZgkhgIbHPvQhQ~e5mHRYVWxMgDFfY zS@VYwnRoOA9U&R2QkrH+^CL$csV^w-&gs^?i%5l^?x0K4L8xz=aG? z_Jto??}sh{wtqe*E1;c|9}}xEfjx)TJ6zcNTxKsLc{^4RF){1CCTZh9E@2d({EkdP zO*ee^oEJkyQyQlO@f=gkz`XHiU^ASQyS@DVB=*Z~y>?UsQbgG^{GKAG9r7H5DjiS% zf8Y5^`V`KKIH-21?SGj8Z&CKs>O{RT`>Ub7Y_bS=vrbYDe_+BKFq`T7H}=6I+-1@6MTE= zu1b!W)^frM85 zNZlPm6kGrG&#Mop{7kt}*i`dk45>A6e@$xpca#&&#!)%wn(lx| zqU^Qt)GZiu?%iIE$pD^bR$h8{`B0Im;bukCFKE2p7yWjZ7YU9wFz&AX0ns~?ue5J| zg5DnqZiIv5xO1i)hxu~C8q`g|T*-uei% z=66EA#kNCS=_V++m;AY}NRE`0M7NvHI>B8g^NB3yC5U|6S5|>@tbPXliL5-hFV^vd z*VKw1c?=v&$ru@j2QT_-rGz+;o`Ln?A0`pZ!}`U^)qfOC#3vA!g)YEzIgfbxJ1ek| zLQL|Ac@ac~R%ZfHFckf}_=niP6T(k3hbE9e12sjW6E7;7K!K`c(m}8d!NyQI1@Flxb#eW2GJg#tjRNxLJ4XI-dohvXV#vRPD zM2^ZgVyFz_w}HO?h(TXj74&V~EF%8Sj4E<>7zn6Z!KprFe7qqIN*Co+*q4d1hql9* zf%P4H4S2Zt^6MciHn=nMh3&x8#fxzQBNZTb@SBDm&s*D~H>0JcXi;h32$7q_6!d+O zR@rzw3S{zTxnsX(px;xW`OgRqvRm-sWlWfWUZU5X`;6qsd-{jU0`{WQEUx?)g*l9( zgg5CH+nb<^oj>4uHe3@`WeyXcQK2?b@U{x0 zMa@b&Px;0Ezye2To&@$mTG4*sqROd-Znyc-JHUjRCk4~htQ|qS{picTiyjapviJ2x z6BQzukmlHoDu$P*hc9iRWr*%3o1>5T1%kt#H=f~ncFwH)mSN#8{GDXxZhJTl&xL%= z@6GSRvw4M_>~3aMZo)5-lY{rl^GB4&YgS-4rkDkI@WY2h_`}$dcA&KXsu|Oj2u#G5 zwP}P0kb=FE+S@yDb#5>A5PLYvSAWHOV6OjNqKA~pn8(AjHUifk%0vgJ2s@uOI zEj`ryvmgaB+oa!0F2@{P!v5nAac_V5w6U$LbTz(@9KTQSg9lj^c{$ua%Z6rWJc*64 zcYgV&LL8ZX70@1!&m4BGhO(PaB|>oz=ktho$mI$q6zP8D<1j@9xIG^DS6k17`n5UZ zZ(xq#;5T)`ZCO$zPO7%|WBn-@Brtr9#{KBeL@wHQV%EW?_TU_C$+uUcgs_P{vJg5n2w2U!<>Zg8ve;l1v#T zvcDPh{@%eREXkZoc>8Aoy4AL{x^>#&GxRHx0eM|8=|(L)oO_t#Ag~IZ^xxd*3%B7z$EA~Y_?||Xd6g^@_XT5p z|0@dI&4e0`XQK}m8-TAO>ACp_Vq~`CTpsi^oy)73536#C&V7gslN~oedR)u;+kboYI>Y`zSQ;4?{FZA>5~B?*ICh z1fBh?%bq5E07>$m>eB74AgA3zmV-T@PaU0~e@XfWA7z{r`npy@IeaCl26LJ;WNJN* zN%sLeL77%ZQadR4zi56DS`AV8lBuh|*-`%Ig3R~7Nl`)eo-Mp0Mc)~Q-Ht|3qci_8 zT@aj{06VfL$LxFd;cf2YSBBqY(MaJ3(nw}0lp$Q3B^huO?fj~)PkOfkbh;y@a}V+P zH-r7}U+GflD(L0DKF@_%xDw+xv3JYGq0EdC#$fhNnHaB*0Fr+F*Yb@x7xI4a$s%bX z2TtcpYZsPMp&*W^kun~8oX7bU&eymInGYbmznKHovl4CR_0PephgR*?57uD&fxC^+ zH%1hHB5HQWh#S3%v~)?F+X9Q^hgJXgP`)`3(s9Nf*2bNEbq8W*WFVD8d%ubXeLS_5 zqxS3rRLjaqJk#p~A`_yN=(xY|)iywa;V$MX1cq9lGpPfnyp@opE((Z@T+bdC`wM~# zr7;~z`4F$eCw8`q9x0cSZ0;-l1jh`c$n$40cQfp!l)>3i2;ZF7pQYtOA9+Jw=R6&P zES;K?N8{9p<0XZHkIyRjMf!@nZV)1G&xgmPD?1@CMb4c&0MAh?r89NyT>;fiGTq4} zN9!{4oK)EJ72`#(Lz|ZaK2`tR_CH()la;OylE;_emgW4X`G{#~>hWqF$KI%9J?-RL z+{<2$T~9K7f%7$1g2zb`H{teIRoDAB@I27S`Ti%&;|@QwsAW_+0;gG@^6Fm2{*cz~ zPOGGBc#@fO#>Jfv^~qLzkql)-b#XzLYhD@+o}pX{ci%|HYSNo*|(sY z!hBRdya34kH1_ya{6MwHIo;|>2^^=w0fYJu7`ZdPykuAd{!-B&WF85jqtxpcb+fUr z>C1HQXRZbyI`7s=OSl3Og2W18{J5u7nYSgX&Wj8}KCJZ@EAJ-lR}cX}FJnNfAORgivIKP^4@Up^T_xM6xq0BU#yd@4ffl<2~;; zpYc4;Irn{Czn{rZIHBg8`HGMRjeqGnLy36_j%L-jiZN$ZMeA0j@d`eF>k7(9-k?MT z{03G2d5q|d>Bll|wh~Bvnl!yv)&(cxo_wKjFN2#(sTng9!!R$%T{$AefU0K{|8U{C z3}@&>zVHGsG7nL@OHexmI(Mh?t;hG_mcB>FFJm*fB$x8z=$A^EkfKs}&D{fK|J)o+ zIf>CBO{aVTdm0pa8lSD>?!&qE<=q|`e9zbZdLiQ*8A6x5!tIleqIlJ%0e=E!X0-)q@WYmz-E^DZ;$;Ec`4To*(?C5;^` zH_PFr#}O+huSp;^Ot!n@WdiEq%>i^dc>l`hX*i%DiY|!X9qRL$facdTnZL&RKu4G2 zHA~SV$nD!x%|6-#ZE{V@?B{qdu+1zhH(iYVjbp2#5B~z`6n>v6EtvM#eDhP` z8!S*)j@Yg@!Emo>a}d`M$S&y$y4esSl2F2p1k8cFAoELA{CWf=+*M1iIQ$3Y=j49I zH?M$QHu10PCwLK48Oh~N;~q%x`y?el+XbRlOsS_>%OPolr`~tN9Jb;&`D~S!q10xs zpjl}bEEhXT!r#_{XiI>zg?>BG_XK}6I1>c)S4i)=-|hyXR?8Q|tx_n_N+|cabR3vm znGaO_&4wsBvUCfGOQ1DKU`@E71+Ij09M%xO1Gf9gQGIwmCjRToH-#^mz}A$kZinBK zM24FdbQwNyT!Y$8>>NMR@zovEV?2Z|BduR;bPc$-I=VuY{|tPdJxe~##E!_F6N0=r zC=g-Y9Bb0cAE5mPmCGF`K_WVte|8sJp}K`A}tabCdSV z+2&yF3h#aZ>Vo2{5vv{-rBG+4Bh&S$ZlD$NTXn~M(f-XRBj1lV!jV@BMgn~%@I9!- zdc$oI$P_N;|5F}@x4O4x>IR>{v1B9Pk~AI^b5fd?C>Hx-Jb4?6ULQlZpO#-|#N3_d zRF8{CZ(~k+MS{kT3+6DF780!wGazGU+9c&kPBi%-eZRbA5~jKDoHxQ=&5f;>le>Yn zKuCEaSw?gh1{RMQk;}+I)k!U>p(G#ho8HsBg}JL;5}!7BF-KynR>$1>ISoEHy|?GQ ze+nE3;>Y`&CgILjyz9dzBJ`ZO*jL((3I#mtIaa1bkMAEHJe~O5knLEINW6Rq96c{P zR4%7OZ`c8+ju8c7x||x)LBRsvz84ily~t4Mi6X!3hZ{i0ptr+bLWlxxzS6Gy_zb2# zPS2zS#z9ic;-f=eD+vFF`=B)aaBG0aTYRbtB;x$p+Ap&pciL+1;QVo*z~q}foafY@ zG?G~^%7N4nXMy=nax@w7EI$v*+C%FX1epnH{huhVZD^B1Y&bw6<+r8`a0VXE|K z%wyN<-AjCKw_B9a`IiXjU4=!&=`koDq`I=J+JetZM7n|4hv!-xG`n)|A}B+~Tg^zCI220>pC+nY-FI?aY2SpM`K)Z7JC^HW>e zMI*42HAWuZQxC$OuGVVJEf7}d8UBij550{g%hdim3Qq|2uQI3*A|Cp<7y5gLKq#Yi zTKO9Gs74jih6%9Y_c)R7XUrvw9n)5=8JU7f%ge5py(sZKfLg?9^e9@i{~FM8Vjg&@ z!|WegWP<}Mx3NL+_f?4JPsLbX=-@S?D%d!75r=`u0jCKh0 zwQN*X@hvjRl&}c&Fa61y` z4yy!GRyHsX!<}Jens5^Aetb%IU+aeV6Ked048suU(&N@EJq;yc{hjTS+rX|XKpMH!Dr&*sfxO_P-V2x;&jjr&aGqK zmFneiDN=vhSHjLG&sNB@iX6OANPit9#I`OwScn;>E&VX9O%0I zW$JT2=H4z0sBoCDqqgAua_RH?Pi-jYQdj9>oc$jXY&;f(4y1+!GE5tDlxjs?UFe`@Dm@X~GoLlMp`( z^Tj>_BX!w)on=sBY>`NiaC7B>6|F8BD#jbrMx6k?hZIWID+YrW3Aw z+$$vLFUQG+H|c9|?(v29;c?BFGd-L6*JBpqe3g$oFf*WiFS)w|aY86jLe<<8&r?au zg4PEE48c>;J;d|tX_S?C$L(ie9gOD`tGkGhp@@_cZYyvSwN!GMem)X%%^ zk|6n&hcl++#3)yRY3rNo9{4z>P+t8) z5zm(m`87e5y4e*W|H4HR52xq6Hh`vQ-+nV&bo{k4hz7$V7t(SMf$`uN{w zfoh6XL5>^VkrLf4Q?T5KO46ly^qgoTl zWp6qNs87O$q&xO-=^6Gml=g>~Zo?Ugq8)J`0kqfft}cgc2OJX8WmS0Bz*D%-Tk#|# z=IJe-bN7A^brabkUnXRb>Azy(Gb3#1UY{&&)`A3zP@wZ!zOn)d%EAWkg9qWd*7CJ3 z%;ow~Kkhjf_YZmtm@Q&&?ShC@x=sVlGSphKy3DcTy~G)SRlA`6!DyBOFRW zNohtvl4_<>m)!`42?VEvqlwYAE~|T{KEdD`O8+9oZX2Sv&%zp=yz?UVn#FxC z$nZ_4L17>Ch935Hz{N#vMTW6Mpl?>Fk0V)wB{sJfx{y^k?p1G~p|=PjoP?VBFQ(xB zf$xRSy_D!1CwGpsW*+VVG|oTyTn3`oXq}T-k0Rms6fjvG1PT4UQcKv6T$?7C=Tx@< zQ{9y`GT29R+={!`=`_wwei-g1HQNT)+vf6rJ1fAC)h_g)PYlNF=2R4maevxNob7Oz z0r~f)tG30(!VdT4>KL4lw_4ZNIejNZZm#mOao1EC_|TH;oxkk_OvJXf?1Ux2>!j5j zaC#Y@21obT4h}-Hs5j-T%QX1#UNZE3B!tGirWfroXVuc5DDtet54b-_MHfFzhK@cx z=bfnZ3l1uy8B0^*Au_GMkLnQ(B6DMvKBT5ZO#XB+Q}p}LSQc5Wd!`e#-4`OxXZ{3^ zM(II)e9oRt47g6=HUsm?monHMk)dme5pxrGE?}3h5idGk4VqWApUHIK`*dhXm$?}g z($67gD}6Txzb1|c{+*u%?OR!^rkeDq+`Y-g&UqKal+M3f4Ly!@jpOtfPEsI`k(SlB z^`gk#E-1rqehKu9rt&?kV_{T#MDFR$ z>K3S{l4aNCAwkXVtl?U#e$eG0rGL!Z1x8vb3j=&-K)J{Fl8a*}WPWX^92;5%hRbJC zIil-9(f?@}yKyR%R-WT6Q|N%uc*@>?dAU&Bc>K??AJGuY?YcAYzzben@>fp&Q3~x< z?Xe=*gTDBLNXndr0NLz?Z2RHfFbC0u)Px8d^4iV>fnO)l#xE7kbgO#k3^^w)mCla* z5;snM!W>l(CpUxJIY&^G`ZBQ(K7V|9TI1W9c?= zADXD??7mYZ2ob-gip9OKQeqF8Gj#EwCUIb@R5S)}xDq&SOEMsDBZ8A(qJ+@+)|yxhMH~u(i6VoK^mO2m$Fug(C)mWl9$B>$bTNcpD14q zPpuZ3f8zX|aBiN}|OPwOLiupML_e8%x)S3cD%dD&2OBL|ahl0@} zg&3vWC*btLzAD4RsbgQ_--D&)M1<_?J{WK_3*SGWK^}SvS>g9EU##t~9XkWg|8cZR ztM;dXy6#i%^oj+zeD6~^nRP3eX&&V_X*qz7p{vb~g+NXla>}a-zb= zQ$MzeyPvXL)jHP=jbks}f%=s0*)l32l(0cx`&w&X#Yux8$T_NxTbc zrdf=~^Os;VEcM!pZ);#tUFnymKLFRAl?f)R>p@1~Qjkh1H;TBRWn8Vugx)0?$|Vx? z0-f5XYJoTI4eZ_w)HYZFw(sSoD|8g-Od+SnpQ29a-9TJ0$$kmlMyWL~bP10THTHbpMwXvkQCgVlD?BPD6;?>xP%7(t$H? zZf9zd7ts<&uvyRSfGK~4&BgdW&@$4#F`R<$TM`}b1rt7ib&^_#3FZuLe{s9bEU^Og z!k^9*XjOr>fSLzecpfBjn3HbY9D@Je#z(EN4MXfj^DKc;Ce&?_+d?1DhR&H0U-&Xe zg|vAxMw8xsfvU#$Yd3Je$n}tB>h8%*2&hxGEg}8}kLo8J(yYtjjlh%)hXxB0_!z4e z@tX;;i4PmlvR1=_U@grxUS9OzZuQj-`M;2COJi}5Xdl$A-)-@fPJoJD+~dP(0!mycJb1V5B<`&XF~+Y~u$zLDfP;0QnHZ9! zrOqVSVndz;gX;GlG=su|i6BiC8H)b$^Gln-5YEePx%CxGp>wbElXLs~LCe=u?%D+! zbn)#mns|-`5c+gztK^yq^_lt_iCxv;*(wx&`1d9FcevT+5p}?|S)x59%ngilpignK zmOvy5L&WR0lhC!Os5gjxLw8T`EVu-B~!#baf#&YETlB=?-<LC{A#VN#tWh z1V0U`b*iRef!KsC7Uwp;nk)5@mTtma#Hh=5ERU4x zE6iAxPA9zBhIj1B_tfh?0yx@Bixw`!uRou^)jn>42*>N0k6MD^%(IB9e>cWJEG>>j zDsL6`H!facTOmc!923so&+6gwsgGI&`Ng2Y1{R1IKX3KZclmGi0r%^us+j#zsGZ2t zGs+-DuBx?T&x|HO+NnXbqoOE);Gd0ezgGamDi7i=NZs>r4$z8`(?o6 zasME)G!;zrKP_!tumc~0Cshga*h^}u@rs776Mo%E99qTR&6ODHkzkywB=uj*{}z@3 zL4!&zo=mflOJw-lRwWP4Nk7kC#`o!_*wvd;+)1D>mSf!Vc?{wupI?1BO^y0;iVIBs z&A~wg-?@P<4`|6Nd*ZM?1HYmVB3*rJp`32cE+xDaoMx-7dU1}}liN}MFXI%jswndq zG~)L_|39*bvm5{K9qx7yM*@?x=%E0=BqI9c>)}AK3rT}dj2e5&piK2`OOay-ya|>) z!ijrr3Uj#xzwTAQVy$g%^W6y`xvcrm`#L8&apma~7yWE-{$Ud|dWiGH*L5g_daFQM zGqi{t+pNO4|Y?y$FvXSjw)MDvu|TxX{}}9(Lr{6J~dD{+Jet}Z$%hW%_$>XgwYM;l^QIZ}QFB^z6nwW*iwMOHwUa^>GWc=o8XbLE- z-j9=wO9MTJaW#4(LNxzYEwe@HHJF!>g^^^`KsYN|!Cj{!N)_TM}X@AqNZ3{2CA)& z)<+(b@Ou6fll5#CIGKkK^{E`AzJq}Q917?jLx`mwrPipqPCAzS3+{i;NYr7QGz%P;(V~ZM9CtGT=^3ve<`d1 zmES$FESW>#6f$}Ao&jx}1STe)Bu92V6pPzDS_-Z&~ zHPD6s$ePVrhUMbL5JuV;aM6pyeq@>m9i{HR|M~I`+_ZkSSiew-dx1HGG21JUkt)z& z`F8{k3y)pW`_>M<+G{MWa_b;xO>DB2(Fm6vg1uhO>_U6Im-wn)46yul6Mho~mz}`R3mN&b7@J~eKj8h*4l7!LoJa?bMZNJX==QZUpW!)mE{AvPoNxNOC1Uf-t zzGCx)>kAOA?#M4`oq+WdPv&m?D8~DPrsJn(&Y*phUoXuVm=GVMPyY+N4;}hp{%x1% zGsL_zyrlkT4y1pMf6P+phlG>oqGTfok*$3G2aO&C**pv6-Y_L#8VK_7nntip$dqWNd zdxclKIA?eNpZa{?Hhirr_N(q}f}GHe|0YJ}fU-*>R}=I5#3`iCniOsWX&b?97n%xa zp(P1k;UYsX=?W=!4BCKZZ_R-8+X!eUFlu5wGl+qMJf+K(18MD(<=dW(n@ z9T~G=kv7BpJG+0ciN)8z@qIBhave zJNDkeu*^}fKr}#u1k+_sE~vG^ha0>Cq35+AhduH}`&=2Eyf?|#u8sMl(*rHXUl5_M zp5!S9UxiRu?C&rGzaIGZaz3Fc>MPi-2Sz?nK7!sRog}??G1WjMz z;7V%r^u!!ji{lmuzUUj0yUB=>%&23YE^b34E#EW|&V!`>NBq@%YY)tcqDU<$Dbes) zn6i3h1AHkxt?KDVi@v1k{#KyEyv?Zl-J5K@Nay1CBNn@6@bsE`Sp$LEitG`(OFGn^B1`mx%0WnvAuqIXJO;XIirs&SW-<39Ze=miA)9+fckWqEfEde&fQu+G`l{ToC+5M12s3ph zn=QzY%moidhU3(T;$NKTjDiTdi}a61=&eC2lftu{D+a)|>vL9$T?DOMX^@Y@y{}N0 z`GQMnD>&yp$fjx$14>txgWu0FB6FT>g&Lfz$$QIssplFIy1CX+)%C6wj`DV;b}U8V zzQ3+n10D8LwT{R?J~Iv{llm5X-1gw!^_AOaLWR*kOOD&_J9w^Mul3%on-o1UjP{sZ zwuWC#J=#D{f=)$WwwHL5fjJ6i-kkHrd$7-8fg;1$Z|cu_Yp$~#7^p`-bl~16i;x)| z*8npr;y67^FuV+dKV-_{xtY5dfUe{1sn zC2G4-4>}BWWvLYusQIS`PnZ26L_XFu)3c6)=bH;YA3|!uS>4~{;umHVSNtpY&#;n*9L1Dlg52*h43SNDTejzFx))WW|J$s0O6%4nf_zN zeiSC6N?xO2h??2#{m*L+guW8I@@mE&IkI)WWA|cV{jM(M$21>Eaos1|D#-<@H3y-Q zr?luY-wJKR32Kz(RTLz8KM1Zr&JlhwG6t+K_v7f9+pym=Zt#{?AIN4f8PPNM!V;_B zV>!(E%5w~Su)RQqnoz|464?L*=$p=c`AmRFZj)}mzd(T=*$DnO<535|>tZ33i*u(5 zje{5D@OkOv`;Zi+KB)df#Im!Dxw*+TX5JSk;M|1{t#5{>AnUAn^ybHU7!fR*VG?FT z4*H9q%`<1=F!NjCzr_#m?-99)slyW37QM5q$9=R8w!TnmixqJ8`jonOL=0&(XVVK5 z`9Pc@-;d8SLvYkE$RYh%3|z|5QLWnQ2eRj)jGR3<_mgs7Y^R419dwnsG?)@2+58X< zbqhmCI^VxJAy0sq8H6JS?&G|@a(|9_!FO<6C(moQ`Uf1+Wlx%L4?FYorJuS+8SrR6 zM)F5K<_|r+{GVy#J9rhHPxz{j41KLAbohpQ%33613mQ}jKrs6!G5aJn%DMQ7E>VgF zZPBWG%fIXZqRwaoU(8!)tNACtTM-X3;xFim>I6~Vg4r+!1wZnMKYHhAI3*fum^{>A zT7gN1h$X{sr;xmh_6>5p&&|8{=gsmI5vmjU^wme19v!>2Gbm?8h}w&@R3%Rl!PG*) z@zsb-usN<6`$~=xnYEUu4xhxHsg)L+yT!cdM#WcV>-1e<{@o=~BSC`-e;E7_E*C<6 zpEdWxCRfe-dGXYONW}lR)=GZORzZm{_5|Cg2=~>?B@81V3_jJ@%?v= z7Kyzfm*M5#0*yFg)!~@FYjJWhEZ5Dz0VMd@3Uv6 z^{BR9;pggWwLA&t`YSyeE%W-k24}7+pU}0$e;*x}!LuKUP|}B?{Bsjs5I{dU?Wcx) zQU8SYE^vw<>yonk;_OODa=0-hsXYSaS7pAZ1~H-Otmp7DXAykW-m&v(WP!f~&;86F z^+5RVV*FPP?DI*Q=HbTvl?3Ow7qHz1?1<1k?HJ~vV9sT+C+=f3%BNEAV;|(;i?{w9 zf{5th2dB>+G-x2><#>*N2b}QrX|?s91$(24i00NFuo+3T^tHtNscZbTV=^S@Ik8e4--8|YSEF+F>M z7v1wE9l580=Ld2MZ{#VH;gjdft@l#3P&-w=Wkbt~NXG)N9AW zcXjM@tuW1{tj^6%jfh_c1(FgnAc~+sjb{lp&3_2`Hc zUCe`5?|6FF-%o;5q@}~pF$z@l>w2KsWIKcub6-i8ZvoR=cUvqJS;1SP99?#90EsZY z8#Ol`;CplBLL&t$dS%d?b6ODeJdPHamb$@?*{lH6eQ1 zKD4t$Lxg6p8nYnAUf^PhofOg}M#NlEXQZjW!4iRU%+S~p6j1p#vVX!k&`)l&w3d8G zy{Luwp63ZB#_Co1)e`L2PaHwhz=U?UU=c$x+XUlNr_hi5Shw$}c@&r9zC>yJucg?*gkbPvD?W4(Q## zE~wwlf%Fvqi%|N&g8qEC0xFnWooMAnEaSNW1I9PsK0fdOT~{xr4u(1)J1R*`74!#2 z2>*>;W^9LS^7I`oH}erjKnW9nJ>$E#oL9}^<4e7xbUAVYIx?(fR);=Zltk38nL*oP?{ z5o}+w3XwYwq%30eXyp`@hrs;?U_0@o{+#R(xNNlkxzyJT=Lu6wxI1wEC2qpVifk0l zoi8+G!(0iH7)AO07%!+Xw_v&YWCK2EUnQxD--dslKd4TSZNO>5hxrPpY0!#IakNpy zAPl5k=`?4-o&mO8>r(6o>I|ZmIVFv~^At~l%HQEWTU-)h|061tNBqHy7jw;qBvvmn zYciqGE*b&vrZtGY8`LGO*8w6m2^mE?IPWKS`};0ICV2T)6+OkiJ1KKr79ZVWm~Wom ziM?W=OcKA%_5)NQP_6!jQxCb8HmdKhCY=^>OO`lS7ansW-IP zX@>R(nG#-J-&bn)4Aex zwF}_4;j@PWAuBLTS)yy;M2s3G$lC56KZe}+m9#HnKX^ni-w$st+~=dal*O^L4sVr= zkB;5w2dk{`vv=s*!L(Y?b{g-wLx*+uD5qFaYPo2DXGb4QzT+rt70!d!Y`Nl}dOtvI zhFzDGgbY#1n$nz)#{8vUCmwr+Zo|+QrM5WCkvvD%W5a*Z0TgCWljjDfLY#N)a;GI5 zIzsVzR_iAA>%70KO82N1R&Lw(MAw$U@Z%KbMEw66cmK1rKIIB%sJe)wJ-UE=l$*oeLxI{@ykfZF?95PJ;pEC+u^7V|M!Cw@^sbZy@B!+W>-< zBWtq~hp_)!Q=z&W^XJ*U{uq3j2hArd%Ijkp@L_9S+?P2F6!*twYeFg^O;^l(Fqst* zGI+C33Xq}+`TsumT*5v*W4Sp>ODkx4O?4~2uL(}m4|-~2zM%ddVrX?}0K(@$yoc}2 zf_kU<|Nfl-`lNTu@tB)&QCfBT3GF!e5Q+;*5H7$iuFEYm{5VgW^q6@C_ZJy2x8E+T z#6120n`Bewb|7hOk~&f+f!56*bbk7~4AyrwB!y`PVf5@J-@74R{o{s3W>u2mOx<)~Kv)`ExrJlb*6W_Lu zaZf3gD%^N)$#j(Y?EvQZxJFqiAQE(Q;89iY>MA&s44s`}U_}oL1227!Uxekv!SEsf zQHU;96-=wa`DJ;FZ*MLBf_7$s`{tJtILiHP!~^F!(~P2fii%j#4fzKRCbhp|q4tY* zf@%%$QAR9Ie4#)idIyrhtG%FMlF2@FqY&Qqh4tBNaG)T=-78xSpqq`hfG3wISROu0H}>Hx9FgSD2@uU2QL4S_ju2AC`!>Y+)}6F;PkX8eEb-ct*HD zh<)PfRPEiFm}@Cqu=zz0)uG+-M5P5tXZscSzy{}1Y&a{saQ>=)%!D8f&)whsr*(_< zbQ&ysBy${75kf0nKhIsB?SX;Xq6Vp(S-|}D^-_oTK1gcR}W(ke#t$fagx1@@&M&Q*5C&=P}t&Ef3&o>2TmP!+oTq3o!&|1d)CXhf0RE z4TK+%f2B^vK7%CLI}ePg5aIXMRa*Bxh+jMM_3qj(q*k{F8{!;C1E*2c-?bqKxwBXH zIg$m5Ozp;WLo+N2Fz)&)pik^c49@gc?I@v8EmNKLd)8w5G}e<|D1N8hj2it-tkZgyDNYe!KVm)StUBm?l2+RhJ2+YRc%Yw1mI~Ta#8s zszG?_KL4ggc@?BV;IevG z(Kq7&+AY4%)&DmGm7yKtPTkngaelO)sLmSC_4emaN0Fe@oGB?*G#$_*#TO{qi05;y z=lBwEPb}}I&KX&r7#Lq*__Rqh3HAK1tM1;Y!1+?8u5X*d=vU%Rg2VS&;Cw7h^u7!k z%AQRBZzzxosi=_po_};4{a3R_|MJ=#6qV&mZ9K>QOb`tDCbkauRxh6pJXQxh)Ea`3 zU&+yL54)cV)s65VY?*4>BnK{k;KbFLIlNC?h`on>t9Ji&&;_n{!2Q)Y#ZISQ(8(%_ zy2M`x>R~hncRLtSONCFQ2TL4yTb?CLzSakQ;ahCZE}c-xNFDd0PYS(J%pW{E)e8N& zEmRZ5hVbk|A>F%LZuE<8@MMh|5%LUi=C6nu1zP4*wb?84u(#m5?uGphvI(XOX9~oT zsOR|VI6dx#H|&1=6F&{LAE@j;XtlumDFyAqZh2redS)D38VmUxiwb?i1W4pJcYaAS zem;4bDCV#aT=1gjWU{{{bTN4OD$DF+Lp#lk-{hWM{U9ujG7)v}&)2PvdN1WnI zAAW-5$VLSL=H`n})u`753^k`d*qv5CXG8|{EyMK=13s^XDB#z0DqFnnc zZAw%bAY&0f-A~PdYHhv~7L-w;U%F2B+7sL1QhYXVC^inMSVZ58Y#4^(iz@N{hj?D6 zCH7XPeisZMm`PP7;(O}+&;aB83UIQqOV^uhgW;Lx_eU^iTE*sZWDfNVn7=wgb2#t` z26WFVB^q#|D>qD1h{ndCrev(c^6VOz>C=b_33H&KqJy_S%lW`Ht!AEX#fFaZmq*LJ zOooRd%!2oE{yFx;vp+ew|0Pkj#cL`;iX=D)JTD58Ac?PGH$7)Wk;WV5j#k}IAgWq3 zljflhce0EFbt1=r`4rn#BC;m9r7p#vW7G*+#QeEe(!W7&&)xD|`8w<;t5oG6<3Lnb zW&R7n9;!g2UNH%eFL1Z1_b<6R0lMw?8}kNtAa2g_rg$+s(%1M_`rms?co~pMHo{JX zoR;{n3Tha@@+D|mlcYz_fBS!$*TwU&($PTb^?GP(vD5X8=Rh%6IC{ii_rvil7Dd1I zV<_i!ACn^9hrQN)ee04oKZ;e1&TD8{hc`rD(+5s&!13QtuL^LzfmV{KSHmqvkR#!| z{ML#UiN84DIZd(&@19@$lpr$(2M<3V{Z4QNJyESD4UgW1bY*j44&0w|;cz3)Tb%^v zKCy4w-kY#MxIJ*XdjTT(Z_uBtqCzbs;WCY*{D_CG-83bM6PfrpNmOC}iO%zDzoc8T zftFLRLz{I8o}RKk{{-hS{mb7E6Ga?AQ>WH<>*LMvvj~5&ER4XR?#SN|eg>597pBqk zjvLYM)Y242?m`^VMVaScR^TtCpa1t}He_F)yj-%l0OF+EE{VH%f4Wwq+@HaZ!bPig z&Hv>?d5N3;)0lFYzHY~MTd^0ecMRl-;5oqEI^$q!oRcbMtdJ_m5=tzHK5XMWgZ*T(5hKcZH?aKo-2m8JT(%)13_o z(3jG$VMiT2L4-%=hv6nMdSoDbBu!-rdws}$yAh6qq1aDNTaOWlQaAm!t`h}%Qf>Z$ z(-YuSYx#sks~SxAEXUTxaUN79oj|883^In@*?nA2qX)WPLG^B2NOG+9#P{&ua6X{? zLa$*fM7{o!zh~YDf%ZLm6qs|HWkCY^227}ag!A;TH8J#tV#{|p%?bMB>F#B7#DQvT zV@fjj67*JFjV`=(32w_H1_mXsD+R@#Vumwbx`o|PI?aJ z^P6?0Id_1xr_4m-0X^DM@wNST+Z_he)%dH&@x8FVmMz3 z0r@eGx4&$cVIbsCH<&%}#y-844Mjw8}c;{=wg@+#5^a@x9<{=p$CtXdZ|f zWE$X($o$@o7ntW~?P%%3H3wuS4fTt&{Aj@K<+UBl{3~Yti4$|_og5hAIM={K zWp1*(q7J?*M(L67CxWY}PWd;!8o0vr@WfL6BG|m5*u2&win1R*c31jNit;iT3a>w1 z1=&f)ytqzDpe50I(Q#y-G68w07N;t&9oE-r?pFdKo#y5fR&$lyf zJY?vY!a%HXDL%LGDXu)|nS^62FQUF2#eAV(qNVq6F8HpA+wlX#1(>IlZEwZjsb@Py z{IhlIp!d{U$Tpo6WlV-#bGtx^syE1wSXzGo;z`zT3=HE?|C7>q^i38N8%4bjxX6rH zQkPGav#_JcQic?yu?9mbdl$V&Mq$P5bf9czCzvz12O37vY&&WHmP3|LfFu7m_job zsUswmzD`v3&IHng^GR8b2~hD{xWrYw9m3dojRkp&;gel8ouJeq)Z4s%Uvj1#_Uu~! zRm|p1aKyoeKpK zTf^$+F)*l~TKc7y5#6|1b$uLrAzf!yj(9s@?g>|R_{P=&2ryryrg7hf$Nv(gta8}U zCJFIR`6oEPH9|zrC*}r4u@@CDW3CUc_zyShF0N*qK=$f@U+7V~@?TFZpWjd{L+<1Zz4e zU4ESe1{#_(ze#GKW{#_<*1jH2cu^BNonuFo{a=ui-4QhF6CFS(DTwwI0(DYvuR>zL zhFFg)Eka#p-Wov%@OiSLu%|5+-fR@dcwePJ8H4QZj&F}5EuU%UAs1G}8o?2G;b}Dt z>k(9?u@fU|OMic}3JJ6{^Ix{-Eu0VOmB}OUn}RJqC0CMQZuFo{@j+lRDRR6nsxAJ2 z0$p`dw|6)ghU3cm6q>w0q4oA$n#0*4crTw-%1T%an#MJ!uR48$K(4o6N!T`Eg(Udf zb$u#y?DUTwGDdF1chp(vp<5bQr3a5y;CT%1e`d3i&neM!x*)R;6Y9_}X8)dFxEZEQ zX6M}VDNy#Uiusw}tGK_SUi*ug9`Vq;SC_;7GMbc*5%M5!^j?-ov$@#I=ctV+y{T?Ug6xLW&pprIXCJN7&x_aBnJk)5&O2qAgCT?k{^u2 zp0=Q%vPUdc(4^*Y)lEM^bNNRgas@>nALgyl@lyzk|6rl)8CA!u>3HF$!Y;eHR^;v)vSR@ z1$j?>9rgjT*SzT;pM;dM5zU^9xW6uwNVcwma}zy$7O$LeZ|?{1iA!uWD4)H3ZKn_S znj6Qa{_rkC@l^IY8`}QC2L7@X(*>p`H{X)YpvIpqzt0 zJf3W-^cmQH)7+nwl>{y?0!@EmFSw-?fzpX73s z7Xbq|M+b?gEOcww9FfNSR3^FNi>aA2aOXv3p^yzRVx>2ba>RX^=e~@+{y1k;K5tN< z^4b6{=KNk-Drtx41|#1U`2(m`+<*PiZ4x-;+8s+k501VTK&RGLVxDd?ppI!T)4VPbbZy39D8&l<{y1AmkF*{D!#!se<>C@Z zxnxl@`X4WP^z~WSQQASs(&rstYZ-@6A8cOU{m}(?wcp)%@QxfIqHn_8oeXHq=)O$L zD@Jthar8!)$UOFK-W#buJ`R?f=9*;Q0%&5f(_GbJ3$Aflh^*jVAo_Bhx^;CK-1<&v zl#CN1Q(*_v!KvSnO16sLVgp@?AET2v=0T;A*DfSY^+G09-PCp7I=H%V9ttyeptS1f zN@pS|vaoZLw@~kZ2a%p~85c)Ey1!sjG+P3ZbxRi3&TfOePf|CY4^&%yMg|50?_;at9L9Jco!k-fLbs0i0xB9$LWnMouiLefx@RfJ?D zL`G(XkPv0d&fa_Pz4v>+e{~!kM}Nfg{XX}7U7yc+&XMdxYBFxZV=wrnC%XR*!wTTP zn4^qY^~=BlQxAy3bKz9pCVK)E=1Q~HJ@&hK3VmrP`AJx&2Q7@gZ^hLZkgKSKv7QJO z?x`3#8$0o%50=^WqHk}*eY&D*L40rI>357dLDmTxGQ4-Ro-m+?owLtxmx`jK*#W*w ze6&cJ>OVX`mU6@5AEaJmOi~B=Aq9~$Z=(lOu#b= z@h7i#XwYTDb+?C;Nx-~7yiZ-%G43iAVnHpHpax?=n=|%mqg)1gAC|5Eb7d1 zAuObn?^hicy3;mv!5{$h)$Y6}_(qfuvSKR2>mtOcy7bCi_{Tx)jdkVUFK0q*g8w-e zZ8D%MnFsWWB^BVGQuu_X4x-_$HK1{8mRljY?2Iw;L=)rmN614(Ju zM|+|}Fyy>&o?692m1RiDTAFVcuo*34?PPaC0via1|9T9#?#uTTz>Kzi}-JrXo& zIC&%fg$%OUI8IDpM}+<>ko+ECM~b2!bcpKoFe8=*$(5?(dEh~qH0|jw3Jtwu${|dc zJI1RmG)z|u-Rm5FI&|#_ z_INS*EZYu8U`|qJ0B_ka=H}?Oic67T&d`~Mi-fD&@GfoM*cVT<`}BwnPR+2Rw%ch> zh$*R1@bW^tM#LnDCglBU8=8i%EJB$fdD!=4Ct>e3HVNGUZ7+Jq=3s|=#kYKO3i`&$ znO@?21Pk9bbxq4tpn4@sw#P_{>McEMTLq|*LzdgG9Q-+vQmEG)`AmW5BS-gsSQ8;- z^B`l7#2VN?V?qA!!VNIb*xLRQWCK~D2SS3JrC^X^-(Tsx39|Iuqh@b^g8+r4ddZ!W z2;x4Or=;_v!f(-)JKlLXhb69jhM*bucTXk}3AMwNUd+jzAwu*{D#t-0H4~nsD3z61 zF2lLOdd+7w^oalK(^^lDCSbar>K(jY3h!IrtI@2CL8xf~7q^ilN)X9+DSn7Ol4s|~ z%_s1C!e1iQdY%Qztw_tVedPr*pU!)7yrjsSWk}E1XbCK7owc9ara`e)@2sj_E{vx- zJUUG~4IepGHqx+X{?0I$axR{iT(>Wes`?TN*6BY_BneEwQ6s6EWSRtUZ1kFERI7q( z=O)f5ulK{q`27pBBP7UwQ*bW$K`(^Oa}CDM<37=wKW`?*wqSmvW6mUm3LWlw+mKWY zLC8jWytVlbRGe2m^moJge?6&6UXxMCXlZwAnPEbwNS9)ZQ&izn%{l!uLcQ?SMNhNl z(g@sQG|awNpbvIosXV$d&7g12!K6+>gGx`JuDRA;(0li@+HOe<-8{U}e={o{j3~^q zt?+ZldsN1qLKx3k7qp3eTGp_aG-~_oQ9^WkeoK1hE;n4|ks=ScI0>Fw1JeoiyO2-$ zSoiF!7D$eXdRaF>g|?nq4VE%Bf|5ikUAkf^oUiK>dXmrqPO4s?D|1(&u%dLvkxKw| zm+^b`Sc{<3e>m>gxig^?>mS|}lky{?nAo?f_*@jFa1c) z1VTkp^Hnk9Iq;CEbi*qo#N6t~$(Vrqrjk)hYc~!-rP3^SkDnZQr}(7t8eu=G->-3g zy-kqv5@GtPm=0y^DIpi25`uW^n{KLOZh}muUSPKny7i8|`!1gQ(QTiRlqTjtpWbTn z3;ZX7;wN2Wg`>kk_N~Jyon{8~-Bav_&HZKQ+Yco#4LpSe-3UVk{~SZi%g;NOSeC); zQmEvq;W!ZLoVXwL2>0gl<$XU7P@vQG66#^q_*~rDLMQfW6dvD}KBct9kE$)2H61Gn zkj%DC%CHPAI(Ev7qALyO+)WaX{O&J-;Eqer{rhkpD9-Nqt;jU6N$3fDGfjzp{L}K< zN@qiLo>laJ^8-PI=H>9RUn9srGT~s$(R$m>C1m#Chh3-5Rn}_BC+a?|i!TWIwbu zzKqt#d6%t?uHPhA!a#bSDx(;~b_2P|4+%yhL0TfBs9?hY48GPp6EBMZvo&WfV~ucd zb!S+8aUA>d&e>*mXHlb^h-)%++tjG4$l!qBL<{Vjt@#9I{(-BKCX+71I4{OrYk{aR zk5e{9Sg7L@+^G=t8BX;BB~oWY6O}c1{ZL<*Wz+#`_jha-jqCBA?w@siAOpJbb$)av zhYqp4F1_?Gi~&iPP>ip-HbUlfFri-87Z~|fH%`CL2~l3V4aYH`EZe1|5Wep~`eUzJ z{oO5~3Gtu^Qe1+6CfG&U|cgr!8NA?s9()IJ%W5dBB8YAuMp0QR&-taIyD1}6zd7aCPYYTe8y64K^)z= zGMr|-Fb|IZIsH<@&&Lw&o4r!pyB8?BYn{_@0S?!vyvY++;#XQBl*L-b<2cqwQOxuhHwPCLI@yB+TZ3)qMvTL3v zw;;-r`7YRWIR~mvFsreh?}wb^Y2sWnd1O$*bZzWWFNF5zPrXU{2V4dVmYE}T=rDxU z&Mzkw{M%@+P%jQa$y!;_+6`VrGxv7$clsa@-!%+M!S^d3Epa94m_FQ#8YX(d-44(9 zI6|HAeRuq-=Bu%daUiOcci)o3eD}lkJo9WZ%$=e3?o-+Ybx-0olNmN-uh37bW&IEI z*uI+c-rIsVvX^h#x@f`8S;_?>+D&+w$VcA$m=ZOKmHv4jfqTJ>udEdD=ja}j`*s)3 z^*mDOCoGH;ML&gaOJ&-VqKe4r&rW{Hz#A5G7W`%)BR{s)>}eBxes!eeFB*U-1r~lC z_Z+Bya3U%R@5@rG7c&3m`~b&K(hE=3XThf8h#PIg7R)v689(q_0gvSGr;FY&p|zx1 zGedbEBy-Dd-$#E8+>a*ImhdG)TvPZfOUyO@sQE2o^8*tS=|A{u;O+vWY&Y^6@cH}1 z+KDS(=ka|(_r*Zw70g>Y^UOJDZUjV%t>R|tkD^=q-O&k!Jz&saIc|KM7@-|ec^XE{ z0lHcufA(7oh?r%lez77#nORFE%w?Fbd>Fjy+SvxyJ+$pigH6!V6CRlNJPouS&}&CX>_jgzXF|)-LQY9l<1w$GBB}jJYXEhy^;yh zrHa{2cyyeE-`6=BEK);x3^Dhs_dBr*`^ZxWlmF7~k;;ayN3dA3vQr_2AgR&nx&;_0 znSR%ObOTbt1Ftu`EQ3goE-mx$5$s8qilx;*f)>=9Rxi*V!UL*;muZzWNWPab_kr0E z^gQY4lvJAqUGn+a?I#tWk)RzM{8=2ixl(-dzMBjusp13Lj5opCrCgfqSveS`6c0;} zk)o#S>1GtTH!Odp)w6f}0rVwzW*xiU1-|Thw5wK($mH-|&WT-8wDk06@rEqss(nwb z?LXZNz5mu~{OT*sE;&wnY1$o-zQ~1#@n%= zxAeEloxVgtC>zT&U0oKmxY_5Dxi*lmOe25F$HuxyeRh0 zW4L(5&RZ&h1V7YUbk$5xU$xXSYEGDw-??WiJXTNXAWJrqP)IePGaiDS&x2%s<~+eB{ObuYCo}GTaaO z^u<}m?Ch!&0ft0-~2fwQFBDWCscO2MT#TMA}_f{$mI*ht1(11Pao5ai- ze}7@$s)s+CbR7r%tNdxp_9Gyfl3N?u9|1Z~L_Wspi=ZqgM~nYEcJ;Ssj!NQe5qXr!+&|k_W0*}f7Pt`r~L}B zUp(hZZ!M0xHfWkXpG<<>A5J~7+k_}og4I(V^TDXe=8X!+(;@9I)moD)7b3k_^7iC0 zB9!B+;nMhv8M#_|_6`j)qlv`uj-lXXxR|&&l}${5`lr0tk{pGRxp=nA`p_gC-%}=b zzf6H%07~(^ zL0ex?4F?1MS2OuBr!SqWlyq?i-={5>x$caE)>r-~uH-w=s&rpoec}`Bf1qpUC2fUg zAAbt^;`WI$8$m#%#}MQZe-v*uV06eFdMlo|5O?b$U|sZh{niK1o3LLa%2rl|13k)FBe-lygYGuAr_X&LL=h{o zb1q3jXg0<4%r)R% zCcvAAR!Ml72nkaZF*}LTp!Lr#Baxryf%3B0NrhE*H1=uMxJP?dZNRYk?Z=LzsGq$f zcTyn;goAr-Higc@Iq#aRR_@C0ZQnDy*4z9IwmOSdDL~Shvc}E#qVd+-a*O`;}oMULJuN_hf z0xZR2N8DJ@kAn(M^@KMNbVU3@)}A1;J|}7cE z#9p>|3vj#LW0fs#f(VVN>L7+$82!V_C11D;-f`>mv8fZsn!ZILI}yMX7q)j}vsA*g4FF1hO-K<2$%@81&@ zc>noGw3mGhOefyxOHp7C_UxbY^9@S?-S4jI;`7Tv*egmhabgrc)+91UR1a}gY0Zh1 zwIFMA`mj33Wk2Hz(U2aQq(aFh6=qV2#M+&&o?ETqbg&bf-2`Qlz(&`a6N z)KX*Mlz%}-mcInTIxG@{yrnRZFhTa&`Ei)ybNkh}F$(6f?`FDfy5KXx-q-GNM#R~Y za{2I^0OC6>5}GrNeGuVQovCUQP~j%|I`KChTA7NpVzwOywl9~xHt?SL)k%Tq$>0t+ zqWdPnK>YxuA`{iC@SNJqZ@c`VC?$F*QE;3@vJIa4JnPSrT!DnxlR2)6Uw}P?`(vB| zEBc%Em;D>==?$J#$)%ES1Ob9GBmbRh0OdJu=~V4eXqL{IHE*5-XToUGjqEY73tih` zygCY(-8Cje@qX-Yi&cV085#OF@`7$3dwi3wUZWkjJqly*F6)vSC&S|}6HkY47y<3T zUkQ=ZD-gc4Hk#8q4AC~Xe1+2S_uHw63d6iIU^**jLTZ5LI%izd?#E7pVt1~QuEP-a zVWwW$=Wl`YHC5C4Cz(*GrHuhM&TqHv9<$_-!h6N%%a47lzk<`{u-BJ5NKlNlf|wr4 zh5y35&hJOw)wE+fkO{`uuzf>%fcMSG+MS+t7XWx z1YSWM0^~gGeYDSq5_O`*mI?gc+vvaR$;!uqdWx^>k#y$6s=UneE>%L5aN)fy4F??} zPCR?!^o14Jc{$CMiu=+FMqdaq%?jsMOf<~01`FoVeFRJ(DXO2~HP&d>2wEq(#=M5TcLy#|wJ!zw@J@|KY+Tj*h!J=28hAMf0~v z8uRgf(o#uiSIUhBUGiibtJTfJ9A~=%XBkT5R6KOJqV57srMn!idU!8tLhqA|^9sT; zs-oYqull7!Grynp6eM1a{W_$u1@U$-WJ_h)Tlh=;-e>%)TsY+Y|IJ;_6MsSCf504zVzTv8o6WGV-%N8HhWk{+V7#aILs$W>f*!wEg04d=xZG5yyFa9{9xH9 zoYw(*-}|U7lGso%pUs-Wr0z|kYlGdr|7FmzidR#K~mU_FORM2LFG@-w%0V~IX(~xevSLmfp#yKqs|q8zYY70A>LCG zhCEmA^e+H2mm^^2|2%_^xG2lU z!0~%OUcC<-f#MN1x#jFXFe!CRh?Wlbh4s=G@6}d=BYi}^vE3N7w_Ix{#W}y|@Mk)Y zUoL}-kH-APV~mKKO5yw85>li|FY%P;<~Z1YKIYk!iTxlg50(@Yu($aB9pZjGm-?>$ z@o)XZ11J-XzpgWb^X~*&rr|hWJehZI_nSdIoC`DqxoECL)=u25utbYVmoTJET|pYNXHsJWEd+Lk}Y$ z?FP$!(Gy-2teBkXRf2i4vmUdJR6%g}q}?0aJM-}49KD3uw|dNJKmYPlC!P;WO*+j^qrl~#t?;A7^`c({=4+>nl{_&dL*u0%o=|^nhdw)7qvNl4!SZ$D z^#RP`ZevnEJkBkGc2(vQ)Kw-hZ{4lEK9~qei<^?Wgr0_;#KOUD?;iLxncMUuq!CtU zB&?6|5TStFx_ix!sL`Q#d6y*Z8dRS$8jN|q2-1g#OWC`8XsnNO_ltQe{9z(s-`!54syz`zu-n$!kGUjjs{O60m^&eRgw>2zM;%N>9)2P}PK~saF4$Kb z6+s2PMaLZ}cv0C;1>L?`HzthWMSs@e_ z)L-l-f$uMwJ1lHr*o)OER_}P44!v;M>JuaS3}Pe8@2>__KoyZTxBTcb=u8*YHhl^L z-;jWcPbVedI_Pr@$v7;Cs6cOnz23}#rJBpHzY^?%7zUt_>AqSn9Or2)2%`)$@!V!t-M zeC!;~tFz7faNI1M0^QR$$2~CjB)fO={M%3wbkb<~!OL#6rFxQz13J#nP z%Ksep?|ubgtUvl7O zK$L`@wsi)K=una4C(Y(xpg#Bcp5Hh(y4F^-7_hnpd;#3D$G;Xqu*;i|YJ~m{Wr6a(&>t8|j`qK)SO-gndFn56svv1@U|M`;51hw2xEqAU(AS@Nr5cak7GzS@S4*?l8a4FHVH+p$9YuAp+=8q+_IdYc-Hi zXWi0BbO9w%3I2H74EP}ZhqU1M9&m|xepa3$M!x9;jJF3FkYN1f)H@6$NZgr5Lv#Z3 z*S{XsY;6w*8;4_Ri)S05>cO$U*YNk2sM~hz-6? zgVPdcz7^h=ygSz~xIWH~SSv2q%bZvR7O|Oe0^e?U6ls1s?PfWQiY;04T*djji*=C( zzR7SdFO!*Davc`VzL%3vrAOB?h0Y|*4ZxkSN25Dt`2Q3B+PY{U6S5b+HU0d404%|w zsnNy$@P=}U>JQ&6$mE%N{VX|vq6I$wz?6B&;P^pt^%3p`Xb~Ob!kn|elj(AoFu(57 zinXbtN-VzLpB26Sy9G!cY>In6FF~eFx|HVQ80e^WwY5Av1@3oTPDLiC0*CYSRLd{i zD2wX@!I`KFP`l8+DnUt&3{KIc#Ktfp#f&xzQ(nyJtBZd6Ycv+xJEI07@qY6=-KOu$ zl}$CLfz6u}!nnUCdrrH%zYOdgk29>+jDUw{T;lK8eb6>&_U*kUh%S&dVs@YY$wsXDHu%aR<@GA}5C{N70+b>V@C+ zcn_jByGR&Bfi$}V56;>ofoqj2XY4k*pLo_y|W$PHtAQvfZ^WyllCRBpr8Dd zdUXSHeWw>s{~7}S`N92vIM4l|KKgF$0t>43q;uuf-hto@X2Bcw&j8hnSxK1kp|FOp zJ%42!p#Sa2o^NjjaFLE&87|I*>jGb`+I6|nt7Dq?RCcF9WM<{oKfNEoY0;DP;(9jx zAxo^PWuZoMVlVu?JKFJc0%v#6?txFJ;?(CELG(R-?p=*7-m_VbruceP!1DlC?!*(! zNcD4gu+B9K^mST@hK4B}uE`%el7`P)^MSkj*_V0It@TIqS8KSCR-j07g?$^ya|k${ z-dh5#vUw-Egk%V&P_)01YzTQ)U%rjL?Skpz2YPDQ&(t7KX5HJo53BC=8R!4yfQpVF zwevOy3i`Eq5b-`3UiG_O4#o3WI=M6DFHVlYwAi}X#dsDJ{Wyl>aDX1qi{xx9*%(mY z{NP^~sozlX^W1%=2kwy2&^noTu@vXE{7$X>-GJ|MBs}jvguzCqzNE;VSP(Kwol(4j zy~e_MAFVU6kBcXjw&RsEJnxg3^mw}nyed!EpPrupeKyJK(lOIu?PxDLrOklOCm4NW zwxL0KrU9chYAX;L6J<=*^b35y$jfZXu7J~fPw8tDE+G2w$f*yFHXvncIWy(41DkfD zIV|$CAf%$mpBgp`7Ke4k=Py#C`IMI&ois-gcU;)mFv%oHDDRg&(Kw0-@)YVnUGRtR z1Wy+d)<}`Dr(P8OrW~4kD|Fqyy9Mr2IM&x*+kg{P%4c5Ud5L0({mlEB2?!nY4eoH7 zg5yu8Ui-`AxhR48irDq1JZMlOYtIqdlpSc7lpT5~!Hb>{zcjU>TmwE) zzU%e(TA|^9*1-Mh4g|6l_bfUyBRvIf27kqIc%$$t;V&T^#KO+dXFmYw;b5*h_Jy&Qi+FRi{!;>GsGN!?5`5#}}>n+fj=L$1Wu7>=(*B^bAK7ta49NsI} zPs5{AGHV`~Gd87_<lx1j7OX;*?MkWZ&vf;~-EAk__e!ymeO(2} zquj*Ea~EDoDL7?l4}dQ}!HMaDMIg+vxXRNljuNX)j2WL`URJ1m)HS0Xs5PkQp1nna z^55|3znT6Gr)few1%0N$P$`?JZYD!*Q?~z;ivu4D4gX%BsYimOBDxqC^GJ}IX7`ya z0-T?@lbLbGpAbLK>1%7uf@qd2?1H@m&Ue2l6HE~mKuK%=)z)2|fX0DovS!y-_^;SB zqP3L)T`f!&(J>nUvG7kr({a7f7$?6Gr&$8D0@|AV8qM%7dCIndMHub9)$O`ZOow!u zUOr`NXG1=!>78MNe5jpb&pP4H4xIlD3vu!%5Q9fzAb}MP^6B-WWPT`t3@)+BX}7uq zanu2O5f$z`Ma&EAMs-5L#$PT$t~n5?o#>w2pMw8_UkyI;!koCL`y{H<&Auz< z95&5sMJtMx!|8K@ob|-Ez+nH_;q)EsQ9h$w)||qG_N7?}&0jTxpR!|!#`6;Jq$Yb3 z#6Ju+4U=NUkKe;8z1SPg1QNvTUQ^b_mJV}OEBE`$$xz5t^R=frH6Y}1pr3k{8I`2g z|Muq|h1=E!gxj$#AU7NEA^`W5lS}D!?{{HN&T}K+)FeT`o|)LQ-2sX0+DA{7zJPDn z@`>^++CevOL3Th+61gSm$o=>)9}0sCe%;W;e)aoWMc41|Lc|q6I{MmSkaM#V^CBQZ z6_hYQG4ucizIa|K32lMUq+%5r)CTFY=S51dCjvXVvowOakg*SUdj7*XtIAL7QC@@- zU}VRav%8)M=WjU{co{W8V!yxhN+2KZHxzldVh(Z7UWVwupFwcLGN0KJ=Ton}=vs9? zUXFWsd3vv!+hJH4#4X-rKu?snF7?e7y#LcLQ8i8kYuWmhcKHR+3Y%-XJdp+Lr{WG` z1rH!>YUcEX$ye|@CwWRMeHnBkN}VKf;^9c~CzL_41HRd&EZtd{zt1oK%T44dT*>Oc zbmj8~T-JYm+*-a9wyv^w3%uWi2YK9Ea+|#J9Kidph_7?08cNvin zmH6Oz7v|Mzo(_hj0*Gp(@bMFM1Ra{|%`>-2QBs0ZK*on0hG!U;i@rs4DWXe%c1#iw6H}wlrPE-=JqroF*nqKVBgTaLtY9C%EL*>ul zRK>1pa3Wq0OgoNyBbRGWPo-CZfD?BaC+<03cG9m6p=LpJ2FEB#YURmR@X>vU{V?7s=2#GBp*Q@H;n65Xx8A0o_4A@^A`N4#pn@^ z^Z$J#i82n9i*V;j!*he|Nif~?xaF!yjhK5*>x9OP!jJ6~HZ@I3^tEI4@^1QZB;!mw zKe~x?hZz(z4Mv*~rCc^kf_wN9u1B8hUMED(C1~3tdmdtEPtvJi@17~&5~-*BD3IM+ zi)qDkI%PV+x;uK4@W_nzXwYgF%!Q66pWGVI2#gZzakB6-Q1homz)@Nzdgtp>9a(zh?Nm zWD-QK`QOZ?+X1cD3}OB_@1xRo^0EqrAj%Q#hR2mXu>3bBd}k;DI!lWyUA;Jw)csxa zjpr1I`-Mc%DjOpbh+!eU=j{MJ!V#kUHr&X%<@!Mi{)PmAQ!u)vy?Y6pW=C(P8eGad@tijk6kA~q>j|`8<>Zz z(<~=R__YZ(^HAMy>3^{Oz*ByjXbJ8}$c_Da77UM@PX$`y98EZ-aaP5xB{&tz+h^7? z2jr#9Y2wnGaO4N=#poNk!0qDjKtG=VWw;2Mq(%Az!Kd44_XOJEQ@-=HYWzLbCOVy@ zX^{+`jmllgcX?2Ua=N2oL<{_RDE)3?A`@OKge@~-|11~z(G6A#d>*S6)psx>Mn3*+ zz7PM2pp^+K7{L7P5|-vqTW%!i-i+VkW42z{@?nr!IjRot`V{Rb1*uV46@PVB2jxe%Ko-tKryX5~7ZYXQj|lAn zJf3a-=T`tcbaVcB-o$9rEHy7`stZ&WH6v*-A5;75jeSXc&#$uOQnziH1uev_FjLq9 zkvgw#Hs*eV#u9FN8xibBrE8fkI#UZSI?tQUy!%0_Jlx}YmIBHND>ZFj&W4L#GqjO4 zMc@*7iST?Y8}gK57MRt+oUl@Z^uohs;7@yR^KAn2&X{);1`#Dv>CzO|KV(BMrEYwA z_K^%-k^5e1(=`Rov9rz}@jNQVew;^Tj{wPXG+izX+=ZmaGWv_v_&lrn<-f>#70`I6 zm&|r;1N;deydAV(167wd=N+V}P{tVoBAPi8bRuuL{ky?3kO!nJiZKu(2dBQ>CywXf z8~4$3hkr5ugG_nSF-T#430_rV1WJ2sqoQXY#0%)Xnkn{$gZ(jA0 zJ8_y8^LW^92mgdjSS*rwIGyR{S7DFPR%PNN37S(>te41RLElFsMrlFEgOZ>HTg!@Apvl@WX7LX*ay+@$-t`6+jnQRxihv&0wSpOkFmd)wj(sT z%iv7`HHxorD*X5EFMP_e`LNlV2{yij@p-3P!Bi|g-c}RO$K5#lvdnOP@SBLQvT-Ab zlQhKr-l=eX8HGtxj{H4?E|8({5D+WnMbtAMOCldx z(Ctd6Z>1D`XhG0KkjxzCX`RM58m#tV=77N>N1hdFK1#87h~I-NOKYAfYbzzUAg*w4-#&xD?RKLK$Cls(#j`SA@QERTDd+A zDrYVU$V>PLM5&)*UmH!qo1ni+TJ)Hcvr){Rl1PM}o=Nrk&y5Z-vP>!%MG7Hl9MCMj z&<8~s*;xV#tzbAP%jmGx3rrcNx8J_zK_4`h)px~)K;i?N%>Bj#pt{i~C1~7&J(-E| zDyo!d&-APePtzWJJe#(?`hFEuZZ^;*tm1iDLWpHpODRbD{ua))i4d-sVVU`y4L!BzeBReN44Gwlx_*>nu;`re`x-ayM+Gfe8unmbiyV2W%B@l8 z(vXt+xbzZkW-i@lDz1h4AIS9w-ovxS3EI#peS%}@dC5(0*T8{lc#ANt3{03g{p(mL zP`iU{7cFB0tTMS)?PFj3b-h0fdd6j-`>Ex=iwpshTokQI%D~=Vrzv5sOzgK%p_xzq zgTI$5o~4o&Fdz-lFbiTGoYzrkocx?jj&6)4tdP~Wg6-Oh5a$Ix6g5ym@*yJ|EK}HC z#InnyV8ZsvmFw*gQeu^mdL8#$7FER7*|tFPyGE$Fc?)C`n}l^XQz4Qiv)gK%qhNE6 zHqGw37?L&O@+J4lfziO+VMQ`>)Y$WbJskIx4)!wXrM$_JaP?Z1yFoM1Y>FjNO7265 zP5t^S%*Ajpnf{@v9tEVdg36aA=AaH`sTbN*;ytf~kc;95*oc?YA|uTu#dVI~UE5?q%fje#ZU3If9YeOXSPAM}6M! zF6lDR6FN0)^^;;xTZmiO^GX=*ImR;8_5rSXEr0Wu*@pOqobQx$j7Tv1^f`-k%-{Xb ze17j87gC{J*&+>m0sa2VpVTYye9&Qm`sa^9Sl&@#@A8lbO@(*V?v%q|u#`eeQ1A!d z-^rKtkmSetf-4KZEGQ6M^7YV?T!jrU_6Wav7f}7-rj|0siKcI5{ocJziL_2ttt{cb zPE{jm-_xKp5a^qHS|3G(4yT$fXyd=%9eWaPs#ycY`C6KFg}(4}a$l)hg$8M{oK_K} z*?~W`)KA4o(_x->*z}@ACI~vWiArJ4=;PfC3YT}%NVewuVN3@%dXUDqtAFPlu%%Vg z{{P-XDLDF?Jb4es8L4(srt!He+5W^yzERL%y~XT(j|%ROrpuTX+uNsy# z{jZCXb0OU$$LY7l7oo36aF0@P5q^3QR}wanBY(SRR}2(KASHpz>8(Wt@Dwi456F)J zygi?Ka(Nug%ikVpYaax?vsuyVH+fOB#@7ZV3+yGf&h`(>6+j1kSE9y_ea3UfN@1P4 zMR-vqAHE<)hVC!>HUCH*0T&{xeD#nd7;%?%_kObp8IF2<`#3lIJ?6~o1k4+Av5vEQ zkWvg4Pg{E=Lzs~p-|MY7`za896EsCywn zFmNgQ>SZ(v#1lIw)fo?f<|RkI^v@;CU=WkT79ae9+>CqSj3IRpRGS`{sFwu4?uXJw zj}L>g*3Yt@O&^$T!S zhLdDIirE7muhOV=%-tMh+KUaf3B}w=aQDLJYjzdQ-MytHkob04Zn9(yo<7{?ySvr` zS1rY)$AnnXT)ETJlDKKmXVl;)#JRcSmX?$Psms{6oV7^0D6HgeC z=wzEqTn7${o8!OQYJfuWzv+NrdbB{Nu3<$-gR4QDG;wOnu({ zP5l0N?9JS2QmhrLSj)yI;oDA2$@Z+hAm&g*XnEDuNX;P;e8f)EbnE}9uz z>~rLSk$y(nQGEaVJM-4_%5MTx)7H-+cb^C`o4t8BaJUDop~9Pe&eNb>MPqKou>dmP zo|*Jwk5=k#nE-3j9*FsMKb7A+ik3NQa{G>~0CC01t*SULh*mkN$7@1^mT2tD^!0xO z&-UOCJ!y6LDNXR!{U;?-W(~1k49EWZA0gv@nB(bvE4hX4#29qT{AW-5p$Bq!gKJ4D z4`JvLN&ThFei#gurH;ovq6?N~e+gAFmm^^QX)Vbx%!yue^pjbFGeJKwriKZf_R}_3 zhztgQ-=81cY(!Bz;mG;kfaAzS^*^4W^l6Yx99(U>Pk?T;F5k$g-vByGiY?)$4G5B_ zY5T8)A2|k;9J$^f39GJiEP=m+z$LjqEq3%DWI6b?Dc!Yz5yWDirOJf;Fxk1Y zp|>Jk-plRYP%TLRbD3}(xUx)#{$$O;1vZ=fm6#q7s3<(;hx>`y-!zHBDu=PZlH+2> zVh8l{3cQ@u;YV@1R?kw-_JTw6{JG-O$xw387c7~$2KR>-8fU~vkb(F$V_znIG*Va+ zE4Y#a0d@2?2N|1SmeaZ&E>H^M!>4T;u3pC6kEXU0xihel-_j{8M1ro$urHM#!ZSr0}#_g609g3F0T1|2RperHJ=U>**cBgK89L-cUBw=ceY!`S zO6M1)m=K}-M`=P~dSr6@)q}%z>`e)*pU{2U4QqsF9>4mV0>E{?lm8DnQWT*QIP$C# zoLVA($BT@BHt$0APibnzpD)1PdQ9zDJo~4Dlho}SD)uQIeYrM$x4Clp0O9GV7 zoHg; z|50?_fmpt67`9jTmc1gBQB=rvCzWJ06%{EeL{{`mqD5t|vLkzD@9aIYH`#md&3Au) z`qT5i@AF*Gb)V;Pz{tD!BBq#S$e_3-^yf4Q3iVQCo$smwCK9%aLZ%9w*G?cV^~IhK zS{a2KzwvXi1r=n+V!y3G&zPql8~PCvB(_$S1$Q@6->r1df%lNi`OoLtAlrTLS2OmL zS1r%5m>$mn?!`LedVIaaoJ_uR6RiL*BLRm$5f3`i{lV*QdMl9gU&`g?NPv#5k$=wH zgYYus%BrMW6vI;Co?g1c6tpY}F4O2i;>5uqI*|EqcQ>LJeaUt1n9qA7)FDTR{w zz9INxVrkzO=m5e)oZqJwy1;@^(Q~b98*I0jG_N>)1EqK4GuP(5Ez7iCVK3E;adtKfP zQvcg(+prlT(x32X72G~2$h;P!M>;RV2FY>mDg}vYe_P*$4_-u)A@Mt~sJEpv@&xCb zS%%BSCP12SQS&o!p)5`M`?vA=rz?BJtEVpE zfSd*sUg+<_%8rMC*dGd1%Q@v^z%d2vdE%xPvCIh8yC(nB9f4eChqOOC-@%e1u1FVi z&?hb=*!t_NfKVZ;=X^yK)UOLI?kIIaXU9%hFn-=yte%i56kCGP7K=xBp7p@@9tYwR zN6LUg13mwHt`_7Ij@Fx&@u3&zPqsBdrhK?Ar;q#_%9( zrQ*?F7U7WfJK^TP%lq)Lb8PI}&7&ycW#rcmN?N24`-pY$81_rwrDe=g!2GGG3s0Ha zBjLVNRP;k7oL5d}ZkUp)fcMWlgXPA0;ChqiBb&#Iz+)Kjr3m-u6{wNKn zm1a3akDa~6nv(+tQdN<`rbH;TsMGP%=QhYwlTI6OTY|M9%Hek0XL4BejHnMAhR-p# z4;LfDz_;tKRNGz?xKTH-e!yPC$Ou=q_iUo*0UOElLY#B>Ym@M6tg0D%-wqf5Lvb*X zJa72%4gQ>oen)08V7|(+4`{HD7S*?eRmZY0qY6z1gAB?&ke3|$n3_=te;O zF_bD*sGkjI=xn*3FE7J6jxHaoX#%wKMArDGCMz;^+ln&5e7w`_Q95^*t6|(vVLc~{ z2)Xv}_Zb@$J{!b+$RY>b$bLRl_Q3hniP1$EQpl=vRU$&&64vYmcwfhJ^I5hw z=JS&&F!5aMWk8GUg7ed!6YcOiO^GG1S6J)O{&aZ{z=R|bP^Q6=Xpl6Qcb{-4nSLeE|CUWR4jr@ZNxc&~C68ZakRYe5dgas%rlu^p-0J$vM}@ zL~PvXwQgXe|91vt9xK`XY4k39Svp>L5qlT)qJ(4_%le@@+v{sk@(i5IF<7A~rbd&w zrgvjUm*9HvIn5USZMYcrlU|yj6=XF$CZh-9AOS8s499aL&EDNLL8U-Ae{FI|^Qa^e zdiIb!n+^MG@l!P1#l4@_nC6a{WQa8uN$uNCulLe4nPq+<`gWz5y@ z>X~z3f2$;prAHQht349-P>&v!sUEv$MTqm{Jti&cH*pV{fHi9}m=Q5tla%?8&5wAn zS~eAP(%x#gt{-Q^_wf!YlAwSFxXGe*hg=KqYc2JM)UC2XM0>>O#_1$T(-{)F%xCqKb};2vo4@;S6l%HYxUIhsB1z@A$!J~x=Dqc7 z39Vm{VCd*2-=9`5gC{r<1d@9!hkySA}P52y5Kr4x}9Onl0 z9wizm6t>8ID zEH$L@1Lj9I8V-7Az%BRibcV*E(npVP>SMooQHU{-eoMbBQZ;poI88bVGDZ`sSCwW! zI`q$<(sgnq_Se6&INbs!j$IJbs~rPg?K}NNjymwu>rG9iGcOuoE z&USMFXbL`5Rw*swZOULzR(p!C5bCg15N03VguS$ySPjep<3?J9lB_de&e|q6UgigU z(cuX`-NoR1qH=q{mkgcd3e7NPphcNG!G#{Jf$-=od^GYb1?i70f~CAt;4qTWry;Tp zHG?-?Rzr6nq*L#eVmTe6{HZEmXgY0i z$k79{D>3D<>!7Ts&grJn0K0iz2LTqf@GF|-%%)WxRCsB#rf_4gLc+7>i60qI(T8P; z{>KdH?oml4`C$Ir zPH`9WoQx=9lP^54=tGDepUy5##&dKU+x^j>fAIS%HOaHdBY{9(CpEAc7Xi)e5&z!d z{YQ|q%`G#PKG3oJbk5X&4$kCQ8i}wC!OOUFy}`%0krDe-5oWyiIx=l{`Ojh>402F# z^c*n)KlhVy?=df;T7u3LgD>I7&_lvumj&3Q@yg{U!+8@4(E}rMI;0f9x9eZ94X>Z} zz4yhu=1F^fDzz63=&A3CjZu+Z&~~HzB`LEABOgVC2*szMvFIsD(3^PhF(WxcK-38; zwX!+qj_@I6#rms#yn;xJ$g@`0eFWSEI}OwKS79rfE6~uD5z$LO3RZ951B%d-rad)Z zL69uZCz7cik`zQ+HX4W!SX_7|6pj6ZSA@5$sk7k_3W&R?Sy0-b9?{3k_*{46>aQEe zj-r^r>^>4&yNYu!qe`1r5xBN^RM97V%LQMxH6FO zTj1RU5OAFdk7UGts0U`vq|@X`|L7wM_&yHz=!0eGaIaJJ18G+_y#Vf!tvhn=XTzQn zt3VD_6?l5(7F{u|1~N{+><*6xSUE+xUSj?WepfNE^xAE}F~SEapNjSX{TpauJM|He z@gwiWpY$l(Dfl0&5k0zN7g0Fj$AYRk_l|P2j6zA9&Na_9LtwTl@Heunoq9wv~ZBI^nx z&(wTyI3Fs`$2HwDAQw%eDCWY*#AP?LT}aseN3+=<2wXUjZ$r= z;p7I?CnhNEbH#&ZdlTv7^LP&@@yhS)UqUny+rG?|&xyv{OHXcAr-0Ytc`p$&?3dk8 zH1J4w2d9v?`_C|UHF0Xy<5hSid|D?_Ae)X)j)%=asp5zX(vuH2*}Ae>MhOJlJC)A@p99Hgai&L}+F-*yGISutE6GvLx~TQwsO4>1r84= zjtMS;@?y$E1$-`g;a&6Vo8$c;cst0wh58HJ%uX@*f^$x1vwj#Ak`932-M7!%noA%{ zF5+NOXd2@8)hV^d7s2!Rmm@@KnEy|a$@(L?6`~`(c)#mVV6FwlR`uKl1b-#-erP(5 zJ*$ImM5&MAO2z1LLWc(UkPurzoZSxZZoH6ly~>Z4Oq)ug@co0PkUHGEUw38e~{$@^k?2y$nMi2 zDX)W{@~=DLOSRKc#a3n{bwesj3}4?y2{N$5{;WQ4C+d086$ohZ97s<83flcjR^j4; z$j`m|%1AQ4?qmuxr?A%{sr(tgEauEKNoJnJGFhOJj3X$(o~1O?OA@Oxm|L98rfGnG z_g61;NHQA6DrvRL{ufUwkDh1{r;}r@=tU2i#opsI$S*%GkKptyXbu{O2c8)Ri)zWU zG)}lbIN6w-bUUZgjmnY#7U*iY`%PxqXER=nPx&3MFV)m&l+|X$kb?-aogFkt& zJaus$b5mY6M{`PA!*4PzqWGq4@NG1l7&0e71mPm_m;94}=E>gYtL~dnF_}PqlZF_1 zAkBE1r2j5}tPrTH~%!h$0 z*mAN8dag!}ss?K;-SBmI=*OuM+KA6TjH1I0-1t#ToZH5)!+vnNW2x|;z!W^oS5)U! zl0pJBM+>bmS9v;DWa3mwCxp*bJhAp3gME=5)m)lTIFTElE5B8aIjO2wbsJWo@Wa72 zYbN$WJ@m{ny4MYYOqbPm#Bo13SPjg&2f)<}9+$fv(&yAD>+rf=i}F zRaBUhpF@`U_+cF}qDcBLY8E!|AZtX35Lo7aVs=`{xR9X^F9h zNw6cgD{}#IhB$ZHCOn?sLXG52RO(MM9)ORFM&rr^G3vInr8$i`AdEcx;)MZ>=(ez5 z>g6Un#Nux=6UZUZ*>J70hAvJM+kzx-YAQW_g_dR%bMp+6FK-eE^g#x@j~ z#NAQN%>phrZFRN7P562Ij>%000d!a1kFIZr2@xgSefa`a!!0o?hnf*8L@$$-Pg2B= zG`ehPWFN_(rCC+|#Gj%lQ8q3l^A{DW=V$)b+A{#`KMUjKjblO6?YU$@Ul$y{+r9S| zdnpy^TNBT&6QaMpv40)<2~b8fuk9zgO0ZB~S&_nCumDNY5Q5)K=*x3f-M&jqsNiRLeRv#A9zdu2FPn}O$II~B*xbw;$8)w=49|F(NBBc$qtKmYSO z>tFijA^x0&$Lx9ocxy*(7zZqaz8{75c|1>yR%U1p#=ZoJ-`#hJyoO+UZ)IR-c@=sK zUuTZhW6v$KHH)k6G^{Pn*e_*$g=Z=bZkv5IpztVsM^*kLdSI9Sa@Z#gRF@~aHZg~= zy=2tL7jsJ0-q9MFW){Nd_Gaqw4`pC_oAI)aPaL>yymnlw!kn*2)gShhThPeLs6hO& z4nCy(Ge~ZyL^)TDVJTRy(fj6tq37E_q30Pf4xA6-WUFAj0vxX zSsI(58?oEqe=++qkcc6>xPtXybDS?V6&4~}8301nm)6So`W9d0`w~=0h`w2|JFJK8 zgK+j};IgI&VhuUJ^2)doycxrEkN7Nt-u-KON3*eaJleMO+6pJ?%p+bBJo^*(N!mIW zS9amf4@09@*RfYbmw5Ynf-s`=^2m9BOC$kP9lv#Fs8P^;swO_e0T7@zNzL5xgNxsM z$wJj|-&j6}_5I@&m>yR6D2O>BG2FCw_ONH0J3_>+K#U26KC`;(nh*|b1o3|<2@ZiG zQX}DtO(aZg=4@nI^h2DONTa6xV@SAEInhvn`A;+P66=E-V59Jv`}$%P^fTpu%N?=< zc_L@ayG(81P94h?@{0jY6o-lLa?zqs7yfnU;yx=yK%F#a%?23s)a6Z?5+haRgv+$J zucEp@{jWC!d!DU+NSkCIz>$~5?G>AxC_b1+();)tydXIL%R+<|Rh8X5{+clZc1dl1 z{uHYR_bzXS$2|;)d5`62rotxphY!l!N+m)$!;b2#v@|HFAHy+!YJ*-1yOaHBHYC-= zj`0t5!lVGX#0hpn)TQS$R(K1~8zM*T?AbS=tW-;;e~1|c)esN0srBOh;>#0pzlD+7 zB3ZxYIKE!-DxrgED_|k^_29K|E10A@zL}?+1cehLLY72S=>Aho_EuYjYQo?TXtx7; zFIrwMeJ+7UUw!VQ$LF_417|IrsP|FG833W`rkG<@8uY?Bwh@eY1u{t0Xwc~S0D)hT3<$;1Qr!G>1btiJ zI{WyMAoeqvw5#BJ*mD9H2qj&C=+6a>v_Z)ruBp)SIPV3J6g^P*sLzW=&rHaDc-sTo z9A2(b>_bq^E8S9O%7_k5CJ;IruR=|&vdLFpQnb=3vr_6ugk)U!gok=YpyWz}^19U= zgx%5gb{?GoCwG;GD=B|r_RJ8W68ku$*1vhtqh~K0M)Hnva7Y~Wh5P#o<@CeSo@=Ql>OSUPsZn$ln%W8nR zC8`KsN_=HcMR7Veivban|Vt z5IjvANXbipm=r>MG$-)B=-$w44$P(T)M}F}#ywEYMm>{@MkR2hp@R89ZW(Osi6>9V za-fA5FFi}1^nm5ZcYlO<+d-Q6u1dxt5gJvwL`qPU4f-hl?iQ+t%4?}h41c+iPj8Cs zG3-;gFA-RH_6{AgGAJ|fl<5K$)idXv@O!=C$C@{k#7@Au$e5XmpNBk^YPWQ*yoV<0 z&4XX%%|O^0J?EIW0l5WX(dG{@Ph`JeeyxZCot+?o(G#S|F6}s+7~h6B#~BkQ#fi}L zNfsq@YC*)5O{4hT_5k?D$+VvzWWz(!D+7OUzNueFP|x#99aMgKEnlFrqC_n6sitkS z6UM>pwiXRJy1tT=tbREILVb9icNEbe4zEC4*`X%TL~%Na!Aq>PJOKJ0&Gp#FaREu`8%^`#360FTJ15;dcL@cXpu z>G4oO^oeA$sQOAT9Mg7V-LE(VpQ{e`Y9&pe)Z2H=@nQhz%4Rl4Mqq`>e~!!%K`Zbv z{`G~DEd^kyGY?p{or0uaPT^4`dl38}baS|#7|EXVxu=e~g*Van9s+Sv3S}#X=M?j&2Uz^Oob$9dU40b?|=){lwWE-g8RSsf|$-!Y2dk+j82wae*k0)vo25v zuETY?1Og(1C8(rRVRs3nKvXnWi0EjrZ)=LaXz=v`?!7gYJyPg_I(xZQ9oa7Myp;HK zuE7${F$r(;3E@73FSXw=_7J-V^hepw?t;`lW#*B<8MqcF-b5@zjOGjVN)jIMBc-;k ze3>jJBzlnkcFKYPJ$x~iE%>JqC`&_{c5)lQA?KKGI4uP_MUs_HSSXBMjyVqx;W=cb zs`=<<6)D=2qPFkAz5mQ08Ra*XyD)UYmC74)u#{ppvN?xG&Mg4 ztaW9dE+w&`%qJ`LTRr0-uNdUHhrOpZL*1$Y^R=qs38^C04RrSKh*buc}V@OnkF1{`&mIq6>fh42zKZkx6}FnP!S z`j#-JY@cdoJMmx%S{GPSxH~sM_iv-RaQhN4**!BI{JRa!Ej_Oc__@&67MnL%&Ig|= zBhelHMu=RCO!ZB=Ap z4aX^wQ`)#e{6A3?$!PkY_6GLQz8Ys%y0r(lUS*wia%h2c@_w#n(KN8F=jErEX#siO zf@Gzw4lv=2{NQws7g;uFrkRG zpc|A04f#DwccAv3sL^(W5K?ZINnI;sK$old)_GF6QO=AlH?vy@O#Y(P-yV}jHMMkc zb2y(VFW&q42T&s6ZOzHWPne4;ORoP6bIf{5ohmLyQ6a-!Z?c6@K4g}8x*|W*5;_^i z`rmwMg>LfH%au;kFsbzEJf#PIFDAIfJ%D>cgKEK|Mw~@(A#+15zJL(D5^Zd|ur&q# zvZ?N}^e0jHhgAvL`@ATJf97POmJm9SX8+1Tx(kjZ^89q3Td?|9KU&zF8O^Wnf87b+ z0*{xH(e6BLz%Hf2U})I{6!cz3nIW2l#k9rHP9+Y(av8P2XYXf0t(k4KA|G|q# zpSe)vfCx{K{4z{Ew%BLCkPHnkn6KFXTLGIQ&Y$k5cfjfUnfUOv97sQ#)U+K^1MDj0 z1%bF9>Ptk?R9nl3TM(F)^ zi5BhkJ@~IcZyX#Hv5!nDTP}C8*F2 z*3x5gqu+&5+^Lz8|6VrZ_vOYV;~qLhDnt_5@JSFwGa4{??`?zrS*aW9ugBnKX{LCqtS_=IvMrw?v0kC%URmmqQ?CZ|k@ENY)K=)Yq6qe+-!0%pV*Av3$pjD;v zRnUwdLD34SF#R&vNv`My7xqJ5RZLmB$zM=D8s2TVvkli%de~YYP@-aKg;2rbC9pX% z*=vtI3m-(>ADzzL0YSY=4eC97zYpL%rl9NyvJK^;q=cIg#rF07bRHQpc$w00v;_a( z?@uJttl5F{lJCv17lP==8=cU}%fG-wxKcUl6*pQDqq#E7UIn_AL-`bS%`h!+*PNgc zd*aW(U&z0|0k%}*-d{1#W=2s3Y+$(p1T zwz3Yt`^6agZ*M|E-!O+tJ~0}-pnQ0*sSh;XoK#)wra!7Ob1eW@p+>L!@=%+t_D(s5mxwCpl;w+;VPy822MaepfOHe%&NQX@MUkSA(Qb zUuM4dM=mZjr?oF7G0cdB-=q+UiSC2r(Xh?vBm zhQaD^`)PG)AvBAq=xFp|kMn)0TW5OdQA7K?$fx-GLPKVKH&_Cn`@OiE=@6O;)LjMr zC6TpoBC%Y~ri&W=oY*Z;UfHy?=7-I_@0=vtE0G`Dtg@ zo!0&=qKv*7v2tM=cx z*GNB9Kas)Gi+gu{#d|?Sh&HqMuF;|^T;lrhbL&Sm5E;mv6j(WeT&`}`x9niw>dNx| zOSO53ekKzcE?NgDib=eUlpHZ~PcE5>)WH#v?r&q}t&m{$Q*YrNoVWiyjZZdd4gq!cUoi`#uXVmU^ zU#gh{*4f>+H9zRk!$)SHhCd8Ljs)jwrUQN+oP4bDc8(pzH#@I-;B&^EY+LQ%;dStJ z^ccwd$BU|)^lZBKXJE@w-gNeCdxl zGKa^udkZy<0~akvngUe>&brogCL@E#GPZL*1nqpS@YgY`l;VYr~AFc=T&#j+VjxzWRo- zI1N(Pduc(Axrp^2toOg#v7ign;)CKJK0pGiSzC%pK0KH6*HnyN07{n1A9w!Nf%b!w z61jeaXs~vtXbbPxuErR@X=3^THa}RYhRu_}K(AYQB1jDBBF^Zys!MQH#ePy~mI)b1 z7v%jv2c&&gPTT(dKFIQ%9{i(8hO{<6_P(#p0yYQ!4{9YgkZ^=tUB-OgBTG3M7tmiz85iDLewe)~Nm$r9jh-tzdbvKVZZLS7_Z7zOeV<~h#iq|nvk?>cYt ze8JIi>TbzuFI*1hDu}@6!!_(xb#<5U+)X&=DRGJbiPpDWy50W+_cHMu`f?0N!wb<_ z{SHv>B5=++{0f}{T2{)qr_?yjwH@??9o@gJ-??ep0U!Ga`L$O#kiyi)Wqmmkl*J~| zpI7h^I*HC(DBddusF^eh8c?|v9Pfl;LqK6dO ziHVqvJ@9{UX|r!*2QJ1v=qJFwici*=Hu+zyATC3vn(~?-*iZIK72h0z-hSfRUpr>- zcO`dnh=&~gEOXg7Y^Ft@sXL^`^KkD$bzcAB$0iViyHT-iMCd1dp!BF{q|(BI!1+i& zdUUpxWbrN;6O1}nT=rOO0sT{t(|_~fp5vEGt&Zml;Bw!W;Ulv&=#IEi|0mZbD6!ie zBf=aLB0aA-7tIMcf2lwHdgT%*Js7rVOJG5Nmc@>|IbQ{~BqzTmosvMg%5tLmkN&}x zhE6?S+*5C5rzyDTybnRq-VZgt3!#Z*sUi9}LS$G*Q4*NMi2h~V3Nyq0TLs-NyFl!@ zlom6T{Z+UMypE;+og2d(FTRHRUgqSO6HxQ?KYlNmG&3c)Hdq0MlH>JKU&s(qf0DzL zNHRpF^J+K!JBD0uiV5m8;yv!sF}mJxZ&(;5+#kZ{5Z|mXoc0arhxwjiD z8bKE2U#Xv94zZ<0cn=OD?N8X;mdk2QEN^2kNtKqPk;CheKEYSX5OJ~Bp z{i$>8i?7^pzpDJOZ?m2Pc`Ld%>Aev{!G&Ry%_}kRYGKCw!~`!&W62C1A7w#?!ID-A zMBZ?zzPh^R8a=8>yB5{Iz>gMDRN~pb5ik@IVt+t@d$ciyUUQFjLCb7!c94k`Im|qj zGshl*+*ud*j)h@3a(J*r;kAVKK}*}5m`k1L=kt*I0tfp0NBEe>$P&C5wf@|}MT6pg zK2`(V=X@Z)DRHrwA4E8BZ~m#xg)K7a>SO{dSbaC>YA)9c4jUU9VJe#-Kk-Goot7PC z{<+q4wH5Q|;UNR#Uw%|;*!e}(m;l*cYRWiJB1K;{ zH#EAQ88Z^y0QT(fx8`xrR>ES2=@jNJ*W1UCnK}`p=s0hO-#R$Avsx)kTfPBy+GC7t zX7<3zrS23ih`r#-4bqy&w1M!~>s8w_LF_l?-0qfSM2G54)?-hmq4x!=K%X7<#L^j0 zDH>qD2S;e>D&EU%2GhO_OA7$!=D*L~DtEx@->XIn+{dW6sAekoF&TOrSaXl}EW_2m z&h~aLU2uzdPjby93y2zjwTlWLL8NfqcCjSLl65xE37)^J2$a@Nu z;$bW`A%Sz%$8ezYVHOMwFWNl+W(3@B8vM++S1>;`@R>@_1caOLML)VujV@)Lw0atL z51ve%P!u&hj{fG!`&@r82Mu(_G-@p5=!N$_b$43~w5BnUH){@oomAM!=ZPHn(sXlS z+!^n|iq6secUAx`6j7ry%5A`K>JukxF$Xduu;u(7@daw99?mD?e*D6{-2asC(xTK) zlykBb{K!f^=-Y200o1L1O+5|g!hYF`nXXU&hCA`}%^cSKaQDGmDyh&;5D1!~eZtLz zW)&B#WB%ht=9~7HezUKD?V8y%t$RN>2-40-V2=F@m(DlRp7{RaqPcOtix;W(Fnld0 zo&jdR*HdAvqp;gSsay7p9@RZ{)Yu-tc~1hWfBg@Zp>cJx;fq-dv>HW=h>S3!HO|d7 z`zQkRiot!K;A1HEMfRLKB98Y{%Dy`z7E9nG%`PS+M2-5Q&Of$Or$#E2ih=L?qCql* zzId0E2yLy3UCG9Cl<6auh)CXLFk#PLb_nf*HoE%31R4jBN?yo$96^J2>+~7?_&FiH z@ugQW-VfcJrnmeT`3SDQ$#vCyJqzBfgkzAjyH`h# z_5yuOEhza>A?@YO?Emxo8l5!@vT*K6WcwWb?hGuL+aEbG+YLWlibd_SPM}3r_A|mn zn^2OKI(SxX1TI89;PLU_2S3N#;i|ZobnlIr%k}>-cjBbU?20TSnvgYVvCo`C^RNF7W~bS-ZT_2pk|=)St1+9fnz7}i+t>gB zJSf?mfC@R$c8$?w&ca%EWht?6DF`mKt+3%9y`Zmde<-g2BAwv1?VG|J;!iW3K2rDL z_ngam_wo>km)!}?Tg?P1$2=OTFzj=o`nyfMr#e2nK0?p5&&$0Z;!me+Fnj-R`!&KPfK59G6kPnAeXP%UG{*}%$gP&}k@ zCHKodP%7M{6Tg7(-ot(|s-gyP<1X1lg{(L*>(9Bq`eFgvEV?P&Zejm2Rh;(VdKdgR z9Or)u_wL0SG{vL{D3Gb^VLfFOJ6tdO8^YfzfiyawdKzM{pJTjj|5xsR@F1gi@!euM zbZF>HNmo#zUv2}p*k2MN=94W-=bZg4q>||(?`<6)d zA3OM7>Cd7>PK0i)vpL!({)73<`&V|}r>?aNG`DXnR$6i( z<+>a4k=b>yNie!j=h_LXhjgq`#01F0cJ6zq{UhLcEBV=3BoL~vSZjUMVMJ~BFAu#+ zECE{~-W??aTVUg&r5RbPfsqvbia|_qiyKa`%{pQD_CqH<-qZR+`o-_8_tGvg{^v!B1fw!&)wk(5Lfbl zUfS;q3oF-U4KQ#1(?{LJ-$aZ^T_(DW=g$_r7cmiH{mO!b*C_cnGo!EDli=p~Zm#JKH;OX9A5gQJ1Ha7$H+=0e&;0DyjjlUG zaM?PIDno|>g&IEzCZ7;RQ;OI3BeiQm^Ff&;*|-2Q=ch*Mu>^?fH?g=v3pu)%)<|?* ziXAn-#qprEW!RsLSV__*LvaQN8MiHmAUQlVdZ%C=sxOI57pu}E|8$F2+>*<%LuzPI zPO$=K%oT)&N6R6dU6Lt>iwsFA34FdVUj!sXlrf$6C*UVVCEYsaT$#!EOD@TiAg2#K zaonkMFk-T2Gg_AhJ{*!^-p+VFs!`!#sbfYWR8&$%R|zo>Bb2i@{|)A_J|}*4YXKhU zry2+(zv75AH*p>Q)|rCR=;8|?bOdRUBem}1@93yJ~m zmo^e_V9ZhH&e3>rNcJ3w@4}8p=$=(8xQ3B z7MaoG`uyuDnAdyogH!B2|0I~^8LkbyVL`f592w@sT}qVh?`OyRaqp??_}8QRyr{$X zom2$&Pmd}4Hl4wJH39|?nT^g_$bTgFjpr>HS}@Dx5=fIqrp3j!YQ6ZpjVfpuHMfF~ zz~ubU^CoC3|7g^|y$*+j&yc5HA?VPZCfJyL0q39iM9pQAqlBna((2CRm?v=ZDrr+c z{EF1=JSsLexDuiB&!gr} z94iNp$Mph|Bsai2xp|S85_91?%VdR|`a#^JhfJ@H3dMidY&S~8eM*H(!F^Nf*r!7J ztG-D91@+iI%)(xz=cXqx8lOH&S_o4Y!XE0w{JgugAm<|j{8bj%Y!^GNx_7D zC&iqChfif)|EEhqrO|Pf7Pbm8T05o%0sDc z;QnJLb33E=@)2}F^D#xN%m{SyF}UZ1Edc*zVb3!*!svOH`~3pJDPXA=@s7pwoZrdQ zVP<%)VLT=7L^QJs;v43n^yNh8-0qPVH;njDR~qF)&l7GmY9idz@puzlE6N^R+n9k= z5yNtAd_VSRm6y_l>ScG~X%^ey?E~{T%~Fue2L4V$Y9%e?pEiK1Yv=hz;OhBt||v^e+m^8Ns#r z1jWnqJV1HYrNaIo6|%X5tDfK% z6Hw@OsOQ2iRR8sgxe(z5O_X&(Q`L__GNnrCq*^Y#ZZuGzH&qJO z+I*|k@-%uT)4-#zbDkOJ zlsSf&)QE7N<>`uvm73@d@Lf_oqcgSJ+YFKK9CQkjP{*- zsVC7&+HnSD878#P(VTVtqaK8qU?Z{G5U-kvjIQ+_>N9$;0b`d+IJF+N|`LE6H@uw*9*NK0J~9O?GhX zJN!41s})0A3L)>_BUE1z_hqe-m|d|_xp9_-)4&;Muw3FDbpnwrxLub ztxkY$hdeeL-JwHFmaao0dXrEqaKh%}{1Esu9yjQVBt*k?cQ+j{KZpO#gq&C7w-5`Oz@dRs4bArRb z%vKPvg7?+J{of{4Fn`>Rq&PgVZx;3iXBhN+2EeC#g}YXn1$|-Rdip|!9=(2}_4}<{ zB>b2S^p>y2mLj zZYYfI>n8nFS71UudnZ!XG9n$|MkTd5ktacNsfY!LQyd z=tmemYHf9CIQ4S___i)hFQ2M`9y^N{bbkmD_34P%OHB00=5)&|hFQ$5wMncYa~uQ{ zId)pY2pfnxt+>JYmH@$ujojy#1gLBxnPC1OH}aA@Lg8iA2<02!$5I*EV5-4BG6jD= zle!&bKk=UDzvGHGn$_2Ve%8p#9``Ev#BTrPytoekK3F*v(eJ{!N5-NgxiqLwC|!mi zF$*@@6aC-C^+4;E%e_LJ-+Jj_Tkrm83e0bY>U(!Gq9g6e0R#m9!1~ZpU25G2Zsp<}wi^>Hj)%U=?uyeK&k( zp8ZC8qZKfUqF=L;1tqJf*zhG{zsOc0+dJ%6(y~g|x8%dz(2sk?M=^I|lz{aE&n)(; zzJAGI|weLlMn7uUA#u=|d~T(XD@%XwPVL$vxZMQ$CsJc9NQ zT!w+m&Zm0=d%%)I#YxA-j-Z5RX%R^?XV8~dx*-#{+(3CNRn%}B&sF3HuYVMnl+Et!%Fp!3#ylY zL#%WGA7vk+F62WTwSJkE$q(2)A(3T05otc`p+gb;D2)h7oZ!8D^S-|u5Oq_q|8>@#h{nTH=6?O4ho zcX!6}Sn@jfp`zn4m_zWl+3`K0bOO|-?A{h)+lFF&J(t7#^oYq zMN?js5mq@I|D))<{j~*A}YstjPh2%Tia^X*(hI^%7I-a2&|}KrksshMW}saaiCzb&iH*pJO2*u|0)SLwt6t3cb}5H63Bl6`go0a8}k?VxR=i#p9%t{FO&r?NFO}Lb|*Nw z#$b9Sq>V7N6=Z5CJ6RgGVX1Lv_)TOVgx5c1JNJ1VIxh|~UA)4Adj@0PKLrON{pG<+ zu{L7#I5OaM!HIF8)8R-zxKx9CEPHp@{efN4D^14otKzi#au6Hn$RU_WV7pcGsJouB)eDU^!$lX`f*yj6AlC@^+ND91s3e{ z9ygkLXv&Y0sCDI}h1!8Cf8|5F76Hombhg~58TYn4ikny`Js{6;P(uCIZ+PN#@O$5U z6B6@%-;+{feppJ}C1oOW=wEm?xX*J4A*`;G-)>{Cty9ITnu8knG;ePvFTju7Djmtp z?-s$c=hh5Qh{=%$ssF6NnKck5efm5=pc|wE;MyKhEl5+8b2f;Iqpob9rqan6?86@F zYkIZmV?#*TQkYbIwdZsPun z??4vzbO}9(t}xU)1VR0S!02Bj=#r)V*m`#?NFB|1C-f8dB<+0#GWGDjugh~R(5VMJ zRQIf0=s$r1(|MA55lM83L;7B9o*0tcChKK*zXNIoHcC-$_aUkG!RsQ*emJW=Mtx3! z8GYrg*m;Y+PEYS9t{7m?_s`(dt~xbSI4`{`ejC`O!61Yz+FSu!aZz`GcIU|sSbSb8eBtufQ0m2dCwC*V17vgO1|_OUt8 zG~oM_RPzzs5}$m(^^Y4}TQc9gp*Rjd9lv@9TqQ?`<<|RFFXBKnhVH!fq94TH((;=~ z;6U+p_1EQa-Z6v{w(lLSg)8e0lY_LpNQ&ogE$zF0xUgdxE?_tZSyEQMNxp?}<@@La z6+V|+>D+extHOvhN39|?@>ikClu^m$74~(s?R!Rsa-->ieu)le8pQLk^pVd)>}M68 zdri=}gL#$Fr&>Ju(9~m&iP#+>bSlm0IxEieDxETGNNMLrW_hHYXlxjI9$Ym{(;-EP zpLD+7Y0CrE^M6h_({LiAiGS2i6$0ppms4aI;J)=p!ZpJ1M!ai_m9PI z6Ue?SD_itnjs%|xo85^-sD7HZ!ly%sp4j{GO8D?2mW87nSG)g$X{8UDfPONtKkLg; z-Xuc*A}cgTM|NN~?1$b@o>#zOG}ELiE{f#dy?guLVkQvE=lGxVlR}l9i?RREkJr%W--8x$K|w3&wZcN5RE>?n~9!D>A14mq+8^Vign?gYwNuaxRzKY`|x|AfUc z0_5DKD?IY>59FoYCeLgjK^hE+^CD&)nD1ydN{absotG63Oh)lssy|QS-Uu<`j;p%yE#v_fafDb zE23ATrv=ecicQwwR6FqX-_mvpCPo|zd}c!orSR>-!>2|G!SLV3_jKKCgs40sYbRL# zKiHhwBUL}*4}7%GEniO7LEY4?zoOND;cD1{44B_=!76{Aq^oiiZO+->WN6rtBbfUjKzsTn>Cq z*gQi=J`2Zlu3B4X6~N~8gc9SiP>XSaXK6H3cD8bqV_ zfN4*KJ}XcVNhW8RlO~NqDnluO!qrwVv%PD06X!u1(L~WsbT23;)-z6G?o~DOLcB(M z4kT&mh*FgkpmvRkMz=A{%QK*l{t`2WeY@((_j-Ad%yKWOVDTj8PeHkd#|IofyTZ7Pn#D!J=|= zn}jF{veT$sbJrz8sf=+i@2B;_Q_+s*f$})$eI453PC|w>g)7!S+)e=fqPGt!ND0w# zP@KdxU5!M*bC+yuYYY?7Qp-7;U8fUt8hCzAhqS`7Rc_(aJh+?LE;5nRUe#N zzx;elbge<}y2l6Lv1L5n_if%tT;K#&3 z_M^Cu&>#*>fsFIerx&I$DYOaJuPe&c;`gC{ql3H5c?hoQ4rZDNi~+l9(SpVJ7YJH< z*A?7{&;Pt(`~P)62lHJ_+QW0lBVrRAw}U!CsZVo23YEcazsIF!t9=kSO;e1_hfx@>Ft|t3lnz zYH_Uu{H*d_JED#t3mUB~)Ixv~bW<97NCi;*&xZP4B{p&adLK*5j4JMKQ(B!_ zf!Uh&?)&_~&}R47sTKQ{1^gU;pQq+T#-&f5+zaADakoD;PuBKAR~E{dzqt#))UO1m zN3$b=p%>|{IPZRzBhBDS+8VT35r zv#X&$b_ki0CQ5S70myw=39D=Jp-k^e<`-|;T_92vQU~x z;2EZirBlYd2uXsJhpTfS!g!%}&}Ry^P1jxg>7GMJ{?M2te*UO@P~SDiLxtQZUkwvt z?tHkc)ne^^5!A(FP;o!?Dee)+IC1V^Zkc0e4;{|a@yI+V*m%m1<`|8ihtLS3dv(@+ zW$C%V6L~77*INJuMK3;R_$r24hg{eePmMzq-St>o-0ynTF*kb+@5N0z`pdo>??J<} zU@n1iU9e7as=-JAklvkI^bsEhYSC&w0?W_v=z~!5?U~;=54f%+qZS5lvSeCqVk+SD zkg+BEjba#l`I?t2fe6*u76q+fe~|j)cF0}DKFsAw(Swd{;FDJ17d4!R(S%m5fn7W= zljwYsXs`&6795Xg9a(}Cp38aim~TTCMM`sQ5P$vCTc&TX(WAFrDb>eu&r(~)MbGdk z_GOt=_K0q=p%UqiFS-Fd$iy2F)1!~D&02bbgmxA@Nr=CRSgt~HRNm=s!wy&xH}<3$O9pqtc=e{5 z3Q(9kb%Rru9F5!3BvrI@fL115Y3cJSIO_LJ`KJ;$3f?MlCe&Mk8(#ErZ?SLpnD&8! zxb6<{9Prh(Vjg8tmDpC2{}}Gs{n(Pm`GjANrw$U$yCIguVZUW&7Kq7Y|IH?J!r_!D z!JN4VIGdL-{={6Xmg#P9VRmh(u#D$l`aA-9M_(&HnB4~H7yf$Mnfo9^tF>8F&+eM{470{e## zm8@<@XfYrvqyE7X-2v#7KSw&rjpxoS2loUd=b`O~{{wU7U1{5f*`{|CvB5IvSyyL6K%qP+Fn3*dS)fFBtF}_5 z=ZR2LZ-DaBKRmbbvFYY{-UTzIOKx2dQwyXo(iMn1}Q1Tf>e6J>5xswU4R1GeP4~`<) zJI4CXXGVZZd3sqM?}2IMRocT7(&18a8CgJS3s`r>7AU#)z~aEylDn(Y=+ElG-9JrP zxR;-N%k`iZ@@*<~`P=c_{9E$Ne%v?N$*C2XJdnbCKPc;dL$^2UDxYZ45}T-7@Ixoq`k4Ib zH}2Us>iSnoE#l{wLkrR`Dn}6Yi&_^ZGiJ2a<4kP%Y#ZvurK<~?mta4?(43eX`;xAx z`;@E20d1rkO|BRN5-S4k9`AstZo}u|x9V3}M3MQIv`Z|QKgW<_9Wni^2#R8Z0t(~t&)KwRQsEwfp7G7vD86-& zHM2_=)u%#v5we9l*P39^|BBA)g-N(Gx+~rd1c=x_H))Bh3cSPf<&u97Lrr*Y$6t41 zbTZr{Hlf2AV(ZW~#-pv!>MA_B8(a&b^?3)KBUw0y5GXrKKLoc!>fU)9Z^G4kAM09E z>CnNc>YAl**5K?R!})9m=h|n=_@5F?LZ@Z5it1VH8~pz8_K-{~=!A|Wa$BWAZsCaW z4+G5UZnI+xv>`;Nb#7j_x!wnHN})f-m~l`1n{3>;5*d0+RlFMRNP?(2dNs)ZZb8PP zYmMOpK~(&j>>F*p>Bpqs(AMWw?0O>)UUpg-Uv3ga zls37Sz2o~eMSFmLDHLer>yDeUqxyv}?W5XM$g7)X|6<}2#8wNA>ner7E|*q$ zjrBBabA3J#c_o4D6Soa#Ix66rh=qnTH8ncfZY)ahryVFHgIK4G@cI2y)8Na-5hx0u z+3cJ?OMYbo7lJe*sl5A%Zg>V>qfC^zOx4%PiSKYk9B~8 zJ?CNp{y#|#j8C4y^LJt)-i_n>X7vLpwpdkI}3Fi-VDj&CDPU>Tw z^PeQC%lt;XcCdDH@d=m3C|dRV0vPKr+OuDmgl%Z48t8zF0geN zR@i`kUFX|ACk0Wr-pwM}I-IW~>!U6#Jc905SwEYn#h)_}Dfo^(s245h-sgJqA|?B8 z8ADOOVQBB!dhYpUP_EC^vL>E^^%HyQiCoO+Xs-m*QEygMmBDh1=Vm_~%U|V^_gscJ z5r5|o_V|9iV3QdqvIy#~w@F34Ns+N^mqL7K2UP2mZg|OUfo0vQKc^ufV&`3_cmBEx zw|a*b$Z?Md3a0baqbZR<{4*=FG|aQV^>k^MJPwrQ-WU%j9VHul9M)r_)e+z`>(zNQu%1B<|O=vY}L|XJ716sn8*bqWKwo{V{J; zBUQ&-xPIv#!U}Ez)Mex*{vdP{lGQ`1<1W*q>nBL&Rhn24L0NMmEtv$OWuz?pW6Oxf zQj8wIJw=V&Y*~Jly*&h~!^PjhnjMh)s+>V$@F+4MSSs}HCqx!W-Fr=#Kh2$9SUXX> z2qMn5e_lrF!>z@6E`x41w8+h(8AC>drh^TaOBZ=y^{QQ-T>T1sXm!2W5xNc6K6+b- z=@KB3_I-Yn-FT3{%yB2_FZO3%c)4`Bc@+ZN2ybTwwt*l!X~fS+ZOr3sQCdo0fRe<( zddlidsB`*ASNpORjz9gpukxt}WVw6J_lIGg|IrYdf8k$2F7Qos^BOy%6U}lPE%yg1 z`BJq9Klo5z+>u4a6udtjt@!k8y$UYg)z&KV7yyzC1_4R;Ey(UT;QG&^9j?w@*DW>h z2K~?1S?X1T!C+5BRplPDj9B_V85u z)pl^8VmUvE|)y;p6L9(t{kr$A+o8dXl%Ot3&M{vtWZ|=gT}{;M85Vo9~8`R z)zeNGnZ1i*^FM6?U(2pCkO+?g6FKMkHR5#07uo+@de#?gpRS)eiaj&cN-~X{PbkpC z!xSmvdpzi8?Y4|T6&0FU3!%AigBrCRe_D_2*AP>k>(EM#uM0F`KY66G;9aW6i!<2M zYFxSeeQx0)bTJi(rGLe_i3dK9dgRHmw?KYI>wF@7yXy6iqiz#^{t$do-#-PM{f}nf z3}e36d9@_E)4Ra)w#MwoXY4sndu2{S)(ys|ejC2WeEp9nY2SQp$b|SohO0h-J8=8x z=C}Do5i~#F$Sw3c9O{*_i7owCp?ynsRrHP<>?i3DC#7L;k=xVqm91)s-uvtE`6D$V zR!cxEH|8NyVJ4~>_t3Aj-L6mBtOwe_Ou^nTCL{&{`h`J^DDezi=r5f2o}+!c7R1#I z|MhC0)4z8DUCsO)->FE9u9!5eMJeV$=Rssqd(8r9eQcxfNOD?Wm=U>BKOL7edjp~diM9#nq>-c`;inMaH4yvSyq}4C5Po5ANx85uz-v-U zgQ#i@LKDA4DcQ8ZVbgy_-*3zU=b;uq&C5xkpPB4YJz5EMR$o^h+f6|0NUwE(VJNuj zRTaJez6j!2E3pT#?x>rn{7X21!l(;M$=j=Sn*=DB;9yOG0 zNHtO;^+ayb9~DcW{|+v^osWYDN4{5FAnpR1`hVwcVd_TPAmgHY=la2Rf zFXjxcb;7e7XX3JnDUgThaCl|y2FQ!~nuSGlLT}C2s>TR5BxdxT!s^i~Sl;T2FP#m= zzRh2!>CVi-vi4nDefA6htvkTQ!WJO@+?6?&;}oGU_E5cNl6Fg zwgT0h=$PV_X`srxO`xJT0F^u$x~9pbDEdTbzP(;GygIiigyRiJpUr}Gf!iNtPaE%A1Jg1a|mB0RzgP=&-+;zjJ+GyJh6{lS4A?USmUH4h$u zs6YAcjyM;#88FWrXPo(O$2yU_E9Tog%W8=s9! z!ra+UF9TARN1@G{m|F5O=4M4y4eBe)pyj>VzmK=5Q1r#^k~^*pNbfs;?eXds2xV1? zKf~Gyj+u^A*RngIe)$aPCDjc$SfzdFn8t)eB_o)eIq1>${i}6ePr1;h^#`Rlq7`sm znnir(%O)s#&Qt$dIfBw}X3YFG%Yje7=|$e)eVK{mvk#ILR47t|*|z@2G$d&8{wyx< z1K#%VtzgO-m|G&C3~9#syx-iRclZ9n?{}tCL?JB5HBFgM`3NIAA00EoseKeVc;2Rd zNQys?BD8;?zzx(FPb#Y7p0MutIK_onZlryZ_#b2R7+ep&LMdX3^Oyne31|MR1moh; z*UjH}(6!ym(~lUi|EVIV%e#^ZNvA!xt}0%E$KywpZgD4o)^V3`D)U2l|3)S%o&)bM zeCU;LHOxYuE>TCGFAItgwUIcUC5WD_MesVX)`Jd%bna<(W@P>7d5<4OCJ+@U&$nBy zfWj;D+E~Lx2-LCOy|=#yYU*|KS)Y1ArRm6K2!3Bnbl(Tpt{g!AEo$4hKKSpz$4lbX zB82?QCXBh)#^FwZ-Qh?~F$}vBEp|_bLA!hI_Z{g@Qq*8G9a|NgEu|HIc2a+B`&a;+ewoOpfRNB})bpmIN^IS2RVw-VwWQ=!&) z&3}%+*btkrjx*n%Rh;c3t0ci*=7`Ep$}yd8klgomnrvZ2k?Ad-ucfFFgPrSTWiCGS z_bi=x^X?%qnO{2MR#ggR%`UJ0@vMR4$Hee8M=BISCoBPI8Q?`Vu|&NuoZ(Y9IY!2d zxox7KJx$4wNNgKl=GAJr{E0YloSY18AIjAXs$%b$Ts%wTxu5XuR1RZ+d?2`wO{MH- zFrdqg3h$-22+=JymcGvZLx?*$Yk8??1vVz86?%NCp*Wtfdja>bp6>oAxM#Ht`BBkc z_fF&fgz>vq7p=xI$3jsnnt2~oPIqgQhT|UVzqGN>iWU$hCe;3MoDdlsJKRYtU4y+P z2ZqycR^a%+0`;weS~yl~6l`nO2G6O3-OgoK;C#5@w^Nu)Pbx1qO}bS80pe}I^d|vp7 z3k?`t8##mbJJ$VWx?mB4*%Q?K zJ&vH5N0}2}-~5FH!-{2d5@GbX`=-WqDgi_kQ1FW9&oUhH-t3C}wF$2-@?EY;8wZ(x zBpu}s*1^%=VAM%#6ohER>f%1S0iS@-wHr!|D2UvL=pcm+HS&;qBzSMYes%n#8p92k zJ^$jr1jC43sEzM}hni~KpKnj_zWanppw9us2YfHl zOOV6YGtHiyMlm!kRMdVR?>$UVRnsuE0CM1)6Nt_Sb`x;>$}Mh(+RG6P556Sm<>6pi_f$LLYN$TH{vWBt1ziApr>zIr}%j+KCkH z-}V2pK=BU}Dh`J#)p!wK;XgjVMFPZU@7=pIzY9(p&&y};bD|=GaWef{PDCt2tfQs* z8zi0{4J8>#1irQyG{&!I*78B9EZ#G|_$129 zDYXq(!*)oX=FQ-}Q4wu8G4_RS883=9kAg9~VLunniE%47jtdlQfrG!bMD|V0A^Z4L zhos$F{39PE!`!tuvK>aFtX0$CS<_M${9LfqH%C-r<7`c7Oo_C+LCFDZ4 zn)e?nKEnSmCgP%XUYH-XTqzWI;|Nl+csRkE!HT>yTSa2?aE|!ivBG=ybZGERi^FMF zaa3M1(WKhViyjxPeVJq(h4eZ-8DmRQs}AjmBJWNc-M%N`u+~|(5vR$-RDBK)_WSZ{PxfgNlM|KON{a}1k*B}?m+vS*uz$t zU!a}*&m=$iHAE)NwMC3mqogf#*RMZK;BL>n`alA|-oBy6D5n2l_2T32 z3V3c7Ss!Upba@^0h&|@=9a`bW8S4ka6dRCmS?}^cpD+lT^4s0u+=fYxvY_P7U21M#pM!_lEMKLxB-6Oq57 zT;OW{F#A`lc2JPWJ{yDm*q0XTrW5Wjf+gu)WiKCkB>M0BhxlGxrdm^3^iFsJLQ%SK zMfDFn|CmADTeSj#-@TnCB)6c7)2US4f(M-`6w`^kON}yZPjX6kVb8l*Kiy(w2@usN zWb@oHhv*R&mRbhP`C8o1m%XHq_ljnU5YZxRPzH_r4Qg~@ct8K?Y3Ji{A~d?2bmO9D3Y10+#B&I6Ac0SG^3j{5h`jPM z@e<~!wv@L7tl@ru*UReegYW}DBL8vO?oy(i3SKRJE^2gaS!=)4WerZ|YVDsCYK6Ev zwF2{a&h#UpYV-U5bGxBQe!;|?C}VN#8V&Xg{pcS$E$oOt*9xA09aoMcmBu2dzpLh}#dy%cjgbj&J!U^t)!b`HIBU2{!gU)6NV z(<}q@K8@}-hhd&ZB9+T$iK9p^=vIi6KF$Gz+kSnVdkAOcB4axSMKQ;DfQBRlb1QYk zcG-&eLCwp;c1E8JJr23sxsf7(y61c&I5PTxao^EZQ=9{>UD&+v7Vl|iE)2%CrxyW% z=Z+m;eKqVF|NfI&w*aGq#Ah-V20`wpg6rQKCy>5o{X4Cc&zXkZqS-+$VyoU3v zv!7oPa3kvQofvbX&oFdowOPTV15TD-_$6&B!TLOfXfMt)=f@H`L{2TkSuxSZxl>yZ zbn_P@pcY_4YUafEa9Gs9>eu-)a>W17YxK@_?ERJDvaIn~0RP&(_MEI1XnadS=&`Yi z`zrz?YGU+Ah*|Th@QM3X-^@7?UKg5hd!hYD8giSBy2DWFM* zI?I)8&MWPL!aL#oqS8Lto#`=u&U_q^*Z!^>Ui<-Kr>m4DFb@e0AJsTJ#)=H}W|D?3 zwL-4xw*kqM#Mr+o{=4To{=PDE>%)cEizHpf^60Z5YA#4A3&;~ibMDla45~>{n(%lf zUGF%w4>#QRqsxJvr39~dPkKai;^@2YYWwiC297vB`UjES_FPL-!I%ps(o`*$1@2bS z^AVQVCu17rF_;_#UYmA)t9-?9aY{YyBOft(Drq*u`BV-#_VqRVU#GxT%aM$2GcvTH zEUZcM>JtQ=dn{hFM20w7YNEWte*nkbk@2`k>+n+4j_x4;5Sn_Tc&H^-VLTw_$HF&v za3(RxOAg)yo+m5^AB2d}-w=hP{5XH0->Qu9*vITWJNyR zZ=O6yN(B zEM{GNg0r!=bDTl{a=ZxY_nwEwcLGSEQzy#(A1g}r$mL-wpg>9Fniut>8sLMIuJb3W zR-kn7GmyARjA}CL6*?2Mf!vM<O#+oS0|(aAT$jb0^8VLn9I- zbHM5I0h2M#=SHi^GC5$6%EJ}*zT}_=c+($kag%KYe#fxUn{*_BzQ?)DRP4E1SDm?> zrZ56e3_G55biRbSzQ;`Yn4?)(Q$!+VHVzYoWfvV=*DzT(E?)^%}gM(OoXPL5rGRYgFo~MuJ25U(J~h*n1>7 zdFNJK47i;pvH4+&y^e!=ylM3wN_R6V|Eha*-A=e@t)?->3)vmKN!)2>m+&O z*ykX^{Fsl$XAG9E30`xG--ao*-72v%1L%K<#4{{$FNT&S&gS1XFm_g_ez>fP(w)W% zWifvfB3Em_4%I+ev4wj3{2|2OBy?u8Cq;|odkpQ@iI6J)baE8K7&u%PR_kSFL@j!> zQZuu>i12!|f}<%Xx_)I;ox>kRFLC5H`?C)ZEdsNx`2~=c zIuT<{20e;n5E{D8D~1mL*8IzqZ2+onf;vB(lln8!be7t521G6FTsztep(A2ubNmf2 z@-{pxxBN8^^4*#li!aRq)r*98M|5W(mXPUT9p>p$*=FZTD;!7k=c|;09Po36wdr_# z>=eX3Us-%0%Z|hy#hE*Js^OVIm+s2(B4F7ZG!uCd4PK|Ve0yXGQF@1W^chYyptAW= zS=wL(fu}Srx<#hIB#r9sKBTf;0yD&lFrv1cv6;^DzUU|&SL)KA^OD%-h z(^%Kn)?1AE#DRJ*IfFL%Q3F8w47zuZt=a-&A8(gAlyg7Nia(^4gNoEL4=Td8xE ztbn#@*Q1lPp&)Ny7emnA4h^m+w?Oy1igoN?me`lOa9em+P37klOkH>|G;I12LXdOQ zE`B{}G;}ZjYLcMxb4$xltCwL#IK${}DmA+Ou=$G+?w@C5JpMhv$$?&kpAFH%zt4>c z-K@;7lW->ado9tuETHil)nMSe0b!SHLwS9Mp)>5tkO_GsEbd)Y)n@C4HSzOf+IL&v zx2hzTP6L1R^(I#bafC&}?2m)TWJd6~`R<1jy4N^8wX`VyOXu=$WNaA4L?+#rC4M z<_!dSUe%(KV?@vN9T(f|@tha$R3ZHk(mQGEk5i3n!X^%zc zKV^dn*EmOyf^7KE(40arIstLZe%B4@YT(57jXUU>D0!No9Kv+BU;~ zE^lOmll<$d=eD9qW?Z3hMwklSQk-zT>DLI7N;W>+!RxS8@^indxetE5>(k4~xQAcQ z$j9l!0}%PFH}@KIh)qxSxZMvUMoH%aMvd6m(JyqOlk1`kN?b6%wd_rVc!=_;s#r0n zJKeBGJ{z|Zv!6v(n@z$((CCnfa|(0_jjgvQ`T)aSo_>y#P2f{}vAQ2~Nt~IhMF(Bx zp-T5Kk4SnI%$7o_MrAM`I_U`~qbeKt+GHkuF6BWhY(CRhaK6ilIs!d2rAG_w^y1Qg z>Vfit@i{j86sRU=8_lV*eT%G=KNAdO&&gH#I zru@AIrexNG-xm&nFq!b3u3`@mE}g$yc<=_M*$t?C@m#f#q4j3v*-bDy=NEm8k`VO| zt;Bhyje))S1JC$XQe^T^yqZ9d6qz!J4H{Wfq2=_-$Pa$om;>z6n1?;B>z+4Gf6Eg_ zekr6a)zaL4$*ApIxJMsh7>1|p?yP1 zE+(4;cz3Tv=$Zs0`k~iXE6Q5|H{|o}`P`Y2e438R=3ROuxqHmRAz?v`mQdx?->bU}Zd{i~^>=Gm55mM34uV6uik98+y z{J-Ix^nVuCvs4I9G_RVTnTE^9ec#GV$fNH~;RS6TnA81GnQ|SUTYiNKpC{p41ecGM zL7K@Xn9I<6zlNR-HI=;5$-*9nlfw_^{p=|a3(wCoaVz|HST>2KsUCw9Z;Rjf>-NIs zOAa5mOO{}pXhyw~66f<|#7tH~n32b}*&hAn9MHUPPB%of201xTi^ngJpqt_A9-)_| zP?*wy#hFiZC^A#KP=bLSkrT(zOYU%^ir8QVhils^6Q^#l?cjV`gOSs#Yh*Jjmwq+A zo~&m2r;qQ}s5+Z1(YHg3Aoe|x=Nqav#=MS*F zk28pBT7jX8%|J<GRhy@<4=rcsBmDx-NjpZnhcsk> zov*1H^=301y*_)~X=e%|{~+84GD90sMr2$|DG z-yzR0F=!Xxx9*W}CheZ%KzGO9Ja4}_0%c7xL`O+jQ3$okmdE%QyqwBPB&?hV+jy}x zE0a;E&(+`&@r;JLCThFa9KYckZgEf|%vYsweM7*uh4%-pghSD6Xp6t|TXVD^;`q5I z{G}ZG0C+tzghe)CfcTZi@2kv+$w<)0L`*6@7+X)mD0%C|pRcTFy(?{HsH6t; zu3QX$pHF}!%ttny&x;_U1T{nRz9EPtd7f!N*8yFvukSSE_Jj1bwhy|NVfuZoT1=zMGdfz^kZgs78tu zwMJG?dEonUA8TvmLd7RYf383r)y|1b(rINxym^qP*43jYX-C0c!?xhk^N;Y(_U*0C9fo;0{O{n#dintV8SQogPAuKQXJ+s zBs;=}RF7%*uN|%ccf-_+EOt6X)vspjW-E*`Z<^W)d~b$aCDhn^K#!z6HVUgTAF47w zIx_>JhwOA7hrY9LLgDFt836r#MIYt8+!suPb3we8G~Aiu#l+Z1n7fu++CNQ3LsIwzPWT*3CgK~ZxVTT z;Pc(q78m0d@DXul(ss`W{pP69&KeRFYZ1amhxsNl2J;XqD`sZe7@?|8fkhaWHi}m#qTY=ZapBa{hy-JFgthkg}syLpR0-oTrK1vLrKiErAcr zJr)Z3gWz)9Bkd>V+8Bs74cg&6@P_AGijN-kFcY?PwXOXqY8kXpTvP1`wbDn?_i(NMi+Au^Rc>}*3#4( zAYkOme$T{5u)iT0XZU6ZIAqRx3gWrUlVUy^y5&OHD^O+VKM+G#U&QrB`RqW%lYZym z?bq<6hC)aB896$3sZ0A_R53(PW&J?-xnS6PiIr};51#W@FsZ-9JkVo>Oz3l zdowt?&(WgiErT~3*YWF0;BUApe*kB`^`A6rs)KV`e|Ba^C&B%{JHF?w#E@A@r()4Y zB@}5pe&kSXhUYy3sYK+s?`Yljdb`3BB0qi5y&*jU9~84LXXGYN8?!*m`;CUWN)V|AIM%5};-BB*Qs6Tb2PaGvU1myFAu`(X z%7g#UCqA!kndzU!zeh0jU*{u;pG>F1F8&WN#A3fLCo`(m^b!sdUI(%=6M=JEYhcA} zReNu`9k$VGle)$<!+uCEcTqm}T^BfzsC`_D-QSSc_~(rss-YeB8)rkDM>?#kDnJ&?23Yjd_QYu(Kxe#S&Q;BF zcxSSxW`Xz4zEgWKw%F4*818M&9)h`Af_49$KfVHHHtKBQ9|(}Ekh*pCnROsJ&fg{A zeh4|aH8vxZRnYKw%r0PC3u0<0OZcXTK`#FEsjU}{&}L=yeB$gF$R75`9vwoE}Vx@Z{5S)>~D~iNg!XRR16aI()|(~tSH9I=grO5crf?M zQ!f2Xi-b(Gs-)HVkg;?9%L^{l=piVj=2$W!MW7^3C?-c=8GS|0EoFhf_#ck8Rm|xp zm(VM^u?Eg7UncuqaL(h@+x0-AUSPWXX(P0j0BNN4<@e%T)0Bbl^p~+2NKB=V8}r0H z#AhaduQbshs!v8r%=I%MWcRL&m#PwI4Dv;@@$3CP?{E9<$}BJlB_6VD2EaY5$I;F4 zwGh?TmBXe+iOTnxPtH1Nfdx~&P+mhGEScGz+RHk9C-LtoKmEoU-|3 z*_fzfG|167uI+O~7c2!GJGU`71OHs2y*_w$!xOZ0n$kHFBF7sUB0c1hGWo~<1ddB0 zGZFec0pAiRHXQh<@PZccKfgF(PB#JTYi(x|luO}^VK;Y7dK;AF=DPGmkfWU$;}cKu zo|`pxAzbEuDzIMYc`aTjfKI$-BmapxFF``J7r02-@cG^SsxlRReoy>7NGQ|}qc+jZ zRxdZ9dA$CL4_hrHt^B9GXE_DVj>UG?euOAT+VH5w;W*|eorVFZXYh!Q~;7qZZk{;9ft`2 z;yp9kf`cI-uCe{~YP}gkBZ8?};$|TG$-V)ND+OBR)BK*-@*R%<_mGaCk{o@`RLk|o z9NlM0UFV!-XJJn0#LB)rJ9_fz)vn_sGL&TZgXqnRaS*dlcNE6?ghxcStqnf&z?j|> zM1=Pj^kynq4P;ATlN+EKm0AqSmaar<%j3|?+AeCt;|`;v83sP4o*?!8s?!&LLgZ~h z@F{O77Ovd<_GQ1H332)S5F$`Jfj&oQ?g&odyv^cfZV6!}+(|s+d3t;sQaEegeJCYC z1|d(F>htYExoEMNt@JgN=;TP#}pl%@m^Fp^}T(UZSM37`hQVE0C zFnkPi58`^93L{yVuXEB#hE8X8*lamZ~x(i?Maw-*1Ot z=JKcd?GZ4MI3|}vvkVi;ZA3@RmS8|zbAT^P3Z+X*eDxn_gMjlIu0nYK5Z8BmgHZz$ z_9k5zU0Df{zY6pIOYAu?vPwU4J#HVIgvYtdh{r(ba7O(T3n{u?VEIU1yBn^RbW=p( zb6FCdg){Yo4p(b)r1-&}k z8!t*UFV_$qpdx_|qLXu2YFFT(yKdo<`YQYyA=@!}hj}~aFE6gAy@d|Z-KJscWylJ6 z!*hBI=U_HvBwjowMw}1k&TC}Qpc4-qG-_ry;bT%rOJsR91ZGcty*ya}`OS(8iDh_i z+7|MvT!9sx8uF>JzM>fDwCyNxg_kSFEDVGZs6CvD!{Wko{G1m7hE`{7m?1)WiK z8l;B48Jxge{4a;t<_A)-!FSiBCcQsOa>d=KESSTRwIYXjtO$bMmZPmb)bWwecjmcy@_(dEAdBUi;M!ipx~_!z-}B5EXp;xLzBO6ic%QFO*sOc} zU52FY9`s=)2Ti|Yx)bGT=0 zA;LgQhnAE|`rJRaK(;7-wlePD9Go?K>OeOI%qeLW@}}4?Wa9BiHkA#m_!}G^vk{{} z7I9atp9|11qhVv1x zm9U>0E&gMd&)x(JRqckowpFO3cyW`v|Np#gJ(QP;IWg)v*2)p?aKP$WFcKz)T8^Y& zzw?I#)t=J-uln;m%>0j{^M0iIZR5DT_ugAY87)z9-BwAWjBgsYq>^m1M<_Hzlo1IP z*<@s9uR`|TWbZwm`}qUT4~}!r=f1D&{eHb(e^(2<_Za+H&99`8|A2_p!2_3jr07lO z^gmlX_je^q>x!bq`w*vRKD5dOu=MFz9%XPJw4OJZ?{)hNzuS(_9C=BCE`3@`ZHQci z1_@{Dd%u?;zwBev3O>)IF}nu%DZBxKCnUBKYkm+Ut2g=ppUW0~-buQNPs5b>MwCb} zJy5uRP^sBuKs@qVW;BG;pr&=zRNs~yRqOt19hm5W(7IH?ohY0;o10_hI=>5&rOQf{ z8Jy@am{NE+6MG-ex_)m>`32^ge{Q@IUI&MqnP?`{EjUQxR3f3ldH;8ZG&|#aAd=}G zAZF4AjWT0bFHT@?ZEo?^!AIL55f-0B-8BIXwdrgpNy$(qRo&!*qcaGdy456MF$QDl zoz$0{zk{x_Wa=pn{C|D+);h(P6SYKrCf)aDM#Mbk+TqW!cjV3~BNclJ6lUcSaZYj^ z987ChEHCYV47Zp5W5qR4Tj!!=zt4k8nofQ$esKaFyG^mhq>}-zr-^hOynjN<_aIXv z{vOcic*Ag!FA`Muy%fu3{=#!t?SPuVx8S8!Z+blibA`7R?4F-nfLpcJ%SVd;gSVnz z{Z5c_p(!)xW6?oXkoNu8T;o4hlp%ZFZTIeHsQ1bu74F-HqKnUeya`?bCW^;_f{!s@ ze?-}McmE%do|^EQy1NP`gV(+sA7DX6Zv>NHwf8|!{5QfYcj|$O%8C2i?miUk&;L3g z!hDBg6yxb&90~=1A9#CKj5pp(667&T5T$nEP{0#{0i4nEQRa(h=3V_4@m8NsfTLFNPRJ9KUq^MD8y1Q@$ta`27v|=RegJ zNGw54@b<*;cS7VjZp5}}Uk|iLD_Mx2kHg1zwB5yChj47yBv=ghm9kz~5M4GJ0sg9z z!mqy<;C;pVs#K;R(zZT+j%o^Xv>T6;E*^M64`sb^khldfTs=`TUU(mtyvmO^UoM3b z>DOktme^<4FvPHeIUhd1#G7e{YJuS}=4R?I>}_V&JoSCF0Yv#?E?>gjurvG7)gzn< zAb;nh7t!b>EDx&3b@Yj#+ipK8{9Y0u-zr_I*E+=LpY-|W$TKYHzm(5Lx1M&x58^Cg zIr9b3qqDj+I@k=PSyyL_aNm(ocr7Te=qYUT>i+kpzZfQ@3%ULzP$1FyTKd6zwV))U z7rLN03at0rUWIvK-nuqXoOvQ6D)lK<6d}a>$I2y>>-f1^_P{!v1#>zUB7!)se#6|9 z&tA8b>0H2G zD*b4g@a#Y_94Kl!Z0Cf*&kK=Fl_y#tnnca#YxoG%hW*z#*T99g?|x5^{x}V8rn74{ z8ic5|jq{%A56qe2@x4W3DT)NY3xs%8;=J5FWsUY>I`kpxhW15*pRn`0+N+Ga1kYK= zn*&4`P)t5>M0>43#p-a<-|k_E^Y@T)(Bnt%#y)8N{X&hl>G*>_og+Zo7bM(EbY=hr z)-`Y?kfTfk#X83p26RejKH$Ay9hfhDOu3 z9Y_l7RoOZB3q1eZynaXQ(#Qh*0h4hI_b z(JerZ>y2tC<3L@`5_RTZ@t)`FO{T~|V$`_FTI9| z<8;ivhw|G$s&t6%@|k5n7d(d!zPI_Rm<|=(uBMArSjKtj5Xx4}`(7x)B|)QCcXQDf? zAH(3`=?hiuFc%*-O)^h`estQ5PUC#n?)M-50tGi9;Tw|PP@ROi4BPoMJ4&=+UOaWh z=oNfjjg-kpC z#qoWftYSB|OsEOk2)fmUhi9RGJt%ed1T$KoczeRNtsl=jz-_qhEj-{MJh`8e2hSr! z)!8#y5g+T}0OiLK@Gg|uKB`NI;;-}_n>u0!XD(-ad#BBegp8CA;;#*XW~sI0*|QFy z&ex_qtULhnx0l}>Vy5;A<6ysaTFk$B z6{b_WY0n)cMsKP{as;2YKtXl7U?3L-`lH?K;cmYM*%YS;WN`l?^7vFkT0|>2ak=MC z(GEdD#M-SjxlOpo*5vXZ&IL?oIiJ)N9Rr3RiP_r*F+lUQUDslE3f_@$o$^z}_Z$kg ztfLAwu-`n+^zJ+MEly9Vf57|7@%y>zwIl?HXjh~o{WBYqn)w?c`+*AS8f)@j-Dm<; z>0?Bi4r|cQ*y=QZJ!_Q;Q~jq|TfyqtpNp}wqNtqa&3|EM{(* z`*R+gC{rfX#B+2Uq>eWzKj0k)uG|+xKU=1ObaQ32inEk&Auo^qNmoZqhKLEcMHd*>|QPpw>Y;LiYf~9c|x+`$fYM%_He#r~iWCMV=t$ z>(4-k<6nh7z8C#%d+kUgg1sqoXD%gfwvgd#Z3c8p^`kV#r8 z_oDI^eBl#F^h_^=fQ1;7ZnY+8Ejz&+D5r|;4Wgb_t(AIUKWCe(Y;c-D~MA5@WU6~+jVAXJmW_R5V9F&jCbyU(`{ z67SvzIMfY;&3ppYts)V$9VUBixo#4oi!b{$Rx_dc&SW*e3kmSON!Yg9Tm-4#e)Lf+ zJ`W7_2oIl}UIYKrzlqc_e^Q-Q-ehd?A1H3!SgaVPK@1);zB%=+@V7PcTip`&<%yY) zexqYVzIRM`2~7o&o1&JP$<_e8Y0Vh=aaaHhN0E}g7B9M6MDm1yW*T^Hm=@nHEwbwN3IH4*j+3N$^v6*CNskB@hi(&M>D_<6s7t%PWlg!6M@ z-9GrR)bZWlV?uVpZR~#@RlpxziviCUI4|y=G-14c3Akd&r(CfgHFU2)o2c{{y6Qdh z(5VM==7xeO)<+K@N>WMO>G&|5JF;v2dq@P)l&%|+3FSakPkFBHUkPN%skEK;c?SeX z?2^^7-?2D}=weIiFjT)iHkW@I=chJjMBx89=_FpOYqH1DI|=E0>M8ua{;#C5@Cqlo zo%qh*d9e*#2uIp^>F0nUWwfQ0s1vA#UA*GeUV=eEvl>(35@_;b@(lLjeW?gY4=Oo| zDup>t+4?tuaev&+h-d+H|3bvSjK|-A$nNKs%LXyJ$Qa-GD-3@>jvoI7JJcxSg;cku z20oumKqqIV(*o7FkP=bG3HoIgbT)83 zcW_}G)a5_4>zEOs^AS7e`!_LX*I~4f;K&rnym8vOGB1hzZ$40D9)AcQmA?6xt&t;_ zl9|ymicMh5*J`6i*ypXi|0(BA5A;wUWa=DlgTk<5NqWLQ@cZUWcZ7a>cc~?~{DAxt=Yw4(=ln?0!k6iai;YUO77JWZ;b>JNTB1M+*Cs^YVeJ0Dt zhgNnq-8_thP{Ci8(FK}T;6k-xPYhbYbaa8_V>RY${^F44zOV%SQcpzOG@C*14d=S9 zBmR9-RT)m`TY*#_MebcUAJE)6P}Bd{3@q;C=QeTg^?`3*zKJRal8rO`EjeujQm^P4 zMXgd{*je5|r;ix9+>ic4)lYyl#p^jE`a2=fvt!MUaSccxuAL9HBtq}+$DJ)2B19#$ z>~$(krBLyAIB+g_9b!bH52SlVQOB(hu2Z5ED5W8CC!Ky-fvbEfNq?{l+Qg>rZz^K0 z37NZB8tWh&xyAXJ&FmBQ4d;^|nY#x9^%rL1PVu73&RlU5j&(S9rI zsijfU^cC3G%yFg+HEe=Cp|muO;S7ZBSfA4mSc1zPqe^+lNl>=ET8Yvx0wkX`p5#~8 z4{rGp#p=I$;CS7iL1zsnbV|O6T-LG=bJd*}uM7pj1WD-hTEH?yns8K&H&LP~9u-M; ze2-+h*zq-s7xz)SG)@2GXF~sF@Ethw@4!N>Q^ViveW)s}mZ#r(46566#NKCVQBs7- zNxS;rV6{cprWMu$giH_YUJ(+b7gx=q@+|mJHNim0UL`AXjOsBWrRPLK;ey(Wg^Z~0 z*TKGc77ST4w|=$;HU1IL>F=;0-Xm4|WOTT{9anQaQoiaL0u?ox|XCg6W7kK{s`esE#g!pJB>8x?jhbhFv zc2~9yUVuH-nt2tR;WOmDQ!a#b1S;!t@%cXfk6Er?s5iVWIZ1GZ&>zT8g}>D~%8AZy z8Tn6IV1ByxaLjKaVw8EcbcFKwA{+_N%X{H)0H;2eZ%8UqpzDth??_)JMEPOWmzl~b z5qglL>)gPD8^~%-2PbsYG7lNGcgBMr0A&jq}0hqXH4Y}>6bKx?4==o;x3%(YT#oK~kp z@+r=mk**Y|v*Y(Mwkv1QXs1j1n*1TK2qz0l?=Hh88q$(VJ_8N)WIIaV z1d)8=8`|uhztFrbCD?dw99k02s=hM%4DNsDw;V7B>5;mZaBf32X!zv?P@L(74bP`4 z3^o*~#pF+e-JL0@)Hq5f@AVFxf}UD0p*U7*G|Wnk#G&?N7<=)=$yRdc-6TZf|>2*D|`NeeUQ)PD$)iBCP|I-HI?VleD#9;3E`r!J)0V@hnSeU1r`~h5d*P`pL3Zl@W>!f<) zN06xRo#EW?)2+yzkeCv-* ztFFWH^-yzL(MB)~ee}cmE+M*KS>(5i{qD2Y6m0*k^@58|gr|EgEvmF|t$%+w1bc0M z3>YPc3!<12tDnFeAmfU~hq`&B zs4m9EEEvx-=c?zRq`NTM2KX3D<4)%@@wXn2~lFg zQ@{jRs7MlvRGJe+bRHKs%Bq-9C&>c|eaB>oTR!oQim@9e>E7m?tS3i|(N7sCGycH% z53wtBQOD6+UKRm{V^d&EUv+5|&rh5cIwIe$Pr&q)aE9LwFPfb^)p>Y{8hwdpGd%sP z65iIG@E;T%g*~;>3sOVRV9v9_i&^Cp^z{d^T5zWW=L72N9*LNDm!r`UYJUiYE&0;N z7zZHmd_s$Xd^E^~zqfpnvkSgC#h;3|DAA6s?=5@m5&4gi>yG^{52`+7F1lGh4($aU zA;hA1A4_OZAzQS9`Tkv!%s&{B)4nrrl=U@e(G1db{Z53$m9o!tB#eT=+!=|Qwmt|h z72=I!AB8tg`i3vai{R*jUjVu44(>H9NW8)Q6>ja{xqXlR!b>{OJK<)MXjsa4frEe! zX%6diWqD$rfr(#4oJlL(4ja&?)(Zm0V?3+5S1_;doMu%aB_*P1mCQ82yemJKK#PUK zW}wk7+f(uF1e@~Udlgr9V2N<~=N(!6{y!FY_;PU-bk0h?Gjb(B9$i5lTu525=RNOvoP(Mxyl7tB4quYxij62o;YZ~lkSr~LlyT;{TgzMU zR$ZU`qpkolq3s`Lm>9cmAq``FYNWCD6VccA!UdQ}!vVFIw z9~jW5=S_`#<@+Few*B%G^Hw;=ojx#|w*aw%azwV5c#yuB-s^{E@8JQx#r0$IM5y{g zuvad7B*=#}ebX%2g0KN6HCxSG__bpp_|n)Al&0e!9C7>#N{Vq06#KUzadfu-{9ZNC zsLD9LD8ZhYJAv)mVjXZrRasdh`W@U`7@U6@guQbfZxTnvHX%VcQku)X1n6C^3})w@ zMl&Hs{B(CY5k>p^;#TtCK+qX_;F66wt=whvMf>Z}nyEt}`}Qqx>Kv!aH^IOE^1r)& zv0`qFMo8xF_Roup9r71m^nXuZv$&xNt0Gj+$%S>Qoka}h)$;74mPh5bgw6_X-D-!SuuJ zftPLL;Fjjjw5R3|C-knmz4%9mS|`mY7QSbIF}r%e#b+d_&)sHMLz5cO)lM}Sug`<| zWUEIx0rt$0=_Z%+{suHAVueA#mf6oR2L;u9pgf`G(%RhQ=?g2!y$~+ov--mRM ztS!3J+$iI@&&up3_JsePXPwhBgRai~nI}$U=!mu4HOgn+V96h-UiEVVGDgqND89$M zJ*`(Vl8+|fWYyZu{IEA*CMM0Ra3LP5EJALWr+x=ZktWwpi*7jaS&?m)nFF;K?F`() z9z`IF%(5P6g?2kf%~EDo#KL>zr7rCR2%i5E`Y=EX618SujV=DgTqQ`k-Oq`l2E88~ zZC?bgU!*>w*sB?^6};V0IR^7WB&^rwF|W)g%*k)B33Fpt4mtnNMH!8^?b{PHx;{OrO^WPFL?N^Fps5ASK;%|s3FX~a_8cN3D9&a ziC&z;J^b6{o`xLMs8;ENV*g<~Xvpy8T#{o%oW4GZ8OB~fL-^FdrIQeybC4xdCOnS$ zW9hHo65*T+>9buMeE!*L)i|)ky^vcLRR$tKe}N&kw(9$LHgq;xx}}Td06Z1XD|py& zqDR&hj?d`ZK+(f8fG^Gwx|L4r&pS7P%38qijVeD7^n85zioh25_Z@c_yY~WY+Qp-2 zXK2v7)DzaCN%4>(QQlEHMukrPXcWAr8wSZ&lU*BMHAA7DbMg}YyjN8po!D|FLPxtL zrc72sfzx4v^#;zVxD*Q)p27X`=f0P`MZ&1jLtX{1?}0~9^y-sKo(;di>bws}<^c9| z{z>@QjCr>0!y2ta%Qr#p+$6O>;V@X32kFr_;5@JRDZR$JC1~ej&N1~EfdEeFYNPl` zuw5Nu`!yDf*D9GkXp_P|ybM{*Gv2&tL|nJX7|$nj zMZ>76vA>%_gI9-5#P^K2`|GeuWXYUA029! zh&&a%ONMlYz4RD5C!o@eQaBBJT9c-4ZLp98Li9u#ahskf8VR@jZ_BnD`s`)3HL3Q1 z%kig)Zhs~?lud-jyu$o*+tliS5)rgSA3bD+eZ3bFPky59>4(x+of^JPesI!|+n}SF z1<7EKUD97>%#CW-c_>MQhH6-X&K=^{3)GSe-HU)94+>lEB~HTH$}O_Im>S@%{xDE3 z*AHdhuh0L-hJBDO_S%2(9C+*mEz_D?0Yo`%O?KAo!$g+>J?rg4$WD>Y;*kFUJGbRc z6<)MJTgCkK>))||E|c5%Zzm-ZVIRC%NZ<;mv;;|R`o0D8@wh1CdPXFY?2>CqLj}a* z#!}tJVL-?5n2YWoJ^EMdb9P>b0a1@~xJXqqAVZ<(S#?@ML|ER~^!`&b%oKmLP5&?p ztjsjO==F}G_b&&>vLCadzLOITp^~!@y|VG%a(xuOSsn)Tw5Ozd($N?-#1c6`=1FJT*YdfX=T5h*3XSgO^zxgE5JvKzo@~ zCA5YKsZ@!bxe(z7X54u#Z|rH2_M_w54F{Ug-F8p26Ms%O2#A`$4*#DEPwMRGNrwD) z2FRCi4_w_>GZ7IIpi~KJ?zks7pHbG4lP^>P8|l(7%COI^IP5h0xE>ki;w9}l2c4{Y<9>uV z*K@AD_s+j`sCVm=H6P0bzlmR_?dB^$IV;qsueOD~>N%;5w-P{w$@#7=&MP)lhA3b8 z(+K0GPfAl0#(}ETU?Zlq2)3otYl99M(JhxWR%7`!aNbSp*_Nz?ukD^s5>lDb@g25= zAKBFCiu`$+P~-^WS1369+gK3!8NJXBs~)&hO&iCFKxG6(9{7EAn>Z;_+lV@;#twJsCgvcoHQ=evuJy{C@dpQ?&N$FA6 zyX{lDw2UaPrbLjdX#~t|Q*(NK?!ZPP>GiXPEQmOoBtGKJKUjPv^n+Ro_jvagt4a~> zL4N2}88EGd_VObGLyBye=NHEom`RV`J&lu<)55urfiFr1@41oJD$~(Eym!*qv`V-| z$b~&<6!MF2_F=NPGcS9-9Mq4-d5?U>=a>t}E|GU&?lk?Ht&36)@ZLN$bGSl+mI!qJ z8##qNHm}G^!>?mLYeC3Wy~`xX|9xF7@v{N&dQ0|7{^DoQt^DKhn_`>3)R?H_A$radeK^1`((5s7o`n z=)AS&eSzj|_@#%KSW;fC5aQu~Dz z|%@{WBdZu>yh<~#8mql8a{#VOZjVe$t3mMcq4i$KHY`U-ou+p014*?w`%VrSBJ#ml7d2V$kdq0fnQMfZN56sn?>ZWD><72{^a5QTT!rgNpJygVIgni! zgRr)2Cw%wpqmw$_3_UiXT76!G$mXlM!F%IT=(8o#x%@I0T&@&SsSR@>PKiIvj$zYq zzINeRM#En)_>lFCRk9Z(9tB;Ad|Co2BcB=&p8NaH_LW!1^h0X4e{Yit&ZpMNsWXO-NvW4N1$$nT!UA`f6*E#J>a^5|<6K z$I{@!%_k5~GYHj5k&$V455O|>I${1G9iE%zJB1w#!Ty4_ZX=%GmR5uZKYINOI--WC z9S%rPe9`&AEbQ|QntWRFN(plr+zqabZr8&t<~tIfPfb8<|I?0rnH`)H{~X!J-3(7O zc`0YZG50i@_G#5GBIM0UN2qyu8FFkcrChe#gCzy)2gD*-;IwG2VC0CsYgdGcz0xM& zgqO`DQQ8(r-~TCtr@DxRrV^bdoq$_ZHy8v{iI9uaRqnDKQj}f)(v;>;0r*g=dU90@ zBPI!=`%Qd!PUdOOQ+t*Yb2v=T@qSK$%v%jBD)qB)E%Ew=vnP4b>dAWfxN;uEY)0X| zmNW{oYXA0L6O6)f{XUV;mXq)(+Jb|CQ&c8qISlIk zcbocXBfLuKZ=*BV1o;uqE8l2%-SXLb)uQ zLsWdCUO6mN1`coTJWkM~M?e4T=%dB=As3QFQR&yya5A&rQb?Hr`ONy-y}XhKtg3#! zZ{A9xlsx4Y8!8gyxvu%5p8OrKl2iY^DSZrCK%+%AG4`F0E(wq)*Z?OaUOD6kH~QgE^>WuYiU1z*Xs{SW7dFX?c)X6$|gyU(?JoRjll{GKq5_ci8NWXS*1QR6{O zyhH?5-0UbR%h399CJi#wJ2>i2*N?x)w3SCzXTbSJpga9E2Rfg6`S8CdUBEia9d%ll z6$NEvj~L3d0cFAk>QI#}h^jo$D(fnPrqS`&O@n;s?a+S(D=$}|jrx=6l|XCg3;Zfw zla&XA0-?#D?a9!Mn?ipq(@r9m(DiIlLfqfs+TQ<|z6|BTeV2|3U|*irRmE`3Ij8A4 zke0lQ`w-8kWp^9#zOj+dj{KkrxI(mPZ!NBY4bcOwssR!-q`4M=%hJH|Uw-Zk{|el+ zRqNoPE&z7nfJSd^Jij`_a86mL4p>=EU+8J?fY+<{0z8WtP#6uz3oV;%Xg#f;&qpVM zMyA9bjwla<^l*XtjhqO4POWG(2yKO&jn5p+ZnJRR)Bb$*2+n~VT#9@b^cV=d=aPU^ z2#qFj@*Hd}gR88~7gNmz_#9{KXzfCa{_-$iaLY~sSJ69q<|3SEFEmL*^&C5@-JHHn zin)ke!O_DLAMl(?;#m68-gaP9w;%n6eGIKbtZua>&JZXp-E~fg1`QYJT|Zfp01N6q z5&^>eDEOdvT=vKsDA-3!XId{o(1I%MDzz|r@GamK%?cY@nrT1kx!M6r)TB-~9JtW6 z0{8cAX9!V{VZ8GVmKC^670$zFjq`N$<}DN0t971{lJsdi3GAwJ#r{~Bfs%&1x1vf3 zQPb+LkNe4lC}QRPp$aWNj~faL#CIgY#O}kBWn{RY_GP9)j)(=7xqXYv!5)F6wX%na zR`W2?r0TMqW&v6kNRq?6QXr93>exfW4dA&mW!!4r4TIFr33YtPP~lhSQ+h1|$n*BF zgRMX{BtL!p(?sF`Sib$Y_K2Sdkz4*g=pm|uw0o{&YfGK*QjKEn#@7|#SG4Bz&!a|( zqzfo^!BU8ER8@H0OoRBRZcz`dWS;oAZz{9W87qvAc#e7x<`l*5A#Kji4l zDUl#5eZSIczJ$omzv8ATbsxNVTjEVKUjbg-Hg&!vW6%{L=pz^I2}H%a-erUoC@W;0 zrzM;W4I0(@_gP~eoR05EAHOZg@_#WW_l^fe+Rlr5C)e=2Z!bBLfe@{u7&(gi5h%ET z*+9X}8NsIP(D4nhMTECqe<+ zjaf-KF+`C$^Mr4A9X`*jEnm&9gd{VqgEF%joP)dcyq6mPt|pE)^{00Nt0Y5;lgB&o z=AV)KmBxy`>;~OB`fVKavxfUz-YCK59;^G=??Z5&Ds$S@K>&3ewG6+x&<3B|>A6V~ z1rQYj#n;Tf7hv`Cq`^Z%TJ$KnxjkNh8%1XPbbR}U94U!kAt!wO16n7a*ovMfM@26^ zHT`iux8ydz@{8^hh)pAmi7cE3h5m5tJmCKe-7y!vB}C#uSN!HNI#o7C)d$pZ|RUwL(e>00avS8Z$#}sJpV(h0xZfy2&%>Otq zI0&{IVc8|y1SlzTNz{ij7Xrra{E^19q|I+8wo-JBQ^lDFOTGuZ<+<=+}V+ovHf&@J@2UjrmMQ~vzmcL=6t z>IX+9JK$w5vp+4~*D7u)4QF3j0z}LHXOoExy<}w6JmsbWlLN10U)GIb-`C^OMfVvf zXMDlO^|BA(;*Zeoyg#u1>V!#~>RW|1&z}o-lm}sqKg6S}eFK_g?Um$zqGjAc zsGfooZ~o&|a!G;$+xSztUsi$k<13|i3)nMapTgyVzxNe4zJ2JDWkpT}qbh_)=3pz4 zI)4!F87y48Wy%k+Z})ar%Cjp4L|3&R988+TnY8eEzvYPj5uBTNa5%i==rjx$ z73%tmD(Zk{<=0&vDn?}c?q;dXw;7mX)(ol*je(|R%;B1^s;Yj)gl+_aZU=3j>eoSi@M1_ z7Im;o;6N%9#evGxpUUs|Hi8H1D;&={fV^h6>`%uCkayuWx0D|xA`bU7c#C}^ZPxF< z%J`Ba?`ubRxZ=r?dmq)wMdw859H}1@=_f?lPuzPdVrenwWJXnh>JX;>T+gGJ!Cn|e zpO~$%Tp0EbE^RL@hu3b>^PHD|!Eu|aNALd8qM9hhoidXi(0&zXkkGmX)~ah7PB(`j zv2y)xZDu3XxC|YP;pdptKvKQ$fF(SnPJRDjl^A_Yj_dDu)DE+{R&~$Ya)89+I*UH` z;|#s4Eeg5Hi6%WJE~#zjLMXA=R9AKlaF&Ui_0Sr@-hAm?vls~qlHc?2GpmMwrD+Y5 zriU==+R!%HwE#18OQ+bw7eLYBr7zh~IW*WRTAc2g28XLA7y36vkh#fXr`O^kP`=)L zB=(OGot0AXcW7fmM;Zif^3X1WRV>A?^`=os35@vaARh&fcQ;eHaSysD?bH0PUCd)i zI{7tr{3I%|iB??S{|rCZn)7eyuLJ1|fvyJu?*Qj_o;yv<0y~MG_KO{2G#0s8t^A1{ zowFml+JXJ4>6_;1*GjPOY><~cZSE-g)%pBF*;>| z9W>uv)xW!p_ncckJHc)*ps`Qp3(-FUBvO^%Oe>3fHyVVGiB?9z`rF@|Pq}U3=8hx* z%is=-t@FrQ>DPc^h?EyC=OmopSS#J2WX9*N=Yj(<^^gp zl6}niz7D~33C+IVxq!C!N>@%|ULB5}1#Sx=lI-ZXTsgc?9GMCmmfHo}ZXq>0^Fg>4 zTc~Li%Zp-1vXj)0VV^``Y;c$O5d4zS?za-{$Ns%$m4;yduhPOi#(H6;k9LwS2tq5hGGt>=yYC z=Rqxm*bfum9zn*G38m_h*k9j2AF6%+E=2FG_HX0f8BHkVYT;2@AWU|DjQn)}9B(2(VzvKFpBO|zvdOSU>cvGkSuXG(nv@**f+O+g6 zanCv+6A5NB2&jWoaf(B4vXdeCM3ec&U*zbOA_rz?;=Ga-wShTZIpoH_{hqOAg@SJ(Q3E)({K_$|5nQ6S?-%&$`9 zmVoN}zMmfNbCCM5V06`E6t>(x2|d0ch?KhiP(So(gejY>Svl+hIN`9x>N3cQO!e$9 zjHv2?zVJDlf7F9;5>E!$wFW`u+H*do`vPb)>HVIuKK@)7TAg*w`2?LGO|`o3&tOKW z1y>s82>fCQ%%j7e(M~K9@(8g4_WFNzTI_ppyseM|Ke17;6H5aJp5qD9PH)af&%o`W ziKwCa8mN(!3UXB|2XpxtlzJve&+KW&WZ0||)`D_)W@2M2<9bYl0W z$UGd%PP8U*tbnDBPJ2$R1iBFN&N2P(7(Blb@ck7jBknC5CzZrhKmeB+K@Z^&JbfQB zqgt~KCnC-Wq-BvHvULMP%~mPgce;Ez|JyuhZZVeLh`@V6PXgN(qj5+Xu>5fBAR0=R z9!DrWB1O-sZ^atjJA?Gy?$(nV?End@GUda{7HG8M`1r^D2&$tVFkFctMMgFaBXKF5 zh$A%Am0olm5*)uQbe_bXl`~b=R@tnmtjclm`zL&UW8<#OSDXQr+6QJ_l9cGZX{c1x z(jv$N&Gc>>GNV7S{Uo3{2^0M-5k}bG5-LC-z8tR%J4)C2K0c^{z3tVhRD92N?u()M z6+(wN_Bkg4M0268FE{wsVhixAv!@GS-hkexi5Y`Cq)36e=37oQzBg-c3iK?mgQRD^ zv3P9*{FN82Us`2FX7@aAua2)kzakG~H9Z5GIMfifqZe#td21NSYf^=o#_h)}R~-^OwaZvNxjrM8&_`+_Fk0RdjLm|J=8A)^Gc zCwNGpHp7S(=f{XM8B(C&_CWDboTDdywP}96of{3?9cefJ+6lr<_nrs}7s0c(NY<^s zVL0u*pqJvsj`YnWCZmq_!4jvdXy%(r@az-%9dUvZd8fEAK6@z)_b=qSwV$9x68Y<8 zv9%+>^zyXahG`qHWC~p3lNCUA8lLlQzL>vjwB#-v69G%~>ikXqW6&B__d2aA5@KBK zLw}NYf^LO|rmH>fNrfLh>)MZbbUh~Z&riaUjcY4h;1945;DqY1KAO5>#yM_}|tW z0>r`2cf%X+mD1G`a#olb|9u-|v}Puw8|ddB{+O}lR_%7#V*4GROXR7klX}t}hrpu^$A5f*QI$+#mh+ECOENWI!en1I};l^T9ZUt)s%B z5*U_;Y|FbRf!tJ>r1fh#D2uQ7%VB>DU-mjHa7@C-4u3xhOF=a9uq4z1^ZKzbYtDM| zKM+q28(TQsYcrV0d*glQ@_P@7_UY@liMscp|D^5l|pw{4) zTOG@ULZTm*7Fo^!CD&&$9*GjLk_>yn)3OPvSstagS-RmWnJL*voCOy!cF@z^tpqIt z`f>F@4s>52E^buk6w;#9;|*h90y#;(s9As9Z@*^Hr;HGRxUL1C8%MYJyFdF*fsWmx*W(5JKFT@;SS6-GfJ@i= zUeyNJT{+^AIj#XB^+X=dMopkWNEnyELyRQS`+KKXXJO$HW!0y^MQE)YZyu>yfzv8{ z4&HjbP^caK!ulsj17ATnm$L$y%j-gzYFdECNrT@PWhm+|MS(wEpCkNk)r6xLe(!#S+MG;%#bF8 zJxD^uK@G!m;GuW^-$h>{6gwI~xHq*1kBbc7+@F^Pc@tH$4`yHCoLHh(%*}W(co|3; z5%LGlg?(x!$37wB+Oj5rV_DEZg@J6GoQO12`_*T*DDX-P_3;&01KObS+nvWEpVu>G`_CV{S<;d$Ufn8af~sb?^(668PA8hxRY~A^H>nL-VCY!%ZJ?9`d&U`oxppG zkbBj-V{q)r)kF)n4M?`qRWSEp!z;hiJY6AoyoWu{C5XMkqyn+m3^#Hh-B0+SJ6sgi zh4X*a$g2W2?xzaHer7QC&)izwl?`p=8$EGW9|Vsu9=BmOQlz{7b>4rX3YIPtxg`Hh zg+L3HQ#ZqgA^7R;s^)D5#PFUxGXIG^#7u_UQP(Vk?F2RZ#kEGDjmTtHo|%Ps4drQS z%=fc*Kh=Cso(nBJ?5Lef+XDA0;(tGX;eLVDl3qrxOXTBT^TB$r3%4a${qmCe@`w#vzHf8=kD~L8$NFu*&{O}d+$B7_js=7Rd0HM&+oo}*L9x9@%_HF`2`ap z3Sx`5$H69WSJ@+|1J0%Rc6tBA_n#w6LHks#(73Udk!2x^UWJLZoS$CZI3E+Ib-IOImJd17jFb9yHUP;*;&XliBK0`PrmXSw~ht29N+{=HJIS~Qlth5&;5p1GnH4vf#d*QK5itAxv=zt+ z_W1>^xX>&c^-jC=lV%vdw&_oZV&qsePBm7IC9@c3LQbj%l;!DFn@0SK-%S>CQ@rBgud zIq`A0X?$>xs&p9=VztfqvU$-#NsQp->n$MfH#Ny#ItP5hg$oj|oPb~H9EX4OG6dLut!*d4%+*spjS^h!Kh)&? zUv~;5hdS6!3@pQ5(W6Jn*t;bo?QY=sq7tHh{C=4vz>fG^2)?WQSq9He`zP+$L&D6! zlS*Vh28)Uft46pN5W-<9Q_jJNiae@c^zl_dk{yfPpIvvTNz!ED`F<0!+p|kLHJFf5 zjr-~PI672hYPxVDG!lLaof}re{Nr1Se{*upc#!#)(TKdJF9bek59%>$hatzn?nABT zkp0TRX1jt0ec`cs=%sf6!A2oqx;!ChLwbAlDAs!ZH7Q4yYh|smb8v<-(v7q~Twk@P?4g00{9VWjBpiG65P;0|f zh}mA-DpwUol9`%rFDZ%8MNdcj;K4(nk-F+EVz>uSeyfIMYcQirO%5^r26J%qOwd<4 zQdh_>c131xlE}kdC(&_%1SL-v8cmb-1HEQdoe~E>YRfgKkwnA5^mJH1@8}S8wqB~$E+VZvw!dNdK@Rbb0wETrFlW#mI^>iKv{xcy4 zmK@BBoq(O9UK1XgeW0g0W@@I7=ddkYUH*?20lQNIBZcR|c$%S#H9rS#8*^~px{Gr% z*&i1TF~9Rl6<^b`@e&ja-WX?nhPj>3zD4Wkk)!@Sf|a0-R`7dxHPHZ{L#dN>jKf=0 zP~vC%#r(x}aR2Pg)=JKXHa&BL{CKF4ep>0;Ln1;%!*sv3TxJ&t&I=MW$FU-rUgsL* zsRmr>DQ(iXI1$rKi=RpSHhgM0)UCg_1W75W<8|_luqUu~T|g1{0sB1~l~(J4Bj@+= z1K}}nUGzCPu}F^2y%o4|jDHn4@QmperytC|qY=BGkOEsNdPc4``7m%T`}9Xo0dzDg zKeS(;0_B%TN-)$dfgzY0uV9ah?3rxlKZ+{o%-V3VnMNaAHtJ|&$LBI>ors)PlUevL zvCgEMc?s@y&%53uWI>*D13!IE*8#HC<*ll#1kNXCc$+;RKyEUx=#7uVkmkUdqaG4E}n99pKhGXxlx|1WT85_D3;%^W- z$cn5-bL}eHS79;FFFN`@0UB!^J?H*@2YSfNgu5PZLF|dN#*|V)6xYu-ukw!=owT{! zS}@6qwy#(^YYR)FRp%g&71sth6}oSA{KyjMc-4G%S!6_#SE%`!3#Z^J`-$yS9oujt zs$q9bJ0CheD^akKmBQ6J8gb!h7G$egUg7L7cU}5$?{=&Mh&b; zuyksBrxxFDXbJhQn@_;c0@7fQ7F?t&C^ zAiGlG%=4@X_-VrY+3v?2(4O96d!!NrQ9eCK++9~d@a}^^!5BuA#dyH+(Q_AajWTvm z+4G^bD)Z?11`_mwyCii-M+|k}d?=cU`9{tn^9vX8JcKlDTfhHrBRrxfda%?bh?X8d zt<=0kj%*)YW6k`}3SypQt}`$s0-@6*Z>uN0@Zzm;y9%s9Au(52jMgS7TI=Y&#D0~m zRFT&qESMXjQnci?(h1gdW`Q;_10eG@+Dtm61~yZ)oBEd8)GpVBtbRO?dE6FJHmPwt z@T20k(pXY0ykMTc?V}=%o^(=ZXUD9<&ob#Bq~tZgV@z9fS1$ry+>$yXa9aX=MTUdh zP4Un9pvZglSs2Kd3)WOhaiU8nqhHr#5TjK_>3wpK4miJT`NR_Ey5)WlJZ!s4hcaxK z?5=mvApX~JDJ*X&P{eCSWBUR!B+uG=J z5}%VoWD;2$QMgxroms5bc5N6woT;_*E@DJyZ&)Uem(rn-s4(VK~mGZ*5Al9AIccVmY&{;NN**U)gA<+!8k!7F2(iZK@;l5zU z4Ube>qH53`(zgGx>OY+K$eGnnJPyr7;rzW+bd+^`Xy%cByRnH@-ih-BD;8%hc*wcEZmiQ zEMgD5#;Mn+rQg7oCUB#KfDCx2^+z6Vu8J{#5fDHzzblU=~`-vld@ z(EQIV$U}OYm-7<~O8lUlZud3EstWS^O!4{aWyEd_mBk`_(jc%7y@&mT?K=#k zM`J)YgUrWHO#n^PudSbVnT0)f@sZ)KtOj$o4zGe3uR(C$!8T~s8N$7kdk=QVJ5?th}3=%}TBlAPWFY%sPvsv)3_9u9# z%J_>wQ3#D)J(b=65c_&H4T??WWzcqLPVQ8087SmP?es@eBFoo$2^=Shk+Ix}p{?@Rv4%HLbm8r;E;IHE@e+V}}WPg10qDQ7}9 zI)%CTZBDo8k0QJlsrLf;7&|7^f7v?ldohtXm(E8f>pyALRs5{Gcwgm4xGkN?? zJMu+P#gR}A4(2fkXLmW4M@EEZak;RcpC56NKRQanum_jv{?Uuj$YUS;4G*EFPN=33 z{P^_^A8OrZa4fwv0pbIkGZ#;?qkpGv*Z);sftu%kV}eHpVNFQu?>kB2mGD(P+aF$bOk(e5+0v9kAqoyIn+!(u1#DcgCEs^@DFy z7FV$sa7d0&>kB3FN@Wn@*x*NgpC8tWl5|7Ihj;cWj(xCIxOY3wMFdT4R9#5d+=Ps^ z(QKiIS+IWdbh3zE97MjSem&bqh}@r$XT{#Zo~d6!=LI@_G57w&knq$T+=$QnWG_jF z=3qu=@m?;7@l51C!~W2hNzyGpaPD?Zj!cB>IxC7(Jdw$Eln14SnNKyndju6cTMzG7 z@Sy86l00VE$30p;6*E-Bii)49J2K;QNKWq+xn@i3sd?+eBKu_<)V25Rj@70@l=G>m zzR(GX9(@;mdz}y+%l`VY``BkVPiHAHkU)YyJ{d4P?Vbr$_FGryUU@@e?M?Mci5^gA zPB?#G>>Fr%Ij0u_w$~S}?mW zY6AW?dCK~UW8R?jwOF~nR(Q@)PC zXQrspynJlg>~J1LIEWG3if6%UU2ktjIveVJ?^Jk03;P{j-b$6iJe$|e?atEL%*d@_ z(=W*?8S;o8O)3s%ff>`MXeYvc(DAvaErmVh^fj~Hy-KYx(|NO@WU32vtXb-OZ%%^@ zbDoftKQ$`7?CqjjvJ5Mh8UF-T*&mJ%&T^eW(NyWVY3IVIgB^ZjUm|(?xoEQ~q zS=+b)V0)1CdjH-8XgYn_beZQuCsp~cKJCXjDc+k_&eUvZ{rTS2?ua@#(B+V%1`9wM zgaPWaOK|yhh3^Uc`#v+T-VeZhLJMij)8}!{TEdZ3!(5XPodl8m|NImX{iv?GH|A80 zmuwGvh!LQx4#97~oz8(`%ernx`90wIo-?JbI|C|AhmG2Of@qvClvCu84E;$}4{C`Z zL6*%c@_cRNh`BxK?WfidAiDCVI^@O*94xGTmB`))i|Fj$?_FHTJ&CdKo6Qd>eY1Hm zI)UG7d(%rQVau>4CaqUrIR_eMZwp5PWYIUuWETc$LX=XOBpF%Ej7XcswRG`bkXGO8 zs@wm2x;3=~=Nz!7kx)vI+-ME5JGhUl>@pzEwmWl4hFcIPShnu`cnRnOgQQI;n9;v7 z@q6zr2Eg6fo++wp9tLC?lTYIuOU_*mcSV9}&^*&i_nq@EJfZg#&R3`g%1xD7?^pe> zt|z81_!bkQg2|35%5Q_e1s(g1hs4M)STcQokq?!dr|b15PJxmwlJ=%w15aIQMcc3@ zQ1R3IazBO(l{qGCty1Iry8p<@&8KT1`HYpxle}>=hIAP3)n~37FQYCokEKUZC*USpGSbEeuxQQzg`5yxBc?}!#$b( z-e*r#(n1)(A26D!q{~%aFTrHe$26Q_HvfvUGTF&<#)0kU<{J48%bdmm`5%4Scf+y}5 zIg(QU?ahHN>o-0Zyx~TAGgr!2eqtV+QOq&*ngt*`P|rHij&uKvam+LS%7A-XVC*fE z2%^;=Po(E)1i=R+5fR%o=+mi{`=Xb`5i{Wglz1D0^+vMp)gwJ1;Q#vA`%Cj6a=P(O ztuHqk@#qH6JQ9@q$=i0dlNoLK8tJ66h#-^0_s4ez*pbsVX`bj^a)hGAf34k#f=wZT z{|v8>fJfSliE>mOXbqi`bpJ(!^vW-;$Hnx59^qM*v}r<=qit&Y-namA2PtU;>dHYy zfnIJ2d#;h@ck>zi{YwPm9gNsL5L17-pPJ)9-k`{dhPG@f_rhz!uj!W5DNcmd2DG26k7jM-@v)sMdzd9J4So(IQ>7y?N|a7E^712hR`m6b8W~EAyxyYr`xES~X;8WsGoXgVYK{r% zZTvpsYz!c_g2Q8v22k=S4E^F&C8x#xdS7j}kzcH6tlV?Ptt|#Fe|%R(?$(1nkRN{Z zur5R0c5i(w&S5d^+8YHOJ_6Cq^Vbaj#=zFj(4|NhArxO15ufpS6Fz36kDoaR5aZ2uAF{8L3b%nWUuBv7VJ5IuyFR*4Sqd-2Zp6O*i+l2K&vKLDUhH!z19CG}%neM~ zU=4lt3!=IuB5NeRLiE((;=?go#0!#&b1w7X+rnvGR8N3He+dp7jI9Gp@EvRPlnoId z3->Lh*?_{WB9hS99WcD~EpkV63HF08`*qwPLMyh#^a15-@Llizp7LHMNJ=!mtTr71 ztVPYf|AHKmvJ)qTs0_p8qEK>Zc`Kyq)mrT>wZpM|gM5ldQ*cCyw6CiY@0Zy3sP29t zMNK8dw&X7v5mi#6-OoRS=*Y~ zc^QhS5W`oGVWKQSv`EwvK{WUlTv&_t=J0b9C%GF`yVe3xfv@;1lb(ayrIc&C&O9iV z;8jf5C_Vc9=7&~e$zP}zXvk?Ht$>o~lqt+U2lD#_StX7&u)-n{qz{CsZNmMh#RC!4 z{xOv}>~%W)O3(Ofj`w_9blQ3uJ`(6(#hOb;A15+mPPD(0fb-p-#ESDr-hknZ$%`2*n`Dw`qXMQ`phG(+FavC=|P|%?#`QO@Y&^U2$QvF>f+^S1_5-Ic>olWe~DqK1Hx&zesx`J)+=bJSs>r9ai2@0g~ z_+}fi1{rV8Dh_a9PQ=0tiLY2MtW-$dr@n9vyp5QM%r030Tn?dA_hvv6grerN!acy4 zHgn;Ah6s}KjnyrmXG8ME4fl@rOh8$h(8u9(-4N(F&9FPjg!*f)KMcqsMi zw^y*oVrQIb?#(Rjvm_OlW;MfwyY5jJ|8)YLKzX)j1P!9}+#xfqXF}3Pe3YZeyWqYd z%LskT0{%SSCM>J#f+v%9zEL~d@VJBe8qsx}-#gs4k{gQ#TGkyY%hfU1+w_!qni&Qk zlil>|8~UJ;t0+y*ZwuaT&P(w~mVtHbEu}UYLNxMOa(-HK9~ucRtIJ@X%-qxDuGgdj zsQBPojy>-`?6vPOh{1jhP3nE2oEQ9vav`EYsb&c_uAH6T+o%L#1?Lv`32%@I3BPW^ z*$bn$`z%YoU{97XHycNH7o_Y7JH@H~hA#`lftKRQ&`%S%Y)wy!POmCnmM?4tUgz4Z zUgX)v=9LM_f z{K;Kn#Ic#;`HHm*s!tndRYmlI)(7VxJ4rIcQ2fD9)$9Mc*ckPH{AJK?-x5tgjL%PB zwU?fvSqLJ#J|3~Q35LFhcEb+r=;p1coBR%?Ft}y$^1~1vQX#xuz(GWUWHii=eE-6Y z{4Kfm3*PY{9Y*7tXgq(-5>aVw4Qzw1-D^I}8szAL4iy)vX%UF8Nrg}UJ%qxa-35b#A`8)l`oJTXky46_*K9`by=W+-mg)=Jgt?A+Lm+<&Y z=B_T-7bXy6tRTTY2WP@&gKZ!PE$meCVMHO%zJ?dAZ$Ynux@_I4V5l!Vk=$yV0IjG1vWvCIhc-}K4%+0KNB zafeCUA?(e({y{{RX&o+!2Bk6NvLV{&P0H)dYB?wGI0&~oUHW?7k)s5bTq%P+8uZQno-6|$ z7fQ2s?znT(6P&ycn%CN9p{P6Bls1?M5j;LM!ydgc`XWkZu@`1~q}Y!V-3aZ_e`+C& z_RjvRoqlWsg?;tRSC5TC`cDDw?hp8Ls##n{=X)FMHaTUBBv!zIK`U=Xf06J% z;4`YJ|IW*eGG`=jut@iT!g$9y?bCCh_S-e}zGf8I@^=5x_B)0|=2N87GFL#M+!G_dM(H4a&uE0{vT&C=rFk&x#a_mKZ5C|@vCy5VX zL2ertzFbi}j^a{pKC3bpM~&r0_N-<{P&?x~YR7X^rl$kr8)q@xu2KQN-JK>*B|J zV${sk_QCAI4)~p(?-3K^LGRTq7R>`Of6%`96PlU;y=xqe+GpuY3`nvoTP5ie?%NNJ zMpZ7@z?8t3%%BNM#2WJDx|(kQ^oiv>adyY&_>|Eu^%7iYzszsoIo$=v8ES0fyEh<$ zP%CxJj|$P5+tT&lq(SlVTejuF1#l3q!d!Z31LU1(m)+EYpu5Aug`DLNh==y8#aI)f z6&DV}xu7Y?&sY5zu+;+b)+K))vi^ojuJlC%%+(`kmh;MeD}$!&_{CoT$iqBT4WBFc zx#3H`hZs7^PFXKZpR7iJvo-YIYyN#(YnTPB^{snrOGT-x%D|K}4Dp3dg=WWpX z^l}`ue}BCDo|^-`p-l&~pWD#RXwaB5FpTpAgID~O`+$Y@%v|AiC6wmL?F(MvM50!E z`UNj>zbj(QB*_=^Wk0=%S9^)QvuSOkJr7CH;{^k49?K)h>tJczUIhC+NtI5^{=_~{ z)!d0dJdd)vR4)%SyI|aW_UCBmPnaa>@4oY#4_#YM++un`i)iSRPvy=~pt?iOr*>CK z5b0mqNNYStPCDgV?QSlJL}!f+57XWO%V4IyqtQA0OsFN`!pyvC=4Y0;=>*S5`64K;qXBx#1sU@Gs}PzU7#DcrTnM90ZyFr zilp;dgu0@`g8nH9w3F-_O=+)eS`=WyA{Xm{Jy*f4GoLl-NVz&xvgG#ys@of-rPDhM9 z>=4SCx`qg>X zkY#w9>+SNmT?Q?xKmB#nM+m*{?{GdXN{2QICf|nq+roSJgzrMr?1*Bn5#}f>;1At4 ziu3skTA_u5Zg!Tw3t$`j@N89Yt zL2!MlsPgV@IDG#?THtUk6X>K*>mD=C0A5;0tEj?#xU!hR5*J5_2!`qj)`0}6J4fW5n@Z#d^YIa>LC@ti8I#P^7)0Nua^)HVi zbMpy<%^U2f@WU&^C7CkN^{5uRrOJuA1xtj66etmF?65wJXGPT_YGt+jbf{TpD30EK z1QwOnlG`3F0q;W3*u!UKaB{ocrzVRAl`?-*ew#{&{;*}8;OCqH3uZmLsYxP)%POz5 z^(UcMsIdQ=>lQqoYaAULVn@Neg{Au||6oKkGdI6)A1Y;;1^=5~0L}BvnD^ z(|PI@J!&Mj5p-q3j2qRSs^wWLDTRz9$0rn>$WW=!z(7$p0h;5mn@KQi0ueri!1#(p z&>kmb4<=zoeP@1^*kO-I@&5NmjU$JUyjz=>)mZ~c0VnH&eB}`Ft*w}8+f5MjaGPZm zV?xKtALUq-t-?u{LBmIXaDIPaD6<%IexB)sla8(Rfe3&6d#U^-aFXI@Q7@E4HABLL zU;T*@-Sod?1w0SSyB}DbQxYRn)&56PF`Yno^ZeWi4I1K|9oh6VyAM#@u_Oh!4MaS3z;SOk4+hBqL8+eJ6|}L+2*J_%6<$8bnex7d)AQ zD7TmF#_na1AQ6;<_WQx#p03U0d?jf1Hg*WK&cf!^xdFd_>#(pQ&(-^u6lMH2KhHeH zf~r0$@0fNigV(iOUbk~y5GwjPmnnV;I1ggV@^Kv(Cb*a;U9E$-ZtA&kbJJYw^6CgV~(* zCa&LfsOI0b)H_zeV62j;SJ(OsWJB2(uTo>*E^Sm`f*d8P6sG*tB-#UW7S~_gUnWBQ z@9W%Nn*0Q*LvL!);%AT(F6fgpIRk><{y3OPK8Bh98pASOYv9P8H1%U?k6=^xkJWkp zcDQV!KCrry4Fg$)S~69sFfc0kL`9Jo=aFRks;NJMsXIZ#F@pebZh0Z{H;5YPZq4gG zkogO*?7!IDth)<)N|g=E{2RdJ{UMy<=LASLAo8}reYkc|=pgWq0dbR<=3Tzg1<$SG z8IBRtA`0~fkKQnK!2Ucb!L7I@@Lq~4`4)}u?=iP_2KaEV-BYoIVXzfWe!jPq`3cWw z1ank6UM+yxRQ`tzmUSrfINH@KO^ryh)+&$7?}8(rfLcgnC@3iiZdw_Ahua3Ep_8PT z^Ehujb{5Znj;!2QW2sz)^yKX0)9owZH1p~r=g~dzl-+PS%|ML(=FK)5wY#9N-rX!B z^$55-PgdRf*#}}D0+ zBlJDc#w1!CgZpG3&n`K=k-+)b<=2*WYKq9+PxI)B?ICRjY>N*l*I| zNEy$Gd2Qj;XK5n{kmjA}x|uhpQP5A1AJ+f)kRZJ(o~XS6jSPbNX`^I_P%yBS!nxD< zJFEwHV%OlALkSJ&0VlpNq zfiyGpxtOHZ;ASYLPIv$%y2yHeQPcqM{c}RH6~*~bW#Exd-gplY^YLxKN1W3!rXN&q zoVq(*!suuGNT^#re{6R^T7WO>4XI46HY3= zFnw>g39&tSKjk{^KyjjmsOxw&=5n$gRSK&HeJxLB&O1LKVtp*#AfE+=r7Sra?~$QP z$El7Q_i&<%itAgCXSh&Tw)*MhRw9(+syP&QfdY9lKS}tF=WD0E4L@@{5=DIS$u<-O z6VMxGB5Iw5IWwYXioI}Nqo zZR`z+XB@ETB0?uD%pP)#6U$G;=tc0`Rw;>Y zC<>c@nxxEzhJp#bN$#w}_ZP!_3U@frv2$6{Y_YYVML1Y$`Fa)Z{^gDn>S@Q{x3Ai| zr&&OZ-g&zFQUHj2>MN&AWJbm{34@uo zhTuJ`t{h{J3_arMr3_CF7eF5jWitLT5+kZ-i2@V2hj`cgZERlZ7Tix-OpUm@16k*^ zLzVEoawK@gpZgy-dVB6wi~nFWI4Wz&9LUZC1!V;5!@n!w`LO3(;XW<;ITAd!RkZ>I z->Nu?<{v>*fVXH{J}qj0)8-N>H3y6p+Ak{gs8H9LD>TDY{@CC1#I+3bLRBxk^;*Nc zPhM2#omhbL2UR=k$KO;#1CiU_l@ubRrEyzJxiJvZ1B{OAOQb=$tf)zS$shR7@y3^$ zr-N`p`9mHl(_fqaUSH%(8HZpp9>~4 zvu4}VL$Duou0!DnE^_}MZw zt^llvTxl=(<-$-SPeVP)0yr%5)|P#0g^yL6ve6}taHgw#IfS?pniKaj{dML*Pf4)n zazhc+y%DUKj4TGb<02c^j}f5N7|ok>d-y!;?-RKH7W>s~CHL>NECJ2xSs{AAet1#) zU64Jj4)lu5#_n<6gq$zLcibAV?-$*YSOtbCBR|U^IrI8wYduzE zQFeVd?i)F3be_|vf4&8r=vz zTXFWHiK48ztD5PL=nG?etSD?JlTxp>0o+`!l9M~({W3wsi-;9sls#>2VZVSqYGy); zOKtmVEQ+%7XXDAy83h^?Mb3z#BhIrO!(7L7qUZP6dS{?^>6$yk{Z(+7sQS2XB7g`V zG4iuk(W8^gO+}kq%qVNO;vrEpBhpvXrON*_0F@8gQnafk!0_$j0fk~N5O!5xxz0j^ zUijz8bYH<7q-*szh4MRKXFP2|AM?#GuTaf7G-GdOoXj_E;xSmgxSG*$uL7ki1U6@f^ z{e3>B&_0+7o4BPY&yC`BE}DrCOu&^9UbD$(is;4xU$wUs?pe0CykGUCMDL8-f_@k? zqD46?Kanp9(BXJGpk9v|Rq`3Qtnl~1&CJ`=isvH0s&Rob%$x>YA8QDkJ+T3fPhiYTy%(}vU@^{@*`}o!!mn^!29@pu zRbAN;*Qi-Aadsn3(!_rF7fg}oum|&NC-s~*=AzybQ{Gq;T7YEdCRvB#L);JkWn-u# zfF`4D*;@XN!Htqf!zS2Eciiw80m&`gA8Djq+|6nSJDomn!(@Kc{hxiOo-+}8UN1GH zc7*~J3{fiwS?+@q6FqA|bPedZnme={YXz0KKx(s70%*M@?QBY79r!z!Z_ee6LqH(W zSqi0okgLs^sCmYOqU3p)@8G_rRyrxO|Lrm$36K6d_H+yWjnuL~Noj)*J0hPxYL~;( z(~e}{*cSNtvybI&>wnOg!RwZbIr}rY2F>SEo>>{GK1J(zSxw_tdI}7a{)?fPW>=sE#dY`a1|1$n?~4^DbU%pS`&wW zB@mqIrK!~KhcThPK7YK=d4^8;uYDeY% z0?ZW%Q&4)X6$Uvsh1b$eaIY{W0Fz6~A&-_OwHsjST zXOAiv_}fijywVN6pB&dRF0i5&jqnE+@=+icWl~4IL5&z2OTSlPZ(HS4qfet=2SD|p zxg@`n7VVflW9zPMfPXjj4vL%q!rhKY@+#dC7`wt8dSPi4a`UE>c5N`%&#%jqF8@7D zz30es z0^HBacxb&?1rgcj$LJ`CQ4dA0ZsdQzA@1z`z-@Ip(Lnp^kg5KpWwd2H&ap%u{kVBj<%)17zvqujyAK>0`<)qm5)CPz-5Gtyt;J%e0U!|JsQFNZorZ$4E92i(S z76$4k!TdqD;8F6U$Z^f<+7A^3l?C@N|5dGrnvaq}5%^x_AgLlZ$I$?9SVC{B>^_H9 zW(TG#-c(5R3vYu!;|^5xc8t%LufQoUj%0pOCS=Si%td?YBsiuR|Fhb61qW#+>*u3~ zPynVqDL3LFrMdP5wH6y%?RoI)+?jcpDJ0WrWnPB=u1EStVQ!8SQS#qr0TyJ(c-+|h z>J5-Qql`H!m9YKfzXZka-Qa#c#E3+O8QHF#ZM3Z*M!Of5N{Solke<1C8Nt~R_gE|d&U%c%z)@OekGH6zhjc=JI>J`K zWTDV|vXLBxe)D~iXS)EoEE;TzcUh3BUb~D4F(ZmNvB^wVc@mEQZIX)|-hgnb&A2zA z%fOznUrVPs4gW~3+zbZy!8B`k?5FK080w!8c__O9rjggE#|j@q!it=4!--!&cHZl( zu*Vw6Zd-UYh?K#J_UQGdu32bz^WpmEK#vMizJ^=lJgS$}1ETdOG$_C`df1SwAL=Cz zG(zzIyPTczpC`WmZr^DBC(w-l{v_RBFBSZOq$9i9bSLwHxGDf!_b7~TXFmj?po ztk?LF@oWA7<*^Q3A_WojBjEUJpQlT}=oCHN_K5&7nFtz1o3uiM)^=z~0TFUHI(Jb* zX9-Li*FS{ey#Y`DX^o)!R0t%SGlVT&Az?QCo9Z+zGFcQezSUU?7k`{JUnk~9gX)Ya z&ou@>uZAGYheiZ>g%@V4q-?`TtbZ|y2_q`p%O>IVh=U&|pBhea`9P9wY_i@5P6R0} zvgDhaaM-Hf)fDQFdF~1~-|WReWrTkwnNSWy$Va~-5Zr`wdx0)8vD2`?raEJwMu|e~ zUwgF~Z^6d_T*5lH2$82RJY86nL>;ol#0-puaMb;-AB}hm7_fF-8M~bbDQT)wUYxv0 z{A+*xkw79E6*lXw#OPzX znw_KhKlpLV>gLWXZlua3kxt%~0xz%BiLW?hfal`yhF8usMC#jN&i6P32QBKXs|>=p z-v!1+yx%v{ay5!FoCDDUy$Pzz1DF@C$x}GVj|K^Y5Wb%;+c!`skFG%q5nuWx z-8MMcFEG{Z@eJfH8S5I$V{iO>1q-g70q81G-6&Ij>d8PS6J za~Y;x5XzQ{)(&BGx<2k zA6%R^#2lS_@&U^hBs|FVZ6bY~S3IZ?*;VBe3ZR24ix%yZ3}{%x^i`nSFihzSNAg6{ zqwSCz&^LP0~h zZ~zb4v&apLw&4y}bgsK3DcW=_JuQiQDfiEcFl--^qg`JG(US%Hko(4j(&~9Ih#%he zyz^uoc&bgZe3{1KU2B?K-b@>$nP$0U1l)%0K{k)k!aPuW&ZD5Mo(*(d-^bs5#=UGg z%dG~yPqEyMy)E~R5#dYtJCagTbacYAE)#R?ayf(wZND)g+8m+=MIrosd37OQ%%uuK zKkwY9tQUjFm$MY#sh7bhpWF4HV`jjw>RRd(w*~{cH(!v69>Bni38}s5GDwdJ>lDXq zfLiD2j6Q}rxNTj_uJ1ho&E>?Q8Y<+7(6;(3RoDpZB!5awB0h#_B10LR@Sc0N$DvEr z)(6g9luoqPE5W=STC*o}#K`H7N+c6LumAS?Cx0gT0M0B;-k<~}R5d_(>0%%W`o`-} z{ib{xUOlE<3R8=Pgp&`Jb=|k%%A?~WiSp&J(0i7S9edKQ=P>EACd7e2|MbOh>=#e3 z`Q?1HI|ovwwgb;yT!GWMx(y20|M}=v#eNa@0rZ^^{@0pBg&t0ouhro>WOa|F`_Rrh zn0|8%DwkS;dA&dMTBnm><#tW}yOmyeU2FQwjUXNBoU#E^CBujMP*YcLXwEkB9xNK%-;Jiv!o>1%HCw}y*GKT=S{EgeD2@< zyRP&6evhO6q~`*JeV5l(@R|YAoS^$xwYDM1t}Eof@lCksEOTF%NC<5_e{{Qny$E^} ztIwW)nF>46@4ZqUZ9!m{O7?mHDGGke7$s{z1Vj~o9oWu~;eP!|HF~;La12ywuWeyQ z&Q$zu2Y1)t3nq?moZGjQnj!9`YJtA4mRTfXqM#bQa~<)&8I7UDB`gt0W6fF9g*X zju4?Bztq2S|FuJa-^Wjm^exce_I|Ps_o8j1W*aZ^R)E-SjO@)@EfCn&Pb^725AFPA zR}a(iJoN{M+V-<1n7FX^+1rH|`zq%ez1A2Jk%!vw^Y|n9eQx{JS_5<2E%&6!{!PHD zpTTh^%Sfov5Op^EjJ+#=Q_tW0_;Z*i6Y?q2>Z@+ZN%Qf z$eJ}I?>hECA#2z4KQwFLqVTCVt9T4#f3&Ut`j!dO{)2fhFO5LHNqSf6NpfWVXR%H3 z`8$wivY7I_8xDsGHh$tis^BYo#-*#5IZ<-kpIh_1WXPSRf>T&}6sn)|s%1W9L{d#0 zZt*%}AgK|w6+;{apTs1Fo3HVpH^amCc|K7g0)Go57u-+DsG|@GI57_wZ|vu_?J}XX z(daI5yr*;%;n8y0SOb)I>>E_GJDavvK?Fv7%wtoE-Rt3jz{EA%+pOH`MdXs3E8Fo zCoLtC1zC&1TCb|9(fXsqM5dkt`0_iUMs1`Acr*h&H|cHRPhgN)Np>$BG935hU3(8< z5!)rVXMO@@Zng2Htvon#;Ys}geLC30D`oG2IC@fLd5u$dADpg`vS{IR>Ypr2`G_l+ zzdLjF)C@Hh@*vMT5X8B(R(i%uHaOpsx$Nm!jeXy8uR@s=QW#N}${DNFD*SioH4U+{ zJOoH=FV)BQ=`g9wH)0tH(fp2wbn~@s5VWM^pZOFIj3}pjwU-c?syr*VygdP0d}HYi z7w|pgNiOfmkI&#dKGx{P$%aq_bKLeA6OuAwwU4l%Lw7$&8~!b)M7ko+hzfL>k?@DR zraMm+5x?e~C==^LkRPdV$-=zyy2X2c1nkmAGBF-ZR_P^^O?i!)C+SCiQRctxokF#K>?9O%yp8Lo0dD4{~iX!fn*ych9 zV$}Vc%((GXFZ3s5W_sTJ06s0$Ea}zQujHvGcBY5~b-dP_{ZKv%ry6GdEj2I0f>uko zPRRtkk(M+iWbp;%;jbwj$(S3UeX7;Pum)1k%K7HfdP2reW}0W*WXP>U#^DSN8wz~g z{iX2}Eqe3GP__g6vbdNg~@QOpqRWvzze(A5(%B+Zk#2Smc^I|GEQ? zq3lDlG*-l{ILYr#R}JZ3{)SHLB!I!Mp_&isLMZs$?aJ>IEg-G*i|R+N46NC=st%Cn zfC=g4Zvj6xAmqZs=vl1_P|B~)2>U>RZuzLs@3S>PntP0a(55d{PRbQ zD#t<8iBvP?&L%K7EHK^|#QDy&?dMXy@j!K?x_ATMYxmp!t7F|NhL;o7C1H26;9=b6 z@CxrV^t2X7820{!*ffp#r+t{);_||=AA2hkqlwbiULQe9qbX$ae^!7#f$N*-2TGK7 z&FQ2qK1ZK+An*LN%LA7(7Y&*jvp`JUzim{O87aJ??i(FqLHGH#^Yw8L&(J7ueI;uj zeyvBpirUA0`NZw)5}YG?wwLs!W#L5p&lXzPOfa{@LstLR#(%){jxU+= z*cX^6OAuP_Bu0bN3fY_m0w_V7o4-+d20plV%qXKp_%GE#C64qd+_DooB~R=oC8BFQ zH`3Yp9I~7)oLz8L0-;-{qRNvAkzbyqgX3W-yc;rWLDY#l>3t3lZE%vd8?uJ{K^torUIG5Ra_UJ7F zDo~;68}8wZ(_PT^`ruK$k{~kl9Js^b zFaUvC+c8!}*vqy;9ep}u26Vo6MM+{#?e{0wwJR`xP=`i==#|+%EQ)i9MTInhtDJ6z z1s4@MF_4t8g7=e~_at z*yrx5gWty-tjYKFDsg^=JN$?I8Z12eZ>jlD>rCK&_el^75&^_P}h(QUc`F? z)(f(a)g+z+;t?E1ek@3jBO{a6X$zV}^yM#=lB24XM|Vz0u7LbW50ACuM^K+#AAu4l z?v;gpJ5@ii4d!uNY9}z4Q108sVOufGnO)T@yUKEpnY9gy74@oa z&xMfIl=See2V5vJ)1>hqTN;ob8jBeD_k!Z*s^lVPE>ui!Iq}Ph4b^l0zSw%1O^FokOnNFzVIKBX z?M=qZvF%{BQ>XJaAP@8@*jjm~S&_8&xw|gB`#`a0d6D-^6U<5;TjEJ0M`5utDJzgG+$lrbL*4~$42qt{U`ss2L4Bmaxf6wbFbS5yb42kanJzLp(3dS;MYQN3U zNiKk*s?W@^wM!#Psp8R6Hter-=$L%rzX9G9&cwa(AHh?pV#3K`AN&wQaz{=)IFTdhNZpG2>%(y<8NVyuZa|OB zPXs?nw5f#_-v^b7lB{TRa6n83`}O>Ee>N1J%!Bx_VdCwFREX!5m|u$q&Pf~!^W3ve z0L{(n`ju-w8PO^Uf{-;;GcI#>u$@g*h_@xUo?N#`*9 zqZ|e5_Jt*Up6lQ_b)Z;(e;}*X_1EFF+<)@Ezo;8 ztz;#84ewDL<$`Gi&;ZFd>qCWRFjjhz63*TUGPhZXY2OkfpPXaY+yYnNX5r@4C^!CI z`;$}m8GeB4PQyH+Y;=fJ<`HfGz%RHVO=3{PE`WOTM+(RLzJXeErpST)b$EV9zf!;Q zFC1+W-g*C*294BmziK*M2l`R6M^{|dVOdNmGUzx5a{p|1w@c_PSUt1$)4ekS?TZF- z2d_BM(G6hw)&C62*$&%x6US8VYZEA%{f>qG%BQa73ZqbeEbaZxIvW^ho}I3}LyV5f z6zkIA=fymfwe!1-2x{C;vIzWm2re?Y;@>~u{pE|uYU)e)9`oi!)2Z(yNOjD~Yt`cj zO6Vzm*oWse`wOGvk=<(`db4NM0q^~|dtHy&_D;flm9|x9+&)~=uyFI6!yNwOs&(&Y z58?9*( zos4yGl`_X1@fdIn(c57+#ow=-Mlt4qVR%2n{GNs`71riT!^-(-QPX3~v+!UXDUEU8lnu^9dAnN}JB`P!o6 zrHheZdh8y+*~Jh(dHEc$i7Hvs>nBE6w#vJXNsRzC zn@)^qZdciwG#fRKJe`RrsL_#btC->a|*>sK`c0MCPVg0lEFoDbk`r7S;9 zbsi9yP_VfTjzZzyMPKT9P_ygl@)^_Ymy!GF)0;gHvYRa-Cv|~f?^j@@i5#HO6nz463;6!x> z^i4aeo$zcUVTd>u?`hQwB6LJ>@8tW-2a!wksO26OMxBa-;w1NqE77dTEAwB?n$1xZ zNl6Fa97^EDSE`3~cz!MIi!uu9h>-YA3%7#DDR7f?lYkQQ*HN(oFr;$vjGfj+;I$e&H_`q*G#E8U|CnztOoaT zgx~L8(s0rOUtwXe?5qeFRSTcofG zN+3yjm5~5lO#lA1!MF$17_{_f9)5l#5j8rxLlt~BcorxU&YYzj zErrJY)Hti%LAYxl9(woWCOCR8`&tuhz{|#SHQzAjETHal75m0BXggW#PVh_SeVV|`;>``2Aj}gwel>jJJs6sxk1)PqF zTDdimp;)dSoGvYcy(1bRZl#h?PN4M6E7bunml=F6|6)(W6uPPOjb;na~EE z9|e0_IplR-8XLtPvJ`8ptGEjeuN9``^zpfEC2Q_{`k!{pw_foIQf5T&QzpySrY}HR zL=_2VwiI%cBZ}A5YypWoM?SaKjKRmLjQb=tNig=~aei6LE-bRVB@Ip8gcxf!^P>&) z$mvG2G(%4)G-({o>STz7rQTB-H+M(j(fV!f@hC>rTGZI;QTPum&jy`Y(q6}Yl}>(t zobwl(kABDR&xw3_w zRv+`-Ss3>AeyQO7hwll3Utg=i=~X<5O(P>ZVICGXcAFgY^OnOKah`_rxbo)GM|$ME zw@>{J-$Nzhbmh)6%OZ1|=OR9G0*Kzftvx(q6dI}pd*~9y5$%B3Vca)%beytNm7!r9 z>N6?8mb3)zpP|LKdC3>Hg^!Dw50cF{P-CWF=EqOgUw(jWq#9_d>olaPO#peb>Y5KRgWhW2Z*AazPF*0&dGpy}$C znV;r7$X@exZF*7*Pm)4H?FTkN!?4uh`B|9Z!Zx$o85o} z2J_E^avW$%;!Ul+#T=wZgr93JJ^-!WiywF}UCe(dhV0h$e^6!F)HLd~0x?tM?*%qT z;GpSMw@WT9I!3&~B}6<4SJ&dp%P;Vu?OUQUCfJLcFXdRiiu;eS%@q9w@4o_npM?dR zF0g&?f5uoKABNm~w5*RFz>sYB;ZQ;^P%!l%H^EN0meAejq{NKYJk;KwOZg4oa%H2k zS02M{#_un;{Rq+4ZiC(qqc1$V$N1ZXy&Y`M;)OPzQ$3awCw9LejBE=A$jAImN>cvLNv;x={;PDx{VdsavxlfLf;W%3rY)qf|O4!8E-@ z*d%2&`|D1Dm?Pc}IMXhG%fVk2CMHJ2OP68%I34$|t`j_@JHmweWIc#E@V+ZHJjUZI z^*flk;gG)XiSVf*aAlJR`Fo-4tPajFk3yzf#$h-WVsiKP@&X2tlVCQ$hpMGIJ15@x+3#Y z^)bGu8qwtTV1HY*N%kKzN?LSbM&IAc9{ZOW79&x+7@~VJK}6&E4f`fi>gpG9(yFcoX*zy3*|tk&5hEkesaVrPa&n}wh3O3S3{4oVSkv_F7@5wN05Gju)h{_ z)vuJL)0w=-zW8~qtB*z5(NrLd7PlkjM2kKaBd?r?GihOoUe#Ra-F8o)Eola5X(ao- zU1q@j!{id*-ICq?*F#YomD%Ti;UPrA# z*u?jcns$6nn@rHN#CyJ@!eMr%VoQ)NUno1u@D~hvb;hi_dO)UM)j_$C4k2&d7rAto z!6c=EM1S5EOzxglFD_(2jgBAp`sLQZmvhNGbbTGNJD&G8;olWs>eAG6;^e4dep`8~ z!U&SfmAE9W@O|)pP`eoJqi7p;-e!|%1c%YLv9p$Q;CNhU_2!WkXl8%9dL8GkE=_Tp zoKon6v>jaqe*F72a&u7peMSpps14TTyw+Is-*rv>{^$TA>;7JA?s|nfT8aDRLk-ZJ%UH zzH*qnM|h|4?k`YLB1%8D+6eC|Eo8!2{sLRh=$q8>R+tz!zp*X42)DR>N2xgXVX0?> z_v0QbI+euLz)ekrqEw%5)%@B3L#uen&`d`3uS0Wev!Mslo%KG_Mlc}iUH133nD@?D zy*MlWr5XNvCXi^>y$r+jDkHY~*q8U_ETO~efAH{m{ZR_cy>K8c+O1>m2ezPc!kc(b zh3>3hv%;Ut@hz8u^F}NFXxPo^FoNcSNF=CRW#1E zh|+DnVnQqW=M`nH_rMp9!UdTEY9uq@(tRqY2!d!s{7+z>dx!EIrxx}fm>b@1wdgzN~cQP}2=du6S>psrC*F99?!1*1K(W?0`x|l~;SS#}1tN_v>y36~~ zp9p*E#QEz^EQ7Pnc-E9QX-s$L6eCt#82W9gpvlLACHW!__-BZwTmAE=jdsBu3eOKEsw$KOsH$ z{>^(qk|?fb_Uc)}Di~vQP)Lh!1^dsI26{>@aF1vGv+w!y@a~BG;|ARC$nDpOzs4_t zRAvVm6pLvfr{5^+0ieZp;h7g zse#NCSZEgVQEZF=1?Tj?#siTM*-B%jX0iuCeCQYvo(pG9dCAv%R|45A^S3vG%&5db zi}tw+_OG6Z!mzmw_;Y8(rH*6~%&a-M)USC0jaV6RZR5PAWJa{v z$r5xtEe>|5ln?Z)df*9-W(LtU%%_rD2qAs74Ls*%jnDn2K%wXET@aq*LI(vJIXgJF zb$meMs81IqlDa9e$uNP>r-z^CF8Q;gY#$b?=TEFaB47XUF@2otO^`t{)r6?R=CP>7 zem*==zHag06d}sxlGk{SxkQoGPddwoiBa`N#^^9t47A&9(iquQLV=reZw2Oo20h)x zta0oM3wMrXbjpX*1M-o==Sty5T(VK45hVBjo%u3#8 z3vYqY^BTQ}Kk3k9qt2WZ&JA@~-*#^wVMZ5(?yfx_;6&<~i?7qow?Xc7*qC_UFj$$~ zTHCcggx>aZFVvb>K(&DP*3-+vNUcwhOYgZc{E`|O;1^><36Cme=57vy0sUunjmb(# zoK}p#lqZJ*go(KocgWDq^?@Ik1(*?SskmfNFy^!nu$z2rDue=(m#b?jv8z zPg9}cQ>N@*ll+MF!FYlvzSl$PIcnj2oC}Jtxh6EUggGjLcD%fPaPItPI~EUmbmF#> z`T1i+z@k|jYjlSlH4ddm#L_nbS-?>}S4}E(Rz>(6+pl+E>`!r{Z)+7oI$mas(|>{R z`&WLwbtXYmhr`lACI7&oC853VW-VMcAHMSH;4Y=UC2#gWEO~bsDD8qbLpl41FEy|q;oH@P*5Aw|W`U&=7;|E!u z7GoiZtv!nrtR_Zpcz*SFG`53>dn>J;>LeT?|HR~RY5;U*h~g!fu#YXl=CA7&?6Y17 zs2}*qfoxvCy=d+f1*Ynm68xzw=v|a>pw%`7I`w1LBTIt;ss9K;Un|0(^|oVj)!{t6 zBfQE-!bOYZRo}XuCas6;l*5b5q$g3(e?Qf4C6?Bk{^B`x4^d|ScYdk)M+KM7sOc@~d;Q31Y}1gO382#+D=$DEfNm2I>YM|ZCO zrudS!4kKB1qc!1x5=kuwH+5Ylv={&W&MYH$cSJljr;OtqN%xq|%QWOhO78O$Gz z6qUM0^0@#=a*v8lcm4&+(_RGQm%DHdM1%VDKLS+7r2KE+2Xhx9M~nkHS&@&R!l0%k z_Gc&QsU70{;(8a?X+IAy{JcH(_R+ z+Dr<4cj1Lw{X*|g5|k6jcVPs38(R+K!<}jf&@DUNTYHDw@EF<>bPze7vpNcWozH?X z#nzPgd2W<0j`$kxFrsL^i|mv*|5ko|!C20409MUaYLdH|P|};7Red5N^w2EBBY3e2 z?B_~;GYw*1;AJEtl)DWIeRS*^WY@uTKW=ZOSVL>9&YT>6BrP4p~%XG1n+C=l`89Z{kOV-Z?M)6n5?PJTSXC#DdHmw-X3Lk>{Fx4(MUlr(Y z?C=FSk|F7ht20_PqmY`*LClN$ezZnTkM%{j;PfkEyY15g$kwd1UOJBgaRj=KW>e52 zr3|(+wyv1}_(rURoo)+Q`0{7c@f@xMuZx%VsZbX8$FZEk5wJ&vSH0%vV6S-dq&mJ| zR&bmRvt3g_GHR&?*G!nuNQKJr>oyGNs*Z{ISKM>;TxdlZ)QqU$MQY~hc1o03A9VU| zbQgTOvnrsAJ+t4X+2Z`?j-axS^C^kX^YC723`LYj~)~zvzKXKqA zxhxgh{d6qYUt$udZ0cGiWmu8gHbvlT+CQLsRMhM5eHJ8PL#Qe+-3Nb(Jb453F{kub zkiC5I2uy2l^enk!ZreiGnG4w?pk7`vV_ksvTyE5YXT%9mPVSq_FEjf8h+GGD7o3)aoUM4Wwd6r6hZUWzV5&vc(nZun|7c>A>83m;)Z zp9`!;s-G~RM@P75UcT-cD&$ee=iM zkMO5P+e$;60u6BzsY-@3BFT=B(oYf8NY2^KtSOHV9n^L}pe8R0FzXV$b)^foN?mDe z*wP^??sE6NOPHUJvvU7%zxM2FeUCWDVJP4@lk*L8Uem6nJS=-hhwcS@aIV972Ii(~ z-@HijVbZco&sMAh2zWME+#VlC@3J;b*GXq!>7{m6X7VOHO=8ow3LJ+E-RT=wuz!*( zKTz+R$O@QN(kmkMA-EY%?QBNLjoAOyE>+s}!@$07!@!v}XnB!#+rJ?I%KiB=jcOZ# zRn^KTic=JEx;_4sYE6k;Mkr6-Y}y6(icq6RJ4?`Xfo)J)TNr5&FbyH%F1YtIit<)3 z&dKW2#VN-SBi6!EYX{yHs5P)WtHOYJAbydr&D?QbZnwcN`1Cf|l~Kkdho<7*RAMu= zCkNWM;W8h-EQlg_@ z@LXg?LsWM-ZqJv(on!Bx-m(vaQJu~j0m@gzVJNt)KTnp2^gT7jr5H4~C) zoDGlH)j?%&hWw%aEc8`mo1C*;09pZwz`T=W$V2&JwAQN#@H`pI({k89ku$XlP@zF=Y!_9hE5UDc;y^vw1B zKD`(y6D6@aQ@9Klg5C)&*bAXMM~kIpExX|8175MopHwJyhh958iwbpYPnXJ1{DLqB zVWzjy1#s$pRDiuR5mLdFza`NQ(6EU%aB!hTx3hldEk=%lAPYrE?7vEA^$3x8f64+J znRQ&dKkWgDv)`L2v!_tE;}u;Q7X<&V^=6Qbgo0SdQ!jx7I#kFX5Je_Lf*w_l-jK1! z`B2^H-RdsQ~%N{55EWDdjd&E z4BCN1i;LnXr3iAdi&d5A&VX4_A@50#I*9WdyL_co00r%Z=jm`;zsN{KN zZ0Ex&h;HZqcIz7fQvPgI*?{vC`!8G`(9O>X;IU=`{Z|?Z?2lKbhH)0FZ zaL&zi=~yS`Emre!p7Uq~^_L5mwwSX)KPl>~_9x8IP?mpDg6DC`#Fma`45wjPPV|S+ zE;A~Pl$)m!Cr0;Z89obRk06kpbqd(9glXlEfwhz&knpucCC@Yo{391t1{Q}vQ|dJt zD^DM=D0j{ij-|tjhOsnrJt;CxBCXz09)W79e_UaeWGG_r!J4ijE6!hBJwd^H3@yoQ zbCKcmW}o15krewKJU0}pCMzF=bki-*DfT(gSIiBqQy&IN9>*f)2bh=hsp-$jY9>@_ zSQJHwbGs44dj9!Vj3{5LmgWZb$B^7S-K~^80G3=gzdGJ72X+hByIX?WsxuVBLCM$` znl8!l?J5Z;+76|fqL%swlFfAFX5##ak$OORWGxo%$J3DW;oe5B(d@sW;C3iGzLX#| z%!lXoUqUO$M#1KX@`V9cBD77tlqt)~ftH%cgEA>d5 zPlpp60;s<*bm>Ag{+^j@{_VJ*2OVDXmt1e)ytZ_fZL5AX5Sk!CHjM&+JFM682_W8QI-Aw_fF0DMqAd(`7IJz@!ZdeEIb4{4u;WCzJH zKjkR!%7`yQ@b>rU!<(_t@t5S;Gl`>!_)3pj!<{v_Bfs*tQJMj1n`-`-hq>#Uc8J{} z>IY08dF}b~TpqktndR!~@BxW}y&Q7JU$AH;(kN;^3lPJ$^rU_cn7-4V4Y!#F8GBO) z!Ycx(n$_*f8+V*LjuO`mUcA$*!)~y3-}!PulMAs~UiSFmGyuKf zuP7A-1K|s4(ZdqSPUyY1a?^QC`|=tCI%6aEgl-ahw}{?r z)8(z>eh*Dq_-P^JsB^1jLev{B2FVop`4XVxo-_xGj7Jdrfz`n8N7Tq!Po0LhWft#NKsh?vAp?tKd9+0h)9@Uhdhd|9C?OTkfP{6qaBCyYigcfU;dl`;Zd`jcWX#c z@71$Z+1fbwb-~LxDS;hDzH`T~q!FN`X?l5|>ML-swS+H>w!u$(84n$!k9Z!l&>Nsl zj>NJq)5eeg2J_luU)n$X`&x9_Vs$DC1wGYMAh90c)lkh9|7x@Byu3QU+ zYY%RWf;ZKpXqh}>l(K(aIGtDo{dZ_KdM*X~`E+^*f3pk$)l5{Oa`|siPVjD(n`wh6 zs%{3NcwcBW)Zy43K7_X3_AMK^X40#rN=yXN&zL1KZP+{LOBQqUbaF6`|w zCn+b9`a^}PzZ`cG&iM zt%CcqP@U{uyeI4Nrso`GLP67K{4VO0!tmyYgpP-lsBBp>=Y%ZIR}DR!W4s`OmI}+( zqCM(iR^_s3)4@MbyrYjP)}lz`tD?gEgKp>?{Si=&d4kyk>UqlJb->?!^UKQ;e<-ZT zu1HfJ0BLVE?HVyc6jpUI;Ke=>>MJ_oRP9g$`TaAkW+o&^K{ouu9n6z|rl==)UP>7G zxB2^UR^xL=W_QvXx*lN7X8c9t>kCB-@0H%a#vTt#j;W!`TxiX7qxw(CD9BDyx&?`h zfx~LP`s7R(oV0!J{i}o?k$l@XZ42oImT!v`DnNk@$s(q|bBdwLl*=D|F>lWCJ;mX_ zLP3omhzo5zl8DfCTcP@6Mg!o__fT*1`FCicSdw5{ zn}@H@>;=zV{R~ZD-n{sa2)VS6&7Y!Q1p|gl)l)gC`1_irUDWdr?#!N7r5q@SgtbY2 zZk%_S7n_j_E#*L}e?*A2hcWL_eVWgNx&pGS9?wW|Y{0LN51I3lG9mZIs{B6dKBTAb z?w8MyqFuiF>3WjXd0 z;@NbN-3C-XOypo&#s0HBd>#9Xz2|=$nAgN3Abf+duc#^rWGNQaHP5?2_=|h{Y=0yX zbD-A=TaOxG%~`NJ`287vDqk&;W#5ME7;`T*m($>sKI3x|dyXpqJD}Zi6^02K%NzC| znt|#aqgr_e_8SyyQ>c|Oq3ws?PU$QYqgIlOVN*+6(9Fa&6FNeT`hWEP$&NV*q4amY zvt~?#z<#~@Q#0Iikn`e*^dLY6jB#hQt7Q<`$QbADaRPKwTI}D|3}%!Y+FUIp&x0Q8 z@ZKZE{qDDLELXY=_s9pUT)t^g~ImK)CaGESR$dewsVGCrFh5x7*Bzuz_Ci z6AW|WelQ8K@6s0KjBJ3*=!5*isUC=+w(xLzt_N~DsUl}{#=zjrow;Ok{5gZKFqsU| zBY~SyJfql$f!gXIh#C7_P37fD)@ad*Uh!9I<5ZZ({W`iJ9(#vfM#!yf@*sb2 z$Ac8T3OYG4BH0S^6*-@TGbiD@(jxQZS}Q#2Z@rT=Jp#%S`j@X&Qlb93Nf&|KiK8S?#)y#R4bw$Xa`xjr?Mi_7U41mKc~GI_Lw@u| zIA2J^p2=|6s|Wi1DtYy+v8Q*W`oza0GteWj)?q>_flfO4kzJg$gP94_us)pcIR54B zhrbSuAWC7nQk`A~Qv+|W%wB4QpfyF!c^Z1L2U8(7sjIi%k9>ml zq0<4y`W5i(cW126r3}cNQxZN`lmQoK47fiSD#DEvUI{xkawN)Y%$UT-guT^PrN=@E zk-4csZcxZJybTOspRQs;YY~(??;<&nps?D?s|O+Q!_8Ee8S@)AWau`&xZ^pBc4CPk z<0~-yc>l;(>M4K^3Q}4(7XX>@(zfF~82?1O8k6}Pa9(?UR3ms8UWrevH=y;F1)Y?tI3me$yXJcRJESqxe!wd|^!r9}V9tka zkgCbrM0ETpHDMxv@_+&DT)r0drvm5PJ_SCYpqql_`wrY9**dVVp5kuULx-~MtbeZK zTzWpKiS)x0-LP;&gU^SC0tstec{^h{3kNLYnXYEFKx@1emxA-mRVKHb;_#k1IVpbd z;~Q#pjPc3U1MKC1GtNoRayvjVVq;u^O&USyeTt&P3FtX2^IWdr!aOx56~3}wcx4(s zfS&{y^3r{+9n%aigO|%czQeg-+89rHBXZ;tGgwo!gL6Wu6~Wo!0w{-*=5mziIxsMu z?KHbR4iU$tRgN02!V|{l_UEWvAh?sNgrlGpNIt%6ycofV&NL+MPX4Hck2j2b{(FUc ziM%EhjQ`l(Un;s`64wQh`pFCv3t$u8EMhcfXCNVlcr#2R3-RDF+VDgC_yWd zmtkB*acFxVbFIBMMIH3mFc+#N#^&DFVcYGK9z>HSTr@_Oh+E98~c-w!(m*;t%p05{NmBvf)94AR6-- zl0TaL6&jC_DhpHyBK9UBD?GX}R@#YL%(mcc{-mBtma1t3Xl7%{;-wP!hWo$dVu z=sWd)#jo!zf@y$g%LUgdIR1E4;yZ~FtkBn%e{lT?!5`{6W~ei8|Gqt^M~VU6|I$ml z@{JNbZquMLzCnv5lB1of>lu&{E#W;v?9B?3<=R#c?t!W+jx1r=3;1<*(|mrc3(mzj zJXl-AIgYt*Dflan)Xsbz+i6?|3zfQ<3cN?TZ?rppk#YyFg!8Zyzr|d(ul9#e!>mC& z_sVE7o}Wt7PMFyj38D`pi9d4vFh9^y>ir%4>F^NioGIb{rE;bCgOj~YY7%@ZYha0V$$M5PYwY|8>p2{CK?J&!%DQKdmi01 zls#bV{%{&|EMrV|ca+=VWQVzGuHX-#idCab!~2Sy=p!XhNOpm;IjpmJg%IWCTZ;xH zmtxOV*p}K^>@gcre&g(^0VjvE51y>;fx+INsNJYV@L+p!Ly>F>{E2IVN&F6g%~o2d z?E~I}vQQWm^=`u~X9Vl}5-OC|@!6rWwF_dpE$WL@NYQ+vM!tb6_ScqD{ix6I{uyRc|_dgt~m_FkAz4+Pfvo@j)hWF{w_GF z8NcyS#JwNB^@Q{9qCw_&-o&y+B|LxXNT82%hZYvTc74R3VUpHT{c8phI!W?-K|^B_ zZtTWA@=`I<7Q_)`9|KLJyC4ZjF<)ToUa|Eb4*B;t@4Q@t<2{#{*zrBu**E#+_#P9oG$?!! z6G)4?A3S<>UjX~6H_D`>#+qU4QHH%FEuLq4bxFtnIE2UEKdXPwC4qMpr?M^1u}ExR zqC7Df1MC!j4U>32FKi>Ct#&LQC=0ga5^m3{)<4Oh3%Q>JPcBagT15YXSiLF7qS8Z< z^z2zEnOp~v9=V)Tg&enaHT!{PM+`n2|p#pba0tj|pH{rL+pS9EbfNzVy$49>zEQF)4u z3z#>Q>1yRayZ}S1fr)26&4LKqz;^Y$*D$WH^}L3x9_)Qtuh;%sfOU$~0Rj+l&IkRvz5w`X1KV!E#R0-gF>u3XBR_f zVVqDvH{&zjdop?NQp!`H7N$!h=~llWyC^$Hw1)w`FLRtqxr+DI=Dx{&l>yLg6S5NP z#Eo8TUu@Jo90obPhUl~IpFpvVZ1Z#t=A)N!n#Z?eZ(qYphfIZG$VJy)P6+=4cZNvG znwTy~;1etCQ4&Cw@s`4Nd^_NGLCyLdZ9UZeqzSr)y^EJEV`x8&e1qGHhyT&KupomH zrP9mH*h_Hc!`5ReTJ-qDlg7jgb8u2x-A9X!3Z;uq<#;|B0A?2^wdfG+@6#*%!L!!} zL%dz=w_`Sei1GY7gVrb*-#vY?O-KOc_VdO*P3?g^)5Fi?uU0_E+Q+xGY#G$Qn7mld z#CeaQg`$U&OK|;@@&~f%7O2(C?~~OgMJr>2G>fj(s4X#FGjovyU5)3-7?hib65`*z zZl=Sq(5Z7XiV;6=8P}PEPBsE(oXR`KGlLLKN_SqZ2>X$*o1E`|QV)lXE@>QI?5J9b zFQxzC8Wg^EU3@_$g7kwTmk<>hs-WW$_k7z2?gYo%?Qc_}LG7!AZTkCA`d%^dc(#Mc$oezAaQvKvK7BVp+zI31Wew+5X;JV)M%zK-dH8*?Leyw% z60UzvT3?^wLf-y4e61tIh?=%uwTrU>HiS01Ov41xvuJ;=tM2{KVK=Qg;ZKO7Y|m?l zXdJ@-C_2x0uHQBc+k5Z5DGLAgQrBHpN+^VsB8pTJG72Ff%1*MfHyPR4TiKiJz4so^ z{k-i}pZfmpb)DyNB(#6txmQMpSYDZ$acALsvQ}a@Kc1`UsgynMyNTZeE9SKcDH`Bp zXv4F_DN3~E<1C)_l>m`68knhJo*7Y$P|6@8K@sn*3%5q9fKz1DusDwp8C@N8H8<~u ziT48$XEg9T9U;$+_T^2uU)%h?s;mWC-}wD~{euD>wB1ad$*zJ`W*NQ5w^)!(>`*wx zDKd2HDp6I;Sq79*S@HgJCFZV=-S?#Vrv+=Lrr)i%&cSVM>u=s{2O#i*?paj^6Y@4w z30HL3fM1X7Y6suZp&ajOhr1tezB}#ec@gYk|8ITDTKRen6wszM2VC0%_b_bj#z)2J zCydvZttNq3<9_#+BMHhBI{QTBb2iio-(0uk%7oK$=vAVM5PCFSYx-d{8bsP0f3GPW z06DiDZS*(H=W6-79lOMd#k{G=+`BC zodn&_Wj*o2kqEgzczk2{1QBXD?47RX>x7OL42Fd0!Z)dn)D6zczD*#wbTCJK1@I395r#k z{&|(HRWk+Li?f+}QuMAHE-03CRo}rmG1IkTnLZwrdP~uD@OdvBc2PdmNZ164;IX7a z)(&{B_?(95eGfd7)u_8TiSu4IXR>Q53(;`A>UMA7mnD#Gp$Vq=f;k-|aUcDk41fp6%Ut_%7W5!FBZBF3 z3cNPbC}+7yikgokYkzK)Kr-fM{|Tnx?;y!ul`d%*PLvxemxgRWnNMKeSE@3QlYDM? zE_f9Z9(0_z-PntJoX0nx>5l>Bo5`lx-4;-E>E@{T^%t-6$}(>c8PFB6BWE5#6nLlY zJfX^GN3WC%9}tOefy}6DMR`yGq>a}F-WL@>78`*ZwYHcu7JotAJKq65o+b9+%U*|l zliMb4PK%HyqNkC!&5ig2zdupA&4kQz67}C3=D@nMJ>yA_07xNm;lB}qc_Pz&%(s%T zN4aF?Wk8rT3V+P^<%;nV+*jPy5M@rm{)uK@Xn5@{9eZ=D(BF&hBG(@)>= zoNobYvP5A%&o$`1UCe7KJpeiSwz7pEEU{;+@&`#NIqEj2m@p803m<<5(`0sy0LNp~ zv2Vt!;FlCfyAV4Bf0N0wL)NoEM<#=r!rTP}iXzrjhPJV9%OhL${Ss8IGi}2@Ga@L0v+Ssm6gNs8n~ zyUU(md;tb465?*&T!=N1|G%)+VR-xX7484~bfWrH!#S7}B)i)BNXDKOg^|?uPWdcB z>Y2a!p=SGFaAeAwPr3zu*zj{+kf%ZB-CH^TZqI{q(5v=I*#Ovae}8+0kra{rY&$!4 z2lriWhNwOLT?jjQx@N9()Tq{`qb8ks36uk6$XuRILJ{K|DdJoF=%(sJbw2JgJdd*> z*Cpabg7XjPsahUm`sOIZGc z8UIi*@5>qBu`(mLV|ouJqhE1Q;&+*&74@gbA63G1w0FfNzYMUf>^4;J6+}+)d;V?% zgorKXmI=Gf2#`Qn^LIB9l%dmQUcPw%n{~wsM8{YWd-OBU{&Sl!oaS@P=L8RGSwGsS zeasj7)Q7`=lv1L1*ZQhfYw+c@8Q+oAc{of8p=;OnU3;pLsnW;u@v@YS>^u;$VD*9{DF28_IJz>3#r0 zMBQzprX)z&$Tvv&@j8s%^BsO>x({hWkGTTxZ@>o{v5&mv0$@;@cwOG|I-HAUojcat z1@FS1)rIV5LgBTeMeeuC;mcXl3nV1IkbX2mexT(ud~^@W7?>Ugn?~WYB@7FH!M8=_6zROj}8f$oZSU|sxZw`?Fuk3R-slH z6GjBhlNk?iA8+9#>iICmmMr)8T@z6_CT1T3EB zIImHc%uxPx3=UQUB_FSrLaNNADRtcum~5#;_w2cmgASR7Y^xB8cOl4k$M;P`!uaG@ zmSjkImhQraZVjCF)v~`i+X*uzzbt%&b|GWgpB9bGg5OtyL4E99A$9PrBs9f&;mdDL zghl3H?rN*seA^-rSJ36!rxBv#6*BT_o9!@^ad7qIgOR z0P_e)q{ZpDx(K5*p}8C0Z!(}Q_E|~VKK3>|l%z^Ap8-$i$Fnn-=lbx)q~^oZ%P-aRPngJmUw;*F&-h<491V65GMd56+7@xtUt@9-** z@4g4n9=AN1SJw$8BI@!MvIIza=xAts7%58cX)yP&YXpT?VG=F)-B0}PtlR!v5o|<> zE%)4SgtV_U1(6cOC})D`9jh&VH{ojzaKPM#28D;a6^RV^oXtRY%WfNvZy7I8`Ru^j z7e2beJe=#Pi_nO~y(xw!_U%1&ezdstmh$$I81Pc_KXVGPqc8P)pU)2xqjH@Ep<nE)!s(}*<(}Wj}wnKJ++3lw`O%PDG zfBUme668ylJb!xX1{k_?J$9ueK(8lUSbYE0g9J(Wp@_pF48%TR>v&Cv{KQ{v?U~>l zg^No6kir2dR9s^D{HqT*%%zhU9k7r3^IH{<=5wg@U250|0$%i#i|aG(rFAg$(A-9Nn3Mhj|JjipI(2e>kzg)~SQJ3P>Ih9`y)bi)k zw?bB6HO-1-o#+6je52cQ8R=1m#ToH}N0G3!eoG_UVi1f^E(fGA5}~g0>z+3`aKEs4 zqjoSe6k?@~SdtMBs;n*&lL0nVQX~Ink!S|exsH@gC-S2z8R2J7yG{d#SdyHuz$!4G zel7mYW)v=DS)29vw~_tZ?mFmNjGyaR`wdoIyc=VS#7KQD|4oxECDPvA>ShbghtS0ay4DU_lw$Z@ zR!fKqSpPA5T<84z7ZMH?b$j(hhWv zBwJhSEx{#3y}_R-jEJ*}B|E-q0+nRb?VZiDXw-B*^&!s5#W|=JGNiRo z!l3@RFP0D;{_gzvLYf)b@{8K(@2x?gp6NPQ&@6;-Ru3lNe%}}EP}3;lDzNS7*kaWE z3F3<@pKhDqa{rovL;y{X?68*88 z!QR@dFFZ9n@p^7`FJaS~u^q0faMnx~tpSs_-|17#>!6_exuNQCA4H`71ani5fwPpF zd(lu4Bs|02)NDmqy9#(<5Jqbl1k*4h?41U?G|g zHSue^$LCgnC(iIc)$>&_pK^hKH1|8iUsh3SI2I32{$>@>xALO1Bdsf+$dj(ZKCRXr7Q>DUA8o>Z_@7q@oei#QrlG`wCK~%TLnr! zpFuM08!fqc7aW~Y@(Dhj3$v%Hh2AE%!)vYQ^$9Z{fZqCEamH#kTvMvQR%ts5`)xz* z58^i=`cfSU#Wxo8mbRkga1Hy)I%+Fb%J;#QH6W#pqycn92JTb~V&Ce@;QG^wFjPD zd!<=9#DUhb(!)7*J0N8_W?d!;pTB}FoHIBlmzlG^{a6c@~;wo=8_EwUs7O}5j9)|VC1kmM zafDG}mI$fNjb^>azKx31sTQ9jQJ{18#RZlgA|%tzw6VqC0%Sbfy{{gX&DpRT(wcKiEim-iK9kWUPgb7E6#vc2Sm5;%)az?(ddYGiGeT9r7K0^Fy-YrLPp%uUgBZ}w!h^VoH&0k3v!Lp5 zE6v1EW=N|Bb8b$ zQxJ1|Wat#-DWK?}7f_$7f!TSK088BzV7YQZk8#4IR}TqAUs&VIZEQtT+hLQuoHxcYnd& z)_DbCHOyVnm*JyeSb=#1e}Bn;`EdBK=I;2Da9F8O(~kJUjEE<@)t?qjz>BPc!qiMA zJp$sY0gP%l*l%zYN8|OnTf>m0#UbcbK!eC&}8Uc#xr%^Hf zy$sz+8HBWL8<6~KN}l#s8T5V{V{meB0I%5RWcO(nfrnOk-5_rfjNX#a|ChypfKvL0 zf-@m1KgQ`Km9htF!>5cdS7pG%6b}yy>2#zMQ751cV%a zxs$5x!6ORc(`r^yXm|NWtsl7{qHeO5Dx`PeV@l$}UacSsJUy<%p@z8{ ziGP#)B(K8q)6~ORW^pvL{F38aTqDT1{LH+RJq?r=xp)05a-qSW^SsErIv|R4WO%RJ z3Oj?77MIUv!+^2sS3?U%Q8Y<6+<#OGKwI!`*91DIrgGBy@D537$ms`_8?AY+=5 zXCnkr@Wf6FKayiV?(uo;X>#0K;2FE~TXYg)Ed9arr4X{rHu3+o!+>P?yOhjBR$>0) zv65sZKN!mX;pfT7gj(!Q+F=AY+^>7%7U47sF{>pngne2ehuWTGtd0>qtrz)jd8ZhR zsjKX(lPqA>EV|26h#cKk-+C5--?u$#uL{PBu%J*b+0>wXCN$UhXu4;B5n!dd2{hU#M$g{>iY;6+Ai!;wTVB8q&voh zCO(e=`Ow|(GI#z!f!25ChQk5)W|rY173~B)Q9ok8oW*^NgSC>+3R{rQp~3#wR2cmp zN0Ir45fBx7G;X`Z3T~R8ZnB_kh8B%#Sy!9`TPxXgW;mJvM3R-i40s!XO6KU*Oo1{m z`gxDfry1w$UZ3E)GuaHM1C~Ap?+~HKSw90lJtzgy4hOS(&o)?f{7R%jAEGv>kf36>q(Glw;7AlF)1=H4m^ zI=uW>uUnA;h3P63-k~f7F6#RJ#Zv4Y93OW~csKw^e1?(sB{4$Qlj0i3p22@l%Ff)% zq=vETXODH?*MfN7#*-fHd5FApCiJ=$JE}FX9P#h`3x~fWeMg&_kVuF4!;cxqQIPdb z->D#C6e@o6c7>H7T3xE?xuCZOQ}zBT&1~W*;myP;lZtVmDQSK*JiH1?`L?OwaNk!b zURHj!aT0o4>%Ja2wg``>4%eg3N+ZvV0kOHLeIO{@Qy#w-4Oy#?fBa@5N8z5UBaeav zknS5BS{Hmjcth#7uI{=GjGc?lqhlwL?@*a;12Y4vGHM@<72rZk4@^#HM)M>88{e4c zHU9w9YmM|M4L``H=Wez$Wke=egfI59pG(;z$tZDEG_ z!yKe&@+}X!@I`Lai~eKfY~@BK`Zdksgv99IrO>b6!if-_&y{=*vV5?%Cx8AvU=XV4 z%i5_-ZQ)qypyTGn3E=0YJ*W4M7!g+UZ?)b$hD>6Q*`85+LQWlt!wB1MHZJl>IO;v9%d5c_Iy zCl^x5w~`d4phM3%cRfU(g#yd^$sHx^H$2QLHQ~^}`~KLEiz6SmK(yY;C1D%)Yagmn z{gc=QTE2)1p+KAyXD^^}44;L`mo9A=qz!;u+jDq~bsV~^?wE9`q(k_H!vqWB6KLY6 zlkEED7&x50n3#zBziGMZlip5az>{d(^jot9)I%D|=KS~Ic}iTHINlHbu2~d(NMOT! zf-fhwQaF*f%|gTUb1{_I#+k5ptPkEAB`6s^W<;WPv^%Y<~3Y39%7BwCF zaHUPc)M_dlLWm>72<18PcOU!OTn%$k7{n=sdpqDB&5{dS`vJ(Ro%r&=X&E^Fq<7H# zEr;14r9`gOJxFBzYPz(%2YobR*Ejyff$cEMy>NR1^w&_YFg|Swm~Yh=OkKjf#~bQe zU6?bhx1P8twlfBWamjug3LB8H{lQ}M-6~LJo;#zmccn^#=CYT513zdbc|NP-nO`;!?HTsUZDU{I zCbfpSeEuXT9WZAWjm(3pv#{5H76K@w{j%bKC*~-P)G)Ne95|Sl`Phs+g(x~W zgv`M_`^`vKI5YJu*C7$VLmTTVShbA+!liDxB^~2W&H4qpV450&yj-x`uW)xNm-hlat5?oX)=5 zZ+sO1YE@J!Osi{fhU(gN<9m4C(a@Tzzt#X1#`5nzRUSikmE*?A@`ACSB6z3Vd=iRv zynkwZatArbp8uRH1AzDNXrcVp5;VP^ju8*|4bqRtH&w!pB9?AeAtxhx)Fk%LDXohg zeX3r3GL%7#(mlJDHb0|PMc8-70Y8z1sDP5j_{ybI(S%q7IuVW9Ox$b{LU( z@(*KzoGMtKIzk?W-@TMhC|y`(UjyP5q9I=$7KCy`m&&|EP^{(VH|4Q7P}1Qo%sz!V z6IB_%vam18F`3!S<;F)Kxm94w9Z!J_=LizY$>(gjYx1LC^$mVrl&Be!u8=K;Nz82`zWqqh?r zWx&}B9uM~d?pfgV;m=gySTQ5|o3(mqi~T>R-kl}+kEa3_{jBJ>?qmMSq0Srw_T_cd zdM;jIr9pca=1ekd3L%14jpixQDqN6nu$(=IzZ=HL3tBeakUe#l*W~L6=q8XY4RI2q z%9+bdbn4+S>mOa6K|qD>7?_DR;`zNic}0i*b#_E=qI1k%Wdkm19te<}ABNQPI%cCJ z0_an4jJpK;9;B~`%`nR19v7XbLI6P#_}|Hp{A7Os%e}M?3B8xlTKHj3j@2kUJbITW zxn&IZga+9CPXjiSmwP{@}TL$g10XzD_RO> zN-0|*LNP1x=M(u3p^Py6--#^T(`T6m!pLDL*Ju;3>o$OY3 zo$@3h(6|BWD1C0Gz%Rf>Jx#M|5p>pkKr@w}0P{O&|9U(3fPwXR)kX*blCoJfRnS?5 zs`o(?fw_^evwxexDRmJf4D_X{<+dO;#m=h!bP{-NCwo_%F9jLe1NZK1awN`{_evlh z_jC;zyf*dLt_1R*UO#U$2-6xRT+zi0NQzivq1Tri#cml0y-!VsfdJRc-}rmEdhFBG zR=*2mO4>aftfWAnUJiO$hK$09&)uRMjU?Dxm(#xXehscz>^R;HP6k<}DzEXpY#0-l z;a_$906TkMSNqoUVVpL<>68j5;{Gnv?{R?>3E$TgJNPSzF4&xnl6r0kKWG}5?jOZ{ z*O|h@LHQhzgrqtdeBRtiWN8q)y#rz+3a>9Ku%XNz&%|$TeqfNZMp58? z=#yP9UefPms8u!entsYOa2Q6P^cN#Q>Eo12x*BPamBtS_&4VDSPJjRJk5bH|lU;az zdK?Z3ehXx(FTvZZXXDwWM_}s7H1tRH!It%7zFvBqD{Bt$5O?c?FS%Neep!g2>SNlO zPFy?x6+56*9C{Owsk+?VjizFExn&R9P-q5=AV%XBDx;ocP~<-Ai3E0VjA-#7$m(>8&PCL zbmKB*5kfQ%myz-N8zIqu6eO3FQik4c}$74e)dYQZCFuK{y0?_{6! zsSF41cgn(M2eZI-=yzZ0*%I9AeE0l0hZ4xn`m+^tHo)dp%{y-l2oNJ>!Qoq+6S>eO zV3Aq843$4u>*GJxV=mz51ty$xVH{#CuU5qGi1OvM#h8y;Y>{$(n2sD}t`44R8)QS} z#_5kto2P)?_V)_UNI5JLI+fU9KEsb~;Uzab?{Pb#v>4AWhJJSx>5_(tpxd4Cjhg=A zs4DxdV@?E~UwCV<3E=zEwc{uEUn=~E_Fo6KsN^m{KJSA!bBCKS_aH&iG@=`LGX(4G zAGL$}J>l>#{mT$v;~Vax^B4rEhp(*R{b%w*1J}nbdUTA(AX4mk0bEiFPx?K%1?x+? z1t%Z>19sfx^Ld6j_C(`IRg)S~PkvYXBUS-(DdWA4agwNiFnRy2)*L*Y@{PLw;T5D$ ze6F$YXorvz52^~=4zN5n(Cbus2u&`hxjULmp~*@yd|7}LU2ib?8?eBDI9N>0sQowL zX{scJ0`WFzxF5cDk?Zo6 zF5pU{)s-hCLu#xUFRGjdfl!`N>Qo{RayMPlu{9ontNdG*M&DUcQi@#HYsb) z?caxvlcxnuFXB8fr~YUF8yDhsawF!e7enl8e8xwuXwlEk*tH;OJiqY_jbo{A23{5E z*A;Ys;jGYuA}YL25pk}qZI!M;!JVJik^+pt;;D{nFFgmEe)MNkI;R-?K2NmU1Rufu z7KuiV{0(?IO>gjK{V&v`b7`ihaNhDBZJb&u4I-?f2#AYiLhK|uF=0-;h|t+%IMgW? zRH=^g=5usH$SYfk&iq9vEpQdsd5H6!%wOj7<)T1i=SUmfb8=)IrEvGwGAnv$*>YgF zHUv(0J7c+}?}4n2N!Ty8We_~XDIYT-G+H$GJLw5N&bq2udJ-W8N@ps5TRAOf5*#z;GEoluPX;%mqX7#Hd*&Z8YCSg z9iquP2c6MPj-7ztJmko_k)QhR>5TPOuhk~;^>`3TLZY8%@%t$1s#f|g{~tS=Tm44y zB6uAxb!b1j-na^sxj~=ZsYucOmUcDQj5IRFwctnUm>>F6j*Xd~8Mz1@arS@4i4w(% zjLd|%5NRn}h?QzG#5q6cE5!F=J?%J`676b4^cgez6Aw4z)LkB zcIEdF^eEVq@8b85j{}@RUUx{)b%L2k`rm#5()RPX-7^YtSD4P%wJ@WAOLy+P-oXE^ z%;5&NDd|xmRJz#gk)f$)$E4f3qam0sBW00n0*>^0h3sCVKx&#-oDH5UbpOryoV<^_{;V|ftPFgL!7!g@FuhS-fLC zisunwcEqPWPb@?3(C68p*jY%Jt|Yn^FO1K3)sh6}8^A>4Y|QY$0Qh-g^NL8)q2E&P zf?^O2^5Uvn|6_Or#jpu#4FoeFM0)?3E&l>!u9vvzBu|6dUFNlKJN+=6!11P1iv^8^ zxd;#?i6F6^kB1^S2gq%v`t_Fv=Er||o^OcrgXkEyCBZBYkzaECC~7Hl;8+5g&hPB0XNb_uspCCF_H?M?c!Qv38uo$Qx*z||o*xPO zsFA1%b%DxS&w{I>2#R}uzyHf*C5+r7J-mv&xZ#`OY)bXUuvK<&@+r*({7xHdx6aCe z-OMp+^nw_12ORiFKp%WJGof#c8UbNCfu@(OEXd%}&l*{mS}43(EzN(g68cuptA!1g zfqUWReBXW~^qgSKZIfX@I&R*#2|S5W{572h<|ynDs$L87YiA|PoyODU+=-N z`1(;9ZYS`%M7z_E_np|w`JT3zcV!W}@_{hs1B_(5Hhk&t0hJTaNxnTKLYtlU_i7O4 zCuWqMHxS7Iwmz5s0*z73u~ud}`vY?^q*Mwl%y8aU^-)1g{66G478h=Hs>5lAi}?|c z@Vt{sqOibd1alvawIo8uL7{cBg55M3^;Jodnn2|Wnl z(De4j+ycYj)Xf=NAd&vETx#AAW&`BaBW5t?(mp!H^(wx{S-i}VaTGxOI_Vwt!Nh1a z?$=jwJg<5A>86%Zy)Q&ePayl%X7P@C$IDo z$Nz|ZPmg5&?2R(H-h~?)>azY%DKe>>aD3JR{Iv+;dmK155V7Qv@3{; z0sUz&puC^d1;%l$HYi- z`w7%nl&BGPClYg3^gnn~2qHTV`nB5I6<`^9;HdlwzxUvoI(-Z z`UX876x!#kw>Ha;Rs=QTn0LhxzuUcctZgA6DiS&WL30_ZBgLy5E*(NtH|OWFq!l2~ zHYnO#T>(w%A|vS;7Su_TX`&}u0gWuT!+&!ufF^VLbIQ*Gh~oFvTj+*j@bx+4*qS{K?kH4Iwm3A5*Va zO@_YhFg+D$p9LS6GlTNPfspFc@I*d*6rX!;f1-JE3}N!b#_@0=bn)cu=qQOW(n@j5 zySy%lzFja$^)ju+oM?%`vu+chb==#0+K>bhwzXd+i7tn&kJ`HIjjU*^zG-@iCk>wD z(oV-UQKQ1svZtYX1(<&y*g1s|qWa1jrL3Enb0;b&ta+9l+5DOgQlKS9ZdVB;nIEk~ ze4Ds?_Qv3vIN{m<}sI!(NfwH73kD&uzriO~vk#M=M)DBp|I+s&O;K(F*;%qlAZS~&lG z`;`}FU+mby7`L3j1GCkO8C2TFd|mBgh9p+ognsSzZi3aXw%sDgEuMA^-09NX^ZFB9A_nVo5|6K%EJ4e z|8>G>U&yt||4yI}?;o=%Q{i*GN4oMtW;pmY9=}RwF#xLC7ugNEH$c>#nm5BU4GMoA ziJn&If+lxEQ;jn01wYC0PnTmJg5D9j{d&0y0(l|aYZgO5TUTE}c$XV(Es0)_7@2~h zr|Dhy+Y7+;_T{FlE1R(8#E?~Z$cIW+H}7`ici7;e?2bRUN10t2@P>zb6P#MAo_sIk zLlH99Zx_@B!B}FoVVx5>T3{B~dlb7056gNV8uHe{*dWJvj8P$U<=n`MHXMa7cP_RL zGctp6Dh@6M5urFSJtv;R8X%X7)+UZv1Mb~FVOKtiAm%12t~b945Y>a#j<+v!AU4~Y zo7ROEY5r|`x+8`?W3x;pS_ZhMR3l*V3;PXjo4xHlK}>?2a;kOj_i!PGV%E(1&x^2o z?0Eo1P#2t1*S?cZZ%y@7QX|2*EJ{`}! zRG4a>H$U5gEeEN(e5nG+l?{;}cA`VMC;2|+s%Am`6$>#KHqVs!kk_mXxkH=>r&F(KA=fdM<>vB}aZ>;aC=ZX@PE5r*4~ zBhkZfQOmJtCu9jS&TV{nPo51U?pL!5n>o<4fZLCyNO5mQ;#oac-YA?TF8}iqbA8)N zWj7a|)xv9BKZ;a51i>py9KORz;6ITmvzXBgP1YhaVHVWrT0HfO^20i?6RjnUH0g(` zDsxxLJZQ<4gNt_|be<)ba=02Z^S`TF;EKz8xS<9tqP zW}tiS(;$?=6fHR%x+k2?bEv1 zRt)uL4!Vx6lA@0RHWdYN$I#leJT9j=!;-12ZA<+bexR4hnW*tjs(2IpFxWcM!n?LabhD=Tw2IT~`6 z`F+dzHNbfC_3t;zp_quD=uGM-NU@LPb7SrV%e_}6SqljelKc3ZrRmkSN!lgOVhk5XcA4$Ki!;^%Yj^-)S$ciU3h^p-j%8q`n zBWj2_3^81RUo{uukFD+y^U+PT@GL4Y%vUT_>>(p3+Jq(W? z=V)K6Tm#;3S#gvz+hA`p*leUkijGhJIA*@t4|f(;WepOBfctyH?{%UHXgDDHkXyL{ z)(xdW&1I>;$a33hpn@GGl${Z;86E+ZbLSlfF0vvQ{$;H{yf}YMzoxBxBNqq=HLibm zra)aO()v5}%dkh2ago1w7-C+|$6Fs?1@fZc(fYhKU^NP*<2Z@;%jk(b>wo*u!#W|a z|0n>?U6cD2a18hIa{NDV8x8=+gnpx98!b8dLAl zZ2?byN|9Rk4O~ao;K-D#h9y>h=?i$@;%;J3ZaFart`|iwyz`uZKlH=GuH?eVeW*p4 zu>{{w?25R`f*H}TXHQ<`k?^9oHjB1IhRrw^%6ialTnRP2^j{>-e1xleeP-_<5*qK; z_!>TBM!#>)vwaEKgPle>VuM^Vq;$pgKQ)2@5R}(;pf7O&J;4IQFUMS9CE1`?g>4)r zjm~|#u_lb36~wd@;l65M`iTIQ9~`K3tf(pSxFmY6X62xEaTyj8?O9}X`#^oLDN~0Y zb9M!V4czgZ#^=m8iEDM?aPCB44e_~Eh#97?7uD+n0-+ca{=ps?&h|?j3)+GD_c~qE z^9#`8%FG>8#Eb;D4df$>mZ3g*qg+ap3CVl0UA=pq4cRKro;kB9fL>@(Jh&p$4Ij0h z&L3%90v6@vEi=r4%FIow)!U#(3(`j;4slMWOquYXOGG=w8?ec_UJe1uz9X~@yWc=d z(J1&O=>%9Dle;G>Lx?qn}%&6o4dWqKY_N5YlGhs^RF~bqMXf|fmrOGw@E9es^K| zAMIUW7o*}3uHgeNbP{*Ah4Jq-kES$_XAgdJ_}14b1orp>Z}H91ntEhz-3`BNKP_d}d> zQW}^T#Ot?7w!=6#896%JH$zXX;|H1+VA9nH$||9S3DgR&&Ive&L008j0IYu}$v z0D(x8zxlv6yyX2_<;qWj2>4GX9Aba2MY7$~bn0zZAx;3T$V2+SWrNUVJ2G|! z^YcEFw{IELX2RefuX}H;*T9^U;$t}8@9!^8{MWZt2I1#Z%*^pV!lU7py>)yVRst`S zSy^s^nxnsPtR@S(`dIxrqY63X>&r7*u4DhA!SP2&($-)_L$B;^7c;8<#8s^O?lBZa zMmb9tuYw*~!stuf*JUy(Y)i*EPN{vxC-ewGv!aCDbm{{y4 zl&!L9)pw4X_nF6W~5#Sl?<95TV2MCpq)Mc2DKygDzmO@rMXwz>5Y&;x?4>$btPGC-22qVR< zUz1$O?$1ls=q@*~x~#wD6u^SCS(c7EvAzH%7UQS8v`rA`EL6!O^b<-V8jA(R$ejuY8rlfrSpqS}+^b zWOu;f6HnQf0aWOr{mO_q?f>WEbHxPTX%Tzvf{QlW4xG}LREW0|LiY%~8JBSG$G_l< zchK!7P>A|x8gTj$tSvg?(yN*O-_BCvM2nF%)((VyaEC2TH`*Ehu8jYEO&A}8O98$d6X8{GE$q4LeR2vE z^F^k$fUyeRsAj~~8_z-s>=_SH5u?M7^O3$!QUC{hT6h^ z3lRO)J~8#k6X5;B^q>awC1&%=g6#}4@H>Ln$D&KqFs!We?PRnjoUT{7<;1xI5m*6T zgXeOjlDfX3{Y6l(^Uvag&NgHo3knZ=I}C$UtR8-{r%`N;ZKEXNTezzF;e)EnI@FL1 z{;a6`3kyMgN_C6;DAkPIkD+}SZoQ9BKFNT2UhC=pQ@!=T+j=q0Kdl&kPs)u^w@*Xm zq$BxKbTYg=^Oc|ob3;vLEGUe+y1_PffUn$g9j^Z6eR7n30K7C5>lkrX)5ji@zJ>4G zWi#e-12jmdR+`=7L>l~(Z#J?XVMGc;`<(%U+wj-k$MOAX1!z9YOJ{$CA9-$_*=~6` z3Un)kd$g^d;K1tZ9#3`*g%v1YCQZgU(gH#EqMHNocf$B5t49Ugv}~bLi!T9t!}6LK z_C+A|-RK)@#lM4zj7qto0MNZ_zaJ%94Bnmplr9$+LHaGoMc5AVjliT{2Xd-0vJmQ}AfB&JTj2o}o|84;F zFUpV(&25~YpQIdZ-Gqyt_jb=}38EZX#x&hjJpXh_6Me8hhjV;f?-}qti91Z-=xX64 zJRb4*ddd9*=zU;m=@K)Bl*r-3Hyz_}&G?ZFdg=3(QDyUY^q5q}vsyd8`CF&}Tz z|9iog0MhGsG91nR*WQ;0mN`R2357x^V=~K7hB72cDTE@V zfyz*ZTDv(#G*D^KJg0e{zP0arJJ0i;?>*(eDy9GX`F{d)5fxKbpLMZ&Eh{E6%b_B1r?eNODAfPL^>UV_`b+#Vl6 z@>=nX+nQ)Rw-xk5mT0e5<3ZbE8*Yw2(GF&_mswrporsD$#j->7NgV+G_WdP4gCNv+ z;9b%UvcBc$lY77<4|4eCpPii;0?^r2seeumZMNvKyFluj-3>MTy0Mdm3jG6RgGn8L zP5VdAy^(VVS8W5G(Rflv&|pkvg0BF2HaVwyVL#d58WA2DH&YH7U7M*kK=KwYipg1H ze{US}e*bgk#?CK5O3+OgZIwejT5)5JiZ+n?%^!ZPI4}gdTfB8U3X0)K?%DoXl~YiH zcfQ|}3Mq8b@=Z@f@hy-(oO#CgN)lW(`5hYyEWFX5ltetOWplEyF5YUqvsVKKFN-mv(>g3JCBhoSO^=ENt>;qXk} zce~cx4nQRd7xkwtgad)IY@t&H`Cr*6F|Shuefgw)R5FC@1LWDiS*M#HoxD{Zt79mQ z_6Sbwi8z`GIVDbhAJ*1F;7dn74Zk)R!|Pu?I-wSfNrShpeFPf`{^71Q zUFt?2EMC~TF#Kr`?8^wU?`gjZsgwy!Hp&LQRUtv0B;LF9EK@3CTrgZIbhL=~5JoZq z3o-|Pu+WyHZENN(Z-)orZ%>4I_d=}mfHP4WTT7{Yn0t1we-vx%YRH@NaPtn?n)&lIy)r}~LT z5}bDkoO9D_544*JJ*K|%ptG$p&ZneDV63T!+Qt{DP#2z%XW4TdCL81p74az`5sxgtq@qG*w8Y{N+OM=*$#A8j*{ zN6td;r)?wkd_)WKi|RYmq0RA)?mZzTloLMQQ~J(L$Uhe;>EfY-qGEjaK0n(CsJ!Zh z89D!$abG=qxt}PgldDnt zK9~!>e6g;$7^W!S*e0ag0Y1Ek#x-e?b3$jXsy~Zyf&G)J-LlC!9q|qFA>C9d*xc3X z93}g`)TbXP)!?Gw`O|HRe&`lV`;ivnHhL7)T^>4Lmg|7c{aum*%b3reIRl39B-q5 z5R$NcarPG($Ii!5N0yN~B}N|yc$~t>I>NU4@L#0awiRfRKk<1-!?|V?TyM(Z)flzClB>Kr{ty43&YLD3qB3QUESS0Dzzl< z@XAA0B4ctP)fq`tmZIbKrnL!l*1dTUedz;?cGgplk?zoFxc!rLcqJ$sm9ZvS z)B6?fJlnQ?ELwWyy56dC7Fs&@M5w}B0iyho!)A1xWtDNPHi zg}3H1;ZAP#aNcp({^loAsPL7Hj9h*+2+TbQi}w5g>tYR^ruHycpB(PFjMN9}=}DCu z3W$MXZ?o&65h}>_{e^P)Qnu!i_pN=60?A;8!JrSAGn>Y z>kG6r$8_>WLdwm|p{`%z$RsHgeRLvuaj;_T)AcN*Fa-6z!g#hkP*` z%Q)h{8dr>o7?}G7=DceX5%u&1iE%|2j1Z}7#p|fs{EY_%Wfb3gY$t<^eN~U>_DZ6r zhh9=U`GP^YaP|GiZ=R5IQ{POyNuERZQUQyhtt|BOz}xge5t3hf=J9z~-jaG6Cmuxa zZYFuF16m#jHCKRUVSrkQq9zKNH~ZF3!e=W?Cyh;d?GB!U*W}yWJD?#sp#%n7VfK!N zm!4@`9?Db+-A5rpPkeW^>MXVr88J) zNXR!*f#hx6$(3I1!c_qiqB^Es{5TP1FON3LBKt*`eLwVW3#m6=>rxuAg6xkS81^{$ zuz~1t-t8~5KBqug(FCvjSdx!X=)7U)FCJ8X;o?R=?R;3tdvN_Sh@eE5H~KC&1d*=GxLu8;zHR>lc%{C(6CO+4Y4}0p z)z{4I)B1oa_DfVtyA`SPg9c zsY!4N`d2aZW{rN&- zmtv$&#&aRV!J`F1Ib+a(`b>VV#bU^1{_C?%Eww@u`>T)Ys~{;lZuiZL&7AJ$K^^!;FIQXSarb&9tWlMsvzL|a4YfdLT8gVVDIbx z%;u*bv>NoTHM1ghD|L;t15T22Rc8;R`tRl;=bBz;S__tf zP)BF}lK4JY>|cEG#KQtGe^K?$f1EhFVm0xWz~V;eJTJ{%D_jWkqq0|}Zw-KG)0apb8foCjqI$uhPmo;^zqM(aAWG(T zC{(91t)*Sa44oyG!s?*IMQfjo6a|wPZ zG9}#nLqi>?NtO-u^pN}=;=j~y$_OE(#ywaztq7Ewd23_p>p??xX3~cd4RrOFvVNWV zHc&7>ERtpL9v*EF-94p~oU<60Y?^bY6z11G2I;717^>nL`{vwflCQcsCyvy|x_Bt- z>5FqpNO19Vn+C^r7}Z?VDSV#fSypCsyi#(6GIwV&CmlT`E&pQ0+yytFW>6$7+pi0X zhoooNn~-yiiEfF;?q6U4?LC|q!;QR-4Crd7hJ&o5f}fRG8_b70t~$Qmplv+C_F{KE zL~dAOH1b*mHJs6X^;+vAte@5rZD5lM_ETePV|#lcTIkr=izjj+ZTH=Sr$t1O&Yhi~ z-k%zQoF5+Pyzk^tJZ8M^x_69lFloEuV^0t*rY&-dCkfT4wJ zcb3{PJgXc16uf0J+EFlkLi)Hg63eUb7M_<0_HC9W_lgD}xAum!OmZEhs=l$de$o$# zAB^op(>B#(f-=})Vj3Q;gLB_d;YSS38vc%m6I zNf}+MIl+3bp9A|QpLRVdPU>}amv^L;G|%&2G8z$UA4>47%f9)fj?$Z-IXn|~7s60x z+k^B+DezHO-(Ogv6ZU)M^b8mdfX}4$*PU8P{qpoI$jT1P@O?# zOG*8ZQ|jL=c0PwBmC}J(W{qH9!k<`dPQmeL);7D0T5!D{zwDH85sWFw&i}lXUYIc7(J?TvbY?min4ry9GYxG0rwqPwr^`OI7+fcRHt~sje`PPh1(uNNcVk* zN0kD|^5v)9Hqwn?yJO$?iY(0Bid5$U}-96?3o)<`UuTA{+ zTdq6=s7x3WZ%Jflg@5Ga;{;Ku~P3zjViFBs_)KO(GG7*EACsaWTBwe9v?&XZ?Mn)_~*}?4)%``eJC~D!7)q#0Mf@?$y_x(hlYAZlXI2rI7EjiR;7< zOCpEoE9;)Q^@HDu8$HWa4!{{Jh5N1~AC8rYxR66dFFelTv6#){53AJ;JKdfqg0bfr zg`xY+pc5#FF9s@+eHTHK@;maNDqTQmfwn60O^#oC$t4GTOA7X#UiTeTzMCDHOU_Y0 z-}JuT%twyw`yM1ZLLAMQuHe2~j+|Fgd!|4BPBpaW$@LE$5l51H+x$EpwSdeIqq69- z>o8hw86Z1d3bK1`F4(xM&8`k8#LXBzi#!Q`;5^5NF`-|yV;loH*SaM z>9q7ik^Dnt{o+B0$Z_?IFC2gn(BJ&kf)~k!6--`mz6->hFU@?Gy9?r5i_=r%zk%6` zWucX_mteR*YmZ#YOq6@dc^AH10!zgNFZe#m1QqMhgkVi6q&8RLWLpc_&!^{+9QZ(q z*cbP)K_s7@+V{KD>McoLz~^ESqti&fe3Lex{Q|P6X>)CjJP#l8Z9LvCt@;kIZckoS zQ5@V}_tkm)7zK2-DyZ4>Rx8Zg{B5Jx#crbSZ@o$g&ww@<{9^obGRoc1x^lrI44*cf zytK%;3HC+!g?+Wn17o}AwGx^d=%)yu%+!=Yn0iad&|@z^T+|7*@e^Oem%XyTiq$G% z-0RNo#ivwIVNY6-RWAiUB&;7Gm0jB+?0sy;MJL<`NFH+!R#R|3q)cG|IV3#rpth#f@+`e4GiJ^R*#lKR{>`;*i! zlJgoj?#BBjmV=UpYL&(+cSzT1kUzb51XB02()2!+gXPaJt1CoOLCwzSLPW|>cyX_C z$7j2VNK&61S^b^~OACtZwa9tOtrZTH>%Pk)t%Zsg54?E_qRtC;hLwhqeHq*GxVN^! znzU`)gU|cn^|kNHU$+m!n7CpgG_DRb`6twdo2sLG8&)sc*QAO3cm0Z7Le@iWys1m` zQ<6a4(WkRVwF%yC{qV#ll5f7$yyO17@>G~;w@bb3vmAQe)bQmc$rt1;Jo539yE00< zUjFd$`UE)by-{dCS1RNVPk)g(*Ph_+`tROfB=wBn?TC+C-3fJle3SOyl1IBWt)p)_ zlRTQ4{i)96e7ZJQ*`4{Zq+Z{u<<%lDqM?&Z=YWq7$qO^`JxXK*L+!;_O)f9;oPBP4 zLQg!0F!KdEdG_rPXTaLPedQ`Fc{`$PG2I{5RQkQrBIi4w)~S_#9LWL1KbFhdTOLWZ zyGnm0>%Pe>A>U`-?a*4~Ak^kc>b)6B@f&zNhjV#fYHk~m{Qr*25(dx8BCCXb7q>YP zzO=UAlM^V1q#hm2J4*blFE^Tdulyi>U3Yp{c&j3s9_00U;XyyJy)s9O3OEflj{4D0 znm&X4?a50fHpYWOq|bZxZa$P+7&yPnhwQ_D#q%|1T@lP`ithcXt%6uqGSROrc#vIR zfkdFfczC;xa+-Lb)IGMSH09fU5O%H(YCBw%0Z$WMH)p;ZhCPDk#|o+VLX3ybJC7rL zXj|OdDg66XkXG58)Y}9vZu@@zu@uQ$b600S_uSqV=+*NuJ0@%oB9~UU+>p=#`Ow+% z&&YW<8N&yxWk*Q8>|WEcHgxRXId9tFWyrp~hr#aPE4H$6ewQMO zdDXUDkgVIiZyeuiyMW})t`cay7*h_XGmZs|JTHLvtr=ULxye3Ktpt|^rt2V}S^Z%k zspFmyKl1ofqaxC~C%V%nHI>Zg#_m`5q|lqofngs#C!nSAM#&zENkCl)zQ0wu29}x( z-?k(7rDatV?vkV+_|(SW^^Ysym85N5Y(_CWiw+;7q$`NJ%ht9&&CLSgyE}DWlqJHc z?>yVCJtOO`w>|W%{6^v65vO&}Nxq4lUw>Y{8&yn}2=`pOQZfYFl6{^8lYM++wUy8G zFBe6HuV?!CZO8@D#B~EcJIVgGg3L-_;UoV5Bsh&vJ*v{uAKQ;RY>-OsqD)Vc7 zER<+2%@BMji5kaPSh^>tgJHtjDFF`3Na*QZO=|%Rks;RZ8x+YoHPabsZRdAE=0~AZ z!}pruTGeuis$&PCB{MERStkinqT{Mgec?jqx;Na8y{(LN>b{SEJ0TLzy*z6({;4op zeo`*#^I~;0`QFNtp5h8fKW4Vj@!Qf!<@U<%R7(#qPrlx#PV&j8&iqu)qc;gPR9~KN z(?a~F;Y$YdRz!h#?CdnTJA8;N`XulSNurefsq=r3eg6|vj;v3stA-s1Oy@rpuZ8V4 z@*3KcT_IxRj`@~#3h2xEJk4)MJK(bw?^54jRrG#IhV=Ce689%*$Mw5tA(_<&pKo-N zKuz@*%qk4u0&BLOL#A2?1m29#&A+@A=G5H-?AZ=(?#c<5-PF-Rvjr)VDI~u{lE#+= zvJUY0ym@I@O%6P(eI+!rI0j7pHs?hU|6M4AzrbSg5Ja{ei0yt;1rpVDe2Pim;NuJV zY1z@G;4k{_rKr6oddXLARd$gZrG7|Y>2&wP_pVayL``X=S{A)VJ&M$U*dMsVb5IEF z`gM2eVu=RGd$#m2jK2vbR!(I$g``eFNXjCS$N(r;6%$H$R|*Y=McJ>3K09~FVwZ|# z6O{7zv84A@!u1P%A1m~|!F%NuEiBjp9*y!h;+9szrCz&qslpKAlbzP7njU)I8fivnNT9*#p*iw}+ax?LX0 zt}>qf*qN+PEpdw83los)XYAa)RT=fJ`cZl|p5zOibn=>gOgH3w_PjSSCUjD^q4hPL1wD+jYsdf z(4x6L(FZ0LgZE(_pAGMIQR9bmv-wkqe-SqHU`6;iG;5x;(#(}NVX9YAfb)$}m@h5Z z9&~yb&Mc_N|6!?u%x-)y#ipHb`|-<7PajQ0Zs8$gTEikBera5z896WQB%e~~;?)Ok z(2$m(;SYX-VV{y#j=~`yz0S!5AJx9BxwV2K=bYCTMcAglfF`iJ-M{z4fwj?XY3~!W2x-ol0$!IFeYD0~vQ@ z!}!OukpEm~#hR`t*fCXG8L%3frnG(c%)VF9VZChX=p#`i!56cldSfocel{|{q#X?9 zJ0iYLYLi3QVD^Ex%EE|CJM4SIhc@tzOOrqAt_N2ZWl5^Y7Q-X^r9(${$)LAp?H_a0 zKf<1qI>%k3#L%2~l(F-QBGAt@;?7T$L_V`Wq)91;!g>9GxL}77IC*lr(|&!Dr)<(< zueceH;H2@E(3*+8VCLMJn*C@DnV%(m-`|Z#GsBfkcpE!NeWrqkX-z^XZ*$+1seOEC z>gP$mYC+`uoX64GGSbyB|7&d5Q&R8tL3pg+*y#i(2v!PWHGPEZXLiNDnVt{N3@`U8 z-)V!URI!_hmOZ4-xxr=G*}ZUf$_xAaPAw!7yCrkSj4Cj?7BVFIasX_9xHpQQ)4D*X*su4nB*CMbWKk|2<7`E#T%3L zk6TBbpDa?m3;Pa)-gvT-l zQ63?5-&;NFWyAp7ayULdD4F0`>s}|W-ChYN6!o1ALQ~0ktC+-7=T~I2qpnoWi)a{IY^fZ9rjcw8&4&;@bhSB#&Zd#LbFXP6i3JiFY zIOJqcTeo!;#AQV`m@gyw?EOzHtxQe<%e9LavshfL(ZBn!m=6-=XaA-6`-{J>|5gOL|`aS=Y0OuDjrh%F;!yn@~U;Nf1loIFr-|gy| z{|k=geE+-uf0wHyOOicQJBAK+%)muirtH7CSRyQ0Lgho-9i5zX4xez^!D%pti;I0H zeK&`eoSFDdSN8vy$q{C^5#h9B8gQ{VGr~psp+9QufB(4hkl*QFq||_!W5hBLVHu3_ za2oQFZ|UE;xw+XL2r~WgaG6RnGs*s*>6RtRLhL`eSp4kq*fT@{%sTc_vF9-60!bCqdT|h&qsJ0bzNjI?kha;UAuhp z<9zTrE_ZqTjY2rHsWAQG=@OV3WXAKufSm7_excqzr4rOHNG=c@Uk!>q2e*z>s0DF{ zJXb@pdf@$GKw37!z=~VgzP}0D;(NvCIsze+W}Q6uXcWwyx_Fna zCV479(I1AX{|SBm`sptU{6&GkDDW2r{-VJDj}#DPsj>Y$E*2lFnRru2_B$S?$0<+z zMB2l&wLQAS`HOI?f8OkGzyA3>=`VjfyMJ>>Su8c%Anpaf;T2JqIs0CkPO^kD_Ky3= zTd`RG(Enxp^56abhbuz}QF8yE{c2It?;(e+>=5C9d%u6spBnuV}DYsyVNlydfWT-^3d#ZeLl+3%V6o934D}_(tOH7hL6gAY&KhrhmUg8vyMsY;H3=WcTRP!5=eKxAV`A?M&pQRRe&ROPzXBu$RxAmzqvb8}L$<@oi+pyp-><;R3yJywp;f%;LP%fSr71$OsP=(X38L z%|qF;CxnNR<~5m_^O=Vt#Cv`vo`+%&Ba(-j@^ov^a3Bv=GJ~cJ55<1$DIRLUau1Oy zdwHm?Z#OSg+3-;8W-E9o>z0V4R>nLO%~cXpc__@A=I~L8hjM05Fb}1n^3&R6fSW3K z+C(VGP0`%)qKKQC%WlX`wJnzd^|##A!|!9`ibJ`nb=#)s`2}!Of`kiJUE-$RomeU7PTbtq1~D&7DZD< zIEY1s7t##PqPEcDc9um+w&gD}I>4fmT`I^7v#6uAc&uVkS~mw?Y@f%Xid6+BkDbP% zyl8eF%c78>nzFYTi>f`pku({_D`_(P7{$>swBV0onj4w|M)4`SyW^v{qVIcU&iYZj zl>MMl95G2KJyw1c)3Y+AX9OR!G7i7@Z3Gi$zbE;61QX%Ee%^NkKMizu>p3)nY3evy zj9}-ixE&=kMsNY?ZMF0WHW_GKmef9sA4<`THjL@F42>Gb``9lyjB{zVa$p!69dO{~ zT0M;K(cMiO#%%Ev8^*g{zx=VWWe9U{z#+_L^N1lFFgOwwb9D$0OVf&G2(#H``4G;S zPc!HcrnSTwp&`sBd;K8p^Y9~@YY-Eqwz}ZyAWnXhPFfCPT3X|G4&rMy{S$SU4C2lq zy2C-dK~`H>o^KE*OkF&5sd@lUU@NEre98J)`Tj=(_}4+2u?MilKIycbz@q}m#^%`-n9Ce+Kszy(@*J& zbYmNu%#B@`qQy9~3)9ke`B@jfN|WVM7iNotLl-8*n_RiH3%{p_F{umFT%W<;h27bL z+liY9_eG|5V)L!VRcenr@tfnc=IX@kX7-)f?WrbFEuFYF0f=hs#I&`u6mdf*rVmaLZKJ4$L--wjDTP8!hl1Sn8zU+zYB5m~CE$+i?lug59O< znAZNKAKEcnO$WAP(bkK-NiOY}Fae=-J1(Hr-JEtzYhh)jb{xEt)?95^fUWS`@Lu+V z+i)(KwL1ScY(%u7^|3ZglpxVuZJ4{rbuTh(!^B9E8EM0`)mYisitTB2^sE)@((K^S ziu>*knT=?+;*?CZrD0750FdarJ=?qyD?iIEq;JpVrOz6s<R1x)BG`YU)b^c3=~t0kh4pSpy!T z#a*-kXXsSjI+#_Dy=nD-r5+q!|v_h-H=H#jG zc<^|}hv+RW^56*kbPKUH{WEA44j zV%qx|iK@iD_~Xy&1C`j0c6+8(Vl7%Nwp8G*6|@6Tfhl6;PwlC|muU4er2^B^ZQ4+d z)z}KO9M{ugx~m-1)~tVGIc7~F>gD54?9HCApIEDMDLti_Wd0=l;BX>Y{V5~T01q&EXIZOFkb$^4%)Qj|G;eb?nMy}Al6DzrwD7& zYB8)3Q?%LAD#RPe>=TK`ZL~OQ6kyl)Y{v>K((dKB?>LHh2gHD2#8x=pa3O6rZ|7qt zVnxIi@-eHWZqpCnJWP}U5%oN*OQ=C45L3h(n=77+H_+QSifLzVpRpXvvCy7zQdnzIh#?luw>9IqLMSQF598}h}rH?QwH{?)nQ#a zjw0TlPE{H%XOk@zOY+b!l!6hN<*skZ*pB`9BH% z#$#8S&5pgt6m16gzr||Pdxy8~h{dk78@K5-rj%)i@FiCB2`8E(8nf7n<2j~=1Bs^+ zh7sFwd4gGN1NsoV((aZ^AaAuA2_Z67$foVtbL$dD!rXOJX z1y{~X=rv&U958wh z7(ED#UIa!@0;4y9(WAiVRbcciL~-;kFnSmmy$p<=21aiKqsM{K>%i!FVDvsPb^sW= z0F0dg#%=&(M}V;_z}OjJ><%z?2pGErjGY3;ZUJM*fU#@9*g0VA9x!$g7`q6Jodm{i z0%J#kv8%w?SzzogFm@Oiy9|t-2F7j!W5)^n#^T6WRePH|mn8oo6;48;Z0LE_s zL5?2*K^(sV7(W9FIerH?ar_Wq{1OPI!^yyQKpejX7(WJ%(_!;)J4kZ;9ANw&Fl9ST z9YA~0#4mzV96t#ZIertcwRi#U!{zv8!1!s<%<_U7#;=1996t{%Ies57ejs>q{6f&+_=&*yjj)O1M?x3JuLQ==1Z|Gr2`L;u6d1o0 zhUjo5vKxFkek6~8n}PA8 zA&BEw!z_-U4UFFnP8>fR1UY^=saMSQ(*be(b|~cd@xb`?q)q_a&xcStEG2oSm^c8+ zIdK6Tr^D~}eZa&G5XFfjfDJRK^aB%TfGa2N05+U*rXOB$;u2WNiBq7S6Su$xP8i5M#NY~u!5I)+O;9Yv;1GzxB@o-~Y-b?`w?Oh790Re#9Ca?l z;2da#gL@zb2SE%jf@(Q931V;)#Na3>n}e$$24_JG?tFi&V@p0cx(j^VsJ3T;9|&|hUZ9KCk8h|43375)9_#HarWwh{63(CI<&Z@*G?cvDLjRFN)#d zh9sW_8%IP8u88h%a7IL-_YJ$^SF!{LH?D|IRx9o?Q$zIG2C;@1NJ+*^B(7 zD89!T9(8fB!zhY%uu0wZDM9dL_ttODS^s^LpEV zXMe%(b-+K?A^-30FZlcYmQz@VQ&BH@^4Ckzu#ZLh!*P-!#}^t@>`zSn-PA0`9HY+FRC#Qh5!Hn literal 0 HcmV?d00001 diff --git a/docs/docs/tutorials/index.md b/docs/docs/tutorials/index.md index 1038be73..6c4158a3 100644 --- a/docs/docs/tutorials/index.md +++ b/docs/docs/tutorials/index.md @@ -21,6 +21,11 @@ We are working on expanding the list of tutorials to include advanced concept such as interpolating `Parameter`s, sharing `Parameter`s at multiple `Q` and analysing complex inelastic data. +- [Tutorial 0: Basics](tutorial0_basics.ipynb) - Get started with + EasyDynamics and fit a basic data set. +- [Tutorial 0: More advanced](tutorial0_more_advanced.ipynb) - + Introduction to more advanced features in EasyDynamics, fitting a data + set with multiple components and background. - [Tutorial 1: Brownian Diffusion](tutorial1_brownian.ipynb) - Learn how to analyse QENS data with elastic incoherent background and Brownian diffusion. diff --git a/docs/docs/tutorials/tutorial0_basics.ipynb b/docs/docs/tutorials/tutorial0_basics.ipynb new file mode 100644 index 00000000..227fd5c2 --- /dev/null +++ b/docs/docs/tutorials/tutorial0_basics.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8643b10c", + "metadata": {}, + "source": [ + "# Basic fitting in **EasyDynamics**\n", + "We here show how to use **EasyDynamics** to fit a simple synthetic data set. We start with the simplest possible example; later tutorials will be more involved.\n", + "\n", + "The general procedure is to create an `Experiment` object to hold the data, a `SampleModel` to describe the model, and `Analysis` to fit the model to the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bca91d3c", + "metadata": {}, + "outputs": [], + "source": [ + "# Imports\n", + "import pooch\n", + "\n", + "import easydynamics as edyn\n", + "import easydynamics.sample_model as sm\n", + "from easydynamics.analysis.analysis import Analysis\n", + "\n", + "# Make the plots interactive\n", + "%matplotlib widget" + ] + }, + { + "cell_type": "markdown", + "id": "4c8e97b7", + "metadata": {}, + "source": [ + "We first create an `Experiment` object to contain the data. The data must either be a `hdf5` file or a `scipp.DataArray`; in both cases it must have coordinates `Q` and `energy`. We here use Pooch to download an example data set.\n", + "\n", + "

\n", + " 💡 Tip\n", + "
\n", + " If you have one or more data files that you want to fit using EasyDynamics, you can reach out to us e.g. at henrik.jacobsen@ess.eu for help.\n", + "
\n", + "
\n", + "\n", + "We give the `Experiment` a `display_name` which is used as the title when plotting the data." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7121f9c8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load the data\n", + "experiment = edyn.Experiment(display_name='Tutorial')\n", + "\n", + "file_path = pooch.retrieve(\n", + " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/tutorial0/docs/docs/tutorials/data/fake_simple_data.hdf5',\n", + " known_hash='b49944c4447e69be4d30d1bed935173c4a1727c25a347285cbb156edc76ee261',\n", + ")\n", + "\n", + "experiment.load_hdf5(filename=file_path)" + ] + }, + { + "cell_type": "markdown", + "id": "7daa3f64", + "metadata": {}, + "source": [ + "We can visualize the data in multiple ways, relying on plopp: https://scipp.github.io/plopp/\n", + "\n", + "For now, let us plot the data using a slicer showing intensity as function of `energy` for various `Q`. You can dragg the slider to choose which $Q$ is displayed. Notice that the title is the `display_name` that we gave the `Experiment`.\n", + "\n", + "
\n", + " 💡 Tip\n", + "
\n", + " You can change the title by running `experiment.display_name=\"new title\"`\n", + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fbd31297", + "metadata": {}, + "outputs": [], + "source": [ + "experiment.plot_data(slicer=True)" + ] + }, + { + "cell_type": "markdown", + "id": "6c87b01c", + "metadata": {}, + "source": [ + "The data looks somewhat noisy. To improve statistics, we can rebin it. The method takes a dictionary of coordinates and the new bins. The new bins can be given as an integer number of bins or as a `scipp.Variable` (https://scipp.github.io/generated/classes/scipp.Variable.html#scipp.Variable) of bin-edges. For now, we just use integers, choosing 16 bins in $Q$ and 256 bins in energy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04644ee2", + "metadata": {}, + "outputs": [], + "source": [ + "experiment.rebin({'Q': 16, 'energy': 256})\n", + "experiment.plot_data(slicer=True)" + ] + }, + { + "cell_type": "markdown", + "id": "29b7f6b1", + "metadata": {}, + "source": [ + "
\n", + " 💡 Tip\n", + "
\n", + " You may have noted that the y axis is automatically scaled to include all data for each Q. If you do not want this, use `autoscale=False` in the plot command.\n", + "
\n", + "
\n", + "\n", + "In this data we see a single Gaussian shaped peak and a background that seems to be zero on average. We now want to fit this data, e.g. to determine how the Gaussian changes with $Q$. We define a `Gaussian` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6762faba", + "metadata": {}, + "outputs": [], + "source": [ + "gaussian = sm.Gaussian(display_name='Gaussian', area=1, width=0.05)" + ] + }, + { + "cell_type": "markdown", + "id": "00e2c719", + "metadata": {}, + "source": [ + "
\n", + " 💡 Tip\n", + "
\n", + " You can access and change the values of the parameters of the Gaussian like this:\n", + " `gaussian.area=0.5`\n", + "
\n", + "
\n", + "\n", + "
\n", + " 💡 Tip\n", + "
\n", + " The following functions are implemented: Gaussian, Lorentzian, Voigt, Delta Function, Damped Harmonic Oscillator, Polynomial. If you need a different model, you can define your own using ExpressionComponent\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "088ac17d", + "metadata": {}, + "source": [ + "We would like to fit this model to our data. However, it would be tedious to copy/paste the model for 16 values of $Q$, especially when the model grows more complicated. Instead, **EasyDynamics** handles this for us; we simply have to create a `SampleModel` and pass it our component." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ec6836f", + "metadata": {}, + "outputs": [], + "source": [ + "model = sm.SampleModel(components=gaussian)" + ] + }, + { + "cell_type": "markdown", + "id": "0b5c3c8b", + "metadata": {}, + "source": [ + "Our `SampleModel` does not yet have any $Q$ values. We could tell it what $Q$ is by using the `Q` attribute.\n", + "```python\n", + "Q_values=sc.linspace(start=0.2,stop=2.1,num=16,unit='1/angstrom', dim='Q')\n", + "\n", + "model.Q=Q_values\n", + "```\n", + "\n", + "This would generate a copy of the model for each of the values of $Q$. \n", + "\n", + "However, since we want the $Q$ values to match those of the experiment, it is much easier to let **EasyDynamics** handle it. To do this, we make an `Analysis` object and give it out experiment and sample model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b98d63dc", + "metadata": {}, + "outputs": [], + "source": [ + "analysis = Analysis(\n", + " experiment=experiment,\n", + " sample_model=model,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e220c616", + "metadata": {}, + "source": [ + "A lot happens under the hood in this step. It automatically extracts the $Q$ values from the experiment and passes them to our `SampleModel`, which in turn generates a copy of the `Gaussian` for each $Q$. We furthermore create an `Analysis1d` object for each $Q$. You will usually not need to think too hard about any of this, since you will mostly interact with your data and model through the `Analysis` object, but it can be good to know what is going on.\n", + "\n", + "We can access a list of the the `Analysis1d` objects like this:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fdddd14a", + "metadata": {}, + "outputs": [], + "source": [ + "analysis_list = analysis.analysis_list" + ] + }, + { + "cell_type": "markdown", + "id": "ceb877a5", + "metadata": {}, + "source": [ + "Let us plot our data and model using the plopp slicer:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8c13a87a", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.plot_data_and_model()" + ] + }, + { + "cell_type": "markdown", + "id": "a81248a4", + "metadata": {}, + "source": [ + "The model is of course not yet particularly good, since we didn't try very hard to guess what the parameters should be. However, we can now start fitting it using the `fit` method.\n", + "\n", + "Let us first fit a single $Q$ index and plot the data and model to see how it looks. We choose an arbitrary $Q$ and plot only that one" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aec75b7f", + "metadata": {}, + "outputs": [], + "source": [ + "fit_result_independent_single_Q = analysis.fit(Q_index=5)\n", + "analysis.plot_data_and_model(Q_index=5)" + ] + }, + { + "cell_type": "markdown", + "id": "af4103fb", + "metadata": {}, + "source": [ + "The fit looks very good. We can get a list of the parameters for this fit by accesing the corresponding `Analysis1d` object:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d074733", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.analysis_list[5].get_all_parameters()" + ] + }, + { + "cell_type": "markdown", + "id": "c3fe553b", + "metadata": {}, + "source": [ + "
\n", + " Note\n", + "
\n", + "You may note that the center of the Gaussian is fixed, and that we fitted an `energy_offset`. We discuss this in the following tutorial.\n", + "
\n", + "
\n", + "\n", + "Since the fit looked good, we can now fit all $Q$. We also plot the result, again using the slicer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e98e3d65", + "metadata": {}, + "outputs": [], + "source": [ + "fit_result_all_Q = analysis.fit()\n", + "analysis.plot_data_and_model()" + ] + }, + { + "cell_type": "markdown", + "id": "64afbd3c", + "metadata": {}, + "source": [ + "Information about the fit is stored in the output. It is stored as a list of **EasyScience** `FitResult`s. Here we show a few of the relevant properties:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5a68515", + "metadata": {}, + "outputs": [], + "source": [ + "print(f'The reduced chi-squared value for Q_index=5 is: {fit_result_all_Q[5].reduced_chi}')\n", + "\n", + "print(f'The minimizer engine is: {fit_result_all_Q[5].minimizer_engine}')" + ] + }, + { + "cell_type": "markdown", + "id": "12936c9d", + "metadata": {}, + "source": [ + "It can be nice to inspect the fit parameters to look for trends, and sometimes continue working with them. To do this, we convert the parameters to a scipp Dataset (https://scipp.github.io/generated/classes/scipp.Dataset.html#scipp.Dataset)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "133e682e", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.parameters_to_dataset()" + ] + }, + { + "cell_type": "markdown", + "id": "8acda0e4", + "metadata": {}, + "source": [ + "We can also plot the parameters as a function of `Q` using the `plot_parameters` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dfacdf24", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.plot_parameters(names=['Gaussian area'])" + ] + }, + { + "cell_type": "markdown", + "id": "842c1f01", + "metadata": {}, + "source": [ + "It will soon be possible to use **EasyDynamics** to fit these parameters to e.g. a polynomial." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/docs/tutorials/tutorial0_more_advanced.ipynb b/docs/docs/tutorials/tutorial0_more_advanced.ipynb new file mode 100644 index 00000000..49cb8963 --- /dev/null +++ b/docs/docs/tutorials/tutorial0_more_advanced.ipynb @@ -0,0 +1,320 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8643b10c", + "metadata": {}, + "source": [ + "# Basic fitting in **EasyDynamics**\n", + "We here show how to use **EasyDynamics** to fit a more advanced synthetic data set with multiple signals and a background, as well as an energy offset that could from from slight instrument misalignment. \n", + "\n", + "The general procedure is to create an `Experiment` object to hold the data, a `SampleModel` to describe the model, and `Analysis` to fit the model to the data. The `Analysis` object now also contains an `InstrumentModel`, which describes the background and energy offset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bca91d3c", + "metadata": {}, + "outputs": [], + "source": [ + "# Imports\n", + "import pooch\n", + "\n", + "import easydynamics as edyn\n", + "import easydynamics.sample_model as sm\n", + "\n", + "# Make the plots interactive\n", + "%matplotlib widget" + ] + }, + { + "cell_type": "markdown", + "id": "4c8e97b7", + "metadata": {}, + "source": [ + "As before, we createa an `Experiment` to hold the data, and rebin it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7121f9c8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load the data\n", + "experiment = edyn.Experiment(display_name='Tutorial')\n", + "\n", + "file_path = pooch.retrieve(\n", + " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/tutorial0/docs/docs/tutorials/data/fake_advanced_data.hdf5',\n", + " known_hash='ee7310249df71a312ebc219f3e16b8da4e9aa37d29df919bbcaa541a38e1c39f',\n", + ")\n", + "\n", + "experiment.load_hdf5(filename=file_path)\n", + "experiment.rebin({'Q': 16, 'energy': 256})\n", + "experiment.plot_data(slicer=True)" + ] + }, + { + "cell_type": "markdown", + "id": "29b7f6b1", + "metadata": {}, + "source": [ + "This time, we see a sharp Gaussian near zero energy transfer, but with broad tails. There is also a pair of symmetrically placed peaks near +-1.5 meV. The background is not zero, and looks like it has a slope. We first focus on the three contributions to the signal: the Gaussian, its tails, which can be described by a Lorentzian, and the peaks near +- 1.5 meV, which can be described by a damped harmonic oscillator.\n", + "\n", + "We create and place these in a `ComponentCollection` like this:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6762faba", + "metadata": {}, + "outputs": [], + "source": [ + "gaussian = sm.Gaussian(display_name='Gaussian', area=3, width=0.05)\n", + "lorentzian = sm.Lorentzian(display_name='Lorentzian', area=2, width=0.3)\n", + "dho = sm.DampedHarmonicOscillator(display_name='DHO', area=1.5, width=0.2, center=1.5)\n", + "\n", + "collection = sm.ComponentCollection()\n", + "collection.append_component(gaussian)\n", + "collection.append_component(lorentzian)\n", + "collection.append_component(dho)" + ] + }, + { + "cell_type": "markdown", + "id": "00e2c719", + "metadata": {}, + "source": [ + "
\n", + " Note\n", + "
\n", + "Note that we do not give the Gaussian and Lorentzian a `center` value. In this case, the center is at zero (with a potential offset, see below), and fixed. This is typically what you want when describing elastic (the Gaussian) and quasielastic (the Lorentzian) signals.\n", + "
\n", + "
\n", + "We pass this `ComponentCollection` to our `SampleModel`, just like before when we passed only a single component." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ec6836f", + "metadata": {}, + "outputs": [], + "source": [ + "model = sm.SampleModel(components=collection)" + ] + }, + { + "cell_type": "markdown", + "id": "0b5c3c8b", + "metadata": {}, + "source": [ + "Next, we want to handle the two instrument effects. The first is the small shift in energy: if you zoom in on the peak at the center, you'll see that it is in fact not centered at zero - it is offset. The offset applies to elastic, inelastic and quasielastic scattering. This is very typical in real experiments, and can be caused by slight misalignment or imperfections in the instrument. To handle this, we create an `InstrumentModel`, and give it an `energy_offset`. \n", + "\n", + "
\n", + " Note\n", + "
\n", + "As noted in the previous tutorial, the energy_offset is always present, even when you do not explicitly set an InstrumentModel. This may give problems in two cases: 1) If all peaks are given a center value and allowed to fit it. In the simplest case of a single peak, this is problematic because there are now two parameters determining the center of the peak. The peak center/energy offset are equivalent in this case, and cannot be uniquely determined. 2) If there is no central peak, e.g. if only background scattering is present.\n", + "In either case, the energy_offset should be fixed. You can do this in the InstrumentModel using InstrumentModel.fix_energy_offset() or Analysis using Analysis.fix_energy_offset().\n", + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b82f8a4", + "metadata": {}, + "outputs": [], + "source": [ + "instrument = sm.InstrumentModel(energy_offset=0.05)" + ] + }, + { + "cell_type": "markdown", + "id": "0470ce5e", + "metadata": {}, + "source": [ + "Second, we want to handle the background. We do this with a `BackgroundModel`, which works the same as the `SampleModel`. We give it a `Polynomial` component:\n", + "
\n", + " 💡 Tip\n", + "
\n", + " SampleModel, BackgroundModel and ResolutionModel (introduced later) all take components in several different ways: you can add a single component like in the previous tutorial, append components using the `append_component` method, or give a ComponentCollection like we do here. \n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdcdc438", + "metadata": {}, + "outputs": [], + "source": [ + "background = sm.BackgroundModel(components=sm.Polynomial(coefficients=[1.2, 0.05]))" + ] + }, + { + "cell_type": "markdown", + "id": "44522a12", + "metadata": {}, + "source": [ + "We add the background to the instrument model:\n", + "
\n", + " 💡 Tip\n", + "
\n", + " We could also have created the background model first, and then added it to the InstrumentModel when creating it, i.e. InstrumentModel(energy_offset = 0.05, background_model = background)\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee677467", + "metadata": {}, + "outputs": [], + "source": [ + "instrument.background_model = background" + ] + }, + { + "cell_type": "markdown", + "id": "02309896", + "metadata": {}, + "source": [ + "Now we create out `Analysis` object and give it the instrument model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b98d63dc", + "metadata": {}, + "outputs": [], + "source": [ + "analysis = edyn.Analysis(\n", + " experiment=experiment,\n", + " sample_model=model,\n", + " instrument_model=instrument,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ceb877a5", + "metadata": {}, + "source": [ + "It is always good to check if the model somewhat matches the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8c13a87a", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.plot_data_and_model()" + ] + }, + { + "cell_type": "markdown", + "id": "a81248a4", + "metadata": {}, + "source": [ + "As before, let us first fit a single $Q$ index and plot the data and model to see how it looks. We choose an arbitrary $Q$ and plot only that one" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aec75b7f", + "metadata": {}, + "outputs": [], + "source": [ + "fit_result_independent_single_Q = analysis.fit(Q_index=5)\n", + "analysis.plot_data_and_model(Q_index=5)" + ] + }, + { + "cell_type": "markdown", + "id": "af4103fb", + "metadata": {}, + "source": [ + "The fit looks very good. We can again get a list of the parameters for this fit by accesing the corresponding `Analysis1d` object. Note ethat the Gaussian and Lorentzian centers are both zero, but that the `energy_offset` is non-zero." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d074733", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.analysis_list[5].get_all_parameters()" + ] + }, + { + "cell_type": "markdown", + "id": "c3fe553b", + "metadata": {}, + "source": [ + "Since the fit looked good, we can now fit all $Q$. We also plot the result, again using the slicer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e98e3d65", + "metadata": {}, + "outputs": [], + "source": [ + "fit_result_all_Q = analysis.fit()\n", + "analysis.plot_data_and_model()" + ] + }, + { + "cell_type": "markdown", + "id": "8acda0e4", + "metadata": {}, + "source": [ + "Let us plot a few parameters as a function of `Q` using the `plot_parameters` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dfacdf24", + "metadata": {}, + "outputs": [], + "source": [ + "analysis.plot_parameters(names=['Gaussian area', 'Lorentzian area', 'DHO area'])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/docs/tutorials/tutorial1_brownian.ipynb b/docs/docs/tutorials/tutorial1_brownian.ipynb index b09546b7..73f2c26c 100644 --- a/docs/docs/tutorials/tutorial1_brownian.ipynb +++ b/docs/docs/tutorials/tutorial1_brownian.ipynb @@ -592,9 +592,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python (Pixi)", + "display_name": "Python 3", "language": "python", - "name": "pixi-kernel-python3" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -606,7 +606,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.13" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/docs/docs/tutorials/tutorial2_nanoparticles.ipynb b/docs/docs/tutorials/tutorial2_nanoparticles.ipynb index e7308dbf..a763567c 100644 --- a/docs/docs/tutorials/tutorial2_nanoparticles.ipynb +++ b/docs/docs/tutorials/tutorial2_nanoparticles.ipynb @@ -78,7 +78,7 @@ "resolution_experiment = Experiment(display_name='Nanoparticles, 1.5 K')\n", "\n", "file_path = pooch.retrieve(\n", - " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/tutorial2/docs/docs/tutorials/data/nano_1p5K.h5',\n", + " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/master/docs/docs/tutorials/data/nano_1p5K.h5',\n", " known_hash='32935cfaa5e623137ea5f4ba972d0c921bca8d0e067486666cdcf23abf27823e',\n", ")\n", "\n", @@ -216,7 +216,7 @@ "resolution_experiment = Experiment(display_name='Nanoparticles, 1.5 K')\n", "\n", "file_path = pooch.retrieve(\n", - " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/tutorial2/docs/docs/tutorials/data/nano_150K.h5',\n", + " url='https://github.com/easyscience/dynamics-lib/raw/refs/heads/master/docs/docs/tutorials/data/nano_150K.h5',\n", " known_hash='dc3abdaf6d2165f4dbc5df4e0de1890af8d4cd290f2c79ac7b319ccbe44117b8',\n", ")\n", "\n", @@ -605,9 +605,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python (Pixi)", + "display_name": "Python 3", "language": "python", - "name": "pixi-kernel-python3" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -619,7 +619,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.13" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index a821a82f..a7e2be2b 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -181,6 +181,8 @@ nav: - Tutorials: - Tutorials: tutorials/index.md - Getting Started: + - Tutorial 0. Basics: tutorials/tutorial0_basics.ipynb + - Tutorial 0. More Advanced: tutorials/tutorial0_more_advanced.ipynb - Tutorial 1. Brownian Diffusion: tutorials/tutorial1_brownian.ipynb - Tutorial 2. Magnetic nanoparticles: tutorials/tutorial2_nanoparticles.ipynb - Classes and Methods: diff --git a/pixi.lock b/pixi.lock index 0d173a32..fe533b93 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3888,7 +3888,7 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.3.0+devdirty8 + version: 0.4.0+devdirty8 sha256: 23d0790d25938acbe8e96780e087d1b29916963a0f6b4d04b906012d906c5cfb requires_dist: - darkdetect diff --git a/src/easydynamics/__init__.py b/src/easydynamics/__init__.py index 8173d51c..b46f3856 100644 --- a/src/easydynamics/__init__.py +++ b/src/easydynamics/__init__.py @@ -1,3 +1,11 @@ # SPDX-FileCopyrightText: 2025 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause """EasyDynamics library.""" + +from easydynamics.analysis import Analysis +from easydynamics.experiment import Experiment + +__all__ = [ + 'Analysis', + 'Experiment', +] diff --git a/src/easydynamics/analysis/analysis1d.py b/src/easydynamics/analysis/analysis1d.py index 36cc7c8c..5c75c844 100644 --- a/src/easydynamics/analysis/analysis1d.py +++ b/src/easydynamics/analysis/analysis1d.py @@ -294,38 +294,34 @@ def plot_data_and_model( """ import plopp as pp - if self.experiment.data is None: + plot_kwargs_defaults = { + 'title': self.display_name, + 'linestyle': {'Data': 'none', 'Model': '-'}, + 'marker': {'Data': 'o', 'Model': 'none'}, + 'color': {'Data': 'black', 'Model': 'red'}, + 'markerfacecolor': {'Data': 'none', 'Model': 'none'}, + } + + if self.experiment.binned_data is None: raise ValueError('No data to plot. Please load data first.') energy = self._verify_energy(energy) if energy is None: energy = self._masked_energy - data = self.experiment.data['Q', self.Q_index] - model_array = self._create_sample_scipp_array(energy=energy) - - component_dataset = self._create_components_dataset_single_Q( - add_background=add_background, energy=energy - ) - # Create a dataset containing the data, model, and individual # components for plotting. - data_and_model = sc.Dataset({ - 'Data': data, - 'Model': model_array, - }) - - data_and_model = sc.merge(data_and_model, component_dataset) - plot_kwargs_defaults = { - 'title': self.display_name, - 'linestyle': {'Data': 'none', 'Model': '-'}, - 'marker': {'Data': 'o', 'Model': 'none'}, - 'color': {'Data': 'black', 'Model': 'red'}, - 'markerfacecolor': {'Data': 'none', 'Model': 'none'}, + data_and_model = { + 'Data': self.experiment.binned_data['Q', self.Q_index], + 'Model': self._create_model_array(energy=energy), } if plot_components: - for comp_name in component_dataset: + components = self._create_components_dataset_single_Q( + add_background=add_background, energy=energy + ) + for comp_name in components: + data_and_model[comp_name] = components[comp_name] plot_kwargs_defaults['linestyle'][comp_name] = '--' plot_kwargs_defaults['marker'][comp_name] = None @@ -744,7 +740,7 @@ def _create_background_component_scipp_array( ) return self._to_scipp_array(values=values, energy=energy) - def _create_sample_scipp_array(self, energy: sc.Variable | None = None) -> sc.DataArray: + def _create_model_array(self, energy: sc.Variable | None = None) -> sc.DataArray: """ Create a scipp DataArray for the full sample model including background. diff --git a/src/easydynamics/analysis/analysis_base.py b/src/easydynamics/analysis/analysis_base.py index d249a052..cc351bb1 100644 --- a/src/easydynamics/analysis/analysis_base.py +++ b/src/easydynamics/analysis/analysis_base.py @@ -409,5 +409,7 @@ def __repr__(self) -> str: str A string representation of the Analysis. """ - return f' {self.__class__.__name__} (display_name={self.display_name}, \ - unique_name={self.unique_name})' + return ( + f' {self.__class__.__name__} (display_name={self.display_name}, ' + f'unique_name={self.unique_name})' + ) diff --git a/tests/unit/easydynamics/analysis/test_analysis1d.py b/tests/unit/easydynamics/analysis/test_analysis1d.py index 43763011..aab85e03 100644 --- a/tests/unit/easydynamics/analysis/test_analysis1d.py +++ b/tests/unit/easydynamics/analysis/test_analysis1d.py @@ -230,8 +230,11 @@ def test_get_all_variables(self, analysis1d): assert Counter(variables) == Counter(expected_vars) def test_plot_raises_if_no_data(self, analysis1d): - analysis1d.experiment._data = None + # WHEN THEN + # override the binned data with None to simulate no data available for plotting + analysis1d.experiment._binned_data = None + # EXPECT with pytest.raises(ValueError, match='No data'): analysis1d.plot_data_and_model() @@ -240,7 +243,7 @@ def test_plot_calls_plopp_with_correct_arguments(self, analysis1d): # Mock the data and model components to be plotted fake_model = sc.DataArray(data=sc.array(dims=['energy'], values=[1, 2, 3])) - analysis1d._create_sample_scipp_array = MagicMock(return_value=fake_model) + analysis1d._create_model_array = MagicMock(return_value=fake_model) fake_components = sc.Dataset({ 'Component1': sc.DataArray(data=sc.array(dims=['energy'], values=[0.1, 0.2, 0.3])) @@ -718,8 +721,8 @@ def test_create_background_component_scipp_array(self, analysis1d): np.array([1.0, 2.0, 3.0]), ) - def test_create_sample_scipp_array(self, analysis1d): - """Test that _create_sample_scipp_array correctly + def test_create_model_array(self, analysis1d): + """Test that _create_model_array correctly evaluates the full model and calls _to_scipp_array with the correct values.""" @@ -730,7 +733,7 @@ def test_create_sample_scipp_array(self, analysis1d): analysis1d._to_scipp_array = MagicMock() # THEN - analysis1d._create_sample_scipp_array() + analysis1d._create_model_array() # EXPECT analysis1d._calculate.assert_called_once() From d9cff1266eb7f0c9fbcb72f3f98d348112608d5a Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Wed, 15 Apr 2026 20:43:17 +0200 Subject: [PATCH 07/10] Add RUF, NPY and several other linting rules (#155) * Enable RUF linting * Enable RUF for tests * Enable NPY rules * pixi run fix * Update link to data in tutorial * Add PERF linting * fix notebook, more linting * add more linting rules * Add PYI linting * another linting rule * add a bunch of small linting rules+ * fix typo in tutorial * fix linting * fix linting again --- docs/docs/tutorials/analysis.ipynb | 10 +- .../tutorials/data/create_fake_data.ipynb | 19 +- .../docs/tutorials/data/fake_simple_data.hdf5 | Bin 409056 -> 409056 bytes .../tutorials/tutorial2_nanoparticles.ipynb | 4 +- pixi.lock | 647 +++++++----------- pyproject.toml | 69 +- src/easydynamics/analysis/analysis.py | 14 +- src/easydynamics/analysis/analysis1d.py | 3 +- src/easydynamics/base_classes/__init__.py | 2 +- .../base_classes/easydynamics_modelbase.py | 2 +- .../convolution/analytical_convolution.py | 4 +- src/easydynamics/convolution/convolution.py | 13 +- .../convolution/numerical_convolution_base.py | 10 +- src/easydynamics/sample_model/__init__.py | 18 +- .../sample_model/component_collection.py | 2 +- .../sample_model/components/__init__.py | 10 +- .../components/expression_component.py | 7 +- .../components/model_component.py | 7 +- .../sample_model/instrument_model.py | 2 +- src/easydynamics/sample_model/model_base.py | 2 +- src/easydynamics/sample_model/sample_model.py | 4 +- src/easydynamics/utils/detailed_balance.py | 12 +- .../easydynamics/analysis/test_analysis.py | 6 +- .../easydynamics/analysis/test_analysis1d.py | 8 +- .../analysis/test_analysis_base.py | 4 +- .../base_classes/test_easydynamics_base.py | 4 +- .../test_easydynamics_modelbase.py | 4 +- .../test_analytical_convolution.py | 4 +- .../convolution/test_convolution.py | 20 +- .../convolution/test_convolution_base.py | 20 +- .../convolution/test_numerical_convolution.py | 2 +- .../test_numerical_convolution_base.py | 8 +- .../experiment/test_experiment.py | 6 +- .../test_damped_harmonic_oscillator.py | 20 +- .../components/test_delta_function.py | 14 +- .../components/test_exponential.py | 30 +- .../components/test_expression_component.py | 14 +- .../sample_model/components/test_gaussian.py | 24 +- .../components/test_lorentzian.py | 22 +- .../sample_model/components/test_mixins.py | 12 +- .../components/test_model_component.py | 18 +- .../components/test_polynomial.py | 10 +- .../sample_model/components/test_voigt.py | 32 +- .../test_brownian_translational_diffusion.py | 14 +- .../diffusion_model/test_diffusion_model.py | 8 +- .../test_jump_translational_diffusion.py | 22 +- .../sample_model/test_component_collection.py | 22 +- .../sample_model/test_instrument_model.py | 4 +- .../sample_model/test_model_base.py | 2 +- .../sample_model/test_sample_model.py | 12 +- .../utils/test_detailed_balance.py | 8 +- 51 files changed, 566 insertions(+), 669 deletions(-) diff --git a/docs/docs/tutorials/analysis.ipynb b/docs/docs/tutorials/analysis.ipynb index 623fd942..0d30fd4b 100644 --- a/docs/docs/tutorials/analysis.ipynb +++ b/docs/docs/tutorials/analysis.ipynb @@ -213,10 +213,7 @@ " instrument_model=instrument_model,\n", ")\n", "\n", - "# We need to hack in the resolution model from the vanadium analysis,\n", - "# since the setters and getters overwrite the model. This will be fixed\n", - "# asap.\n", - "diffusion_analysis.instrument_model._resolution_model = (\n", + "diffusion_analysis.instrument_model.resolution_model = (\n", " vanadium_analysis.instrument_model.resolution_model\n", ")\n", "\n", @@ -305,10 +302,7 @@ " instrument_model=instrument_model,\n", ")\n", "\n", - "# We again need to hack in the resolution model from the vanadium\n", - "# analysis, since the setters and getters overwrite the model. This will\n", - "# be fixed asap.\n", - "diffusion_model_analysis.instrument_model._resolution_model = (\n", + "diffusion_model_analysis.instrument_model.resolution_model = (\n", " vanadium_analysis.instrument_model.resolution_model\n", ")\n", "diffusion_model_analysis.instrument_model.resolution_model.fix_all_parameters()\n", diff --git a/docs/docs/tutorials/data/create_fake_data.ipynb b/docs/docs/tutorials/data/create_fake_data.ipynb index ccf3aa19..34ddd5f7 100644 --- a/docs/docs/tutorials/data/create_fake_data.ipynb +++ b/docs/docs/tutorials/data/create_fake_data.ipynb @@ -54,7 +54,8 @@ "\n", "intensity_dataarray = sc.DataArray(data=intensity, coords={'Q': Q, 'energy': energy})\n", "\n", - "noise = np.random.normal(loc=0.0, scale=1.55, size=intensity_dataarray.shape)\n", + "rng = np.random.default_rng()\n", + "noise = rng.normal(loc=0.0, scale=1.55, size=intensity_dataarray.shape)\n", "intensity_dataarray.values += noise\n", "intensity_dataarray.variances = noise**2\n", "\n", @@ -84,10 +85,12 @@ "\n", "energy = sc.linspace(start=-3.0, stop=3.0, num=756, unit='meV', dim='energy')\n", "intensity_values = np.zeros((Q.size, energy.size))\n", + "rng = np.random.default_rng()\n", + "noise = rng.normal(loc=0.0, scale=0.35, size=intensity_dataarray.shape)\n", + "\n", "for i in range(Q.size):\n", " components = model.get_component_collection(i)\n", - " offset = sc.scalar(value=np.random.uniform(0.05, 0.15), unit='meV')\n", - "\n", + " offset = sc.scalar(value=rng.uniform(0.05, 0.15), unit='meV')\n", " components.components[0].area = 3.79 - 0.2 * Q[i].value\n", " components.components[2].center = 1.4 + Q[i].value / 10.0\n", " components.components[2].area = 2.45 + Q[i].value / 10.0\n", @@ -98,7 +101,7 @@ "intensity = sc.array(values=intensity_values, dims=['Q', 'energy'])\n", "intensity_dataarray = sc.DataArray(data=intensity, coords={'Q': Q, 'energy': energy})\n", "\n", - "noise = np.random.normal(loc=0.0, scale=0.35, size=intensity_dataarray.shape)\n", + "noise = rng.normal(loc=0.0, scale=0.35, size=intensity_dataarray.shape)\n", "intensity_dataarray.values += noise\n", "intensity_dataarray.variances = noise**2\n", "\n", @@ -114,7 +117,15 @@ "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", "version": "3.14.4" } }, diff --git a/docs/docs/tutorials/data/fake_simple_data.hdf5 b/docs/docs/tutorials/data/fake_simple_data.hdf5 index c2399db9c94a79e9f789c37e97e6c97f38adcb8f..14afb8306e10348eadf2bf0725104324d0f4aa29 100644 GIT binary patch literal 409056 zcmeFYc|4Zi*FSpS<|&y%NFpk8Dk-urB0|WJBuOC^lBqPHBF(9!N#+chMM+qfnauN$ zd7in=vvXHG&vU-#_dU<+_xt^EUgw<8b-!NszOJ?RUVHDg*V_Bq@3pRn>MBPzFz_%C zeqVHS1S$f{pWF4n)wQer5X~Rb`ty4J*|i(uTKZrujimT{LnKfWe&=zo(OK5`3s9~R z)+!q4sj3plCD-|{r)#DDgTXqV|DgYK^ZyG8sH-aJ{vPPbwb2T!rG;yHw)RM{Fn2Ql zeSiMS6$cAP0>ReY@iIC2ql3Tca=-unCoa}Cef?LxW+JHn;X))Z6F3NT1jq9i?d>I8 zEFBy#Ua=$RY$g)_)ckEte^s1rt^A*a@W-0|lK$lXCqKsj!q3Uo-tuqx|BfI1?_z8G zev5>Ofc>VBc~k%4XJ>Bvhtq$@=TD_IKEF+rNL~^CNA}zPcR3)W{;5D9{CD~clP^WO^?gB<_FwI=j@BR9t{LXKoY$vCMpkl<=1#JE$)o#wt>;_XSvp)GH@aSb zy}!rT%B}Zrz5IH+e_wF^v)+2UjBEAQ+gWdyX^sA`{5Sj?I`bO+U)$ZdMqlsmdb{iE z;J>!Z`Y(Le$IJF_=xbyGw%&nt!awOh68J{~|485;3H&30e*rX3wFCZoxqro1)^U0P`M)RP|0uWi zY`x}B_%B`gfAuYqi~#)^4sJwpNdt zjClMeQBeG4NVn!up(GOimDQgbOa$paDUrZHu1WWQ!PB_NxxeRfy_q21KgItGZcOtB zH?~-Vp#MAE_>bDGDaY>_|EpINf7RW$GLo*~aOjz0E~ShrhMf)cxPG_#er9 z-QL#m)W4O-5fkC;pWDCw8g7EcMcY5n_rJ9}vVZCKwa#Zf{X<>r*ze@e>bv&*+eZHr zr=}s_a}yk`&HuQV{_8k@^CkWp{sO-<$=AA4{3ky;f(Ths<~A2E*jZW-xXB&*-Iw2d z|MrxQa70NHd_OJ z*PeHqtpTR%eE+V3>$U!U`mgP-uSYxAaP;+>>;8##{_5))|BLDRy8mFq-+j`0jn99| z^?%<#v5txVkGg2@x}f}np&MylJ2N4yF%NTiO{v27893hye%O%&Q1f+~)EcM(RT1}v zme(Y7c<1K+&R-3n9IErn+@u5gLY&f1E6k#1zthSwSyY(f2;G@;_oLwTgFA$j=uJQQerBM=M8e*SMUkDiwKK1bnD5i#oUXY! zvZ_nyRNjdg7nTOluXwaoMdK;*IxKGc*>eDi2<4{lwVFmhES&ll+uNWd%-^${aU4Bw z{BrbDMhXfoqcw`~^@mXv&xh0O6!;aDhIt?Y`}z#)|hhm^!LZVv`TlN{=~@gJaaZhppEbd_VVrJ)&qHZoD7Lc$_*8R(L>7 zAxeb3^j~PDR4dSE%oA&;kVXjOF)in_Uqzn+=faJKlR(S#utoU*D`v}UUwg&A185F$ zj&l?*q8qBpy@OX+u)QkNhNUV^=ut$5?#a+qnCT4I!=k-+@r z_V;+kWVL|K9{M(YP<9$v4l`a;s-nScF23w6QJ6!=m@7FV0&>Boj>1gwVm9#Kv+j9C zIR$B}Hf)j0wAfWy{^g}#L@fKZ{EaZ91jzS3IluSLB=pyAzHa|)10Edz!f2ZeEuP1{ z?{UW2K47Mw@;VY&3r{^g38e!;Y%S%I%%)AKrRWT-b_;1S4oLWy^&9!ZWx3EhK|7rGfOCKM#N$) zmW0kG-~Rcdg$cK%=YB0sLyM(e-qL-KFo`t11@0xU(Bhg(zxdpmH(=g}i-cRY&Vci+ zXNNL26R=O*C%lLFr+`kAyDF`&4?=_Xj+M5Kfak#A_0z8g(FZs8F{bllsCa6h1(O~L z25ef4j0IP~y@}WQcxO9erHITaf71@1_>L`{HR(d5Mo&mlrn7K#CSFlCy&rAecpa0$ z`e19hf(~oO!G=cHJlqG$vV7AA0peLebIA zpssm1@?)F#hSCOji9cgGOy7@o>B|gQd}hWkR!6yJly^hrM=jx3wv_m`eR_iy-XsWn zU#^+Hl8PSF77oZpXQ9YFcMG(OW?-ww#7h;XDzw$7rznS&0#ju<)qXT+0Da=II&iUf z99|SUKl1f2GifqrcF2y}VuQqOjvz+TuGYiws|LKI_9clCNyqbfF+ zZA^Z>Nb8`fN=9!D@@r*{yF6S8q-$Y!sjhXw>#tdQ#}9Xd-4<$#;*1f*`kt+_XD}1G zy9J)JbmQn{_YSdS*Ez)fg3(Uawio7SKCx8uw}WXSzd_QDNffeVXf-t40zoUgrBa+nbg;6xMuk(Er{X(mTkdB72Mk?~66=SU)I2+UhL56`K+vd{@H&WBVwoN_+9X zH>(E5=jMARQYrE4!QT71vIy8Cz96=d{Yz-cuV&_Fy>W>`7F*etH|);m^lvUE2;WH}iJBcb^Ai?N}xs2)wuu46STG?@Z{1{fpx-!iQ>5>@~Y>;Radgv#la+^_^v4>pu4N zHa7(}uPQ3$uZk{%mq`*f^ zHV$^*E=2XXMtR!zYB1JN%}HiyLRHG1-*wu%kWNTtnnA(}cwM3$XuLR!%$#NK&OWBZ z%bWIh8D-=l(xVfN3(*az^$4r|1gQ^R)P{$AahQgKc8WG!`ES5$fUV8uW<3%tGrT4p z(G7P}SE_iFCct!(+47Xi0_w0a4F($`?z6~hr+cvxUC^7!8>E~Cxzk0gs)t745$TL} zPQ@Y;63_Y8x}6$J(=9i0I5~*!v-=ynKUqZ6zbdAc4-zpto&@#R%>77R%*=y2o&=*m zJYHHR79kU@^bapm=&?#&xfK;gYOHZPQS((20gL8j`gpMLJNzOoyE*Nff$%9QXP*g5 zJo7`WYV_V|V8q=&zq>^OzIl@wvk!}C^%FMMJ<^Fv7KR%_JPBBJv;MBAz4OTU4nNI4 zs#&1#YB+m%fgO*Yu8C&qq{r*BeQFfk`jEeTT*4S<8R}qvb--f}Emj~sW-;(%8HL@W z2yKn0Rg9Q0DuWx{)6#lNQ4%%J6^*um2qCLwF4A?-~H zE!LBN?WDxRaiqy@>BB>shPp4eHcz*(;AOLQ9JkN4p*w-sZZCR`p!4p#cQ_B1!BJgT zf-UMrrTJHIspG#8T`=W9kS+~A?w*-Y;5`5y$LrElmgk^IY}3`MOWh!rc4?Ip6~N5| z=C{at3?*sQn-1o*qErv3m!FL$(QV6_cazU3aG2FH$!D5}%oJ)X&G<_AG+%abjO`~F zx~tzPuWLm1oIPH3biRA#csMBLiD!0k>Zw^vFh`(WeVqCugZKo{xrh=mr5x{;AU+ zwnT~Tlw{c%b#fNH)o^i-qd4(vR`$=OZ!c44WLcUB9}Z^x+2?uMVcEruD$)+oIGB!M;3E);Q`-GN=m zWGcxilEOS|&u1RKB!$HUE2eqBm%@aN@FTYKRKF?$zX0DO&;H8 z7Q=E*>fF=um%t>nYk5RxMKJ{z2CJ8o;+Poc8I@^Qaf~h^!ei1*7&}c@RYXy?6H~bC zSFt#^9aCsd@1v97ip4GHcbzpB#8}e#@+z(gVJB}V9M_lFhE)t*eSO539}6($#mf^n zVb1KU%BSP_Fz+4_QP)Gfn18vw_&LHRtj^~xtMeW<>{6bM{*zj6Y$~y=q)(I&vo32h z^CPih{jbthn4}j`6=)yswxGhcovT-3PhrNW3vM#onbBbld+(_!E;C@`mv6cVxGteS zzN9`6@_UJDQAF;KfN_|*^Tn4TmKwXn=;7+S`U@U>yqRG@(T3znD$@`AsWC?}3*G_e zA>@Ru&=aE3LKE73p(3afwZ5jT z9B6EZM<(%CqF&dc1G%zMN6Xq_*MaNOhE|iv%}BB`1|LL&X&(Y9%*&A7BWyUdQj-KtNd4mry)}R7o8>hJopK!INso8#hqzY?7PVCt)quUI6pQt zKz7|@n)9u_!0vov#`O{vPE)5GfBOC~vfcdlrV|lIiU*>+y+;RNhxOgjZw?%Ix;JCj zrqi9sL+$F3+Mo)^@~n8v8Q2DLT!GpP9s>}faP9cP56z(1J9FGoe-*`EjOo6THVebI zKF6rOjYCg44K?2sPeJ7%Q=G$G6ZF=|Y(B)fgpU8bC{jb!jQXFzfoVqm6A{Dw|sH0RK9jE@Sh($0JNpm-kkSDh1B zK9+(CHaDJlpTCNl$~0yDnCc+r-BDYm^8=_hW$duAK>-MUKUlPZj}G5mV;ZLvX zVRKbvzt2$$Eb`bnHT%JNxDt{sLo8WDAI3Lw32}8phLq73BLh0j$lytc#)k^{>9{v& zHtQGcyX&A@Rnv~P{(N=p_=hssc=?ri!ZjwW<>BQv)};=x*CB$0);v1Tl=zKSVgTVS z1|z4g%|Y?lq3cO|CgJS;$8TPWs*Uz9Uo^sE=y=z8hxPg@W(Fv5lvox|)Y!Q_=7KG(oBw%3~ zuNXJfOh9|Yt1hLtnW)i5V^xci{C?z-d+OYiKIF0;B;Lf2z&i@I4~ALO=+&@#ok7en zYHRvw81`Zq^#w?-RNSG{Wp&L1l-^N z-Jo9b0^C+OaHK4>6TN?MrJ^5mX{#ceP1bh0S% zP24esJP&$dQ`F)kC+$v9OF1a_bpr{C_ELwT(ne6!7TI|B8UeFUYK}ot z-LF`qam1@_n!?n&jP{D}T?nOKfa2TwvNpMk@Lj<3gTvPla0x4vvMMLR34gXO$@yUr z@+FEgnYE+c4GcMzOw{-}k%D$Z2v)w%@q>hR-?9-7ke@;< zk!=PnBP7JiMt$#TZyLJw#-=LIv>N8D;nEtBZ=tJH5d&-I~#+p@a+Bw8$x zmW{T_ei2xTR(@sSgK+vxP}+e$DqR2R-jgB4lh8y`=emE41#9tTIhy-o97O%?7(;hv zBWbY)MVmc+$iCw3eIw2)NbNPf&Pv}6*`_3I>EKncZlerR?#f3yq8;ycFm^*><7o<| zIx1Z6Rq2O@>?I)m%zkI}VIBguOF6CnEP^PixDBkjM104o$Y(UJ1dQEw&!fq$G}vf` zRK`>B8Q7So$eJvekIr2FHY*~~jUEo(aLC=Tj6UcbaVtB~i?(}qEAw9MM(_F$_Fk6g zgWJ{jbh1|FkyL(6+DWf5bnf^vJ7-u5c*dFVtA~z(?OyM??9xfN6p{9pL8}QGj+mS= zHW>ojoE6(PgM4^-g75n;O#;TYVbhJuK5DFoZ}zpdWhJ_(!%}g8ZxSR9o;uunbp#ci z-~NzknFKv8WjCn`iJ0R-=A2-|K^T0h%kU$e7C&~u%y{9}1k`3YS(nbPz+KCrzy~}G zxNPGn^|r4BoHygTJ%wfmOea$MI|&UUeveJ5)ur@!QMx1zWKO{q62=Fd>-k8v_vzbqYS^$Im!@^ zsiSj{TgCrlsH_xWm({CZzt0Aj`!>J6q%EPUXf>&AeDv6lTf?oThiLG^hZ_J3rNXWp zFMN5WhYs`6Tt37Xwt`*`R*8MSyolzbk3I`}L_#8+LaTMJD6w2=FS;`q7m%i~LXwm! zBX;oI`;I4SG?5KK=!B z9KJlY(gSdK0|)OdH%dIN=liJB?p{P=f3x+0qTuBQemBsDOMYTEsPV})p)bvsPng>0}Es5+xLf~ zss02kqgUvxkYp1gl{axl<}qPAYeXCl5N1&Fq}%@6oJ9QN&Z%GXA6Gzi{_(S4=aykF zQ-q^A((h0oKV3Tn@~31)9C zhNyhek<{Q>DB(1^7oj|ea*w6S&vL9lAI0v`pbblK+?XrRznOqvAI9irxVjK!Mbw?L znp&`7b{x>nnMC@9o6Du*8_+v<837CFHn`IN;NpvZN}Ss1@*x(*8k9-LME|~~9s+g> zy|O{0pg5;9DYJPAY=hh4=e-Beg(zLBlKmZM=T7DWJsR|wkDA8wIptvVCCEZS;93|g zr&8rQeanIF$xmJ}i^ZrQ^2h~kQwl6yWy{JN|77&i#!LEBdNDi<=(JaCB49JTf!+Ft z2Z86((JY@hB0lrc^JS>x3Vb~nBRyq6z(!j)QNFZTK=(ZTdZLoYk>!ZV3H7;jG-!S7 zM|ofcTv!=>z{@-UgEI=Vkq%QJDW-(6kn!IZi{?{z1m+OcHgz5@dRqvT{)`PSG2vR- zJreKmHn>?U7p_?Di!|-UJ$z4=BP-P!4=EEW?5bAQ)sL|~Ft0YzogS*e26>_7;E)PoH)r%lvHCvi_ zOo^2EW4WjIMucimH-ZD_VtY^@DV*Mqf*$iTxS$ccVGxu}e`V}19EFX>Qt_MRC~&Kr8d9@- z{cua~<>eb*H7F~{I8^-2IC7gm5n4e11d6_7-s6_;g=O=3hNLbcuK$fG_xk4^$TpFe zci1YvmsrAWaCZ#y<__Uwa{ zsKV6z>~7Si(>Ye>O@(V3zSCPK_QQi*A0f_ziE#7CS@I4%2*z@6I*0O?P(xLU{H7=p z3d}q3FlV_8WvEab_AVSjQxV?=PB(rBj>2a^O}6`|4sO9NlT^5hoPqhP%bl<(Q(JC2 zZU7z@nVcauXTc__TTWlU<-sZ;H7Y!71$aMq&*$AqFPzK%Ue&7P|P*l z{?_AWbT_jl$l&=Xth9}{&Pz`s3rS^raY70*%*zVtsF*|-2QOo(M`jWI17B~wGkG8< zYtQQ)Gk{*uh*C0&u0U_+N8WQ86R1JHkMQBu5EQy;+oY5cae{D5d-tt6H2M6nwdHmK zcBiYY$NS<8B6J_xVW>WU)OOTIhIx_S8!UB_XttGtgi?*^K{DQVT`iw7$F_*vuSV;S zOxb`ceOQeorjbXfdK)k2G{>mCAs#1SyJKX zuZN@1GkWVH1$PhVX6ds%t{6eO-5ciRAC3cm?yoi;r+k#Q^)kNW!6wcO$WJg@v4`@uFWvy;2i;Ql_nz~3!il@M=D?FblERUckhZ^1_ z-K{?Xb4z{2sozvRwr{WNGq-gD9ZECE=)jIhjjDuGdgPW_y3hMUy zVoLcT9Ed*@OJ4=gquYC$gd(+i&^<5iqp2I|aUoJnn%e1lC?x0zxvN!yRd4Qr$fJwM zrJw&UU*Q~ldM4^DN$%HID#5<%U1Z$4*zE91KqvZePVoBcM@8U9XMKEN7Y)|lO21ua zumhbu#a|?GC;@8y+P8J>TtpbBBvWN(6nrV(oz;D`6YSnNIZso!qj$4WzF6rrT6~<% zAv&3gyteGHR-vQB@74}asp}2GMX58!m*#sAxSJgDy3>hdm%L=_#+MPDPsPu~@^&y* zD;|lKn?wU@1Ua6KE6C4yU;mWF42oVdH_uV;2b;vS8HtiAbl?)_KJ$cnbnoJQ!pc@x@&yYvvwSn**t$5PrC$HY7cwH z|D1wXt{bZNo}EGmcgQ$ull`M79ix1*;|jo}16}H5?S&cbH%IpJ41sfe=E}_REUuiA+edX7cl z*A^gC>u6TTXR=?`Xpq@`(=2FkJpC^2IR!61^jO&+x|>`|lqUX~T;IdIzUf)x!$I3}j=BR&Ofb*G;< zY7+3bwKbNHgUGn0*8-!y1wE1@fl-P3!d~&I^8+P%s z<-4&Dq4E9^${jzNQJ2rjLAB@(bpNsLMmoxGh$>%byU}N|e@3j!+bymT`rLkEMtCFG ze-c%*7B0XyrIxErI!xF(9`8sGl_jX_l@nx|hyo+pEX<}b0iEShy5_X7 z0&z4n?*z~Fz!sKr&Wl-OyhreB}zXfcz=p5a$|J0bsG^6rq9254@)yIb_| zJZzLOQLVEXhGs=e(=wA)q6+LRre4pXq#q&1Hpz>q|JI%d z%8ldDqjYtP`UX1u#MQcdf)o|zcywF(;)5mBUvxY6JlUUoK`XqQKDi1SLUrGC_f3-J zz~Mjkei|f&yF12t%Tdesr3K9!WxzgY7sU5@1Y&8nOYZC$L(#kXlGJvuLLjS!!%vqA zG%4)znQqGna;O(v2STl&zZ$Tb7=ZlS~f*pIvS&toUv0Q!93H~%d{LLfcp-7yTjIpqHG>` z#2=x+7{PduQMHQnx6uunXa&bhFsuic*}KToDz@p>n~v#{|;W0 zR;)))&|@E>246E`ONj1KP3l(rR>aXYtC29jh|HFYhym-8!a@&aUE-G($6oiT9|9pGFf;G` zO_!o1FqP55rY#zxm?KNvu8T{enBtJwX&SQsAjs{^$^nj@nCJJ@L)>A)So1gABhg!h zv7t?eRpE{hre9Ql#NAgAJN%@+ddCAkj3wdJ7Xuza?95hkwUh)-EQY>$huC8-tj_no zxkK`1%&n+;@>xD7#-WomOuRse9dNh83bwLh&1dcCgsxFx-C|pKT0T)?;_S4iZWwff z^%weF$7wpOAP{+-YNW-xm>!xP^PfVA(Sh&ZKc&OcleqPujlADDJeZ_+_XJ%3MS&dO~iI zb3L%*Tk^2G&Lql?x>>x^KMTo)8}@{bv>=zAhL6ShQo*S>B5u3&1RCtQ`h1>l0wivC z_#2bo`|zrgD3drw?7dlA;6nul+~oBG{zwuN&N0JBG_@qhYuIRoyvZ0t_PUoJ=fwSl zHWm9oo8ClplUG&eWljU4(>S`NkA@n*W7=}no~{_#ziSf+^IJmZUtW4Jooz%y2B|M( zyvLyINPDx;=PuNFTsSJ)xdze1eHqf?t^~p3i(xVsyP=Q0r(AKo8WgpXluTwC&@N*p zMG|v6JoC3QsN-%%<9(r&Qqpvowu*em>DfvYf82~pw0{X@kGM**P1HegS%N}D$pUce z-K#iUKaE6RONRSrFCaf>7585kI*}s(YIWhl1fnbwHgZZGf&z!r=d26nAwoh{S!0C+ zN&-&uaii22i@28>zD&klTqjNqh7m9;*YidRhvtxF+lL#dz5^I*P9JLWSU@)y;$`~N zsPQz{i36=I1U%TDMa8{!1bq&C#p0-#h$4I?EP3ar5Gnt*>#Z&G2*2mExJ{D;7v9o- zwUO#Wa)Mcb58o4TwJsrbf^{y~=@LDhism3YJv>g#aU2oPuzejY?1pjy{C-MsH=H4= zD$Prl!5MsR1Jk`06qe7OX<@~N^I3W-UWph+Pi|FwGuG(^Ii8-BJx$AS@#9mw2bzoM z9c`@=HE94547aIrcXYt@F)`bHMdW>Cpkw3eT_Sd8cc-)Wfqq2ww!`x6%^?_%vp-+^ zeF~m#Su&ZpH-MUJ&nCUS*9F>LFQ{rN+faS}r@;eNGpM}KPdlD81;fdHk&3iK$n-Ap z?kwFTa%ADU@bLBk(r~s7RAMedRX4UNKagEOJJ^%7CsXE7SG4$);yxz)&869jb2XC? zD0fCD%%K}%MYNNjwXUKa1n;d+j43d4%l5}~f)se5;72asha=F}yIWS%XBM&vJ#&Lr z9q@JOSyWzp7K9Akv}i9IM=UOik}^Uw!16s&P@U|je;pAR&awIv8Cngi7(|5&*Qp%*B&YG)OoRk<5nI^x4< z*rIl_Hf;vvRWd*RI9H0IuKnQdpYKDLZpJeNSdYQoa^7#;l0zs(%9C-&i77A-%8cBe zL;`om5v|7)E#OpOJlQR1#arsQzonkWtEFmv#}Rkk!iOOFZNA{0B?&T~s$?9GqQE`| zH!0J3G$L*TK?~9d0pqwreTw5J0pEeR%@+>S;cVUmm3YJwjC1oaQnf9>mXyOfr(KCy z`i1+ti#OZBq`4w{UkLde-oimODYt;)0+Jg0Pst@ncruqK=%t$rv_Zgp!w3P{ED$kP;7lScZH0D@Xx5l3(YRT>xEBAH|Fcm zmq+h(&L)+iv=0#xGF_9%u-xHw)58`xHSEJ{G(3hJ?Yz#jdLEVQv^T_`#1Jlb|;0IFmU>(!FxkayrCp(`RCsOq($&H;^Om@x8IHNui$@>~`- zO#vHb>z(?nRwMMSdL`)A2?mRrD_@X3 z6Nk!~@la&k@8M^1d<0|-^e#HF455(eCc|%KQy|r+cAfPs1!nJ7$yc;ci?o8dR(p%6 z@QW^^#{@a4@G}!s4wxM!-d}s^jhXfY(ma&?%<)hU!n7?#23*?_o#4BSaPqwFJSMY& zv8Ef;j*m$iMU&(3m>nGKRwm#>(1E*KGAOa&X+6PA@fqZs_#*C?%2&{SqoHpbJBe8F z2v_{sG+>frXmEHL;f~E#AB%?2)ObB|Ke>#;t!Kt~*fpTc;@4v}nK_siJ|T4c5jn0V z((~(R=qQ{L_4n{G-iSS>6>XYVErV45-QjM5Ex^MN__6ZV5^PI8$3Cht4g<={-L?yD zAoFxr+=F6roTosQljELMG?uv=iM5Bqtx>sG=W=I|)V7(e`|~D{>$KjUt=4qdnaHVk z4_Y5UgGb&S1BFJ2zB6PR-AjS-+u_eL+Xj%9`*(jnTC#m&AI-vgM!@u#T1FP#25dFo z?gXi#3S1LMZEW|D;8*QL*SX|G*d`m2m1~|1H0((MuZ&5+Rkr!bxjW?Z_$@nzhcb(x z_VQ+xBN@Ljl(>0V+-nL<7UFUans=iI*&p&m@o9K7VbZ$!@+7>{@_sw}bP%|rHM3i# z=x`;U*XkLXrAR}(p`dG#1|NA;kF@dGFO=4meCosp~*c&9Q~b7dweAO z*QL@oE_P3XQbj2t^+nn{jZdVc?T!paEz^rpG?$fpOL@VN3T%Zwfu8P-1?qqGs@*|+E3 zw`p>G$#T@rB`yLca*o}723vrT3lg8}zmdQ}F4nqw`z*@d7Wwj>!XT=vDeiFyBFBGk zr?3*&=|v;%ndv$v@C#&d)Ek(=;&6Nku7@HoSHeZv>t0oUFsFCN-Aj@*Uc zrH+#0nG0K{{3DWQfZ!XtqttN*MOAoIA2gmuqxxHdvAh{H_3qIXvAH5tbpO8Lc}g<= z6Bs*}usDal`;}|N2-D&WbthdDd8ZLmkb>U($W`d%qE@xqHiYafx*rGw0J1L?ioLFoQ2xxrrqzPNZ=y5Yl4nr91>+# z{Ti}{ATLrbE`61}zFZ6nkZdGD!0LIKn_;skaPXn+MX6Ep`&FdqvkMa_V{`ASuGA#D zdV3G6*2Y&zj6U8huYU+mZjRa)@7fM|eQ$E5kN1NL_sQ7N>+Nt?zkGX8<22ln3f^ya ze+V@1^C|@F$w7KC+s*W8nh>`kUaITV0$rSOw|oRiAph9kbW=JJXMFZRcnj+U7>IHi z%U|dQflH;UtVJE@R{<%3>B%h0q7bojVqJ!P`>Df@x;4VjO}I5y(1n_}EhRnX=tjD} z`X6qb7zX;Ae*KI=OUQSE%UhNlm#trW>4lv>1zs0Zo06eF3Y#9?jDDKAg67=|Vjn%8 zfWiXq9p{@$pyzVsDJHQ|kbX(0mwYT6Sw`=c|1^;ePsL*B%&S+yKu1U`)3O$F7k9~V zjS%tW(??~JI|gCZs+dFf(kRS)vl=)wL5Vfgyr!`hs6eWLUi|(O08?%jU88Th;S_Ft z>E;azta#(cO*v&WIEx+seNonN*pS2(x>ITz`AQvBnJ`@jrF3Ht~y^M+IMY=={@;-2y5C)O7OhquQRW#gRM-iI1#<~pF2~M;@AvnUZFwu@~iMLO7Gylw^a~vp?1GO;|$WO@08EK zL65W2hBz3jlaP;Q>8)GbZiS_Y|PQ)K?ka1)gEVzUl6e`S_$9E585FxL-ailyhLkhgy=UtFvA0-xHJ8}))bRteAZ!Mv?MX>!ew%>-M z8nw&j=6|l7g~zr|d&it}kaIzRS`7KUFEce_{=PmDlVM~L=9$SsSK?e4qq*s^l*^=z zc~hOh%=b${GVBvtbap+<7dnbUJ+9CPE`3Mx^DjMKe{Y8!*kY;IDOPOrA^y66ky+?i zJrMl#G70JO`wIlkPN6Q{y{1u{$lr%BKc+D`(}AjeL*l+_j-sYThg|w?Bs96PI~biD zhWfq6cRoC)!lPg1my~#o0MA|#zoApzKuEuQ_e=OF^selBHK#O+m^5`>+3JnJ;Q^ND zyXPq|N4>UREoX>$BQMkY9}d&VFlX0j+KWzPr=iDvNxvV=>BTG?24*1CCnhK?c?4?E zqG>7FZf};#?Y`RTi@Z-l7=CjCKE_h$3cJmNK+~21b4v=W+b1F0bN?y~b>pV40V9xo zpZn*dE;=kU*0Mz@avq(aYgooorV&HQX&oXN7nHU8%sVVQ3Bxo)vi+*jsCw4=kP10Y zno_`~IX9*qw)5VPX%+d77_?s=j{H0b4Xa+FUyK;=Nz%YBH``Xk>)dOTVY1x#$DU6f)+Yp7f-hKtu1h5E(tkp-JKJ=0LSYG$p6_{X}Ff+*j}szw1^GM()XYOOrU^cr|GXo1iW*b1zPu+Yk`g0cXiDDXLd0@!Ql-SboP;+5KRI>2 z4#E9fW!F-x>d@zfQ07?i8u;|+BvZKkGE^`=;@%WK1$m5ioC#61_~6LZD9v_iY@x}b zZfMH_l6y2QL^wPRdYkiv7vkq(Sm3-GvY^FWM!nTibY?)@yFzB!s|!77NeF(@{SLjc zDvCCCq`>dFt_u9n>IavqZ(4H2Wl)=~qAAcm0@uA|I}O8^QLxb`qkM_5M=0r=>b>Y)ix^C<1EIb15)(wLG8TpnK@#>!Htk zD@f3h+AUg^+$(1i*fSVE z9(+XhPsr=h9lhHHW=|Y=NXbFu@A&pEGWN6~*ll*%ZSOcN+j55x&d$IFEB?Be%g$x(BK)GvHkjkNNYSs zooW{mvyNwYapNHsM)%}(rw?N?G;Pjze*0|-9>{b1XTR%!^uv1?^i;^-6?U8;Bh6G8 zUnVbgt!*=WDb2lN(@Q@8-3uriH=xE0I`(AKs&Bxw+SG~s*E>NWk1g!`bvA6X#7`l? zc{a>Pr`E2_oQPFym3YKr%7ke=EUw4 zn~ZK#<;C`JI2>bk6~L6g1+dC@@L&r2-#qQr5x^M3FZJHa--dM^KeTDj&Yjrw4mn|_ zGh&!Z&4TYyM)Ij>x55#L_?_6`=lnzO5~Q)D?!-lme1iL)Hf@!<ZcB<42?@7R{$g z%83%j2D9%E#)R&``Xrr&c~Z7x&4O8<#YDNWu}@7$v>x+g)AWVqww+tC)h2O`DPA7T z@4l%+Anj&sB2y~hoID3scUW%Om;7DjHu~w^CNiv;I_E*h4(WQtnW0^vtwfJ)wz))c zBc6aUG%26lT(JQ=^?h`?(2oY|)~jA7otr}34O8|f!}DOvVJRncq#wohEsZEyt%B3f zFaj;rJXERL_MIlE;-&Ssb%quNTwb-1#_ZxK7-=&7?N8gm1v z_{V+T6q^Yok@hJ!$9WcUT)w@JvUv$iOen`Vw)MeSGP|rX_W&H)$h4>xLtfW|JeXGZ zGGpSDn_c)G5wRoF*LL3vT|&yV3|$L+&A^s$zRlQs7S)| zaQ3gFA6Eo^c=-&1fXjvb8+v~g>8sr ze(k*}v&fDzB2hXY)i)F&Dw`yk5lzZ0B}GU=AtOchp66rlz4zYhUfgT*`~3cZ-23>% z`JD59Jzvk0eY_9AQCF@> z;J%(-_FHEYY`i>UOZ032d!m*TKh?Iubsr81i|#`(+g$C9Cf0y^Vf*Z7kN<^jJI`_b z^91NVAd8HDqC~&fPEST?v!G-z*dBglr$&)or#VN21hO-?t@x19$b8NrP35M9%of~nMj6Gm&YE^W=(<9ZKoL9gLh$ay@cal_AGdb)bj)p2S63S zBr=BWfA7i$Xm#hm1Dy1KmHQhR5S!1pjT~=Hz;o7mBbVLxf#s9;pBpy<7UM>0GF z7(DRAa5s7e+A(esPcL1`*P*O9yJ>k0)DxUzI^4o`u^(@Kr_PvD^*&vS;T6c+SBK7~|D zF9Y(uC!a62V-;NW^SUSUmK=T7uQKS_z5o(m>^)-Qp+Y4I!$ls)d1d|>`yk> zK6+8*(C42`3pgwAC;K|C3r3Akho@SRKn3-ZTG87@c%qvoIVgkz={TQmxe-4OVsk9# z8(8PTJeOCoT$DL3&Fth*D=3*Lw<+fC2U#(F ziwER5)X4dE+QY^kNEn?M)^XVdr}AScHm+@f`@(*ijPH7(rv#DCGhq(S;l@&!U0PvU zoq2-5$4U4uBKV|_(JCCZfBiWmWg2S8>m2pE^g>lymdop&`!EwIhJGvA1WZDBDcM`g zu;aZb`sCXbRFN81*2WRRKM|_jTYMWZGC9WkUw#iX&iFa5ZbF8X|Mu+Fk;NffDUV+w zDMWaQ(p`x4r~-Z{kESG;jl*Z;=o!YKJy^%(_$crl9g<{y0&REfhO9^e8}mL1@MLMu zPu*CD7rs;LY-y087rs$thQ?OH!j5ja0Xz=5zT)%cn-l^3x7%}eEFlww;=NZU!#(i^*f+}H*Qgh;4=Uynh^4jJE z#*6&zZ~g)HaH!(%B3EO44Onq|;_-&;5LzqPdkgaH1K%YIug+*Z*r1DxWIjfR$k2}2 zKB8emCpL;wQ?w|MMpZqz2(d1BpXie7r*HrxT^SWzj*%ecz1p$z4s0&l@Fvh&b`=oz z?H|?%k)e-g!yJ#I=uoKJv(xu! z3h1gvPPx9s_&C!dk<{Ca==??5XAjg4fv#?9-MBIZV!$pgD2tndk+%1^$s@6Tt8cA( zH#ma7PAID=()Iv zxH4vwN`3`Y(yw>xYcirlAa<=XfB?J2s%|eDOaq6Tta{s#WT?!m*|Y8Ztw5_8kjNP- zK*a=Y^JBdt__I&Wka*lLU3M6?9nw$WZyM3zyQ@aHzXQ67jD& zHrF}DcH(pHGE`9eQm7QN2Ym3H^oTaDili}@$j8HOP zeRC7`U;RvXtG5Q6ojqFYyNUIv$o_ij8B-xw4qo$1R}-MbqS_RV%os$DCsMbpw7?bW zligPl3Z&_2j?nxk66E|v(Lhs<_0;#?O+ytNn$oXlL=c;VgV)5_`@U>}6b8h_Tzef{ zae8-DlD!XmxX-l%VXRNBqut25*96xb&lg0t&V!DVU9QFm2^KT?G^y+zfVm!B!&QtU zNW86DE6;{Qy*SoIzw<7_FDwZkKDLsh435HePhXHg(a-BPg+7b0UgnUi^cR)TJ`jd008@TIf&f|Bd;H#7I zof%KpvD{!XcZ`e#8e8i-3+r=Wlw~%JQ6IiK3U=X~cv%704JL%J zp5(D-t_O&#LW+ALhoH>9e(;p(3S_x@M!@*h6!;S71Ypi8R59gqHZdbZI>H%$$K{}K z*zjqbpVumE7~nK{mADKq`@iB#Pi+AD*VVS%P;9+UJB=R?T8FbTV#{p0Q*h6O()aMo z0B~Yoefi}~8EpD5drf1c4|cBQEb*`oLWQr-%~n^(VMYHHLj4T_u;S=dlE&sPPiS8a z?>ydvZnw!R^?65Nwxo4l^4cM6%D*QOC^-kg)3*;}$d&;k{pY!k=Oj2JV`Wvql?93h z5A&XOP6N~156IiasFAEWvA=(@-u=nKkZ+ZvN6;kJ_}rzq5D@&OKWmF)5jw2L|6KMy zfag?>Ek#;Uqo+C2tPjs;gKkQ^mF-F=(5Yu;P`)+`LUp~zylh876>W86qJ1N9^PKW@ z(k228E|HM8dXvEUOmu_d`5JIZg)hpac?vdmgQ%+UMbJ=1-of`_0$x8)Eh{Oz369v0 z&q$6_Beu;S8^$kp0;j{*dCzm$&@;{YtZ%t7-+;6Dbv?%oU>T2}Y0|*fncMRp^O;xR zJr&!Xo6&`U=?o+8eEwUtI~xDF*nIe* z^VN@CWN32uG3V7c*gT4dcdt*B1Xom<-#e|7;K#mvUpbi;SZre&M=!bsLLbb6*}+LL zCOdFWux|knt5(T`uu-g=0#E7{;Uk#Y=#VK#TLzsQ?Naq*s{xHhj-zz^4p_0N*kA1K z2i=_NdsAui;H>etec`kkNdDgU%N4IG*kA7xcAc{UKIme!)^nyn48J=wh!m~Cclq%T zT(q&gldopTUV<9sFL>~w=WGp#c*q=CqqPoF${+q=?jpgUxKj_+~ z$sAiJOoMnx%{GzMu0zS~lyBcJt^npRoWzLKGE_u!t#7*bfP_v_(e>nA_{ezw8PFg? z`KPB-{uVdF?9--Vk9(Q{i0z(IAKeB`uEGVw*xv`KtlU0!aU3!~E6Ebr-vrOvyqPWe zOW|`TmO;ult3Z|BM_c#UIE?$=`%4JzgR-y8ebiE87{?LfcojqE^2zH}TP_aVk*WXe2 z^?HTh@~s}wvRz1M)?J5Lv)MgWULA0ZZl|rOd=W_gyQ}#c^BOE?U75Y?wFAOwb`_1^ z(xK13Ihio7%)>uv8(tQhBoN4$enl{N18nf|-Hh5~K~c3 z&0_pl$Az=~Uy8Ru!|J%p#vmRx$|o#2g-yeWu(a`xQgWo9n00vJF%F^qyW^4;M1lDH z%p4T%-vnZ5(bntAlOPps=Um{yc%Up3f)`IO)YTx~syH_ZPLwf3_GanBG}n3=Ia(Yt zA(iIVp5Fl<{4RJNRi6n{y;FZQbTK0F7fm=bDmTH**@J(*!tHQn+D%YF0f&C7qoCz# zO$EoRC%m~wA=X>iZ@n!$2NvGkr9JA}f_%{)47?lr01>2oVuXEf(>2!N%F8J*>ULI} z<_#+3joW>)xr}{KuY9HBbQ1)k1IHfpFjFF0A6zsZW6vd2yQ=Mn7PgNe4{ERCn}LEK z-Fw`B6M*LnngbFYBT6ytq%oSb1I(j~pFA$y1)G!UMicBkkodD!Asg$bI^K|qH@6%%V)N91niz9pyC{ zwm?>vB4v4}ZtyYBg-vT`6JiQBfRByRYOtGQc ze0)rvW}V=8yZTgzR2WqGSdzJ<*9Y2DekL1ZbKz#^w{7zh*kYRZAVA^cKJ@F`d(ZQA z2CS?_7#EV!BfB%|NAoc_G|kC@$L7K&v^c>H84U2iak`-6(w|iznj*Pv`0og2J+-); zfqlMA(uDrg(?`Iet@Loj>IkIo>3(;95h(7V zntwDq1ex*+eJ{lxK;;Wd?z2z!0c9NJp87U5a{XtIYlZzbglZHTY^>q1!It)pCe|l8 zX;GeFD^7|0;-N5(pTX91@zVnmT-$JyV?(2by%$#Z#Hn9u`KQ|slijTuT3VG*w`EV%x_YcRj-AS-(_7ywx_aVSuWAVvOX&=sU zcS!E1<6-N)j%czdNTw-{fC|!xum;wrRF&yoN6(PJ zMKZ=KufjTDUQzX2oqGjT;VFG5TtR?F8y>VBNA!rp68j~_0T_LK(omJxsM!@LZT z-7X48WC!#x=~f=!q(qWCe=XTD^@D(NN9I4;yU@UJBy9)#{okc$lP=wufo0`MN|*Oq zLE;1RT{Z(8N@cD%{dr>^K5Y#Z5i;Hd+r6jHwVWY<<|?9;&Am0Ow_M&db$J8mAyuU? zdmXqjemZcIT?BgK5lnik3xL&#*XT;eDja_KGvr$0B;-)~$FP!(2RZN0w*63S0S{to zubR$wL!YGRrZw?S&{iC;aav~@Sp3duZPcs*$hFz?C-3wC^-ejzT;5GUMA9-1$ef zzquC_4lR0cn)X1c6OOp$g$78OAzFQLehv>P} zAxarNy$yn_7!Ofz`GOMj>D;@XfxkkJ@Do(~R-`zPWWLIBV^eumF+bWD~#n;OnJ1d3|JhbBGqD7GxwXJHCKpe?h`l6_LR~q?#IMclla|U5N zyI9rEBZbI{Xp1|WNg?FVyR#gbq!FfgVq40SGsv{T+}`inGf4Zo&(WT~G%_4aPP^cG z2I1WPjZ=0yi>z%G(AGPgMgk}Uw=7c6AR6@77^PmFM&6StJ4Kz5MHZvGN}|7>Mt|&TeW0q#@b8NgSbnoH`SfDpaP4&e3bRh@5@%Q?(-M~Jy#Xa!|pcw&m4G2@O#T+axU3gzTI1FUi7pT4d z4uY_|_`9W2WC*AMbJ?a_U@pg>EAihH{LHWK?G-rzQi!~J@y%FIUvx3_`bsA}HAiFo zNrw^%7<;*E(J&9%`(~~@JVyY$YB4_<{IR}|>2=lTZGEt`+l`_39}eM*!7Oz}weS=1 zD&rWF4OKGz((y%L2`))Th%8!*S+8l?XpA5qkFKxk_MB=_c z<`Vc8RcnYJ+<=Zke0i#^6o_uXW%`@y)aVg=hS6iJryJq%?#+Kb)6m`}B29<}o99L@ zR&10u0(tcSJH|N7H|Kgoi~Z$3yjw~!Y4D2%mD{=N{nrZfLF$)f98cH)4>KqH8HGoo zr&YeaRrxqPB|$DExIGT++_}SPS;~NVw??;K;1nDk73(T7o`Ev*MUgC=b)e?8AWeM- z4jq=?({7|`huO^bs=ieO_@%64OIo1;HpcvW;Em0zGMhFZ)97R8%Gqo9N{&uAb0MND?F`SEh6zWkX>O*&n$-=fU-m7Vj3XEy%4m zXkUz-x8-*q>q{P|L8T^n-aNF%xB#vht;$^{WT>(`o97h?oPT?I<-XqrXi2k-;aKW| zF@bUiG6`KUE2zLOLx2p4AQ^}Lh-O1%omown4wk^jIL0{@Z0>N|HH>R}YY(y*dY!y5 zPl8erL{lZ{1JGpae(62t3G#j*v}1Xd3cXmCMpt8g06UtCDZYLQfu?;=c9?Ppfzx+~ zu-Eso^@w4xb5FS)o}l45g$7ciDZS@AZhP+ox;#S;x0M}O{Nvz@*u54wC1sN0{Q={* zLf2C6T%8BsT(0w(Kih*5)G;llxLwF!)w_7A_5fU~HqjyQ9D?qk9VLy?s&tu2wKVSym>o8i#XQ0?pHkM1cJ;jmw|jJz=nj2F89`8s!&pf43>*#9h3(x zk>L=wQq?Z`D01{u&KRe$=L`%QkW-Va+5zu^+_UO~mLSVDmS5wY1Q`14oN&!q96CX% zWV^$>47qWJK?mA9AV$P!EW;S%eGl%=XdYp`c9ZpyZj}vi@71iM>+?}~$|&#jLUA$R z`FJFZ%#a~wNslThxN)dq#J1nRc8e$%CZNQ=qh2Z-* z3RFpa^Amh=2oBk<{Hb3cN1NU~Ecz`%i@Gi}ld~l5LnGdg|6cE5Jk|XCAJXtV%=NNK z<`FJ~OoT?=6PZk?hmtm*HP0-#EG(%_`2y?cjD6>oGonLl@zayv%r^i|r3p7!unhKj z_N+>x>tJD#lk=Bjq?9_0S%h%; z?0Y8uVIA|TR1X7(UzcgnORDEVsogxxm>BO55UsBwt0^9Ux& z83mOI_4zGl$^q#_`826v1g^7ZlqX(UhVc~A!EePF5UXF3w%0Qb;gi=>+UK*1A;r9I zse8f!Aj$K$Tw2HY8>1VkFrF6Cku9=2GeeL5Q|F&5)^C8iI@d_9h8ysOt${R~v>QCj zcr{h`L@R7p405`^GYh>woF()+jDzs9y@c++IOO>7I#n9~95l_Vtdc9v1kS(9{+z;m zSJMH1GF~n3z{Lm(LH~g&@cH+{Zw2AA;3lQ$P%_4m-?)3smgf=;Qpu%Y{A;Ne(!`yX z|Bi9@lm*-l^~<{;e^DVeRc#Y27U<2E<>dm6&&IO@FDcOs&-JO>7i)p+)K9g3p$5P} zVB`T2u)5gdQLdvddP8@`Xa`oLp$0^B+zejZ7~_M2xqm%W}%z)u<i(L33G=b_ z%e`_FYb64ww>Qn*F^+`vQ^bAaHs(dvaSwj0*b7w>ksbN>n=rc}s{Up5EHF>vs+sh{ z@{LAuNL4con!U4gV~D#zCNRJyZmJKc-V3>Z0rTWu%jDNA5Mf2W#C=kJS9AdLVe`JaNEvd+s; z%N!>?R}ltY<#M!4Y0iNJYnsJ--?rgMKHC?$cm06!rB&3r^B}00+IaHt>I`5$%b-P* zM}TdYvmR>KkHc$Mt~3Vr9zepepU7k@73QbO_48A7p5S-Y(P2*DNS*;zS0+APIYKpV9t=8^iXxwp~fN|k+B3@YU zSE@s?;<>NcCweU3x^nw>l*es@4$~C z1Da~)c=-Fukj4Z4G5A68oTb-5CQQO?iM=)icoej(!)P)Dn1U=r?i5Udg=>78g+CUc z=i$E|{a1J>@$~fvEfNt{X}wgH7sI@vCW+Bs)(@dS%hdb4PxCOZl41Dk&=_$1jai9# z_h6EVNp@_{9vnLPl{$2-1#<4O6~3^*`Z2%#Df}B+z|4q^AhTu@e7Sr4y5fy}ATV;j z`fti6?0j}!PsM)>M6m9SyB_a_x$A%QQ*X|KUleDFCyX#osxvCx;_DF*%~w&DRNsDJA>4%_>{JU%OZ;0?zJGa#{?0gUtz+Y#0b`6IAVU@izz5q4p`0PEk zF@Nekp*oJ&1n^0TCA2j0UIZyf>@Y|y9 zO(AjsgG8RieL1rTF19ik7R=Rw*75e^wl_8*W##Xv^!Zs|;oGYKaGX&0(8%QPx&caO@-p8ly z7oc;d(tQuvZp@e5e_jgf)hbozaP+)e3Of94jGCw_so5s8biDs#9^w$o6;|gLI zLq~_+&)c#u7otOc?^N-8@QDHKjd5e;hW+riGR!Y~Itz}({r&a{RbY1V{^yC!A!v=y z6j{~j0P^$XS?Ah!K%RPpTfYz$5+y-=KiGjof=DD&+*%I^Yo3$CeVVQzOFxN}DvYoA8ZwQgoL2CcvlN>ZZ)E189=k9W5n1 zpyUi^tuk!~H^LIO9$&;E)>Q@R7o#wrr~3V08fr6O?8!-2a-}}tdThKd;6ox@4&A$S z>F)%96mG)eqT^uUw1LyT|8uC<`~RCgkM)7?I%xF$q(;=vrCp1}-iJ~wU!CnPX9MEa z&qwF6`w^Uc1%}W|3Sq$0(tTNx_@0k7I>L*p^kc<65S!a9c^kPfT7i>g15Uw zXvCxZk+X6DW^meiHd}SUrO+eojJFs^9%hB=7v%v~{>$jK{2BOoB8e?9m=3FUzP!}dnD^Wx{(PYC5D>c^C;#N#F8n&9THQjq1}4uXrnTJ11NWw~20n~`7>N;} zd;BF098+H7FN`2V-JYImw88p`uU2c~@9@*1N;YOmCcR{+$Hc2K=|L>t96EOEgW@Wz zVNQ;4#e6Vbs=Dr2tsg8M_luEW<4_`L)LvR)ey0BfQkvJd{cZ5G#`cSnL3t10jqT`?i+m|y~@2g8_TsboRrBQ zJ|IFNO)o;()GplTlu-66rAE97OFz%A65)We+{=iTP4GP=s789T1u7P7?8_)nA|GP= zc508?!tfPF!TNAEbZFVsNXvN>MB9llSKirxabJ(cuJlg9%mrij1v@e{IDge|mX87X z^7X`p9E?*-?71N;?0y8el;52SLpA_$#eu>yJ`2o?ADy+W*};CFjUGt~jf0jJGI2Zi zNk~jGmlFAiL)vI;l+x2P;a}yr+0x(!7+<|gx`p+0?q6~yJs&4WhF=DE6`h-e|4_Ye zn>Ki;b%Odn1Y6(?JmF~~umxRM*_~{Hr@`CLx_wo#c;G5L)-h4H1=62gdiQaX9PQ8i zv1h$QfqtPj*()U0K!;D=3YxEW;QUk@%ZYYIRQitj^(Cnt7Czw>V)T*6EH`r( zgvS^58h>d5d)>yG@9g`*EfbN$H&`CoZoMj*VqXRCKWzy+w{ZY-$PZW9-B&TcR6}HE zYa^^(>zd>WJOYUBo*E@35k7s4nXsh>KzOnV%dzQd7>4upC2Mbh9pI0>Xf_Rc58i#A z)=7`9y<*Bq$GCVq3I{YdbQg{)q+K-4CBmPZYjcr#v}n^Pzf1GG?=a)qpJB_uU1*lT z^GWRP78KrpLgo~-20A*t8jUrvUTND_2y-J9N<~g$?k_(8?*fBa=H2$8*{nff*+p#K z8S*9lG+&2t!<{0v@38;hQ&C9qJQZrY;ukZgHxDk4#60t0=>eZ=Q}6u4VIGs;+MQoM zb%R=EDqIZ(4Ju8G(yJy+K#j|ecG{{3a8Qs@iQZ%txWBSzN;RZJTm*yZzxPgp2d#oO zgX}D*x|ph{z0@SM*Z*EiV^;?Uk008`Yp+B8JHK~&#Wp~mfiU>H_>+4V@E~zJ?~*42_S|V#<0~n5!CT)CX;lB}0f||fQ|=TQ5?~su zZG`nWoi=z0&pBR#Q&$X?ub(1-oLynl>|aa3vFf7!_gEq@J$l)xjJ=Ol=cz9!p2s1w z7ANmMsoR7}4Ks_aVF#dbrF%Q+7CjPMeOpa$m=e8}Ucr^ZyO0&CF(kOrj;inY*IMjDw`*o?irGy=@>>Kh>5BvO?BWda{ z(jA~FnDklo@dCJ6P=Lt)P=-UV?IqvbY=bvuY$emYY0#l@J(r-ZeW1gn#27&{3g5F- z_EGuFfIlKcAwmER@+U0jW~JXa7{9K6>+cjL=7UvBmf6_?+Em0E|4Kj1uEio8si}7R-sbGR|@0@9Sdif z?i#4(lyqjU#=|!sCh_OVvFGXjS=7L23e-HTLR7`DT;{A}fO_XJyrBqP!u7}D`JC!; z9?lVPU#7^F9P7Dq8#&zYAEQ7DLo!~+q)ou&T=CyBuKR#yPDfUfh;g$9NR-) z6yU0$zDsd@6N>>I>4_OM2y=^xYBtvq;CBq-Iei(+$AxXGlAY(EwbPB`Qn$MSOG2in zZ`3AsPAWX~)5ZKn2Cs1Sk<5rp4F}~NO&qct5o&Py83Eu+oW5jWpL0R$@y$?N5y(!? za<*$m%RJ$yS06@8o(Vy}uNw z%PX<0qU9dR zo;|R|7jQ7nMUDEY3Wd$XEx@1N42m0UVSJ8dh5&Y7#y#ujXKzeTgTkxf+$T)~zzlc( z>ExU(aEbp`Z0I-4L>;muZ`iwy5e0YNX>fhh5Ft4YaDv$R4eb7~nr*bT$M3mj!@EHaah<;_% z!=6i+r>2Ir(Tjf;Orvpc1(-RJM_aUFi^q;3jA8@k{a+73P+4e{Cy@;ibdjry%k(<#a*@Jc$U}pOSu~ zER4iM6{=r1Pb0T9lsy8N&LHYsPc5Gap#Rnt!>NFu$8?c-e%rxE%)+y^W=vPg-Z zH(}jH7V%wpa{QN?G@^VmG#2MAi-=t%{o(66gWU3wgUJ_UksG?pG3_*G5!SO^iW3>K zNU-tH%FS#!80$8lwlD;qRRSagj7Y5WBDx) z6heiO>}1)BqmLp;F?C3(f6WQRU7%;9Lg^&Jc_SI=T@pkr3%N}A=y;GovAEM6ekTy4 zSMyC3nD0i5_tB%z-0TS9yN+ky6DDlG#d~Vhj~Q`0nqXNhXG9`Zm6ym;F#nB8l&;|q zCIm;1cm14O3jUVYg^T&%0e(Y5HuJ|EDC3n)q~%)y&uc86i_>nvE32&fGyh>8lG2vq zkJ!C6RZl*edCjn+ftPqtL>kN^Bs62I<$Jo3X%r=J%R<*9ROnfXU-M|8Dga*n0BxJ^v;a1eKDWV~v;x z^!SMFDl#%8ad++A{f;yk7~&J7L_Yy_98=dOM0Ps!or2I8gifib2W(FiFW zW?LYgu&mL$Ib)s?xmfgMtwm}d-WkelObeNYgn*m~we~G&z~i>M8oLRne4mG&mOBEQ z12kaxBBLY7WpMj$j=>CYM<^~zkkx~iywQU1*e1bIae8K1%^o~+%hG%{e;RE2 zxwtIJ?m}nZ`A2`5$Pi}1wRg#~1Tg+twS#;ShYIYAT>fP<0j&2vlS>(Pfxl0h%uBXO z@I%aFUOtS!&mX}67tyO_v+$v0m z@yl>7bB|sm1oHt&X^^Pna7a%6r#<>NwZMe+$93llJkUCRCUF?^{3NzmG8k+P!8%*2 zjj3)j>zOo2!$e-|$xq?GVlnI&#P6y!OcSR~?hXFugb<()FsTwi|o|_1{ zO^$wc5X%<`B*2KSb?Ya7TR>JdNj92c3Xx1;OQgN2VXT-;d-o} z6j$p$oP6ctW{&lzNiun5U+)h<%boYkRoe6j#f96M&XF5{dGgg;;Dz-hUR=&(FeOLS zwpha-U8#dg?Gi`y6PPDOH?~5WyAkuphuq&5XoJ&eFCpUX0ifsMYS8j0fvZXaws#Zr z!53@2USq7!5z5tcK7>Gpl;r+8s%#|zj-bn)^5mEgf$&~qPHPhU`ZZ<8{=5wccn}4y z@6G^?9YvFicebGE=JJ0WgHzzikJt8RWbjbA=SKtMwE?KdZ3#V-XF(q?%~GF!A7J*O zyrF}67GKEe1SjHq;YU#mq1=ddK*xM^?3eB)_*FIT<*2d`q$h4b5w_UaHev+E9HwR5r^fmZ!gs8P<^3bh6|FF&}~A|5~p4T&H6qT zCH4~mcWNiRoBD0Ug@XF8WvkyPw7? zw>T@ng8(E82Z_h-4ug(I5i!@C*Fn9Ech7T^5#T;X5>cJ%00tC`iRmX-0gKJ7(f-u~ z_~$?1Eg_8g-fz1lZjiPh?s(@XoEbGz63E#kFNxhhb9S$h$7LN#$d5np5~+bc1IsR> z-wq*@ROUH z1F^3XL7kwrdj1$5<1vLeWbw&Ko3Q*#rbP!fhe*m4&uZh^g<#@B7IpSNpfT*IV)!8s z-n}LsImEYzJ%_IFud3KSx9{1h$(OspC^32d&~gO`dAqWm(AfhK0>2$DHqoM5Grgfs zfmjbz7kBEK^#-ig+u_Y3nR@=$fXe2nq$c4RCq53wBg1&2tvGiNonZZY~s zn9hS(&7T^+Z>C_-SLMqF7>`xc*RP(DIStgGHb~9O@I;L_1=JhW(! zEf2@eNwoC8wUE^Tz!y;*KpJU*iJLpc*MGJ`7vsmnXE1Je8Tof_ZnY6M{&hw5tG1z4 z`E!ecmq#FY^{(8q#{!rv?E83=d;vyHB|N;uT?=r~-;q@r^9zc6ooo#tg0WmV;p724 zxEdVQ{~_uK5Dua)eD1?I*9)}10<3dD<9^}mNtGIKvFrm=vM=T})4NLkiIWD!nK~)+ zQ})5v*YbLY?~OtAsMWHMW+bpW%d|@FG!2Yd!Xu+(wn2&^n+4FDgjaczKhjF#&;!7^ z*(;9mXIh+1(R{OTl6|;T{;(RF$9dfTKAaD~u}7{cYm9Yr z`675&pR}oeZW`wGBQ_}4GxT>43%Oh%PpiNkuHdYbDyM!x5d}%sJZCAv+wh!u99piUv7yy5MeSb^ku3e0{k7Hxq}vk)KVt zU%d#wbuiTa=Gg}SJxwXWVct0Vds(W#pHiaqFSk1;uTmmjgm(;SA#-5kz26ao>M9J{ zHn=Ca)&p7D&Ksp*eSC@%wsW2|2f%^K#^I0R95gxpn!1Y*yQlG&AnSPW5gb=ik6haA zfXC}O?E-9eKvLg&ceT_Ccz;E@H>_?NCQ%f0Fuj=rg)!mv4I?AaMU2lY^TRrP%u$>j zSX~bc3r<>4J}(CdL*)<3`T*3KGx5=vK__hd^DJh3t3*Ib!}; z&se8*6RdiN=Dp-T0)4?BKa!;Ak#0SW-Mq{ru%}nGu`sy@o0&OQbyp}6-Ft47Jh~iy+q^!1{beZ60gv{)b_a5Cx76=u&K-%rm_QOZqHCnI!Q* z|6BeyI*MuVOJ$8OD`5)W-^&nn*IR_5Oq*ldM9dGwC-vvZd=8seUC|EymIDH=2doKq z9>OYGx;J0z_n^=DZC1$fWx+3P${v)< z4WbDQ%!3wh&JV7~ks(|c+st#G&%(9@Gsv5{1^QYox86n_L5i6SJ+<>#o+`n2Qh#zD zJerKm`m@*p{?i$3H~HERbOrKm5HoT2`}95o)8se7y5|1b-Pv{p~0>4q?+rZkc6 zhybg}uDKRe&w+Oa(k~?u9HLG%3q8X4=%mY$_P;0&V2alB`@5A>AkM`n@bC3XP<_cX zz()WNpR%@vR;$n;raET_WOSE7`%PJS4i1d-{--bYux0`dqd&~)DF{$7ca6_bl>(8w zKe+kInG7XvJ{>!Ge-v`GESHD-Z3C>Td2d`0JMWt~%YVY=Ph*-}WJ*>&;9>c8@#~TU zXesP2FmAL9BU62&o^vfj5hqbrO0Wse@6nDPo?M12Tx07SX~Q5=o>e^g1wEQMs*~@* zwhb#T7@^|{ONx!Zh-fKM**|- z7_U%LQ1&=r1Lg$?i%CvnoYSQ3*n#FY^uN1!(f%=o-1+YerxiJ}>Qzu7MwkKq4%Q6n z*Hf{1y~^c?!X8lF{k34Dpc9ztk-g9UMF4NJSqy^ik3p@S-@ZpSePAeE^D;5%5VkvU z+%mqs3ddcShtq2?{|6Q5@U)(XYi(>V7;7pqf1P!pyZ{dImEqXBzlQb6Mcn4IXh`r< z@~DT4(jwC21I9TL*!`vZ`*c?aNkGFv4*X1sd@@juTMi?dI`2k+y(cd#DV=mD2A%FY1 z{|NLRLEl`pnFd)Ldf~A1tXs<%EY&j}h>fJhyby!*nWd>u0jrgK1VOxiTJZ5guNVfMH%NPvap0!h3H*!O0yEf=er2Cumdzq0aCqg9@~&Z=0S zZERyXNOo=#)J?xE1`~xxY;63(@cYIoSG!)n>>a*6-}mx zri*}&I%;HiZ3P@2W`7RL#@0cDQo_Ud-;jT%{G*vA4MO=-g^KBGEoi(KmhuqW2aR8O zp%ECxiUw2N6l50~2GW||k=kGiFqHUBzq(D195cECHrVFD>N=5vGKB)2$Wy(sX*dB5 zpA-K5`nCsC1IMHAm9)rF!<|L-#|yAwUdm?~s`?Xc+{;f5NNRiYy9Tea|*Hi?3nEGogU1SR=DeO zDhG$Q{?l2?;#>qnA{D0Fw3xSV>&P+g?j)$VEg!ahj~b==aO~JEjE}n|JmPcJXdE_B zcxdj2VE&>Wi*p9-wCKgZ%aj57l*pQ*nEz-z=93Yz->0D30&-ks4l88T$a0=#!IFIR#;Bjz0vX@sY9GlyabzDjxXvgwKnJ!1q5pXP&;>36LO*k;)6cpLI3aL9o z^nGsCLC+_oBEUk92%XBAg<*Rj#+KKB%Hc0KcST>xxd;7{(7WwrV$v^G6r8xf{PZES~=vpKQ%{JM-~ zicuY0h$N1)G?AfeuFrT&;-=wQwHK{+7JJ|#n`%u6_FS^geaX|gi3dw3XN&tRjyf@?#%#n{p`A{^kN01m>pog&C3S z;MDq?@v_BUU=LPrT@xllR82!JhtF@o`+`$V|D))>{$|_V6B0|n>X79cC-h2C<-``zV*K^^y?{hw%_xtqKj0i>v&D+YXZg}FA?-rpA94FJ}QwCV#l&i%!((-Wd44=xL12d5=}kP(Ss8e-frAC@IBI{_zV zO-)?+(?&vVok<&WpXEg1cw#gv1)O(!s498QY-I z3-tm{=U+g^I3jbuaSRT-D^1~|1pJd^kjhsyFB71c&ap&%4rVRov>f>k7#TWMXSQ?% zA8Q``JGU|lN3uAuPl|ux+0^#?2A7wiZC-Y4zQ!bsa$*drsy%>lBAG83Xm^33^bhH; z#|gM=RmB^1#s$E2jOn_^=mChLGIcprnu34gjy<sth@ia% z9xMOolps0+sj|{c+W8wW;M|vYvM%MI&i?C0#%KeikIl5&Xx{})W^eA?w>^YW{}v$~ z8!1M>MY1mw+F<}~N{M$n4n#L%t0kCFuhi-!uM^@<=k=aCczERy6uWxelfcL@Jv*<; zLXCMZ@3~Xah-HZWUC* zN8NY1W8Lf^uK9iIm^Cpz*PT9#;)vjV`&UDmZFK&k5?XwFX98wX;7gYsh;glVO^3l4 zdhZnNEL;YN&->Y#8xI1Jvke6)1 zcnMN0+6pV}9zhn~Z}O+E??C|%($E2$YLu(dQ)fxrgeLCKFYLrL0sk3B?GfbtnrS`K zXhbf85;)D@ox_Onu+{Jw~=YBzRhWu_X;*N^iZq;uCW2;gB&p6sIawlZOqxZyp z5pyx$jX`*KBA%xpXdi~YoQ-?^mO!O z2ctsg2?F91P+jZulkDz%aD7v}WN;Ss8%*l_wa{Fvj`eon^Wa19Ouj(=TkbC0s(XB* z;dBjfdCz3XG`R$CbNr~55oiWpe{U_5qI2f%fl|Na`DkFv8JzLm6uobj`Yz*)Q_y@% zovCb+2xBn491_`t{3PSu&vob+u#(n=XU{HGgBdbTuVq*P`>E%1HoA*Iw}xccpf zRv`RV&cH9I4}SQsPLlJ^6u3*Y-1(cF8u0-Prx(9bU?Imi1ga3P|2`+6a6|v@ww1-~ z{vP?K9O)yIhgv|4Ps=H?jxnfn$uGC&IN~B{K3VT+4~O%&uH-*Q9RIvtwE(B>1F#i0dLDBvAX|Uf^pr?vJHGuKc@YU$b}#4P=%u4i_h30xR^~B+blQ< z%x?F2{X>3AYazNp2is5-6&Ye;1 z{NE5<4}EE`cykoMQ->V)dkV!%0S-fe`LPGOU;grOJ?H>tFl5*v2s5#X9P@~~ik1tt}|{LCeX_L|c6=F}pKusucG#EX3y ze2}Htzc;r7uUgD6{J1d*6wT^gYQ5_~bm{VbF3CQ;`z?xi?Cd}A8*qfWFp%H^eVq@E zcs8IZ^IFTZe-JKpyOXpiO@M=)eD@D^qhR>D$7UhL4oqIMUu~i6gVISay3_i1Kt;gw zKjWLt;K!}2YJFxaKi_Ngr%2Mp!5%N*K5>l>mMSt<154@JQCZYepiBkiJ zcfOaUS=Dlo0Pjj0eW%G;ghRe>Uf$WBhAe%8d6B_nm{~;8(x?32z(-}A<;3I`Xg7Z^ z`tHp%9C&4CS5>tJthSgU53wmgSTc@vM}FG9Un&n0Yes?8gWcgY`VOF4a!lkUeIhtG zai5)cl?Z?FB*bplZ3ilS+jO>FC&6a!Ci^-jltUunir5;o7jF1geXh!G3JNmoy}u+e z4+;Va`3+<}z@7PV^@&fDaE@WdY8cI(yPWJv;)d42gF6l{*zG6b;hTi{s$CMSGTZoE zTU{a8dT2hKy-9~zkftX$Jw)F-$!MCS$e(c4@7)s95GiisjQuhiWW;>pZw90)?!iN) zJ0<~XGvFp)#f2<`BWNq`paaleJg_HE@vkf5Rn>@hA*hosF?Ra;3e>wVDmf$n7i5%+Zcvl9K-u`pX|KmS zz{4EY=#U>l>o+quEl}R`p5Jc1=Ho43I^Cz*$I%8fA3bDw%{T#6>ZeKcE~9)d+fv_$ z!#wnzA^;0FBjO7+?WNP9wtn9&JZl6b_U|u0Q!6Yv+rH6&O~d=2G1X?OT?oU-u5EAOuz^NmcYbRW-dIi+ zcptS6<~)CxS7~iR-a_3ZVYDaBy5+>A#y$x(vuOy~5=X!xL`I^-2XX&eHL_kHZ$?L4 zt^F~-5x{78`O3Qwso;X9hDTrih!$0W0!GzuJg*i3+1nI7>Cp*j7o%p-u&@Qlbi>We z=DR?|U5|WbKQio*46$^9)IRh%Vpwf&ScVUywR=))3AoqAk;#0x24&0kBs26zVWsXb zwTWM?;Izb#jLQ&lD9-Sx$*LxSQVRBOoZS1sWYv*2>GTmymwI>Q4m~N({lY-n^5HI= zXOK#*>(~ZC8U}mX8fZUOaAL6l{T`sgh}p&EQOHmfhl`)z1JXB4W5TVLK>sMS^x;+y zy8F)>-zn|_giS_cuflyOd?h4P=gbr!yH$$Nuqe;wn)3V?)gH9CQhiI|*Dk#OGWxY} z84Yg7A9%bF^*Ef_C!fpf4MSRbIe6|X9e!3(He zGL7^iD0b4KN#_^@&v|<*Uocd`mCiq24Iy)YLEhH8{59ggpE3F>_zHq*U)jj_UOT{0 z_Pm>F$1eQWpOIZ7c(zOS<5Krwf4{+s zA2K(&?)8)5Qxj1iI0*ZITbf`~P&o(MJkL%V>ovfcpe7Xy@3MJD5e^X&gUM76*@CAkJ49Qi9MUeI^`U= zO*7$Yzt9UFz4{=l@Rb-#3u2?lVJn59ZYP~eU3+0`@N=fk`4U)Y{z-;TAMKZA+EW+@ z2Ozb;bBd7FSy*t$xvkt(3m^QK9a3%D46-Ww1hwgKSZs0Xe8)d3++k8rpY`Pq$b2=C znZ!{GveVxQd@h{^7E!hZO`nPZi(y7eW*r5_VsKrE=lUcxqKGd%Fj<4zpQ#Li*$&t} zX#S&_Qw@#c$t-+D$S~J>Bcns)kGN?V=Xn@Tz+3%|+60s)!THY5WUg=h$>@M8ez$I2qoTlm1nn%O zS}|jh!~(XD5Lf06>&NcAV+1TdmP~5?S{-;wRO)#xeg#bRD4tt8ON?iP?L7%lSO&pq z>P`0_qR-1`sPVTc73AL&vP&Z00bWLx*FH><;x&4_tC8q_$6#1gyFi0@`V%)g-sUy{ z`pP$BGs=`$gu>BADAzh%bgwxVeb^1BGi%$2NCrVNjij$c1M(pgI!8}r9|3C9#((Q? zJ>jre+ke!}Y}irT>n1)^7wX8PEwryajL=|`uV*{)7XBKaRl7?16g7U z(Ei-$)_=Y(2gv*KVK7Yy<*?^3XVs$|NpfA)x(zyyP_gK>6Y-K@?~hs9f`yejHwv(EpHMR)yT%&?tXU{^GpSfqcQQqxv ztt>hX5aG!IZ##b68HP(Y6>-ZOsE565p~zFd2PxduFI-1Hl#k-E6<;XP9^z`)R!Qk7 zTqN*5V=G#ROFdC$2KCk8u5zLE?;itD>u;OjjS~k@dH|Du6h04S&kE-n^Y_BwLD|s6 zqh-L{OYhimVE|~;zBKDgAj4FBJ-M&T_ClV`%CC25%7H#ngQ804B0QPh{56!h7w}wE zRbR|S-iy{1UoYEPXnt)zTur$NT#|O%{T)3EUl}td{l~Klh<@s?9}ho-VKfbdfC*+S zdN=3bnQl8Yytnk9GV;9Mex3AJD}5TBJI1rv*6DH5$^Oi1XZ9c&{o-GZqh$!f9M09Z ztU}*^Ef)HSuMwAE8ouhW2e*RaKT3#=p}gQ+k&wy)7>YED`kdDdhKgse+z|N)L-XES zY5Jq{GZXdMOH=DmFxjoTntA}3^HQ4~6J7z%+(I=|>gAwqr?N&seiQm#ek+m|GYD7g zj;k08?SnkQW=$Q<9*|}`B30mV2on?((xbQ*z;Q?QNJo4Gs=oTnXVAF?t}ZYOf0Ql* zu1c{#BG9}&;Kj!@@8TYqI&md33H4yiZB;i;wT-~j21bV1^Lm&mF#mgOsu&b=d06D# zng$L^>p5P>hoRL!$)`_rhG983zoYFm;s}=Sw0eXsqI0?XP#$`JYX32XtgKZadjE}oJ$&dQrZ+h&k(Rpa2i;5yGo&tL{u+d{vJpnkZf(^Y8VsQ_Da+y@!M`g^41d0Xc(dC=FIyF+;mu&RhL=>t_}Lfl*jedu zfHL=@uT=;b*Qs*>CUkp%ohhteaJ?O_Gy9hXsG~j&x88|9rb(C{{o?BOZ^TFS_TG2l zJpkr>d0cJ{2au@h!+ZuCIo4w59Lw@{0_sqn^QSjN=ZeW3#~^ecz7AQYF4vG@a>0?q z;?I#U`N6VhnKqhVM9(dr6JCL|FRv`#>t)0^F0fZ8Djxt1Jm1yLh!N`$h&|F3U4wGp zO9#u5my?H&Hv3yEId(S4;(<5nPjSlh&WU~4fi9h&tDkPoSd9DXZv0_dugJ)~#b7faVUpShD#FK(P zfCfMs#W*h)Is|mr_$=LdI>5+%(iK5Zb<4eKvUXd=!cgk`$P2u0T6g*XpRaQ7ALOe4BYO7ATBn=Q^8|z)oVy zTWq~^unn6zCShBE^6r&l`xc`>?#XBS6W5S;($Icb_0=Kx@bf?89T&u@2O@uMuCrl0 zN*+{xsIQ-DL2cUXi#)bTpJ?taEkFmZGRDm0QQ+{El_1d844qc;9BP7A0duyP7nAcL z?6r2#rbj;yDqnARmS3|#f*_LLJh1@u>pn`Q7#@LViEf|mjTgWP3U{*wpH1MMKWf0J zIR!IcHeE41-wUn`RgvGUYKG@d=yew&PO80*>$K+RE^O@eeCZzE4BDl(mwOV?_i6mJ zSAg6R^i9t=vqwgS#iX9ewlFw^hYJ4dIVTyg@L^dcg@^0lrPJ3I;-hik|At8}e(ya{ z=1X_r(w_!G(!x<-bquQ9a9Tk%#V-d5Kv0qVr{-fi`m(K$#>i* z!9qEjUTIB}VI%ru%!BsSSn8efMP(T-jO&U}0`XU7Y=5*pl@Lpft?%;;G4iotO7r0n z29G%~i>7L7*@n_+TpB$#*z%@;&5&fdpoN#kGiuNn*l9HL9d_a#*0UJ~VwJhiQK* zY$7gJ#QGH<6jBTx$2{4nga4ip$C!=_YxJRce};5NljYnA>~~^G$xNyV(@Jx8lIM?7~#V z&kJCE8+r%&<=n_?7V}gpogG^=DmXiFg&lKrq4@802RGK9fwRf)v0|xQ=~JvJhu}+V z>B{|jZfrmxlq^=13G=t!nl59`0rfMnoZ&v}VA$+<-VgCA;2L21h(u`tc%FQ6kM1V& za&;A01TYN2_6GvrkDopSD{M9jH+9fn*y_pgLEirpGt3ZT9*_|(k3q2s`s&VuHCmW{r^4blmKf|Di`#Pnb^%mUy;t=}! z%RUIZ^X#c}$sCMmbq*zE*n$toJFHu(cEPYk*^P(Ay+BjJnIZ1-9H42U{_jcBK74wb zvhW)35=@k>xz7I!<+x+NbT9=GV;fdMs*xjzlX0JQV%%mC2EA5RZmycf0% zE_A0vXejnTsj?{PPB$XF)Uut!8F5foGUV#mWH$lZrjtuW+73`UJ@dwu9Pv=3&XIxlj#=W_HSDZH z+0Xd_{^!==ivo&fE1o$>G+Fmp752fZ_x{(Ggo=R9(J3;!z+tGK$lT4Ljksteo)5$$ zNU+GyNuKi;XTc-2$?&&|z0j(AuJ!^Q4wyJ)CP;=WfiAxKLcw_vn)^HET%KEjRNq2F z!{dnY?MHNCvq}vB_#Zi>-`fF)YyBD0k;5>G)Ao0O-z)g3Z;FT76Y=?m*T?T#jz9?& ztrpz@#Klj&YAP|Y4q(A|g%5@kz?~vRmVJ+aU3f+`qFuiaeS5_zAN{U`7cY`O_oA8s zVyE@UGSG9hSvPuH2>I>}|K7-I{ZarA?=b6xUO^o3UDCL10jGXXuXU@;kjj{=Nc@cUou< zwqE{H&Fuy$#!;Q$Xi3)zhopUFhBMdTltzejQOiF3xyX7l>f}76XlLySy|V)Tc}6bR zqB+2~+kr7D^LR{VmpvSq5;PQV}Xn%Amt&cIMbrPXvaM^S%VUbTO12UsV>$R8990;>)?>H^gTc;)t< zo^CoZZX`Z6SsAnpPlQBh7w8e=Nv{49=T+vQwq5RhodzmwLn-~qgG#jj*ClbKJ~a&^ zY{qI&r*;DJ*YD^e-z7r^A9aQ~gyp}^}+&b!p+^}&-h+>NdY zTd->9KjwQ4SH!jTqGVD{5&0eAWDjb8qk{g&NKxpQVjJ(g3nC!HY7e&SvT(-U; zeeTHw#F%Es8t)xIrCI711JERJmgVzp4%mkVd*LUiV>gPiuEaB0nkzPtYP|Y=usv<}J zyc5Hz*frFr56-scut^8pofcNa*3)qGyamU#p;2(HHi-M4U>EHDa!dp#L-XM$#I$CY z*FeTfP}+}%8CY>5Aysah0v8TVRB*tF@SDTBKC`|1poiv~-iVa=%jP>}CU=%;4IUTEKz=@d1-e0J1)U=g7y;HRZ zNm;%{1$$CsD|f~U((T5fN9>8UrJxDe3^!MN#u@QgQgX)?d>a&7UY$r3p8>gFDi}1) z_krkt4RV_3e&zbnl&fPFc?;cDN!G4)B5!qv()fv1knP8Qm4bc_{1Yz5ZB5&uH?MvZ zec~)k`D|=*YKa=Z`~LC4dC_4gH9N)QZFB^FdJIz+A?~_RRR2{@i$Q3xl4Hx(y$^^= z%QbS$I$-hkn{}JRX^_p0Kh3$g4e7JyZzUO^{Yb=M-KmT{aP#I`FwZP09v7g|O}{q- zO5;yS6J1RK|9*K&dDG7TS}(8T18=&3ZwqOwm0k`;n~HhoT#vw`XMALf zdQ*^tQGp<6GY0<@(GWGD94DC#?S|;9PT0s)7kFZS1OAXh#_2-D#}+v8+W!?Jw#28k z-;L%l>#6QRIK?zv46uLoT^sqau(}BTFe1zn%UFomK7_XwpL*WIDq%WpS9gjx2_9!9 z+GLu5JftLhyl!2;00-?wXcD;zxEll`D349T_B(sMTlqw|sHAlCdBOykth}SJCy3@! zX$5`T3|)XyUC@R*aT)&p{PQUuii4n8@{MOv$fJWFMh`EqLxZLIx4%bF4(q|MtI~%} zP_=>jXC3Jfl(v6LhCQXg&b#aF6#tn7zRY1Za|PQ#TB&4V?Drw4OHj^Y`&0&rh}cF+ zG@4*?W30G&4?TW~nbxw+8}YsE8LwZ6ih(_OqJp84BsiPx1M-cyd|T=A1}fSp z@;oTr18lRY&sO3mKoSlJK~V?bvb?wW_q!XQtkur`sdzKom^`a#1O@h?hKr^L}5Y!D;T>+uJZQ zVk&|9)v2|3I6 zgo8s#v5LY+3il|#LSt>yL{ZmiV9J`eq$<$|Wq&5At>*25Z?!!)@fRv{;QvBx{VNs!+6o|9*? z2YhQN+$XT@fwm`!b9Az0@OYuE*!5%rUfO+==4QYII6m#ZL;Z9f+6od?^Ta^o9IS6RY|YlBz@y|`bru>B-$8BIN=}D> zc~{>y;Aq=}8nq*LD7yE6FkiLz`2HNcuc}o_jQW^U9lgp6qgmi_t64Edvj9&0VCMBa zISFm}R9R#=hrvmknW!5>h;KTCRnVb)w*LK1dnp2%i%Ue4eY(90=-hY}wxeobofO9< z;lVYa-A!HWu+{@~o9CEhQRz z{(gEe6&C+bndJ`RE!EW5_{q+cLTsfJ-%VHsNv1w0Pq7REDOSfyo$n(szh8ID{1uuT zMF{WbyN$!4n6}~PGNs_A<}^)1TRzAp%H^^`C&*QL@mzj%Pi!Qit`s5TB(bWgWI?{!P zHBg^(xXZErMj;@lCjXYC-Uk9!`BN3TMqpUETmzdh^4+{#yB(z$3yF5V5w;A;uyf=U zzvj)yVQtiJ>NJ#ZwW-%)o>Zg8k2LE;>r*%2HIXuT`}InYeId?uAN9-wlL~W!@Nw8+ z_r{&OiUALs{}F!UU>jzZU+*D)G6;*ryn0BTX5n_59VW)iglY4BjG&n(;F7uSgAdns z;P2}}z4y`gR7PfIf3v+DTtDM&^0yaa)H8@z`8LQTnhjE_jYq!7 z=7S8{P_;)%?a+wb=iymxG&f7Bx;od;2=0wW3cKsHgKthRz8b1f;>o*iZR&%FQ}LlN zukckD_!WNQ<{RHO;CQk*W9Ml*G{`H{xTXCSeqvbmshiygvk#8Cx(v3V&1mbhnZRkd z$*MtRqFW3VJs;Z78#IB(srf-NUMr9~{UXI}l#6!Dwt8CPvjaONH5z}rc7S8>?>@if z7F?Z(6F9rN4fID%_(!Hn;ZEG;!1=)>$fZ10_UH`}uEBQJN-}-}%JQkIybD-^&)KJ* z8eBoWg3*lNvi&`94!Y;4aIJ!rMH#wf2jm;(dK8=4h5Yeb$=|arkq1id#f`3u1U$X_ zX@p-uFH|FqDcyG%137`?w6_&TVd{%i3CedA`17B^fbkX)HXlIM+9E}YEBWhZUM=qh zj>DurBj=Z)vW`I3aNa5~wO5?27CHnWDU#D<$0+cxZw1vpuW!J#(ZOfCCuhNbAI)WS z-%(%=!#@KrZIff$dGvjUmnbnG_MAmW3p5|*6Xm>TxdPemKhC%QK#M%*vm~s@4$w#xMi==ckw7=eL0iQdQ3zYr0@$6FJ%XsZB7{(Z%s+xCL-n z1|)tV?M42Z^Nc5rcVW@l`f~o`ec%`WTT(Xb9M}*QsBSDZ2!hN~S1wld!0=v)4Qd&h` zmzhaaK!UMpEu_trFTkGke}B_bCqUH8&)l6syU<`cPJKoGCp;*+`U07zKw8Llz7X3U zTvrds(aAs@)l!D%d_>3tA68o6LP?C#%|d+2a}q$&n4SaFcgL|mLSsdT5YucTcl^Ev z4!^BFxOA-%c=>B|aK5U5o3B&;uqcpV?N{Q$Tqr8RVlivk!L2s1zx!D>BxecI1*b^0 zg^^&&rz}7kWfvebbNDaE9`*PKzw@o4`@Z74Yu#$w>!7^pKkxfDnXwq|M@IHCo6th+ z<~6spY535ZZU1fw4*vY%WZGvQg`4-jk^{!?D04*rYst-e}T7M7e4arZ^DQ-XOH4kmcgIF*SyOWC?DS_Qg5`|0Jw?=EFt+0 z{Hs6RnjW$V>@0{3Feh3}_?{hQG+8mo8ralZ8rTJ{y3fu%(8FQ{Oh$2|7?C}eV9H4n&o0zYW!D$^-^Pjf%z!7o|V|KRKEgy$Fgjf@OSpk&az`N>_WpF?i{r4ba0mx_OJR7Cz07SdK3iK#{ zr_!-(dU|OTPV)2n#E|qu_XvDGTakb}Sd2A~r;h?Pi_)>a8N|~Kt3AAIJqy8KzU{xx zeUQW1=8cK_XVAEryp6mAEI;*rCIIJ&YfAlD-SF}J8uydNVK8=# zCzaD{L2id|;X3;(TT>#DJBKRXk{@i7UeJG$c`_OH?5B{_`Jex7G1AgV- z?yNt9`rJ{sj)Fl(+=aMeC>pB%c zi$(Ia|LRbV;o0h~o-zkO^;Ylme+6Tp+;3`g&2t?XCLeUjm7rWNd_V7z)(n()nw=iS z)8q3L3}>(JuL0eMX3r@zA|RiG6W3KoDy%X?Gw%W7e;D1-K0f1|21`8L%{{f|5TDYX z*{6FJc%QjP^58S#;A@PH{)gUAkt`9%sJcjSGfGn-#6g5cnBuE|0!l1gh18YeFBzs> z<8z7$-3P~pZz)VV5@Yd&g_TsnyFk7owy%ne7%MoFS#8EZidBhv&KN(W#&q4|eG@OS zVIt$K`2olWpX2qjtnmX2_EP7r=;b7Ctm*0dN5Gv6ldBe6xyLAkMSWq}5#U7rSUtY? z@T~y0#;;B)*&>AHTzbhh-7Sh)W_ESTnTcb4|K0A|6XnPJcRgbdp&(Z9w{?uy`#9#6 zC2pegL-?e?-Kg*&|LppC13dHaZIi7 zU&ga>-W9hK=q!jaoeu#A-zhe@IAk zV_xb-Eeh#EnB{QeQfUc4w*FZ3-&z_M*5WkMIRBCr>-I6bB}2)HnI@WW-p5(6p(R_R z`EoYQ-oT}3t_^X4RL6`u6Bx0qZcDCsaaN4D(aOuxWeZ%&NKgo_SOGaAZ;ifJFkqJ@ zXAK^Ut^xnj5R$^JFd%eu*)_WvBI6^r~>4s4`htJFyyg`c8znK$-UfWwiL6oo@APz^b0 z|xn+NYo?J8ZLtJ}cFKC9tx`_mnjd*_F_1_lo*M3&W7}fxU9@@7#U7Uii zl)5{!FQa*`B+tJU1yVe(j%qsN4$8Y+){m)2{Lh^i=7YY?Ecd@CBaEU9>-7qB}XM(>x3hcMAOC zb$7sGj|JPwiY|~OZ%fqvxdkrAdI#UI-hu4(36mFt*MLHabg1A_BV5fLaZ`311195> z&Smd5!SwOny^kMA@VBG$F@Eu6xX&k3yI$&f=y;@sV%*0nK?`Zpbr z&)+8WcjO>=+ejN(7Z>v@nrRT9NHL&OyZ~oKPK&&A z8~|eNcO`kM8o|@$H=$cIJ%D=u5@xCV1J|&lusNVfmH#XWgIC7;AcfQ zW#XMK04ka`Z1THcYJP?9O!N}0R$t!C@7aZu`u=VQ`x8*LKJ*KvFBNuY+EV_*%YO8p zJA3PlDjDVz9DgU$V;9T|JQh8fONqbv^5nWc^47b2ON=4Z48x6gJ;o364q&t&Tkh#T zGF&ozc}HKoA9M))_!|FeAB+uM3Sab^hxCt@Qch3Sz>+TGu(QgDt3aHQG!@hj8;Y!3 zi$n-m_LHtx%-kf{de9K&xV{E;1}oAkCk*=$9VL!G-ov z70zWHx2XHTbc(QeJtYxdXHQWolY0Q=2BV*tNRna>sgbQTi!*@l{N3}EWF@eKG0gnh zIpkd=U*{F8TmvuO{;iqfID$QNXBYX-uR=EuTo)_qgByA7Q=gQH@rT6Y`*D^%a6(0q zF*Q9My2lfWXs#oE3-h}`(Z`6FuwzU5SeFDxGmZo4OV1!@N2R@J**3hiF}^pG&qq@T+|~GMtcC&hU(=Q zQv5DE>sp@R3K&tK`x0^r^=I7va{9^;u-PgJ_hIdQkQ16L@IrYCtY2{dOC!<*Sq~mp zS$-S>TZ`c*Ek>q+$J(KWp%W=aVHJDAz>XfLzL*#SMw;D6||g>Fg`u#kA+*SuZL;2TCm<%;@s(OGSo zeg`e^QhPJult&x99%uR49C7zPy=7JJ{%;N58Jxd zh|NkVZ-o_7n=k)RkHbg80bLJu3V>MHLPc;P38s5=idL?61}OcuFc3%l6}E&drr@+G za7j3$zzX^CLNm{7U46L z7PbIMHUE=J-Yq~n_9CS`<2zv3`YESEz75W(1O@#-efOqCcsX8m86=+^ZBSw)$F3hT zNxpU;2I*qC6QM)@LD6F`F5UK<0I#S>*=6u0uzb+LW0Kebg#?@j@>4gF7rIGlpm834 zSTe!}gD7Wk*+25E*fMY=Q3*M0*$4iLYfRD*)x-?VfCO5AA{AF4&(u(pR|Ev!XQtNlRabU`(Y z+bFs1y0!|O0)I@FCyWB)y>zh_VInNck>aDUKqDkp{>jxjyasENMCy&zet_t2+9@f2 z_W;GADp`>`F}D85SUf`*agGK89+5v8htn}x8NUmsL8Q~K6KBMiV101Y4kzyp;&*@5 ztX^M+-_I7*Zmo?$>in`d$^I+gW5A-ca_144cmJ-?uFwZl7t0sQ<4T~@pxi=s5At3b z3yh(tD@@*^V%Mtt2Uz&aDsF=*@Z|e%>0^xh(1?F`c3lk)HWWy#Hf z6xrOtiUeZ3|GC#CRW@Rrqy3y<7wXM##Ad2GVm+`h-9q3T-3%y?JpCYrWD$HU&MQu| z8HdfH2Y>mti11VDao_h?JHY-s;AxEZmHTHZ2Il8UFd~b}AH0ogplC}pVzaCR2-N@v zk6mK?`FEOYnSfs@TZ17iK>nW^xZZAXOpBqjs(*7kN!G0!^gy;y<~OW3TMf6EDyVLAG~C-T|n0 z8}EqK1^a!0-=vn+{_{Y5{l|iE9eek@ogJV!5I32}f$p(he)?kUX#Zmt!_$457;6tBjx1RF3q9|z z1VxrF!}hW(E}H-Ei+2|+8Z%p`wJRrlJs2*Df$xXm02Xw_bEQOUW-x_P)B9Cm% zMN6t5M}R`8#K!Z03i}~-m4x@)5g6(Jz}BrxihrjG4ouPM0Tz$Eir0sUakg7Ystzhg zu=;7`mA%$c2%oUUD}@tb=5~)e2mH%m*h0h2r3*j6cQ5j0v|@mhIS%#@1W2%iJ3o$E z@^|5>dwUUcpI1PTpqk0b1SwV~>a9m7G7gTdN{c@`+Y3E#tzYV;Ujb?GWVbPE20Xqp zKT2P}0z9u=)n}7f0X>^LZs9MMfNlU7bqVf=J8qdiEF7emc#ia^V2uL6lO$@RYIZuIlU4oXG1+T=4AQg+U-tqjpK}U>d&q@F4;^9)R{1TcNS$1t{v*ZQQkW z1h!K%ucoec!<&1;txRu_kA5Tj*`nqVjLJ^P6))I646E9|M+vYVqk}CDi<#tHNQu4Q_hQ(VORvfvb%-)iP>!0H4VOK{2lakn_sX zj0mFl*GJh56{-O+c42i)s;ddeN?2dwyRiyb^5u>0=Zt`TeMS8}lP$n)B%e|H9eJBg zIk`{&BH&qPez6CJ_kn2N)FI~^?a=pW$_xKbozSJBm?A`i5?9pISC2(=Uu8zZ==BEV zEe^0`Am?p_LTxtw{Wn@bRbJ`9C06A7dDnIM_wooJTs@ZbE36ALo&ZtIx^r;W{afq` zdOr`YUHw$YLWQ%w=rt(z*n)(i3o#b6BO9IN??c}7c%Y}pcK!s~vkoRYOtiEEC&@LHmyfyu$8u-uQ{#1LjC~nBLOz@? z=~l*_cedai`>NZY5l=!3Te$tvd;$K_Kf4o?u?|L7+;)ahzsM-C+`hjB`8l+khHS0T z9=G=_tugZ3#yznXr?lvTHFLS_^y{QpFqMYMrdLDx2PR8W zUBkezhir`x_40RYsI~P_-tVir+aBiw0%o0c@=TTl9VRX`p0|}qfh}rV<wgXDM`b3N)gvt`RlsREFcOmzGWee^4Fgj zioQo}f>)joCDVrw;pPU-z-z`<&>wuh-2GAqOztlo@HHUDrcJyJT*h%TyCaZX5T^MXakr=!)9T}qHzIGgENixB z5%4mM${FV-LM1D^TmRqN_L0f`T=d?BA}xg)%h!g%)6z>{-yr^wHNV>O>!t}P=6QMs z25&&UxKAfbj631@MV7D-(nk2x&VbQ2uLTy?3=3wOFT(w$_ZkPah2Ts0M?VTT^#6UQ zd1d>t1QsN)tP66!2aT5*lLC;B=YEoEQ$+v?w)*?($bWp%0H6EXbL!6^xbl&mQ=(@E zN(x#Q4m559CFXOwj#t-!%mQ}#lSUOe8GY)ez!{^H6CqYC= z;ZSw<7L+_GX?fvC2QdF$P$!Up=K59%Uru|q!sZ%%Dj)P*`n0(4g*d4W+$vO#i*fFR z4^3JS8Gs05<~h^GaC;v}BzN72csdU9E!SABe0t$Rj&^zcBmuvAahLNN^)T>Ej-|L4 zT88{p5!!Z!^Dwewk5ua9G8ons)sa&}yh6VrIyR68@~1c3Pa`jqq|=#g1K$o1L145x zSlxq#btkq;(dWPlC#`JIe!xMCV#Qas6BOsWkl_)GxY-?7qldbyKx10yT#QH?@UqU% z^DlyMb8*q5{pv7mPj*&gQ)>b$KR${Y25dsDqVnl-7BVbE;i@^U90{hGPgpx$vNgT4?LdxKIi>@y{^k#X(|WIG5ukTA6p0K zZ4-&I=#D|*fAbIQB}lQB9}Bv7=zf7k*R0h32c$SN>po-j`yD8@=yv9I@GP7Pj-Ou3 zK>fRkBBtcNMG$#IiAAq&3+;n>Jza$l(HvRmJ6l=@)M4hKbI;s^clTxsDpyD`ZoYOE zKiMgeuCpw=5I+k7f<;wiPA$WK%C;p!)*Z0N=}oL!G7(-&;bO$E-3qQuGTcc)_Y-OC z_UOg!LlAqja?0ChAJWWT?4Y|j1V>l<_QMG4Ax#E#r2JPxye+SCQKlB<**RkZ33Zp? zb=e;8-hc%_F46S3mHH#R!)*EAN1-7ww3S0Og1AIhVrJx7J5!*<{v~{RzZLNv+`pWo zU56K*OCJiTAdVZ;RocM-VmyS4Nnm1_5G(%Z`*jJ!$>3xKn(NOoRh1+;nhGx zK9=@P&}UcR@DT02ZfMpN{4(tYdBSN*{OrTP!NT$KN4*6wSWPZTa(W)#Q?gII1L9y2 z-QDic@NM|;o=X&m=K{RIUSX^uvIYi+{2Bt5`=MKd-l>GbG;k8qbne%7Lrr24K@HT? zAzQ@*Rf0yLlZ%g8E5;dvTO z^I)3L?1rfa1IF_EVR@SBIAFA4+ldsO1&l@hZpsIfAUu=!c2o-?E|mK&*Cglwe0AP2 zzspa6Kg}#WA`ICEU$*mQ#cY-#`x&n#n%ip%dtpefx93vSv0-W_L3*T}Y${XGI9rDOj93qx#t?x++JY2Gq(e@Yn;Qcquf;N zhq#-O^va~%5pgLV+jN5d7YpUM_=LLnQwngMh^ zwUqWiajZVz?)op}KH_XmaeTO8t~CyF+P@l3H6d=pN1I{3tn-4coNE08*YskJAZ3x39g6$yNMTNBKMv1TNPU3zyCn+?-G`Hq(h z%6%D%9P((4Lh_GRp9-LFNkW}h?V1KzyYg%YaV zDlK8mH@q=e&r$?aXP>eWbw*y;wVYdL7AUc# z5zrmeMvN(+xz0@~M}fJ;WJFPst|P9{`Em8X`(R=F^MicE<)C4bC$pej1bcFCC{GC< zfZ;Hmf?L(Q;Px21>C35Z&{H3;-s-slnR=w3vXyNBAO6c3Z!%th&kiOr{a!o3h(T;- zi*po+G}~W)r@Rl2YHbD;)i$9Q>F2a}-)n%wLBuCjjukMNKDl?HX9!|@ikm{o)xgQ} z@KSi&CWssV`b~$P4relVIi~eJgnY~mr-em(L1OQ6_!F6*;J>+Xt3;1Y#OJ*_rh<5` z2O+eTJ7f^Z>=X!pM84T41Q+XK&m+! zh-6s#E3(wfB3-2y%w%_!;rT>$H9WVf0BmnCS)*P z+YJ1&2>yx)NkpiTVmx0TCN|hnVnh)cIab!~K>cKE<6V@akV|?p$G#B*f3YYj=5nkOTNA-=@6z zJ`aOj8>jQ3l)e`kD(S3>cy44}_fsSvn5ZV}Q152iXZ&wg=4mKXguoPJ&@0*~LI53jCj!iSCFN>QD6X$fPZefw#NoE&5G2 z06}{~-^kZ7XyqE~NW({sA06u7O?F)d2X)0S4jfUAmnsr3xZML(e9!2NEuuUo%SXEy zeY6LSjq)%%wF>VWhvpX`j&P~`i^zqre)z^6rYxWy^c#)GswMY&!FcwAig(P5;QsFY zE~R#Q%-M^Gg|v7F9DM!^-T)wPlD5HY2viNx^fJXVEYGvCbEZjev z);T{38q|FG)5;H^9o0RKOP(lCHo_{SkMif^S=u}wm8+nIiV;S`(kC z8v#EKE{JRXM*O!yJei$r65LbDFfwN%#&A=-Niw1thCRO8-ez0?h%+qJ^UKkm>J z0K}2Me6YD&_i7cyrHH5yykx{RcB{Q{tQFE!B}cqLz4?$xQF&IiePH6*aG7*)AE;&x z>g~E7Layh=cQ#{&p?IO2bv8XQ{>;u_lfG#W(94G<-nU%?tvAR|KcOuKVl8t2)n}vm z#+QHVTR*qq8PDLcdg2b4*u^`qOx*{BM#t$AeUpHBrP2AhCsQCy@CK)Xz$7rpU0ub{ zdHunfxj=FZF~$}l_DoT43reha7zhm!;C3Ce@t4l`0J~?WvnP6%!JD)XO6G{4^S}dH z_m28t`&hUr;$<|LD2yV7|}!iFs%=IehyU8=@l6zy68XEh-vVRF#U zPPhv`33yR`i$y&NN#fpj$II~Ln=ElL9wIz6R=N5v#Wc9lDsKHmwH|nmz7Y)dBEiw> zDoE906zpNf_ZjND;b$)_qu;6v&6Q5q5*BViVw=nCv;zacM*E)5?TnV8B&2NwF>NeyvTjk+8ro^Ku{~Y?AXTVn2 z?B_BRTR|yP%9TZmP0*G*!~^vE;r4>Oag;zHFfM0}jeE#|Q?ycTr4XX`LD}5^J{v1!F@NgF>bnVsb2(E%ekG<;|I*d4H7w0d}zDZblE+ctwY7aU(67{F4 zEkjC!t^0{PgD|gGX^=N#6Ubj^bol}fz@T~lr@u9X*!NEC91Y6r)0!0&amS59A-c-@ ztaZoGg_3eEQJ)OAk^hg38BBovD5AYVwsEL%;w6@tIs!E-90~f_(3~Ok8eebiANVJd zclFE+%0+iLt|`=z;V#VXpJgwufxs7^u*V{V2w@X<5F}ZP=HWbfyR7S=HRsfYc-~*I zXyYsbTMoc(>(<&ad=d^utI-m~jYE=qk!IgtFToz6$Zd`nJ)n2$^j~eGEqM04PfdZOMS z{Uv79BhBGsBAoK0>2BHg6?ksW&dfG!5!QOmxb~KAgA(h^-|VLm=YoWj_B`bn zj1HP;?fZ><;j#SbN73ZC4W0h;#wQH;B^PybymSj1zCNedXx{-Nx8k(+m15!BY%+Ms z@&ItYV+x`EOo%N=QFA|5TY{H(^g~Ax2h^V%c;ea=I0bdcgYS=8f#>b)m`;@~Fx`A$ z5p7pm}8&LFfLh6(GXh{YYi19mps=vWjX)dBK&aR-4!J zus{60Z=@39CMGhU5OF>Nf6`_nG+ZcfpKe}^^W+|wq%1O{Eu8{n*41xzkk7A_pzEx> z>H;9HZA&`;AQ60Om))=|numt5V{8&Teb6??I>EOKnwkhlyAwF~^E1)L49~>FdZN-TZ;B!%Cxlib);l$^&54n@K zV96<7eCu&9U^*Ph72=$Pza0l#vQ5@uRB^apv_LL^oP;AEkblHBgJGhwWe{{H(7fhI z>IA~>C-tgHk?-pZLv3dbF|N_S9wM4Zjekfs{wVwg`F-lmw)w-hVdXDB>UeZ6Cla%y zAl~`|Vj3nWH*gwUqOo+1?AsC`Sgzis?V3P6bS^KRUpw%8-lpe)$UN9ycC`B@`wy0x z>`82{`G8uT+~$ucuWF!XU&wib82hfrI*BC@1FZSJzTU(vI2~GYfIa&OIifA{srKmb zlMABL^np`gCYEpDTh#%q?iIYCJ+uj5{8#gu?o$a=uey1Q&$$kKQ~aFJ<24JKtqk{E z(f-5c%66ZWDl%LiC8Q)EUgUdOE6*cS`P`{nv_jVHhCiqdMb!u4`CX9bLR;0M03_l`_+fLW$jecLq-FvM^lc-udP zy?zx^XH`ewZB=ELYZfDL$7X4f!UXj#cbOit{U*YQ%@15!hj##LzZpA~75cj{x!n?@ zV8Gwq=z6PUItZ*Y#$H*#P4HmHl*A~947W@E%F^043F_o;3UGvsgA;$HLvGP;0CrBU z-P97q5jhMCymV;|iX?ea4g5uO4%hQm$+?3-E}F*vOW6u!y-`5nva=36Dh0~d0&C#U zz}-tjysPj-Wf8qh>>>CR!sY0M zGVtGFsk(L-Ay!(*Iu@g|0khKxt7bOUGAqiotYebAtjMd$n{#D6S-{6_l+ zkg|&P0<+~VxcBARU7f8KQ0!}m$5O1q?^2!H<96LJqoXBh=+ZGPJJYuzGrk8WxiWOF z2GxQ3eg?UP(KWbuvA`YIKZe&|erQhV+=92WewYS7o&$;YURR`%59}cOXp7_W9#~V? zb-y^)2^Su{-A^K)hPplL6{36exKgU_qixf6_=)amKGlgiNY=l8;5JHtQKUc7VBq`- zE$7qDE9U3Iwy3XDHT?vb0xKQBE)!#SPYg8~AWup3y^ZU{`s;wlq4mL&C=xt!+oi}R zssyG7(G3tHkD{&x50}w3)K{4~>31@H4}?_>3Fnh`gSQ|y)4+Wh+`F=Sr#^rXbC*k? z-8^*wUqmh!Ysl|Idv=<#6u~@T-}LshA07gk>bK;y4XN-uVw)kK9?@aF*Me`HOB)9c z^?6#e6_mJExcre)LOtAad-J&HW-Sb^RB1HArx2g}n5C<46ZYPWQ@?LE54-InV;)c< z56b05PNIQDNYkOgqJDD@Hdt&he@!`tme&iO34l5{Y0<{*dg3>jdMSkw{u_n=VzFPA z|IodfS-$UC>ICR34*25IN`;L{r<~9%LiaMsKc9t7Het-{9S&!Te)u}lB_uze7{fvz zr-|I$1@(LblRG9$;3^{19>tR5gDSZ^b_)bJok9os)!9v`uWc?C_;m?dNEuLm{5=9g z^#a7E5?0_RhprnD;?p23izbd_IvU~^_TfT%tRlbj0H{Apyz~BB4j}ULZ=3IGgr8SBDYQ3^!I!r8itqm& zLgj@wW0LnaLDIUq6?jI3<5O*dUVpmaj{c3@xcP2KWc=Tkmeeh9XMDecpmz^6$C#cw z!M_FlM^e`Op3-BEP2up>VH%iYQ>U&=?uP}$C-h!EU4olW1#Y|Tx5K>{soNijk)JPc z&kg^CL(`@(;?LAX_>aTN^5dsy|0iqnFo1Uk&Kv(E5Jf$tV%{vL^iTCb$XJrKUu6rX z|EwgLzDkILTNIPtb&HVX`ZPC-1qJ@Suzob%iyRvsR_iy8M}76Os=i))5nOr1ypa(0 z2i&^%r0{&+5m+}ax0h)j15blnvW{H00e#8#HP-7hFlpkV6j{s^V8k z#UsAM?GJ6VI4LPcB({GgHl-huG&%DSiETn5O_II#lcf00w=Z^}yGm3aGLpr96B|Y@{pHM$d8hk1P+=zP1^F($A3f1{~KbYG9 z9U}9Wq{hkcFlo_ZuMWfqesh*PJz@=Lp2J&ZF_zV_G3^e zXJZO-Tva?Dg*X8|f8xV~GXFviOM@FpnWUJJ*P6r6AEbD?ov)&U6g~cYYw_L107}f> zmVtx~?TgH;}oO>vHg93oc0*Ho1Q2fv+&U{P$M^Tz8(1h_`(j z^&}0iv7DTSEIebX-o>?0rQsk__&?-t2>awb>^lb^kEB!0hM_t9%7Eo&Uj-DWSDbju zI}bvONjO?Yd%%sJ>XU@;`+?;ip`#iDHQroMEb{jGEa1*M>nZGn!-RCZ3HM@RjPN;$ zPD#`p;u`ON&+6NTPDRBh^XWIiIKh0&^v_o2j^A@)(Gg zvP~Mez7C}rb0fsgtO416IcM_A=zd!D-So{AIlkI>x$TMCKCBy?dELlHj9vZM=U{w5 zg0E={6L?CaeO*+u<+rajAXS!QWQQ^bco{cuJM}MtPMK7J?_86>!ud&t69eMD59^gr zKCb{Hv;O5zPfdUte!{Z_&YfV@OvjD#>&!Tl?1TcUPPCO#q8}Y0(6zZzXnK02^{%1;k zC$Y;58dD}BRM>}{+f7HGs4xjzu0!qeQ&`5-^J}`jXR+5d2QJoOTv&_h6FtJ}Q<(pu zwJoVF560&f9mu$P2Gdi@($87r#pv%S)@QAp$1D^~;mk9{qxT=FU#7c&MdywvJ6H=~ ze2-+d3sA28QaGDT=srIdt(d7i|6T;UmYkEB$SH(zxMW>jMErSM67C}9JTZ)v*J-XQ zQ4H%%C9alElEAF&JsTrcMX+0om)=|Cqq+aiY0F1VyqG4&aECoX08@-3p92?!v8&?2 zd)e-Mn9}#fZ|FjdQLV?kdhwDU>n)`4KKn)h)2olPOqSrs8saawk~H&RqFeiBrUfUl zrkCk88pK@Kt#(>|V|ylSEYQUNRnJ+>p3#bWp@9vfX^IG?{6T}YS{}D<-C@S`gatEA zIGHi-jGmhpM#(U-b9+~quoD=8w6V&KgG9Juc}Oxd&;`z&u#i?IV#Xxm>BU=7PV6Wt zFI@uND+zXr?rRw4T3GwZ5O$o`~a=0nc4JpEh9M=lKV`oRar8f-B*?whQ}=#4H#IBApuv9|Y6%F@YlSi*S}` z!ihDL7B4na%I2Cc2V2ML-z@hIpt?IP)yBaV^0nBc%{6zzC0Tyi%yA-o_IdEzG4U-p zMr$DwlC%ot3mwj1P+J3X2Ug|^R}sH@iV$8)hqq4vxF9OIhIg&dwH)R0vARtXqZFntY#AGzl=aGcN}}wrxW@wZh}?_m_d! zxci2!X&>6tJOBD}4}y*`wulq_u|S`caW!?D2p1_feJRh5e6s?kK3$E-PdqU(XMpBb z6I+_g)1@15-aiL#Hmrx3-OFB{=@Ib0`^Mv(H4eEkbSF~kR9*~-l^07MCvpN$Az)w+lU_-@TP5a zUbPe|o(r*#n*0s#H8`G=l9+*W3i;<}DAwUFuWq6*+N-=cV@~QvOM*2<6?nd<902#K zh3KbXA86X~1%p=zF(#iXuOmG&%tZUtdG!Ir&m9n9Zk!&6`CDFvTgW>`nKJHUyOiS4Rem0_5^rNTm~FGGYZrBwb-K(SMh^VbHTe8 z5JsHhX`oR#hM;fPh9o-=-tKL?^rUSR7J8I(O>iUcSLtqW_2(JHb-dI$g+BMdh{-#j zrPp9iIk|u8A1TP3UB5picMKT?N*wEF4gqe$&UjWC^`jf@pDN#<1f!=XwK*q;z*!?_ z!&|67`|=9eoT|qJ47V}ux%~ohZKSWaO2cJP`P?(&&uhd5_@zm_9lZi0#*<86AI(DI zqkz(G<677;Wr}G{li_847ricY9KaB9r-jw7DG)L%HP)MkgC``6B{`SY;m3;(m7*pc zaOscJ38Ft_n4QL@BgG#icx=OqeuX6xjKrg*_jK72xIegS(0Zp6%-)@qIsLu~gntQB zzMMjU*@(aSMaM>p1-f2r4v`_o;wjINk02k~w}Babp@Dgrc2#GpHEI*;hMwXQ&Y1$A zcg?=lFVBJ^t-jGOdmq6E>gtN8=s6>2X8PZ$+(KaXmHmva;0|<;kqwI^+yv9{5tY$# z>ri?&ZjOg}2OcK6g?jN(Vd{c?IOhunY)g|REg^3Lgjl@2{a@M$IM{Tk{)j$@A{#-` zJFps<9p~=_`wfGDmkeLDuN;Gp+-}2Y;FvPP_*)025u@4m%pX?r-Cc#?h zJ{x7)55pRT6svFOdr_8+jh%8Kz_|a`%$J=bhSkj+G5y9<%*Vu4WOQF{yPDB|C=p){d{Vk`KY}1}+VFOoW+MieAo2 zT7#K~pG}`NAg(Rj=frAV#K}*+>hxI&`S$E(oh&(eV6{xvtli`w{QHn>vDq5Uapg!l zel?yDLBj{J5(}q0 z@adnq{1~}h;4DGxVPipr1y5Af`p{3ycDrS`esc%Gw4oj=au|Kl?z5rY6<> zUx@$ofgsvP^cNt^zJ9SJb_4QVuG2obbO7DAt>ue65bts5?F+8lX&^Z2B!LhvP_kbv zb)|v;XR4?*y^=|c-y|yXG`C!V2K9~IvO*)^HS3qD{o@7rdWwsmDR&>5)QLK3O_Jdz z|JZ}s@E$lsy6EtQbQIF1HAM#*B?k@G?o{KB2_{Xg2r{GT$A8e`7`@zDbM$$!m52N6YJgF-%Q{rgH@no8TOB zIwW{AKecldu67tqgBUXY1b5zeXkXN1`bBUGTIt60 z=bc`GZ;DM*vQxXEUtsG!ncIll$5E1W_4P1Z{HJu&t`Kpg=6?8!a96@f3Dr{m{0^X; z5LbUnhYDH)T6z1eUF?HCmMX-#%EQHu*lzLs_GV8 z$nhv}I8}qVa&;=^;e)V5a8b-a`WQAd*b@^5&4Ckpq_xSen?P1#dxHW!pGgC!xx-er z!Ml;3ex~pFaNL3D2VKo5{O0TAXVp*(3PnA&V%{G>*{P4FV+_qu6e@d$YHot%c`1oS z(k+<4HXk#^x(5qZnpqUPP=3dL{m}Ts0X(ZWDKqtg2$R#nKbCH60kZVrA5(R{pzYIl z8qOa*kibCff|KDvDuSZ%86{@x1+FEss)@jsJ{*f}d{B;Ie zJ6%zKpoV5DxiZCPh7omIUCRKO$#%sShN-!)ctfS3$RnST+$E zB^E!bb=HC(J%4Sg`b@5^K?BNviYEs0!4t>7F)wJh0H$g?lh{s!@xOAvk>)TD%?$l` zY0dUvcxboG=EYXXlWy;9{Jt5+jVlC&Z_z3W4@OTj0Fb}zG99P(G=R&_v z@LyR92_8)M&H(akLGIF$+<5YJm>70tzh09Z6E|X|3CrGu-@WPF1$_{Y$-gU+z^MmX z4|A?Cd!l_Kg&f@pluMb>`XRikOoCl@aj-o@GzqzgX?)n~>%k&VW=xDC;s!rxIp&g_ zgMW$JtQJx3(eVL`FC9TIh}ynP(m90suB#7XJuBLvLq%AED|$}xxk^dRZ;ruh_BMK4 zrw_pM-0J%h*;R1lw|3p~aT)w<_`68|cpVh7Sd+<~SO8&*+w)HwXTS;Zb2EfK=-%~C z_>x@oG<6L7P_3O2_p*^T~Do0f1k&gHole+5v4mV+?<(O^wGYZU}OYN=+ z;@%PlSW2|8Hvo`otQNet0&P+@OrmF+f%5z+jmCOCBu2xsKz`To8q4Ev^F8(mUj

e~h1yvV zztbiB^uI0`eyyB3)^H2NkJ!W*9ovQ{76z?o*~Y;DLHubB%5m1Z5@ddaq=3G%M=EOP zn?ShHhVt&hH1xl4lKk}+0e>N~-8yj42onhOr@q5ASd#8K#r0MwHe=WwgH-;TEVvb5&0<6-+3C9((zb z{o2jaIk0ULp<&XB=4V#56vcm*0H;3%RgVcNZklv2RBBuwGX1+XNXwmqs?V# z@Ls3pa@Jp%VJ-1T<2WPUm?%P3;Ij_o6atPK8E-+KKg-Tif5|brHI*#fg#r&>th{u% z^b?92J)G9KLWZB7-u!UJZxndlk=D16roXq$s|T0P+8q6+-2hnNTaLzz0zjr9 zc_%Yq0w&#O*Lr-718cVEQZ|XA!##Qf_1_|2N0F`?%a+m@IMm~FwpQ;49TGgn%`RwO zGicFhuhI?fm|eTP> zm-WRa5Neqf|FKJn30e^!ywq8RghM|O>p#fP%l!spnpuO5IV9#Qs0S)+P;y+01cwS; zQ&(HIhT#F@tmR#ybvR1Auw8UWgY%icX!%y0fqE~oRRL|}*v2czl-rNzLCCMY@mDWN zFi$^|_SVog@H|u_uD9n9xa?|WTSreri81LV=L=84Rlk@_(PZQ)KGR1o^?-mg=)X^6 zI;{&W8}fW#itm8uv=mBE8%xFyZSwmc&Jd)la@J^+7$7xaS2y!f4(ea?k5m@?oG z|2j^T?cj3vZ!51{F z2SBPXJ<}jz4!kK0_~DIu<1dUy?0cxGv3k6TedX5*F!$Q4th!Bv&fm@7o)4nK$S%?| ztzV|XMbyXhm&B>@X7hKl7lU?Stb6cPHR?IQ&!!S1`2pnwD zUDi{Nc+_KwH#7ZyY9F448fWHf=D=r@V>?^2doYVm#BF#E@gct*d13Pe^@-o;#x@2V zz)XRcfsGcF_+5tqcj7xz{H(Ntnd$-o|0%|ivEKU(3?A-Mos``I99xRxKhF}dhY9tq zS?Il~xSTBX8RC{dQ17NKFQUcway6xTg+770kFgK-eYXHGAug04E{g!qO%6_SQe3s# zR1l6+<2r86U2z)7e_(&&H7nmb!08)vsb{u9vWL>3UfCqP=|83sxY!EzE?@iE|CSlE zalG{M*0&On_|NWCDPaYf!&ke>A7p@B~e6h=SwCE)XVBXEfpa3kQ5|zxi{v9o+se z*PHsV3MPw)$2X~v;0w55)PE{HP>F}a`ghGFyd=VN-CA`71etoq8#a<*9BYpibHU9fN{#FA(zEO83PD@IEMlm{ zw4V;O=jl?$J`4aZtfVE7=scEZt85Y$Y;WoE#2z<1PId5 zEhc0S!^Y6mcB%i6$L#0ib)Mi}csZx^bXi^loQz5HnrtA!U+)ibXz;ee{N@fFk_i&L z=lIH*gV%(*Qv~7S;OBLXq&`{av9>5V9$wq@lM5&#w>O`VqSfoz8Z%5XwpMTLnI*Uo1$m z-2k35795LU`F4og#?>k_3 z{AQsWM+0a%!esAXa{$MVn>n5`p8^h-T*91K`$2;&wP0`*>S0Qp=lAla#v0Q+AKzf1 z$10fmXVPpbu#s!%Y)eJ`)YOCMbJ;Z5fw`#IN4euzdXp*Vr~7PJs&li#B{Od9E{`N> zyCXGrnrFt+N|ql3e+AOxPqAaCW*HXzhWIf*-faEgQeG^p$?)G_Z9$CtYxh3c4SsC+ z`57&-WkIa#GP{PcqX_1g&euQx;RN>MluV6?vnW<@-2Pgqi3FB=MC-gGpCo1*F*^Ta zR~*Z0KXZj#SQr~P;CrbeA%=zchNtmxNnzf)O*yQePGi)u5hm4-g|H0sGQNZFr?Be` zuf|!>d_PFiEYG^_1ZIFwWORNO!%qH?*T0f=0uwk+#5lCXFC5>siC&$yw<`SDlb2#|&$cjN{qoONt@Vy#_r~Ia z|DEB)KG!n^ZVxeGf^s)(X-9amzzA|Wky0)!{@IYid1Y3txI4gZdVvws{btjqaFiMA z3Qw`>T%yHRA8)a))^7q|seIj*R2pox{NBxLFRKXy!AF3vH3)9@G5V0Ll( zzA579uIeYYzUS=*j^|547#9fGBX;P*#rXrazZzgJ86jYWzEN54s-}TJw17=x=sx86 zy_4z1Fb+0iiKXXne}hP>TfAXB0c-BPFfwl~0dk^mr2UQ(A*T$T9j7b-3u`XrTT?xR z%&pWC?(OqX?1MJjRs#_@@&sMz^FTTE%`Uf%q6KKme6U4o_ZL=cV(kaPO`yS@RD%1I<)n@w2nunW+{|a?Z2oNya zScV;lIFi1!-@n$zO#<)ROqnMo$Yjb?6=WetHCXyTXMlES^p{c*3QiOh}O?H&;8}j%JYpTkVax&tn24*H8 z2<_wcJv;2q(cyiGgGz#WL-04)7j9Ie!=GWoHot2}p>fs@TlK3ENU(ihbJlbfgr4{3 zq7GaJC$jHsUM(jA+5QHKt4m{`qcoPb>QyTkTo65_V@--(6FY6?mp=?_RDa=vBonYI z=Qkyf&;iuWyQ?cVyAE8BYKW5Cqk9tAk7P#kPQ@I(Ka|fAkueddPY3V8ldP>)uJ>2r zc513rvuY#SpPx!szd?Zwjn|r5x+6dPlc(<~T4*p$?~bZvca#@5Q#@DncnYdAd&d6; z>#!t&OX6^C6Q*-}Uh0$Sg4R{uh7S`+@wQa&+cAzL_`1&JjRKp+^W6EFz z8rrn;913KE(Za#C(|kSf)BVO;Q{>Hg&h|a$nAIe_152hIw+>-9%j-PK|4^Sm&MSc% z@!2a)g<=gTe*p0ve+u{94UpudETKt{_&YV%_|~*(@dUEiy)x}Z5UHNPit9gwajSy` zah?S1u9H(C=LwYGF*!&d+UkKZG@U&d>M!>Sk*zy1tRR19+PJIyE_`o)MSoxM5LP62 z7E%6P0hjnPXN-lmphzski_AC6z*_n|nfZf5a4T4&ZY`4;W1(2#ZJb>I+YihrxhzQW zdsH;uTxh-#czj5A!h9UKM;-0=P@=(oyXi`_>ZT#rou!YpHmktKrAdMDdn3x5(J-xE zK|cE~h3rH<65LyOVpfQM4cgkz>VMI0fr;(BLx0*xF#ELE{GP5$&^9LebJ*ivC~orn z#qxt$5L$WU~tfVBzqpb_wKFe*w)F&r&cHeBlR^nScJ$DCG z3pAZ*dNKiTF?adB&)5NrWsG+{E-ivjz4H-?zo{^#Ur1~SZLn`tJ)?kgB-P12z+ zTLoNpx7_MdHehex_Mfej+i)dN^4P7z1F%)>ASL_&<-#Xas;lp{fQiFJDniXF7|I=O zV^i6HT$Lx~s;*9e2Xd0l<#YX@#VW5RI=T-pxpgVix@J@_A+O+Z{9vkxTd?W zX+naF$W*vSIW2&Ho3H#?>gPbrQOYV4bUKMYortaw+@yk3tmv4-Av(#0?TW1WQL zbjkknL;|LgzLP#GG66!=@0K4=orPQOmqiYmN8v+$$uEJDRJiK2vFsgoDm**9PtBOS z8Kg=J?fa4vL0@it*IRzXjdwkv!bw7cZMB55{;jP7M%Rzn#lkiaUrHs?fII?M7mPcA zMgd4o=y`HX1?A_IhfZn65P?~;BTqErI1D@a@|n)u3Oss9c4nc741f4=F9zi=Kn$tW zvW9UV%%SIZ$oda?6HOP(6<2rQ?P3GI_`A#CrSQpGK4SuQUGgV4vGWVGHBK)ECIn38 zKko5&4f~*%t&?RQaiMyYH2-8@T7-`TABmIF5`mWS7VkLfo!^V+50~uN1O{S6+G}!c z$X{~NTF`0{GOPs$5217ETH&GpL*&PbeZtO6lacNGUNQ3vVFS zvjs0$5T3rGBZ9WeS+P$TH-VAO*9NzK8a%+2(ayLJou3PzhR9zmfc_9~hm+f7u-aN* z?{C@x_$%AZE_!SSGBS&YeM+Im%zt)-ek|L77jw?HZXk|jxL5PcY&yzk)2zwvxsu{Z zKO{u1M*aq?tyP4E=wFa2l>1Q6suo7!p;+9n8R(tAbH$;!9ZJUYzHjv3hNPkAiBV~* z@biN>_Q0gXfO{JABk9|TI=LFQcZMg-#0J=jZgO=rixd%Tkf z+1`gvzw^Lj*ERSes)6upoq%WYo)qUNA>b#CT_(LY$S}1B(JKq}v)~@bOtJH+QP|j> zr>)~N0^)xBXY7Xj&#U(?Rvm7k?9C!1mpItl z#sFUaEx<&Q8c*hP{oTS2gRp}^-g<2qIxa;u#3B=(| zqT7e|5!!$FNx`SM0ZMPc3C}+}Fg=dlJMZfX zY%0GPOgQl#Du@TDnj*hEwa~|9*7+UC{jK7764yN3)vwyMV;Ba?zg#b@ZXl0&NQsa2 zDB?m7O)p3KwZI-{>5;NStHf@7xJ1WFvij?K;8cWjC4>AwAJ6-*{gwo)&Dn@YN@&a#}c4Q;uR@u>SIo*s`_P_=>29hL;$&&K zL|mYz#+z=v;k_XG7k;M{ttMEmfQw7vt5Uy~0oQfUjDHuY@$`Rz&e6xm;a7#?Ig7(( zxZrz-gMnrpjsV5xmmRZE+)O-Cnh z_#dDZ9H^U6AjjPu_}usX6M%Gg)bulm=6n&^iv5T~^X4|8(=l`l6kPuj=E0AA_5lut zCWVPWTGZt}E$0!;_g(bZNKqR+;t-_{{MJB^Zm5@G+cxBJ`E?}P;ycI}(alw$L(i#? zVdhVr$58IU^DN6g0dJ%}MSk>LFL?fh%KjqR6s)5DOd1x5gCd{hwR1HK!2GP`kKZ|y zVDM;egPJIsr@IPE)arCYKX}lpd%79uRjPlAV=V_Ky!qeNO>M(KO)GBw&@qr^%Jy?| zdJCc(_1g>GV?cYEiD6E;0mg@Fj_lTx;P(@_9;(JK1H0p?Mtw#scy~0lh(-MddY@6Q zdm>Q@zO80)3$U*Mn{FGUpFD+-H;!KU1rxf@U!AYAv5XxC$46o$7`;d_ z*=VOux?BA~*7H;qPuwcB*qP~BjhhEEk7pk-qg+otLG$P+n&)}gPDNX%jRRVRR8b|_ zLvS@K_CWn$5Bby^RgRu5f-Lci6-`&y!N^%6kxOg?+6xpXA8I4ceMo0}^X>x36Ckry z+Fl04=s10=x=vu!{*)#3JL0);PrmH=UIo3iJn6krFK|^_fr`A~1GsNOD%*gbgMPF{Ai4 zbXi`zbkcGP-nKIMkLJ%Bs23(xptYF+Wv{Ya-=TT9$f#$I#GQF?^u4%x;qP$}d9}4o zzMLF)uJKhM!iOK>Jh>P?q(B^2}GatR#!3!?+OT4GjzfLm8pKYzJ9 z0VI$83nimz2ctoT@*USHv8BqCOvR)rAb4GBEoznsEX#(ApT6A#zEMUCZ1@Vu?yXD{ zxX=w>kWXb{zMC+70~eB6roc%g=fBKf*#(02(>!&O(=f7@rf_1h6Z!;4;scYt;Iy5j zm9`!Y9!nD(Bm9sACvTA4e&o3h56tq=8#uF{H2^!F;{ zZlDVEDP0HJy=@W~t=Hkpv`|sN7zw(tuguN$^Dvyac;!v_GFT7boApy8!&itQ`~eRU zuT-r*VVZsq=xy+RSEg8jaUb4CA9Y@Vj4Pg}sdneV-oqZ-muvH2=+x-Q)a{2 zH)Rd1Di-F^t5D+x`nE-^solV8uCFC!r3{#68`vj|On_kx(pWjfHB(ainy&np0cY1R z5_#pF53vqT|4ClLy{a{4UFPZASn-M>!(b2e*o;dWBotbfn5%MF63mW;YDkCI`h z6DnA!MGj!-{Tby<3-tGe$7cSwH44E2S$xE|UU>DNu$hR|JdoXLsB;M41+>DXA80Ms zU?JyPnXfAa{(SpFeb)UAsB>H7%2wwFh)z~hxw0?`yW7%@&J8i)&c;-`*l!BV^ITWz z=VC_e+ieO@=E`lb#P)8ZMq?Jt}8o?j}frSF7(v<`#MbC z3Y&`XoP-SnXG}Ba_CeU#rTe1+d$4q3O;sff@epm+V=d5q*UBJA>ryrHXZfp$xX66f|LQ=5c?B1xqQB4`ep7;x{l z_bA98{s8sigVw!O#7ar=zf$J{k9-}0@8+h2zP~~~X&Jr4(_@D)pZj-vHsSyt zc*XsxHQWWxNiw_-YTMxaK|+idJ2j?|_&TD)q7E|nh;P+4?ZZ2BvJHOy`+!xsrBb?Y z4SqZCWttMd4ZMFxq*xX2K!xcd!aemKFk|ih26(bzC!X*J={_ofTy-S%fqnJB!n!S+ z6+M??ue)cQTVIDoHdfC{ES5pyzDkW?ODohhI=eYf4WUmif>x{So>xp20GI!m9>(1XvFGc|w&SF@ zUeks9)Q4NpG^Tz->^Ft?D^kwufJLThWE$w z8Gltx0vd`P()hGdXqqhX@rus`cwcDhJ~=lEbC2B4=Rm&?>(AUb&$X<9Sr!&-+!T4T zx0;C0N;ZL;bWd;Y&@xE%7kl?yXbIL5`ky|KCc#sL$rH&xb^{@&S2i(MsIenv);#9~ zhJgqDDveZs7uYRccP+Pzf+0&DhCbenAo-*HIMHMg&Ivt`EE%4LlGmL+lT~cMDl@U; z#rIc1d&XYwy;>^FDc_qzCZG#E-tp{qk~;v77oP|pApe)&xS|=btAYQde8-q?tt0US zrxKBA1Be+Kr2ltyA3E9;$==ML1BzKY_0~(HkjeOHgQD1+bOlxATCm#dd$}0JhaiXdlT&24Seq1 z?e{hvhhThk{$l4mG_cB%JNYLcu)i>yA)Pvetqoz1+1WNgDxY8Yvf4PXo7`zums|!H zUY$NH8yZIEgUz4cr-tAcy6xzFMFMV-COUucYY%YJ#yET~Me}wB9j{p`A|So|qVF6_ z8}O>?ez_h>z4jYw=S>;4yRr0@cP1t8`EPfJ?SgJ>D;=Z z^MwPjQtr-1Nj3zO064u#;gwC_ycudz}VEb9>fcq^VEX&z-gDbgg*SABdaXa5uGBYpa5!EbSwU#BtL`#3o_CD-@>m?p+_Ie~3?{ktDPS*dx z8^0>#%iRSm0?KKuYXmHTfh|(Mat0)*K6KjMV8OHlj}wwVGGY(H@{Wx^AYi2z$nt$J zqn=E*RY=MwN^ELx$5t$u6Km0!n=9dC!EOn89aJA4$0CK-ti|uMV3TALG1g&6v83fW zcWV+sEZ=AF$m4x}EY7W!Z{Ak`%M-(8YS{!aixS17%4Dao?5s!kCS^`y67Q!k$Z!Z@ zp1kV5j$LBdu{H%V*$gp^aD(2eyZ8jg;IDm(lv)g%R{Uh+Stf=V{(Y15=#d!q_1^9g znN10-_*!!+W#kD=lAeb1x6NsckTrD0j{OXFZbjh1$aPUn@L<%n;gJNkQ6`X8v33%p zK1c3qt9A-A{&C3razhM@Q9b7_q;vw~NwfC9arFdtZIl^~7>HsTtL9bQ! z3_h$R+>o?Qfe-7=(WQ@PK=b-XfoEhkxUh#@|I&269>e&bniQ^me;*#=hnJ$E@~=fR&wJeIBYqi4AMUj@kPD0=8jVY^$9$ za5LXLGf$Qp3*6*fXqaz>$~U?bmk^I*{E8Eub>b4t5y@1jokhNo_9l;ve?*Xb=hc4m zNCCXKE|X;mDe-Vy`bUZ`6xg#1+IQrmhoNap<+E_3ZSXBD=7>w%0-8gGn~w=^K$#Jn z<1x38x97npU6J$1pQqtX?^Hp88Ei%gd)%yr;gP9lgP)P$mU?q9VwG6%z(!B1A< z2Ro^^EN*ka;>qJRHzCB!CvwfnB3|wL@wd6g;tS9&L_FS#XB=uoVf7vZYmS@fqrM~koccDur<`RafF@%ALhOLQs#4N6!$; zg^G({_w&QZ+i1>pnMbV`Da9aZfd7RnOf}Ho#;M2|J(q*cOI&S&A^4eWq`7~T6yyBq z_PQ^F1QWbo^XPda36^AHIDZ7qg~!`}Nj^b6kTZP-#LW-C!H~(v^pPMUBq3vcXQiq!ilRU-JgLk`s*e_Scjm1ab{hu5e1(901n^y z`3Xoy>JeiC!W0z5-J_0b&V6Hb28{{)9O0X`u6t*CYaIMvkfQ}0sX>Q+HKXKxX3 zFZoHr?K@1E!h|(HmG% zkMeG}`VyC8MghNeJ-gMt2}tr}G%on=7Hqjof5Et=4Ng_am%=Z|!&w{N@2X6S^ED@3 zNvK!{4M2p@U59ww2e*IPko5r`8>s{FyF_;kJ+}Fx9zf^z zt9v1Y2v4f9Gi)B;2SSqS{^^ONxHoZ;>dLic^uE*j=Yah$NIu`Tw%Rca4GM*n(tHW{ zjnnF}hTWuiuQ~tHR{A`g;q{7fF=>ZIu@5FLvbO^EQIFxzS!9?oOO}b0AQN`<`kex{ zHX3}kv|BsZpc6>O68o-dAzu2iNUK0U)I0VNOSlu?3g({ukD~LA$MSpQxV`rXp=GZU zDU{AFAyPs{M4^m?QWB9FB4w09-!e+}-lKCH*(-Zz@A2^1^LKv#`is}&xzD+;>+^ZP z3q&3wzx-2v*_XdAt%E}Ej;7~9>u@Q)O^My19e4}Y`9^)~28q$<7_a5+z|%FN_ulIf z0gaJrHSIl8ELXN^fyZD3o@4tEWlNZXVUH;9FVOFRQ~_a;hM5WQv)HGg5b=!)83(WT zs;+ob>tHAO&=1TO6*O8eRCU;hEz&CReIuHWb!=Vw^i+1N58Mn%;)<~LWkhX z-y1hV&1kV9sg8?UVPilcqVz}EYXqqk`xWFPgXU}BF4MkHX@Q`n{i4I@Hc0Mu->vgS ze9pM34H?^YC^X&ioI(Ep{LTt7SRALu60YtEy!vwhHu{5XKb19u*{|mB&4i}GvPD%% z`|){{GX++6%n*l(UNdqeaRdfr3+Si++5<;a+a=GRCc~NNbyu%73smubX7y1d8z-O~&8^4Vv!DH6#sy7>s|jdy`b}A z+=4rKB7xkQ$jkb`!QQTM1a@Nr=gz-g2SMF=p+*X=;FVjAa-7UKn7|DJotbFxoAl-2 zVi5^OzCH7LNpTtw-_{ODEfb*D{M};V+9^1i9x`k#It4#H{-{)ecSAObaIB^80P^K$ z{C9hM96X9^N(oBc0klfTZ>!r(!oi|(4e?^szcF!SGpOwX>L>KAze&YG*=qq7=S7?0 zTH4&p-IINgG;C>yr)nD>fA_fZH_8d$(Q=8E-Xg*6yC$!mK)zB9%hX8Bng*Nqjo^@K zBS4TYaw&>x26kR-jQCcZ2b@}gvP!`LusSPtd=GJ?5RgdEDU=d7AMMvy7#V>Yxg6IW z*w;X*M3JJ0ZzJlH{@LsPH3=zpUuU0MeFrA(Vy{-9evIgK15h_fifL)vDirWeLmR`N zluzy*LeXKt*Be`_fadL`FcEwf{xrVGl1WdBy|a8oDVe(OxFg0Lrnb5JHoAy z$2nELVRRdsWXR29DCc%g?LtMt$wv5}U|DkO z)~g9htabbKL#e$X@IL)Gap?RwSO}Eht9`Nn>bW9D>z=d$jwm)>)&Hn)k{6$BW1R^Q zYq=S5!IcDGJHUbwZmK&eyi+Juonv-{VCMGhV(<#d}k61irjnCjG~!0nEEQ4POjJ zzKgq<0vSM_yFSJ9=`Ys-*+rkJYjabuK$qlBivlHf5YNXKH@6FC$uuiiU+%$Y++6o3 zAsO~CccsvB1HEUG1FGmAYU~1My+EfFJ?7Z+`u>sv13pwJsJahkVJUm@ryqWO@Wx9v z3R-WJM>)!>EdH_%$aZDDl{ij?yY)Z#lZdUt*x9}FY zx0=Q{{$2)^-@m%(tM$Xi(z82FNfD$t=%kAU~V9u$SX75u(u>PL&*Z$>g;4fEA!i)a}U0VO$ z(o;T!L7M81v|b}le5v|umF5Uw$X^R}9he3(d3o3Su~Dco={^u}iyXgl_GH^yI4$;N zr7K*sAMvqY9xPBLw(l0WIV3Mz5z++m@=P~4Ivap< zi)%*9FbN)XmLv97?IP+|&iITz9)Ou@0iOKm|Ljwx??W}lZ7?Fx5aTSk3MS?LTWw#i z2hksB*EutGVW-CWVLBh`ryt^9Dma-i{|dth4U|`?TW>ZW-lW1b$|>^B`s{%AM<DHXfBf~_28K~dahchkHmEmcffz9CdU?yiQu8*Ys{;n5Abf>wXtSS1sgE? zY4c7j)L7J7RWTj|k@p1-hJ(ssH4|gv*;K?`z9QT9h-(JK816M?dF_GIB7fO}ok*~| z=_Y&>?sT~E^=z8=9Aog(yYXOeG}phx!fso9wgQI#GxFO#F$sB@1zKQINxGQ zd-|CQx6@Q)U;fkwLnBpvTgA%XBv{me1O+rd_!d}4`Ek5>&q~LzY6f|9m`N5pJ1RK|$J3TY&1b5QS zk6!$a_N=o$nx4p8_hdgzVDKUZ&Zw$dv{|(U);P>23O=nsOG4I>oc$$`94GFf<%D?a zZ|7A2xaA`EX zj~dN8{=8g!$W_w;ZldynIL8#c`trtrw9yy{;I<|#dG7-K$lwMG(?b~YBIdW*KXM$Q z0zMweS_A5{J8#!ezk{*w^Q&r(3UDg*cnl*IGcKH|BXsMK8D~w8yP0;E2Dgz>{ydGm zKmYiQ%BGD6V5c(+Bp=-a;xYAFf$k^=d(7M5j7tyn>^bUkLbU@p$O#AEy1fJ3ICusu z(rRF-<_|5O%MiqLO||x$py!OCVN4Pn0G&iKt-$|sVR+_NW7wHk&>9KM*UpgPf{mZ6 zZyo;)E(bq}+6?Finc>#I-vzJ0m`WYJvfDu*m_~ZOF?a{WoDe9Gx-|mC-u#%F|tW@fPTG%nQE~M~(4r4G(N}R|A@h!Ip@F{tGz5pozRop@mYD>Gm1_qK+!kS)uS&8Geh6Blgip_9uYsMc*saX{RX8Y{ zDJpJ8hU-;LWJn^P$)0o#vx65I9`u#jy4$=5E{XDvo1yQS6f33QIkF8P-Nx3ybuyYDQC)q= zj57|2y8dQbhOZuMe^1du{_e2FCzX+Vu-)v9k|!($3Qyp{!ax9!G_0z3y!C&NYNnId zJu=*Ef4uOzH{v6*HcombPC!RF3cjUN>p+HQu%YS0FlbBr)@7iN^6mfrFrOEn0vnEz zVN6}afM{{+;FjVB9CG*n(dM=Xg3B!8{83*wgog~j+mx<2%L zwYXWN+X?H(x&s2^$Z@#2^Qu;{7P5OLp6KR7p56-*YgQz+fP%h0_Oj#-@MdlMJex*^ zQO^uD5o9|Nm(x5l!FdXv`e4g>%X0-d;}3UCjTQlsE$hB_;U@SsQ?12gKLb_T3^FeY z?*Pf-?0k9l9dLpp`u^d{D!4=a{P)w0JwVhv*A&A&0*=Hj`c(#_eT|X8(_GZ+5NB4; zYMa~!esBLqE05-Yl%mvgy&=^2Wk#qI9MJ<)mD&cy*R$u*_Ozco!xlNSKO`bO6tHtaF_X zOW@9B31|NC1^B+2=g}+lepmA9%Xg-XeV9Kw^6Ny-5DX}M-e}Rk3dquF9=#as1+NCa z-*Ti~g>jmRXd+w zW`%f1H6KMi*I9R&IHe`%NXyN_C%FI~sj3`#dHWDt=V)fU`kWN+r~$mT0dw#~33n@( zdN_2tL#@hz_9)omf#*}a3~>jlEcNDlz{tD{ex`34Ob?xE^GTb4Zk>7s*P2%$i;@{e z&btf~Mcmal?T9coqLfzq9u?+u|7+Pb0?NNvF)tFr)=ohcr`?y@`yCzDSVb?7sjssLd3Sn} ze{j;{An=tWbbHq$65jc*TgihP8K>6;j;hd6T zaOydQY_j+^P`_iZmo9VwFGB>u4aOiX!R2Kb{Hm8wlNA=%UjRgXe^)+l-vZ`FntB{3SD;qd-zT$ZuAf2r8EP92frMXT z5%IUlaq?Si{hA_Fn3oT&PqYOY&fVw6GPN@bvLLvz^h4Hw{ce*tlP<6n2x9Vr8q zX`L;v)0uD&hYz#a+*^QbvP^{><^#ff^q?8wIWcd;K1hz$8!7)< zkDW}z<8~Ux zQY1&ov5zk@0-HEm;K4?^IRSBf#Xea|CmrhmhCi5kr%}&^P*rqN!JZ7ed-SZMCOXH) zUJ2d~X_^H|*~Ru@=-x{lTE40(y92vl-8lMxuUW~gknkya#H9(TY@c%J1Bsb_Z%+s9 zK$6^FSSfD|C{P@Fw{q(Mo^OnuDn@f6LBr`M#0=!Sv|fFvg>rCOeC=fp_%hU;u(ylQRs@Gzc9w^k|@{UEQ$q6yvOZUPh)0) z`@hOx64+|zx2MwmV%Ra7NX4_>QrLdPdR#t@1jcT-N+q`~g7II-S3FN8hDn!~TM~ar zU`0;tLUN5Kv0~vy{%URk?7s)}_XXpHvB;a>DDK`phE*T)Q8f2ej6{o|Vyy-aIm{$W7nJ+#Si(N!%*=|?MpCcej z;H#I-2rDL@AAR_ucN*UJ4=XGWMV`1<1BKTT_Q1t0sGt3K6UKiqsw#R;gxlY9p7Zz< zL3dj4!B$8=WMr$^Q0OJce{=C10m8qaT1JUYL`yR;t>0>?YuSXKte501CJ(_IW|G*E z%qf)TSJkc`q`;S`MLs=T+y_EVkJcpw5tqq7LwbsL8ukCCD$A$0fVlAX9B1+t@+92f zOO~O=e$pSA%;BQKs_I6lweBGASt-NgCn(23W!jOZ)K~{}FBm6<*{pyW@lWwpH0#h& zP&FYA+XtSu+qs`*5dV{`V7g}%&C|}r7SNf@!}pbeR_SOyUv|LHZslJDD+6A?TsB2L zrWE6g|Cz3XQw1@F^P){a)*^b@_6s#mzQvZKhxis>OBgYbLyf;5y8QSY<0@ETdM|l$ zixxBYxm_uD`2f6DCY!v%NQ1N4>lZyDzJiY(U>O->edvhtV9XZI^A7V+-*KS+W&0HHI8ye32XWq%zS9dO^6jJZ zWIxU#zaE%qpCeqPCdJ3i8+3`;s6Twn$8G0*JD^Qj4Z1*uIMPlE%Dv(1aAYI=?#G-3 z@WkcV8JnMnAm1e9J_+?a7<4kc8vAPvii)OurI;YY4Wd2VitEOpn8M?keR&EjT4Xav z;q*FO4lC7&yT1vSYG@-2kCI@oAN$Mrx%Ghp67i^|CL$<~dOxK;y$|16v{9PcRRg)> zk`@uRbodh|p;tH!IsOQ@=Ff3r!Y;4#A3SlT!Rey19ds84;2p(}Z6#W(pt0?aFG&v( zd}F+2#dL=RV<#TIG22^&oOADFENpt=i@90bDw#R(G|fEJ+i4!amn!@Ca{_d23c5kO zHw#P`6pbS9(qR_QoPNaI+y;Ntlq1cJcYvV+b`6_u(;B`uwrLl2?aJ!7>bDPK-OuQ|qB1uY)r5-Xb8}yIC`o8Nnf;@kr zH0^!Tr}_slL!kHicsmh{oh&>N`iC4FWcpOi{%Q(7)SG{CE1U>CyWDrb{8$9452Xu( zcv0>}Ky2K(uph29O-dXHE`r&`=aXYeBv|HReWH^EC7yGnO;Gex7Ep>cXflpif>C~5 zznCQ`F`bvTKg7SIT#L<6_{*_LAo0h)q>E-9EK}?mkd~3)tj=C78PCwX&55#c$d?EO z3n6Uun=r=8@(L^jC4wa4|&=kY3A7J@2;q~O&h(h z?XnM>DW%=7M)tx)=5Xa7MX2vCb+So;eg=G>7}iUypu~EzE_HG<4}z|QI!L@Z4?i4> ze-YHb4Wy4oze--6gNa@hVSe}j!PFspYf0V}$ee8S?cqv0{N(#2|3GRK%G7sPP9MoJ~`$oti z#o7B!56Vt#g2u7y@b3^gPBg&&Z6hV168qwdx%?aW_So@wI+aBbFR#)lMkR0T$u;MHv zGtd6#umtZJ_%hvgT7uDZHuYMPWOyEJ=`v`Z1=l5oI2G#PBD6P6in7IA{bX{OK$AH4xGCntFq?CtN2;ivlNyk-q!+|#~75h@&;i;#}&G2!(FKH zOn7p)cNYd*#DDO)j6789G0$rCkyrjB4`WtkGi0f_fi4;_W-NukN+}v=fQ`Fi@A?oQQqd{v61KFIgs)^FPjG0IG~X4ZsTlr zfgWa5OLCHAn5m zUnjxjxi3}ClKz8tqy8g!anoRx%;u`+XBxnBmK+@&E>di&*)Nnja}5L}y>?AXCxS?6 z_m^)DNU*(M)f60v%hvz*Ih)e%6y%~+YP-<02cZ|AvV3Vu5B}=Byv0jk z^zsJpo>V8eyq-y@H>Je;SjwFqqx)iT1@*h)yCgU{pXsG{Ijf*+{ag+1cnFU?SLxi- zqQXv(=rR+ihe7BMeIbs7E?D?_qWPdh&Wg)$ZDLu7vgg49nE_5F3gwZ|8BI~*XldW^+vH3mF4~>+VV`*@S$>LzRE7@w>g3saj1RO_2{)ailZ26t9fMv_#gjZnHI{2S>L&`Zx&JnWodmQ)1>l{|4#U$bUq6nsy+HO zf43VrI^Uq0wV8&wffRSN-v33sap4~nj?B197iVoP;ydlM1o8QEuE3z{ti-1l8>nyd zO>XKz55%Uu)fLfRmp`_A`8`(_tn-!C=WS=j3M~^m)Jch;tHpy8f8PWSDtDM}Ya#EY zo{<|z=?ZvIm!tM_u>)@8+Vf%j+i+LIGpxUq3GezadUZ{B4ibme7HRDF!EKBX{#+L2 zhc}CZx9=Z9&n_>z+7B(z%h5ILW62bpxW^VJwD=Ej{?|Qy*Z&X*5KRm3$DsY4Fk5?A z{4nwl4Q_B$BY)no^ulSxJ6aJ}{8?qW4`oOK#h;>mZ{upzYOdZIRKb#*>F|o&QHD-E#c?%RNbJO`dlHkcES{}{ccL4A8 z|7^)^kryieUdr3TY2Y_%5TC>}2a?Fv5{(h(Y;w6(u3ml;SUANiYiki&yT=ySF@INVf*gi@1(5BaX@iS`3r^5!|m;li@`G_FLRi1rR9as(4pO{Rzbq13z<9B~;e9b$?Cl4x zyx)JOz`IRl--oWK=bQcHCGqh;c;bYYaO5ol947x)D1bb`cK4cs$oqG}Ta(hqOp0i~ zrJhl06N~yl+?#g67Tqu>VdL?$ED~H&&Dui0_Ae+|_|B)ZzEnf%ZWkzf;T(hWW&9yCL@hNu#xS2?)xz~GBuS*xx5SSm^1{5ZWhC}x99rh zM8-hnHHEK|&sV^Gq2jpEjuzj?iii4rp0=*gHw+kZUXz>4?YWOC}+cS zbKE479CP#kss_NO8FHhFG=>ll^{$ z^Ndj9r(4WeT2Byw)woR3d&IlG-##i$i8!dy32RDw$hVN8ab)q?HWfBA?$vrOkObdo z9LvZi5`az-kvoWE78o?&x{8+&06BN4@zOmuT)J|P-W`ttqFs$y->df^t6P;LizOqL zE#=d>C^QT5;tQ~C1GIPeuR`w(%>j5IjyviT36Mc;?cEI8>r^^Cp9n*ECP@pq>ZaTN(8Y6Hh*ZYE<=;{m;6((5!jzSW7@zl0i^jO z&gY&W!A4UII8DPgLDX|IF6*`(P;d-qnYCxYl$(jyHW;^Irk&u8>&o7+)$fT~mS_?5 zeH0)h_O}yc$QUU0w)R0nuT?Y!$0ih4Ca%|`ys3gr^WF^Q9Gp(_nDa&6lCc*AE{3vY zP_$HT?SoGNYcrlY7MD0+cr~rTa&iuEZPqV3^%CK{)J8_L^b%~JE7ZQ#_78kNcp~Ex zg64Akz3N@NV{o|8z=gMd2P8eJb(=tYl+`p*rpps6a91)_#YAuy&~RTkOQueQ4NTkL zLMJ!jQF|-VX4w_s?sP(kVSNuie9!!O^ui$cRFs|4DAx+|>c6eU@l#=0!TtX_9#p}X zgh0lM)K$Rz@XmQT)fq6excbgT8gVe~^<@h21#n$r>yQTZ9hb?)_Ndglz(=p2&N~uh zSjc~AN7W68z*nQKj|J_)xR-OiJ6Y#|?Yj6`OO`Egz|%3}9Q+sYmtXjm{QL*~|H)hJ zQ%nO^c}6R?)pnSXZu3UKkP_piePJl{aUIgUU0rLdK)H}A=X)yujl+s(0dgMh+u*vK z902)MaB6ZcDB;>Dv~Zv$@$OlIChn)1(+IV|O2=eWT)PpHXYPs&Fi(QE`shy|w5f5^ zd!dDwn8~sCAh9kEy=Mx^o&WF5ttp^M`gbXF6M3Em?=FRf&I7hbX3`7jeq)uzca?5| z5|0Xr{qQ^L5UK&if5JbPp@r(*5f-Dr@Llo+3hh`j{1AR<<^Hn{7J?6?G(Jtk_3{pu;=4_zsDq)`R2bt&I|t_--kwW_WOt6+=lS?7o2s#OOK;D~oP~N}Ro1#ILI&#!-ldtE=sKK!sT~cw`sAn1xd%JIH)mk z^JA6cRSei66aMMZJQYUc_E>wkiUqUS{2afBI5pOisfXJ#d{|Mu97CWjHx~U?YO;@( z3-imwE$}KqEG4rISN?Pi8=KZi7e&_jagy-7O_XD2f4!L0`bhxmkQE^qGf7~Kx$k22 zBt)@~Eyt8@vlidh3QT}>q%Xb&tt!TJ9G`#|IHtg9B-MW#NMMS|$ zqyfk>S@Oi4-2x*{EYV@Tl-S@l#o%?TPGC?c*R10B2h@Izx{JBa!i#M_&O7%A@N92c zs6Oc!>>yLU#KboQzx&Lz&xWKySl;?*J?j88Jg)v&YLEUt{vo-x_6e{mpLy^A^<6K% z&VOjCF$T|k%?rKoq8;>q|G;0hwgFa8Uc4MAgZKqH&r>ECkT*TEqQ4;!<+=+jG}XRT z!Jja2lcJjz`(+ly;emXuC$VcD-Y9>$Bd^p;U?#%4@7>b^35bs%x1=*(u?s&7r^YXb z#zJ0+TEd4MbWgSzCuAa?hn&<+<6BzfxU>FQGYtjAm8{&e4D6eLXFg5ZhRyT=&#PK0 z20v>cTU61FX3l9~!K7K+%Q^{j4Bo2Koztc3!-y?4i#P>!bH)cNnc zjc~e#%Z35vW}0ui%_gCoYd?Fjj&|N2WDr(S-{#ctxW-5t#nH@bpja4Di=@aQVeL^48fX zlkcegfwrsr&stF5z&}Xv@=G*7PHOVfr=udr1C3Z8ccJ~@54*5mP2P+cw=BPtKi3NK zg;ITs)7ya`=OXU4A%6a#sMN@$-5Sv9qt9f>Mt-d~A^#|!w!q8mCEZ-Cq}X-s6vLyF zD?pz^Of_I{3Ct7~)o=xnVtp6v$-g+$;#c1g-w_4dU|AL!Tg??B=uI5*v;!4j-lFQ~ zmlO41%(Y?UY56=nIYXSj`juwq<7X2BY?yPkI68M028jQ;%`WJ_!8|BfOmKd4jtsYcVNPAYw4)P zdN8tE`y${i;*u{WIL3dbz{3}#t(%D}pgN#tSE!r`d#^l^RcuCzJAMQCWd%f-ZcIYW zXq*MdV&yY4)VJYJuGhvwKJ6g&!kqnv|I`kWu;B{*{&M?6#=f~U`YGVHLXX8IE9S=L|BE1z)N1oHlKZo+}v z(7pe@yhHo~7-VB-Gdw#B50B8CPx73Enl2*(Ll3rLf~~%q_`6bQM-|BX)0z}JZ+z~! z`P08p=lpx?qes_3+)VO8eRL%l3+*f7eANcN=tl*}@v-9>?0-`0>DOS)+qCEIhU@UR zJ#8p38wMFt&0^oo*1>-%YsW+7)P3T{_XCym3Hi);aE zkQ!SdEMAdD{G~jS&FM+RLz7oz)B1pV4q0d9hF#5CVQ0`R&F5ptBV;rr^t-$R3ToD- zY*;M<>2^wns_XM`daopArfmycpnRZl`ZE=_zY=@XwrmctzrOc-gq;H0u6KC-t(g@6 zRX;A(vb+Lhw9KoU4kqx+>aiF+%ei!6iqcodBet_R10Z|3T&yUR8o#-g9@2V@0Jp<#Uwd>M<*OLHn`-?@@bg9& zl>NRSj)v!*w#yHPpzG}rFJtEeFqHGp*QlZmyxwFBXa2GV^}ZimKXZZriT~7Ehmena zDS6k%&!_}$UK8=TW>p1?PrG+FG5&?}4+lIxo|*s)pUVF;Hl6|DslHQNiKD>2v38Bb zXc{t2czm5MoChn{p6V|#5P&0C`LCB{8(2~7Qr`B@?$d}?Y}UbcolV%4Ir4khD-pIy z`RN3$4guq4lc4Y{)E~c~mK(X=4PxS_A6P%ygtDKyr$S?=z<69Ur%v)X2sXujvkj4A zp3*Xw*HF(fQfu)YUjX93-ROAOph$+9<#c_O3Y>sk%j)OsdN$z|eM-;QX|ZtVm(ukU z?J>YOfSRXgbPABZWs#gk&+U*WRmF4Y-fnR^bi$;J4EGm1^h2;*z`S5r^BMJJPQ1C6 zSD@MfEuH#JG%~AL|x7gvqcy* ze@Xfw&oE$Qu{{+RkLIuq1}1(c4Z!x%-kuop-pZ>C(jAga1Bsv3pGYZM;I}hZUb(4J z;-inP?p)RV196KeAE{SVxG*EVK#n0LUSm%`b8@l|oRAh(wa;vaxzQ&}C9Y0`_#tITvkQkU0sO7anN_>mzT0>AxI4g+aiWx`{&ajF?`ce9BVZH2hroPAHsf5-4VN zhpk=ShTTlskN0XxFu{5&=LXtV5Mu0p$SOGxtjKP7Sr0H^@gXN;N)xx>MUjrbuI8(- zdr2|cfj9-Um=`UMji zfQ;BN+LQwVjOFQ;|BN_w?2U_jx)P-LZxTbtk{~K<$h8F!7{`FlCIk0$+A>6comB+| z4W3Io8*zz`1}9G%rsmN`?|HhMgq??-P$pB@-En&t<*nP3PNV&*?60XDTw?$vke{mw zNku-lt(-94OAAmyP0mfvXAqS9*kZ!z{{ok=ff?cPRzR0*uSW4}9{TpQvkjXNVH8My z>2{eOH!=}16>gdYlzb;$tPpQUd2!4L3na(gqA1jp4=O>H;AOV}Jqp|}x06Bp3jyG+ z*Khg%S_OMGo4=Odk>GW8=EtKZrXcqLd-ltZJK(9A^lQiX4$u=buUo&sf=}Q3$ij;J z8L9N~L%W^pu)vXfrzsuz3OpkmC}b#bO2>d$X`)JleTYd=w7IOR#?P9fcVoVicyjOxRDS3#F{9ozUP{f{_aHn2EVl z-PI4J!;cow+YXSg0QtR*kKEgTfT5m+zkbm&$UkFTCeluZf8jS>Zy+NAvlf>iX5%ej zlf$E8gZNl-%odWDwdt@HoxKW$j0s3B?!td!oDMJAl;vE|nTGLE#v3ZR>rh7MZ;Lp} z=TW&uv{$)h!i$H@+ec_-V3&%a_^sk;uvFsl>be#wZpjo*cs{m?Jf3q({NH+kZ&ZK1 z#v4lf=?2%1_39>Y`+o1oC&C=WkdEUI~Y`Kr?9Bd>Qr$HQAb zzd(R!-?;Z_0-y`ZOl^322ydRIXSl0_^7%d+hcmjQxPi!QWUl=%gcLjuZKsw&jd^x@ z5aPBEayuH$$gF~;jg!Lmr?#LBsjGNTWgDDXP|5aF+JLEV0;g|Zqrt;9PkNTVUIH1i z$t7Jy1Td;mHg@+S0a_3h-p>0ULK&X=OF9?U!4}u0F7y2@@K>b4^LrWzZuFq~PTcHI z*zlywkJ@k^oU)PE?O7#2a`p<1;oUVzVr)D%Cov1STsnS{o$3MdhV>eziwj!2-n`%V)>-!Q!GflYBM-Sd8%H(W857=DCkYp0I5} zuSo?b@6#(VFsqh&kbau0kXFSz6Irvo(We_2eeNdq>^9G(Q9Rj9q=F5Gi$0mLzANw3ipLDr7s z`0dd-aPgo)NsO5qcXumHEvcizF{-ly8VoCdL^+3PxeFex<&twk6fqZA% zJkcTegH-*+6S{iPq{J8WMSmUmP_CGyFKvJ~kCIH?RYxJ2`kc$t#yu!@C&DaWg&bq> zeykkXPlXw>JM=&48-my8?^tn=p!-A+$&0|d9iX8p_MtELJfQG>HkJ%K;KhI0mkwFU zv2$2+;2zBYh#VHcm7|H!Me@c)<yYxArXH_1W16>8P(wdEaC6{0^u)rgkC4pA>tPU0t$# zatr3#9#P~#9%p;6&?ili+u-cTPX%lJAwV^^?Z3cJft@;~+}-h&4Es_c;w2nQg_#XE z|CyyBK*a)P|AUvau=cBP)HU4+Ammmz?z)S3te?xQnK%iMCiz(?tMxhv7qhL96X=KD z4i_U*Iy>P{&YF|ASj*roX_|3+;{$l?jcg`l7=ty^D&>U2 z|H_KE*XIAGTo7kBA+^u0OlbzLYDHX%VX6XbhIv>ds+ymc^+|hQsMUJ&EQO1AMTtfNG>iuT(37GoukZMJCf6i-z%RlKc!(S2)znhcdf{y-=HJ2$dGfo!JD$opUHH$K+D{G(*tyEh4 zr*`;&B#NQNVhrYdz4c4zDkU~OL?&E4RSnn|{}S{Z8aOvu;k}VK4atV2 zwo<%i!J|W#!O_V!uycIT!t}-l23%PLeaU+S>PvKSs=V5Rhy3yxsTS41 zH=^2wGM)qzmGx8qzMcw!pxe64;Tk-wF%+u4{}n!n9gQvdigI6nXPE|E=n$VGp(cEP z4{akqO#NH@0|U&XOhQn;agq6(F7JOVxUDpzF5uL-xjV1r36%HCl6+|S*liN}JtM!j z3D91uofbG-zD85^lmL(On_5XCPK#^rxQIkrKdi2Lu^T@|fX`15AM2f>#u(gi zjT04!zjyw)+Pi<_pw%OXCh80srf66F`s4jJ$judI5hu9?!YKmfgnet_ncSz7mFK#k zP1V^`v#T;!@UDJSq5LPRUayGA@kjH&YBfui{x~^W`UGT%iS%~@n z=V@lJw|7kwG`9Gxaw2vV1nZd(aO{r&{ozL|UZ!OD-O@r6N%wu|Rl{Z1|7#pf<*h1e ztL?(eGHhMO9ZfLt`7g%)y*-F|m~;%Ouw$3b2Z++}6CuqLhg*8if1qdB#Psj=dVnWs zfAZ++1Qc4wnhp?0_(LQeug(++F7~v`dnjN5EXGjpj69;jcL^4Ouf6s`-D%Q0S8r3| z2d;(FHoeH}rIeo&mlBG+4&WrTt5;jM(p$f}GTkR2XmQ_U~z5RxI*Wka#5N5iGr7`YX9N zEB0e|`@2dgKUTHiKpM->iwPy#<{s(b##r3>c85^E_?p?#`}8RsSi`u-jp(P`*v9G! zIZIsu%$DpwWycq%u#4M{y?c?O*iPxDg)OTf_VJat!__bWtm>|Sn0W=7iK7= zpkExDEOU~@{Z3;SgYPd3j)`I76Pl|o?V=dP!*;c_c@gZZy6o7Zh6GkSW!z{YBaS)z zO&kv}62bZ}bJIEhIEhWDR#=K{31V^OH+;oqPGO}dwOT5VpTd~Zt%^(e`LMN!Vr$iR z{MaMPq)0=z=Y2yfZuxu`QB;XG~e& z-SZQmj(v`5tep&KIMq#_UqJlp+C+-I^f$n1rGoze)i|U-{QQubJO%R9rVo8%KZr>S z{!9<;AAw~vRpalS)}hRG=Kpxnp6BOOBEu8?0l*exOX5fxg3P7`*J2cxVcxLOK3V%O zILG>~Sp7%~{By?o=H#nh_#>zIN>1_$kSRV`XX%;=%zN^txvs84Pi6@hssGxbDqZ4* zhx5yz+32Z6VkRS|nG?IawM&7e$NuSfZnp{rlc@K;3N3(plQ#R$a(}_JY4>1?tTEtW zY11~K)epVfEB<_K902sJ0#xbhbx=m!eT^OQy>GbADW1yy48a!b;|V_sOp~fMLZW{e z-aIa66e=_du6{D}$TuB_CZ*bC6dPqgO!muks z?rEx3f4;Fd{Q+7Z<$aEQqsGMLIoEc?sW6S8cVk?0(}?%ZmYLDj4X@ctm4sFj;g3V+ z^=^p2px`;;e@LhqycnL=MWhPctV*OXZfq95?xVv`9jXNlpBjB$XzfAvx3jlDrq+X& z3+r9l{R!aXXl81eke)ul<{WH9|#oBY6f9_*dAR(Q6) z2@ZtdAqj3hu;`e+nxb7fytUDokautwTzH4zI7zYX^CkWJ`DO>9)Yg|GH;5f7V1TN zwKl}+DI<@_(X3Za7f9d)RnAwI+;y1tLCoOMA_GS6l`%+hVC8n~Dz_F_er>@CN!CDUyic`1|iN_{$q* zn|*%=D369N#7-jq|DmEID=Vv@<@&(mzx!jLZN>@ zQ-(MJ0WWmDM?inPGwjYoo~MMKdSA^w*uz~SKp{T~=f#P?=b6<(*$Yv7qpTWLRz13ad8+tLwPqPO; zls68smLfst)wwpEa|3`exa$?A${MV54~QM^ngKJp1!?AeYw#ScyiE#SEM$8c;RT$# z;jHz1hgxDC*nM`po_=c?+Wr)oeL)-t&I>nAexhH1!=yka_RJMHs&f9uyNNlVcc@ol zGPWQ7*&1=pI6Duu_b(SZ!!`JgP1kstybT}uVq=S~*-%Sfk>s|z0)J^&=yowLLlv$p z)l>=ebMfWG>CCBe@J-nwLO8Dqaur3P!|4VzcK<3jew%>D7lGLiRb;@_sTKF+!WxuU z_Vv0OONpzzxx!>MM31RRIJlmYMSl2YSI3!8w0PPT*Z8E74LG(Ny#MjbIAmBppW9$N z54Yo0TTEPO@aO)nQ18_+6nMVo{2A^0%g##9&inp@=Xm=lZ=+mReCV~|k`d&IHZ#~x zs3n1}y-(eNd;5^ncHKBqU<0Z~s*_v{58`*uWO7_XImMTatK}_cmZ9hG4?XX?S+K%2 zsixe(W~jtL#Sy8z3Ja!hoqITndVAED0%lIoVX^^w1L`O*v{RS2+||Dit|T!POOJ2B zp-XIb51({_c(;w2%Gwoh-TCH*!W5dfuDSFbCJ(`_ldu0yjSRxJ-?uo&nm0i5RTgbW zNe0{}af(j9Yzy?R|5hb7BVOT|@KsyWP9VEkU{@DkhvHwnNI?9%w>tUJ|kXI z^%>qzh;Q}rzrolB1gqp4ksQ#>N{7L^*~eNGhT&(4mE+#?tI(#tAz8kw8xU$)M?N7w z@+m3djHQDl7{So-;+iN0CV$0L{@f}Z&Q)RV>+bm-h;a`aJgl7qD&;MnObh7#dbh0i zN7)3BW8kcJ9G(ZKak>r=w*p5LX>SmDk!RhiK_X0-1h$ORq)0-AP&n@h+lR6~=ri+A z@k`k>KqprM^i)j8OJRHs&9=ze6o$lMOhQM}ud96k#-7Rt)x z{vO0OMhyal9-y4+6on8K9X0NvXB)ewwhYx(8CRPF(R2Qhf}5YfIQ)`HC$ii$4+Z*~ z1Diw0Q03l`6Qc?VaHbmba2At+)r^A(WBMBSkO{6&C>O)rH^+%l+5;eLFM}|F@@2|) zhXdoqsj(OIpBU1c)?jDoQ>OZ0W4fTTs{=48=%QOYcO5;O(H3;}gDo&UC z-=<+{(Q$s=&nTxLdHj>oqX_^g-NS>Q6JhNK&+vDm9pF2wHNQD}UL8`aAsgQw0iko> zQ|D8u@#wWY9nT2@HvZ4QkV}~c|9AG%14g%gxMm&mu2VV^NTvm^TofONFF4#l8tVUh zOF}?F(MJva6dSn}f1xbXy zd07ZAcDH0Jp}f2k-zEWLOa$>CoiZ0!|EhNZ*rQ1w-yd zCzdzqu-}wD`SgGKVA{tf^%OQgG4;_~@jYeT3 zjRnK%^Cd{T!!{`GF$yS{w`Ao6I^d^c`!8$HK1M#9HlIYBcI1N)`*^9V7V-ASm&Vcl zJ#X{4;O{jaTxDndqP^W1{0;NoC!8(;+wFWcPE)j4`dKFb_eooDh@PN5cytL`c+FWw zAMSv&T(YAa$Tv7Wzjo*G3&b^ED=fXmT@P7Z#Ij{E#APD?UdsN}4@@hTj#4~ag;s56 z8`9A|U~;inQf0S2{hHWzTQGz`28o%U+8x$SUSJ-TVX; z_*Zp63+1Ca>e?5EvnjFvisjeh9jhTbv*s^Ts%3B@vGo+^`Tz6mzwF(RLq4zguft!_ z-0mu-pYk8mIIJy+)^5IldhsE&+k!QXuy~z(mCt&|W~d2Vc< zNYf6Bt;C;)sfAWe2E}r$6Le3Wb+e|1rAy5&>_K zk7yz1B1~EI8NQK#cqptf9}|SzKy-YIcG*8_?B9gQW(nAbI(h2V>?*r(b|S0i@`G`h z_IXd*<1ZEFjj0Wu@mvD&*O(s7Fw{Z&o3nC@8`Ds{G@g;n6$WJ$JaxW)BjDC5TF-lG zN5M${_&H<2zc7CJ)bzEy5zyjFyY?z-88kJ~u!ro_LpvqPIkkKOmUu~pgEoEwoT{5= zZyetM(l&CZ6VgVYkDy@kyLWBCeZ_zAR$4D~qZs=!e_{jp_&siYMuU1;eUVxD*&EOz zg0}00BMHV37!MehGy}dvp&w2&Y=c~lY6dlQzx`f6t>#zEHq z6|6#LyNdi@SBOyX#A%y}LlH1I?$BYv+d<&^$ZhvhPzSJa>Y3F)xDR}enR*c7iSR;C zTT9#H21rZyEIY+(9vFO1wz?U;2bVV`Z(06WfQRfACC6A0@A*-9?)TLiKu$S1M~_@m z-`W>FR+8YiLdwN^womVe5x+M>+F3 zwQ2Ca12=L`p?i_xSdaJPAsXzC``5HF!WfWJZOd&V<^Y9lv$wv;ml{2u%m3WtA9$BQ zNg;0$3q@U?_qmNM0-ZDS&jwxFp_K6)iHLYVpG4o5Hr|_q=Ln*uac^cIo61FQ2K2eL zohWMH@pu=eYTZ8zY^d>npI&|IelZV!9zOFUD250GhFPUErVrry&+BDK^Bcf7iJP(L z*#cClA5i_8`v#P0 z_gBx3?S|`JpDUd#cflDI>Uqx5F>wFkYyPXhW`Iqw6lc`4B0zJC>zV4|Bq*pAWx%1) z1Q#BEv1q(70?lvnbRKS}#;#ZmmafYouh7Y>+GW}aa6;}jqrXuz6i5vIQ{+O6JCode z8C(a!^Gx;MJN$n^&KKQEVdRk-d+l$ti|%IJqQXi4UD}7XlVTwfgQ!1zBD<;^<<1AS zkG#m`F9#jf(N*=MqriJq%2vj#3HI+RDP=5uh4PEp5^psoLF`A9^RjzYsHadOA-m8G z@9~aie80O7GNm?lezy|=^=EC{Ck0zjsV}rwYi|pvcT2}5;F)l*SARVDG$nS$M)=B2 zofYVQMO?YYZygl*g>oI%qQpOj9@g|v>x1ung}@t65`25|`-w1C5(ucf^EaUFFC4MX z`M2-30bQ9`)^>7fFw(_jVUy$uXzzElZ77iz`&C)-z|dk6tZ0@oNlX#2f+w#8)#9kJ z@h3}+$0tUB8gs16Ih5D(l~s`}L*GwZ)o*qg$|K;OBlBaS;c3wF-!b;u)J~W^pyT!W zP#@ygbl)vO&y^GrHWyiwWmsk(wgk{V(}@X6zT{X2uO8l0;!)ZIZpwF4O7FM9x!$TX zafc}IEm}cqBB>c16xlZ_F{Q#!CeYh)Cu~EWvv$gzR0r@g2d#r?_xhpL{`f-71_7sW z%040<<_ozq{yw~_z5$*~cq|adP#*WFNa5jOh8)K zDoq2~_*Y@N$Q$=j@ zSE?n=sm+8}8lYCxMKVZ;NZD}fSpBmS5@ttMlf0oRYw zs@T7dJoWDzSbghvK#=(t`BE`5Sj42ir)tpR8)dYwudFcPYo}GJWA^AUqov!e*$JR^NcEI7KEuPPz42zVxe6U_{KM&bQveazms#>Wr~LoE&$p@k z;{rI%L!;mx*#bpUjIJH(%>`n7oX&G7hv3mLPWk&~DX?Af%cXWq1>Mt^Tk9+d80BcW z$LW@G81}l-Z8LBgX83(m@#tBGi{?Nk?#>*zMEX=ee42n)NDNWd{5J-*|G2DIS1kjH z$JqT!t9`)rFHHPvWHU??Hus#qxdv{&><}sxBm&+0{~7*f+yg$!uN}XzlmeU96doU= zX)u0G`K###a# z^yuQ?TQe2=7a#XPYMk=H;(!sD#-NCgMIvq$jdt+Z**>T?$nf-m1Pd1G*VwVpxCvsS z+T3ChFPNv0^uph|6VS%KDcinBiOrVk+k_`_V>C*~Z(NV!#1?m1ShrfYcJmt<%zz}_>8B@!Io|)uDPt^!o$vM_JO?K+w$HmkudhpB2FJe5 zw?knp#8%VWw^IyLI={kdFd~A9MFcdN7#zng@-e(xSC+su|LyL_LLn^JT|>(m{W}YP zq4uC!L99hOvwU4e6f10qa%*WgirsrE;Bb6F028Cij?R@Az@F=IG#^Xg!tQAcjC`k| z$NU-$l?bz(n7s@4#0_I!%yjm(yha;0cDKK*!?T_myU+7@c5r|m`yMLge&h22%&p>2 zwBS4ycIQ-MYIlD<_?{$p%eq1CW_ zoSC_Lj2fFJ*7ZF={r^qcE3}8nO;EDQEbfQnDD-`F$T*gWa$}K4-!w)oLHo;+POTC< za5dF;u<#EFXi2=5*B9M_w|Q>yYu)dIPNVZruZa`z(mQvuW$$)@WG^R<;qhsx@by*_ zm%}o!3So0?x>W~j|8cKS945leI+o)6P!b?y+e=;KcPO19!$i|AU$3ApFva+)oU@t%H*KOVnEN#fy+(~o{a<&( zwKI3$TEHd1WAeV;ZwKX36J+c!97I0xF$UL;+bckd-@xcTm<8v4tJN&jBLC(&BaP|& zULeF}I;~PS22+0capf2;!}DHkmwm-rV3d2?=**u=X!s)IA?pGq&h};g-BWH>Y~k%n zRZk5Ceyn3lI;eUdkT$fn~dWv`_k0)BekI=t-*nnRL4`K8G&!Baer45G(-!Jz4dJd40}@Ke5L zfUYhFtkJUnw0lX3T^c+-Wn;Pn&s@^&eP6x~@VC+WZ%JcNFNTNzU)Cn#02&HJhHe0X zc%oFq${I+%9W)w?IGV3nM&JCEVZ>Z~9*Bc8&xViJ24EK$mEuqDfFlJ4{c3fO5BS2aG<{;$`4Qc z(<;7l0MpfvKm0;1XK{o+k<>v_h#*0c0jUriB#K2d&1*3OZ~VFEO@ zCK_%yy#c9=m#Gx9+JMsV)4m!U%{{XL&n}T^FcvDU$>wi}TQKVDd%l!_wW#W0^1Bn@ zTFkP{WHu2v-A@WOuO5Re&CwYBr%f3Bkk|ia{Nx?{N2 zvd{Ls+XV#~J)8=0fN9o>fiS`p|ZV8Vcj}Y*G zyxq5yOc6Io#OE2#)`6N`kC_gm9K6A304JT+1W*F$-|5XAF@>RCzQ7Zh(q9@a<{1#XU_Bl#wj7m$-HS_^20 zR3}0~x=t@_`(;r;XHAJWOPl0}sgdA`3WE+dT>?hUN;zaAH3tOGI0{zU)8R%B>ddY* zFkub86Uq(+?V$1PMtQi^9+YR0`;jP(=BR3)L%JLDppTK%^QF2OWR8U2Jad5py~o># zXD2p*l?4yGw;YIHZ)H5J=Rt-~5T}Fxb1m58|J*#*Muh(M^f`|audIpT*yS)4A_!?z zih4Ib56yo4ppHg8S)!A$GH>Z37*=!n&qS&N+A(f0?<3D^o)vG(pTa!w;uhC~HDQ|IXbNa6{z>!7E` z8i;RwZoHZS#~IL|gZdlkgV`Ex7goWWXW!5Jo?V1pl|DheX*hf+bS+_C3iYuKC}W&W zsBx-{jAV*pw+i%i z?|M94ngNv;;uMuFHsO^BHlMe~6qrllbv|pGUtlo3mF3ChP>?t`!Nh)}6Z~$nj{4!Z z0_%$Q6~?1jFp=ncEqo6d@RqQ#m5~qC;F_%kVbY}@@_TOd{t4ZJToQGjJ18$b>tcTE z>iQu}Mwyfw+f@O#`ohLU&>dVg>cKo+%NQg+wi-gTjw{VI5^qV}0xeG@P}PnJzgAOU5{y$u(c9dI>3hu`P&4D4vo z|32%6?!Ib%DoP#$Fg-55$jx>LoDn+^e2;++v()vND36_jmZIYV>oxnJJTNxfyrUfS zb^kI+oZW^4XQFJSR%XHYNp;WWPA%{TV^MLsMFxYx7NY`3>Y+_$R$W{c;$d`_-Q$;^ z1~t`{OG&a*@cgZ~>XO%cfbw@~lGE`a_@$lOU{D$5!z?6E_o4S{mt!f!BkKfwgivZc z(=`nwSsWfqkBxvYg?mkXXAa@!hNrpO-XYG#v(xFJ{OlN2ji9_NZxP@n=lm|o-h$lE zD3e0#M<7SM%-z3y)YwA<*CCtkYLFk=UB1M!1;f3Y7Y3#4ppmf@!Jcg#{xY16$eD?O zOpl^BR|3XiX~>=Jr1SgmWo4NQ5#5)^0^f(L9^8PBMB}#3e%yyu{{Kj>-Y9oFB6sI` zC?)s<9f%EWm2Pi6>|CNpMUnT}V@UAJ*2jGVULpf&(h4 z+AQ?j(Ceo{w$hUtsP*?K6{`?EHf8;OR_7E6n0)-svg(BP=?S$8@2i)-u`b)|u zoqo=vyC|07!;CzXO(_{2roY#~Wg#t-8&7Azgvk9=&g5ahYHMg^Ox%G1jv2PK@tr`@ zz_@KVIsy7!J$8pmjDYQM(+8?)4nh6%!sqi?XMlVw@!SswA{@ALK9rB22#RWLvK}4S zgI9};`EC@B0ll)Ew<9?a-n*!6x_z%1D!;ult%i7atKBL>M8pp)v8kD}9$tmNx^>Cw zs3-Bjw#52KQ$JKK@oH6nI0r|5y3={MA%CMg<*cH~A812Ez?o-Tfb3^%=uS;8qwVgJuf-C5LAl98D(S=Q(REu4Esx!s6&Iw0fm zBflTqxXeRWBa1vw7s5*u|MY^hU({|$dD7tPwtQY!ElBXY==5-s&=3qz)#f(3NQH${ zwzT*l-joiT-!5)OiS;X}T|3&%h_@E$YNzO-o>aem@X3BU{Fdwaq%T^7pxofUyPX+} z;K&>Ghd`PUXEOO^(1N@&3&QlqJ%~R^Q$ng@H6+9Ri;mZi9VTEbd%yFQG!9@D)itaC z36jB&kh9-()mEV6W65pS6x1^nG)$w)L!Ntrp{E*Xgc~NBPXnXS9uoZFh0nK9FMh~1mZ-Dvlyt`q4X&t z!_nz=@SyeXmfI%+#;G6}tew{dr#@SiUFTT_D3RNl@@W~S4IKMOKGp^wn%?FN%|M)1 z7r&s58^}wV$tdx80r^}{KD)V0F#ufN=rsi$8vuCj^@#zhzmVqgY4f#+f50(jb$^Id z3OO}GSX&bdfrh`P?&rdJ@bYJuYJq4Mcyzk)nFR7Nt^SQI3NoFCO)|;iq{@A;++sGP z$21R9I(GQw;`4#=(S)HtVzsa!WheeD-U$+vPo=uXfQ4hS&;9CoNXTlXlo3ODoR@cR`qyuO&g|;2 zhf#F6^$_Jh`}PeabGun&S26;d(_%T3q}M?EN@J4L(;7HI+;_{l7z6lSm#Rv~kXNXR zMMLZ80F<9OdO`iqJm?bl!>RwQ1JlzXMwy8FA=S5d;dx&el}PE ztqe?V6nUwDqnTYv`!^Z&K(=aKZ_Pt;BSBPE81=_wa+$9srh>tV6Bqb22LaE!U!Dah z$ME;?SU_aY6zaV;P9H)0WL6-tU>man5{y5enh&MIc)#dV%bKIy7Ewp@!K)D9q_LrN zpJE6s*1x(D@|YH@m=0jMisoEfz4)i?9+2V{iM=sym z$mWlS0nfMd_pf+TW51;}$(Gs^u;A~R>ntXlfVEjT$tjfr7d1P1v4$fU^j}Q-=jSp4 z${uPfE*@C|KPr_1G^r`E?}=Vzrpr^%J>$SpuIPQxz1OoDhw^{AQF8zN7d8Y%_J1C4 zeT#Zs)aR5fLWhyZd}lc&WEQT!J8Bacu>!LEz3aVpT7iRh-0g_U5fH)u;pb%KC|p}r z%i4NMh99D%!XKfp^Pv3V>#mPoU^Dbp@S%q(V0LbC?%1OyKphH<3WR$Aa*ZCPWoE$~ z50^gN=NbhbdUqPBy|}t&(wB4|iU@9PBCu6>~_Rg-rM*yIXyP-0K}&da<>rp14`t_7)lp9X)Pp7@t?dJB$4?pCbjtiso;);}lF zKI$!3Zi@vz2G;+^Ha*41!5U4coRq;T2$ZmO(XX3=)}0me(I~I_{i#B4l=LFJH~O&e z-f84Tjj7#_FGYQsI~P0$8j4`xXpCN|^*VY#zQVkYFF{lXWAiH`L8C%h!7N#{&sLvS z;zu52GoDq7vPddiZ}{RX8owP#TDR`YN4blW_By%`RJR}&?3sQb4F~#0eKNdE^-!k# zPl=l?;=>519*vYHgDZaz44=2`hH`|lLLtj-4rn%Nq`n z^f(yyp}3TYc+fe6JTK&nAswr;FoA6ZZXM7lkuI8ncg=3p*DUvfQHAZM&g$PlxzX_R zKm-NOcqnP*0xJ$ARYb|===bmy&#n^xD=J(i>nVdp>LPfNH*9ufuLG>-?%gdvn1*r| zL7Wf7*I@}Kw0P^k1G#Ln4^f!R!HkpxnO^H-pr@}EVR)&q=2jiCb5H*R0|X=UhwU z@oZqqmR@nVp8{j5*LFurS@3!3f~jQIA(WFZ72cI)#%3m5?Ue?&v9i`o3FjVato3HE zy!=0QjNDaXf1sETyK)YjA*u0TujkaRS&i~wGc=DEda~KE$&~j36j|Ju<;2F^vG+ol z&>79r%1A-XtT3*=w^$J4ClHl4lmsz~b2qpc9Yir+b$jJzT~X}G_YOEEZXjOL zCV_479%qYWhbJ7EU8?1qj}_F| zS#=j#XvlW!eh6kx&9(}jA@bB+QQn+?*v zSFMn1KIcKbH8ob{SGT8188)VenE5kUADavbFd}Jx>odo}06};>)+6LdBY?d!-?LsYP{Ydu%=uY@R$fYyy zClEMeVn?Ggk2uiOAkp*;?x7JQ2* z{vzH)tlIfd93sIP8GIPejqAeKHJh zOpi@ZOHs%*2p2DMK{%U*> z`Y4zdkPK@q1d$nKXKI6)xAtc~5`t$^COI^PmdZ>puZ?^_J-0X&K*+0oRo2gyArSbe3Zfnx2G z8zauhYrfMmQ?xV&8h+3j)YEr@;>?DZx%tb$^rnJu(rgEKxlVWDr8pT5Oq%*RXKaJG z&qenhd>sTHDZGc12ln75pV-^b9>fLMwOhXxUj>TBe2uaRO<+>DcaWHa`twn-7d>(* zFu}kuWB79f-3wVe8CNNAlcz~mL3TtKuK*&hs+F!?1DA4qvi|~a4!(MEp7GENQgLTh`W)YW&P`uf ztpHXAU@%nbAZG5ekvf-E4UKMZbg;(^!(jf^1j(Rn5He<@*KM-`mWIs_i&pMIhEz=+ z2L-ez)7LJOF6x1ihXbyzmk{Cf(FF&Qx^YlnZ%MC=I1Ju>Y_!)EY4Nx6ItA>%CxOkq zu&FJyf0M&$KkOus;LOvLo5$+rAw_Q1h0>24%lY>FiP-eN@aW`oX4mlpOY@uj?zCX0%<4fB?9H1;JL0m;iIfV~) z9mu!ke~o=Q@en?enRqSAVhOmD`sOGThr#a3qYA>Q9azSaQG8FN1-8?^UQ`RG!q*k{ ze_zh7gxPW-w?666;~XEJll*&G@t@RcpW|f?V$Uxg)rzc11wWlsUB{2KgEfglM@4}~ z5W^yx$e>4o(`>z&Nb%?ak(r-VRb?B{&zY_6JJSU?@jzX-i-81xwWss+l~7=<_X4>? zC`RB&=-_~!@D!}rI(#P0e+t}6%YDN?K#8AsZ_TRGpv1WH&yYRM)?v-wSBhunE8uCa zqDqf6GL)UImU<7@Q4YL{GEj9H=D#2Qlq*YwcO;6_Q*kuEOl{>p2!tSsnY1J{fdgE2 z-x%6eoOndUmQvVv#58aeQn;Ii$sxa#k<}9&N|y!ri`hQtQx4 z?cMeCn}Z;R_sDb<>;uVpEFQWx?06D|3cm>YylbAOI&+pV3v;OClDJTRRGlHhIyht= zQl*a&f1B-Dyud}px#TgBnRqYKJb7DQOEoB-kd?IIupuAf2Ey?SHv#Wrz=d8Kv zqcuph4C8z58#!q4{m~3I{cZlb&K`TJUC&mdoy#j6)>^{j=3T*O|{y_WK%W!5L^&)CqWR+ws=dpHW^sQpHsjc^vvW82sLy zLwDMBawx@C39wH5Dk6&dEJo`02^SEDC3<JTWbFeNe!(YipRPb-i$R|d#IF*#j?)QqP6A#^fqaAKRJc&O z!PnOWw66>#Qu&}B*P_1OE#jj}pmd>1U7Bwc#CcVg({OA8X?1x@hNH`%zC4Cr?kgM4 zHG6`?6z!pDKfs)Vp#>P%H1=;dnt=Vzx<@gQjP8raJyn^J_cUYJ?E9_?$`ik+CC88m zc= zjG*5W=MrVtI+R;0=jcpLL%x)M;>6E~X5mU7|5qwQA{byHHog7T05AFlon5b;hZE$( zbe5U(KyznfyeMcK`af-r?|rxd=3j3-y_D;*$B;A%OMdKKQb6f;j`r@$qAB-vDh4`LURo(I-3m%{IbpY|(; z5f7T-^m)_VWcWpp{MBc%7n1l|EG$a*pyZhNffxn$U*@;aNVIo#ofBri62Asc zoI7o;#X^C_O0&{m9VdaRQ_-aV94Fx3YkkSHLM_loCwAmN)pk%~71H}MeiKZ6jAB^- zFb6Ax?SrpxE#ix=JrZaReX6%?sn-|GQtr`La0y{E$) z=sf+D@l~M5)_2E3h=66XCVcpQVjh^azP#ysU<%H8t=@g4(FS=!XvZR=TcPFQ+SVv> z60n`t5oD*@hV6tiqk`61kZtn^SzdG*=>ix0Fspu#RuF6=PLKLsx& z?Z@uOZ@_2VJR04A8e7sg5ZiKTgZi(uKG3@%Zi8=YsYGQJyfQmG*eFE;W1Zc@^w$tK z;7U!e+4FtS@@dBZamg?cZA{YDcArLfo6S)S-SyNJtn15aKZ45>v2ViB{U0QwnO~lO zMFw*4R^Fk*ZF%n$WZ-D7RTn*88i@M)w-{r_(o?{JX~Snz5Iy&jt@zkZ4#7*KnVTUA ztuS}tf^@B9C6G&H|F2e}4hR&7R)mxk0%9)>Uf@TCdykQbFG(u^yWK}7l1BhFVD7u^ zM}oy>>&LG17XT;2)L^>04M5BIvo&Lx1n?wX+1Jw~=p;&$zAv>3i8qf$UFO+_r%D1k zcEw1LO-7B@FqIPfVL{^}Ik5#Z6!zw9yD9M2B;n#P%}Ef|@a*0X@oC6v;hO&1R>LKNZYHMEJ5sw(kZZ@Jmgp@XOvE~XqciZ2$1Lb^H7(cy| z&?W*k=eA{4-aU|W?8YOF?J#H^Y9#Y3i-4PDh&tn+%7Jg=#Vbo+S7646X&K3hO)#y| zW`1xPc@&GnZ5^wS&+A#?^-=Ftc!4|go1sH3GGm48+i)>l!l zU}~j{_7l46EoK{1d|ZK-zCM&j1~m-wCHwQ-9Y=iv(uY008Nhp0Z7BDfs!W7SJ+ z6sX^*meM{n1NanOdfmU#;5YGDJ`THiz^(bA&FStocphdN&VOJTy47@iZ)l{#J&))T z?lcWU#g9zP-xw)yv9hgm>&QQtzW?_Oz5N#aReL7=Y(z7R{iJp0qeKIEVt3%*`BVx_ zdb2m`x!e>GZTCAdj^?P>C+=&9ATBoYtgq1vO~Cr2!vAFqt%2g7tvz@#^3N*i1wZ6x zz+wqIGA(%|IDhMwa2DljuxQfGO7mbE_?-COKKywZYK}#y2+(W+DyFaGut&r2?6k}Y z4?-jy)7z5ZLwAG$W2u+pVQVnw>KprqLhHbd_PxRU2Wspk1B;x5AOXvQLzA`qh)ZKT z&HTM)1K7V%7G#wj1DE6fIT#$D0#yq1rE)w(s6Rx1LG|krq(3!mJ)w~gj|FA^_weRC z)X^@~oI^R^+c!#E_6qkv`b%fM+;ellCUt?D0_6o&->AW-l1ngJKk>aC0~s_I_9u$! zqI=HS*5hZ5Xt53FX|lohfAFGWRMfB@>gjqpY;Bq$j{3?>s7E9L_kYbY_G)Mu^!6Y0 zxtdT1!V7KsJ~;KlI5u;ytNopjd@<&`FW)q9V)nI|GNZv7c-=eZYTE#{gksG_vIE>$ zi<%0wCSXgYUUD_;Xr6l!eEv&kC;ajzdDok(2Ie={sN#t8Bx-jDA4R;~UVj(mBCkE@ zd|KMC*p31hAp9H6qFI5=Ol|L*niBw>IQZ^0Mun9Mtslc5ufW{Xv(%F`w75scWqr+8 z-7wA7)KF4{7JIzjt+;rg8D1FUI{0s895TQ2Uh_vkj}sQt2aP>`1M&Fzb6HAgFWa|1 zXL_&;D(TbPC*5uW0B82Daajf&S!ov!S?D_nIV8sy!xO3XJ71!Z z7sVbs)-p$fEnkW@8QEEfm(#n(-IEFU_4iM;T|e!?jq~Pv*J_60;1i!$Y8AsU8-E-Z zdj$14r_Cz<&n$RuEfE?dGXWX3Z-%N$%|W^gJtix&+aO?uo4RhS45o6%21&k}fk!xF zMc+R{casCM$`o2_KuW56_ma#AJeeSS&uj+u6g~C7@VX8_-ox)dO5a@pQFKl*B9Q|? z>XW0H@+iuuEFCvAw`hhtoE?*+)cY{&+_wFterhZ|b;09L=Q6AnjbV3=-vN6Hao@{w z$xtHH-8|3}ez_*41*Vf-9>?@>gN z%#5T&aX+DqsEAbhibz={vNAGKQbrk}6j6#wM7H~}_uhLRdyixDyMKScdA-i-oadbT z{#>8ydSAFQeYCXf0ZROUYS80h_GQ>Dlv_l>&W=TFD-AweZHCW#*s6yqw?R%97yo}P zbs*ejUV;7GD3mQbZ)CDm3{GBUc}XhR1OuaoNO!P#7;>s{cxIUr3&amM^KEQGTmAET zJt+4zcl{O!imC+^TscP;(Dz7NId;L-V+%~lZ@ja=It~A`H|896+=dznZ2G?g=K=Hy zEoDI*s?2g07Y6Gs_NC}%H-4*A{mhiL?CC%hsbTU>+o z`^nR_!maD%JiuU6#&`NNi#np;=>*(M(ynW;9nGk#!B!$RpT)Vgdj*;X@#pwPNYY}A-kM{A$kN>d| z{6_{yio%bJE;hj-seN!zW)%nzum8OEWfRSH#ZNL(f8S{A#{IR=3m~K94N)hg9a=t7 zJRr|M1>dbR@T&9=L3w^2FC(oI_%1HUy2lXh&E&4qY{j5Fzr!ozuoErd9IcVN)d&No zX3&z=)6@gazvVlBDw%+y%r=i~cbC9SneDnenoETx{>@KVjsP7+0Xt<@S}ZTUv%&u0 z0gUU_1pR;`J?44pO4)DT1@LC(YOo~QH{0~7^sm!$VCUY4c2?umn9I`r$xjPBm|~Ty z9!AHGt+GgJgu1d}qvF+Ci&~6W8V7yxXqF(>_(FjG8c7HXmp1*tSRsu10sW%5D21>E z^PK`$c`CV6RNhPI;_KVeXsG;LBSXOtA3Li2*}tOj(V} z`{pxQtopVecmF2|Y~%&Ct7M22Hqy*N*1s%;@iOo7Dn6FLxF$F{XT6VM`UTs{M~B6+ zk{@zqi{@Pwog|qZMQ3%~iq}m6?XF_{uTNwEkYopSwpfW$Lw&Uz9vpYM$Rd zzIXtWJaeQ}R+9z8ef0iZ=H$l84=&jGq*G!xD%FBopn~-3y&VakFn3jafvf*3$V)?#k zKKka=tLFS|2i~2i4$xQKgRIL1whYLpAVzP+f<}i z1?sD;7nNo*i6;ZAwk`Fp{Zjb)>&ZipkxoJ9e1{}{e-qTUM%N{8jsZ0}lZbtxQCRfF z`lDS?Iix8mvb*+c6?#4qq}20Z!2Ve0&be3bz}a#GQpbyJ*e=^P{;zEpmiN5$PcR^2 zcZxjLKWw3%mh*?xi$0>f%z3)skyUem`Sy|3yK4lD#+N$#Ji{0;J}f`3Ofv_w_EU4o z9aB(-_rNSS;xo`QHAj&Dt^y_Xc0pRCBMtLK1=I1&1Igad;lmWIkPA-_8z+{6D;us7 z{$Xq2{pRXI%3uX}8e2Uo9^3s?X)(pa$ud-`IdWt3fJhrm&rc5 z0=m-#r4Gw%gZZdS<8G9kLAsW872>yFlWV6shhbM+y%XfBN0EDJU zNFA30?mQd#YxF!5rgVkB9(qv@NBQnb387wJ;-Z<Jxi(r zJoy+mIC#1j@evlgoWzH~qj1qg!905WAP0MenCcGfQd)>1KBU0wz66Ak&XfY?<}4ip z!V-v~zv{F{8iOmx3ddd}9VSODSar>}4@mtnNY-`ThQFBlPbr!-fZ_eF#eadq=U6Zi*N97c?(%^4A`mRPlRCeA5T# zuQ|#wG`B(T`)~c65MO9p)uBDM0{JohEiI0HtA_?}neNPYsUhuqv!~9iGzrNBgaa42?R@Mw!g8;ZgdAH zDu#gvuaeB2IvnzKZez4hXW&bHC5KYGav*mXOiSmt!sy7W%lha*abE3#rOy)ZbFfiX1SBGBY@JjJTYZ^7VL7zcSElwc;n%rj*LTl zKvs@R=>$a!2s+AE^kZ%gULKX$)EDZ7(&0aRKC;Y$;++NJmh%qmC6X=qxhEl`Z|IAQ z$Ea}p72Vv-#W|=jchUL37i3u49VsTKiUTLFdWxK4lt-xyVbDQ7ot8JZ<}A_w!J)YB zZaCcoas|Im2dVTzYYXj9l2_KC&ynG~TE{zp@$uDndMJ-5GBJB)HDMCzYM11l%~2m< z`oRrO4!lPY%YY|$l^m2P~(cpW(C`%u`m;=|$U0L-SQ15sp2U@ER zgE)$-$5?G~K&p)GJmiDJMN+cO#Kas_lAzAgdO-r=;v#Zu=B;qd=|xOt-wu47s3b|1 zwE!Ohz1U)u$4)o!j)*#u1GP5ji#0gW98H~G-A!77b0%cAODED$KXdsLzMsQj=Pmcc zZ&@jTp!Lf3zm8sD_urU#d(j*;nr-;q;nW88NTOc7jVoX!l-4y|dL0l>%nlxxCt`z# z4;hdUS8}pMTtV&rFjTKN$>yO?i6<;_woB7gfht$^LE<(&{=UfQoW<2W$gb{GNykfx z!@NXEYt%b-_QwPDKh{0){TJgr4zx$noYPI5v2KL(GmlDLz0o|K!ZGkYb{Xjl84c?C zv=}pVPkS%E4&s{X@0$v(gY(}RTkp%f1-+xCX9F*H1LUcQkICJJE(<*2G%SliH0JTV zK?x2<-5hPKPi({f94cXVl!rdmsagALc@mx=KA;VvM?LGDR&@K9t6|))%bgsDdZBMn zCpBJK0ZNvH3dSmCfo#p0)RE^CaLOfh?CS11==xz29)Gq4Dk8|_{?Qd6zc{w^c(fZD z2Jr`c$s~abLi%-FujXK!Z%AqS@pjl>?<5q(MvuwJz3ld+B4C~<;8hd71f~4l-^U`K z&xl{wbf6Xmb|aH^qvv@uaK0*~CWi91=KDP{^!+{X{&6ls=IKe8C!SWmE=z@TN3K7>Fdqc=3&jDpw>h1*Odvj9Jo=HKvTY#K*cm3xX5bqeq znRj{sEZVVMknnCr{ey?k$PagcR|auvx4%rmFOo}Le96;r@#JTrqd6nMhgqxIAeRzx zW*yXPO1pt>F?oB(cOEoU1~xXaFM%*Bg9QFRvw&~RnsVKA5q7K<7VHeIK^@`~%O_>% zdHAntKKVQ~7C3O=X^RRG*XAAmQEWK`%ye2SkKRMQG0IN74`(L9NS8y7BkCIbK*zhF|lZa+C?u;|}}_k(5%i zAV7qEWMFU;T5?WPSlDj@_pN(jeg*{WaKPCQ+_x8DH&btvA@V11eR-g;eY*!r`3b1~ z9I14?2b?y+!kj~;+hPkOZYd~a zkoO^h|N67XmUOu8PSe{KZW??fzec9~COdAo#&?0gZx!CRdUTt1c?*iz3G>^bJpORm zLlaq=4RF#*r7|1w=r|=yxZ6>_@YM2AQ?ZXYT$Wa$@v)=F-7LHM*u%HM`J$dO>JBpC z?HG`Ha9|rsCee`om`=b`msmU8o-yMYE~3}{m-eCEi*J&=g`1Fzv+`*WX$ro=yv)Gj zGWalhTFmclEfA{>=CPrk0oYyh1z<+ROZ(nOkAXz4Mbfr<-77l)wLZHgG_i(BCMkyigqRitxW zEs=P>y9xHyz|T$bT@d+IZ1N#D8A!X+#oT9{09RWTKhGmSbk2<7y@H`3;P7hR<`X(6 zHt%m%$AqlH<17mTTZq@r`A3MSZG0WXpEF_X{=N*g%5$#{sf~f_v(J_D7+OKty+2zs z=1cHHK~qEaCh~3HPIIUx&Ov!)re{=&RQTbmQ9~f48?1=BG?_)SV^%IT*VmPZSZLk( zmCqNKf$mteSJ@B|`@6UFnA)@sCLWjHyf;Dy&vf*A7-mpDr0&W>T<0phQG8cev#$ka zE`83x9`*y%HR44o-zE@GY9GB`Q4Qu0kYSmH2^WmLf8sz_8>l7<1mFKcjb)D(L>SDB zg6j8jy>mC$fSHR!joi;!$kA=QGBz{?4?mYHeMFvuPj|vrjgT)(Q9}9Y@Nhb04q|;g zrP2*SPpvFY-h&^-wuSnvTfpxbx*nGJV(=m!6qPMf?@ zt?W6z@N*1Ynh?9d*3N+Mjr}7%`#uNBGZS8s-3@^J{p*K%9tzCUHiMG#2rc&Lv)#$3 z$RD)YSd+7XdZ%T@4koiw5HP{d*)Q)+_JS#M^4j?`3y`IK!S`2UDYU8+*`yF31YP|; z18-z5OrVD89t-~&wr2>!PHil}^4$w+U+aelt!HMRhE7Bsvz)wQAtKV@C z1XKjuXvWsTHT_#zjC)&@J77<%9{FIb5(NGZuRw9Pf2mY2ci;&7=)?9Wvrv5fX36jPJ#;=gcQIeuglV1( z0&3PP(2!I9?&!}lI3v2j=6Y%!s(fx|9EYgCPrSgi;v5sUeF3yF{4IyCav~-8{g(lM zD4XbU$#1}vl+AxO2=UfNKc_RbBffV$E8A16eZWt>DmARU4IedQ%(LGq@bTg?$}CYF z&^K#cuRz?`MCHfo3K>a|Q)xrjhp+vReQe(>n8^Vj(Lz$eqa z>dT*L@ti^hxRbm90|(mf(-yA7M@>Nwm9LCKTlL8=SBob>%CXehyp=}q%`{@L_reM& zCOa$MY8?lvDOrlMoz$2fP4}kZNdi{km#7-p+6{vS#5UWI|LllRz|MmAIEZefYm+c0 z!BUqxC*PMu++1)*dYhXSyGY82ula@giu)#f<8_d)BjT`@z?ESj8~Ij9Gy&~T1;>@> zRmY*)hsSP$n;kGP(jYYbB`xmmw0qh60yQ2uQ&bcou?NHJIO1FFBcN7t*a^euvxsAO zU1CVT3v{~hr7uwvaR{N(8~0A{${)7?#PTx?Q z`)C9v+?Q_pBc1{8VduVFm2L!2!h4;WcG`irYqS3+4#Z*OoSaledqO>_)9sF~lz5($ zkSllb80yVlJwVIIg0Y2M6L@d20bhjkh@a$chG&6SyZ%2m>^%2vV~S@rkdE~O@g1!P z+@n2ve5a2N-} zUMuu@m^L7)-2!xCk`paI%zy!_g}DIEcGxC2pcQd-6L40&^KeLF#~xpHmZzy_zy_m; zCbZNm&~x@*2zI#*obc40Pn6q$$+~%AD${)+KL7CAGsh_?%6c=p-=GE3lX!fZ&QHK) z{|4LkFSNKH*>YCcdkN^8Gd;^urN>p2v?UKAzLuKNvHMI?&7kC0edH-u#Hyz~1XJe?h8=IVkAvX%?*Da|r`O_?vgos9{Xz0*F%a9Fl_Br~e z==-Gj_C8A`VFN}89x!fjX@Mac1s=oX3NTdg>6Yd|2bl7^Gzwf+;H0>S1pVn+ki0N) z^3W9)31b`;n} zOQm(~TWj!Mb!SToH<}B|6o@=cOMql|YLw&jIyg?N@sieq8XMAmPlznu2dj@dI}2NP zfOEALas1sjsFz{vB_W?=QO45OC>dVN*Y}lG5dS*JwhcCm;bF#JIo<3XM_j&B#c*w| znghE*@_5NR!+_<#nri%&%#R&uXu;l|W~&4C2pcr@TpNJ1B;sPVHa*hN75X zupE_Hwn7}P@KcNv0>=$SJ z)2q5{SpGfh7PKt_+3Ua7iF7C*Gij&lOUH>FF~9WXig!P-PZ_PeW^(4q`+iF#xPC9tr_1pWx2aq4!#!()*QQycv+3_8!ZB; zun!OKu@xDwf;05DT5YqZp@Jo$FvNrcci26bQW-Y`V?*w))n4g=BFeA5>|;@G=cPLR zKh*Em(bW-0uC9SK1DSr)w1|WKU8m-48sg{8D1Ca5bkcFzBc7+ZTA@yVBdviG0Si9L z6ILcY1&`eP7^Z-7BD`99&R(JGptE#fPTOD`{P>%qA0E2{ZQo?^Em5>XyTa7`T+%x5 z5gc2zklTk}EH3x*SQBv0!N2So2ZjN2smt2@w2Xnc`K;9mmhoA0jY#1}$;}jPWlJZW6Rrj6xglTtS6P6>VePO|Nfj0iGdA6Nq=(esqyX8+Jy&DevmoZDOx0*0#C93 zw9w?W4*5NdRydc)pcv1TKK=mBuRjin(CtuRa!Deco=3Og+9j=t{Ge{Y62z!h>M;vt zGwaVYhAjbKCw5DMVmqW2+zaL|{|A5fP)x;D*FsL8fMazbRJfAnmm7D^&jFoD-NFDB z64*a?I{Lf=(ost|#kvxyv17UU9LZ0qF~SXl0^|GjKuYb8eBIA(SiQL_^YSg~yW(P2 zF~7lxsVh`eCBEE*&*&LD+y2zT$-hWA9zyzJuxDa@U=QSc`p7=%(dpI|&jzg1&Xr@56|V#4jh@Ab3@>Z4ecOxRaX8@hNLn(7tU=K=u_E-cclb zjcL3E+zQLOFXplhf4}62e%>++Su!?jlsplaA#t#H5cR5jh!ef&%82ObH5!urWO^ZnG!-(Izbk@17$chdUyDNBXsI<7J&S1=O#TF=xA|L67ey zy59VIoC>pj6PF^3dRK-C>;Gv{wpz?|!M6)Cq11pjVj^oiI3#QWKxIB*U2coq(~m?Gb?%Eei$nQo9uq8a&> zFanG8L5Z0@+N&#dCTJs0*|NtvyGQdV=&B!nax-BRK5;hmdyjsfqDAHQ( zV_Z1mvu3Gq-CO{#sIlNDMrc2(5oy=>Y7~5^Z5gt*T8Cdka&&~BwZfLv9w(WHJyHR&4}s%VVZpJt`RFRm1) z=4dXW^RE8d-cAS9DC|fsy|o2;V}DC|ApazX^XIdk@@tTd_fR0UY8hDMW#ZjtX2a}c z3>Qn)b|JHugV`svSLJ6TkiP6wV1K>4g4K3b!SIE;AOBrnhS&QQPCl=t#2%>%)H=fpxSZ@NNn#x9i2}#&zdFV<{Htps@~a zM~|@K4XaR}#<2Y+;{X_FN)4n8CBt(koP6cwdq5^XRaQ!PJ6O3Kczo&W4!r(O$NFyjiV}SF_?rjxgB7Xiz<3$~P3cNb-hfWSChw08I z;?}xj5TATWXd-n55S7K2V&9B|8Jg(H*HY*{qvIAUh2~{->X+H=d|lw=9TO3tJ`LV& z1T@^Zy9Q+U$dpM2JCJ+UaqrsL0yIYjC*aE`b$J3TUDgdgiSAJf_UCW#s8Hj1{aHj`^#0N!G+Rv( z|H`^Al3~aO^%6gd2)x)-2dFP;UCuu;0A#A_pFBaizM~X;`t~o7-(Nd_?_)d#p6Glz z@quIy)ND4KEgPf4A4>eeQ-b`#^t1e)aWNYF)cDx7Pb?%@!&Pm*dIj|)?rD85^&Ntf zhI6NxT_zy^8|T;{B;a&boUb2Q?85BG$WL`+OxT(&`xKYZJbdzZqa{pw z0`Wm3sDylbfUWaujR%PTGgHC;Dk5bIglJb#E+RfGWl%t>E7A*GdDIw?nJR!A*1~r#q0C&x&aP-`N z+1^@TIyDP_KDZ#f?o5ki+Nf(kjVHm|Is*n$P5a`*qsz&J6>st|E2 z=#M?F8s3DvWZjPU&uZ6XZ3kQ?u?ZLbb~VqEZ4lsE9sv^*G`~i0s*!2-|i64ui9o53vrwu}pK0FYF_L zYDj=o`BtUke%Hm*MTrEXPMFt4qQVZ<^hA^ z61Z3Mkb&jbU#L}?h@Cq|k9#Y=mzVf}xShi`YXOSO0EpVveI=7Ys6x)QuuC1l(BgB} z7UCIg-Yu3vj-=I*<4rA{>I&(bAAL^Z#~tjl$wVX%DL=8(c6$1 zwoFA5?1C2}DpE-(k6B|Dd{q0)Jm{DCnH7(6c;^R}+FLF$;>R-kJ!E9J;f;Aq`fKRk z{6SBgT!HQ*Bmx`fsS;|e<~XfV#+AQ7WMYmc68T}5I|gNUNEBFjEZcG20n`IrC+c_h za0Z}wQsr>&*%Z8d`PxmtQW8|%O5z#$Is`d>cK?dh$pnq|2`|4djsW|9Aq~Nqbujo+ zKjp%?Szz+n@O)(37V2^SDJ(QbflplI%1on4f=gTn-$Z_`fgjt=FD^gc1#-e>f}!Y~ z;n`_nVCbU4`4iahkG$k+fsDbwy}HO&D#Upa+`5-Y&!+~|j` zl^9T)y7)=x=`=KA@_Do6UJ5{`MrKUWD_Ts<2%U#IiTysJjUc>p$gd z)o+6<9ZK0=zMb%;kPo|5%__K9suXcUb`xY%{ba0iS%gVBKOdY%xxpcq3!#nL6~KJh zMfbiM30foc+cG_Pp$iJhdm+Z9$4&-nI6n{s);kuSPBJvwB zEbG=#k@q;Nb`p^srT-RyJxw!_nM|{)*YCKn5MKJk$#`w(31#sk+S={V@YarzEEtPDaDY))=&{^am^39z( zbVAN$6E+v|{IulW1UG*~I1!Fg z?1ib?YGyb!wtsJldYU*6))VeCnQK$y@ivua@1Ia(Z~RW~w9`xj5G-|k*ar1KH(S3I z>FEc0+z0MP|0+g(7W*;@8#%CGV|my%ya=9hp7h*uHxX#5Wq-d&(>argc@ z_{v}w`{&gFu>0^K@x0drD1oXT@ztoGy=AEA*Y{*lYRftr8i0IBHC*p%uYCuMih?7p zsmsthy((15dmpN4hEWIqBY{I~`S}W8h}hzaTDJRpAUiTDNt2C*79V73|y$+`!2j0g!B$~$F#zC;a>2W3W^UDc!b)()7lrS zur=naW$D=&h&^YD{x0?gEWHbi4Oe2qUtee0V?lhAd(y6CKA$Cc-CsLU@azP*cF}`8 z?@Pen7MtF?oze$y^{?-CxHdqEb%p(o+;O;U*-+2$g9g9x+XPH=?ZTwv&wRzbP;PW) z+x;9@7Ko@R*u))2A;b533daK*fbMD?D@FG>kdRrr`=V+T#u(K-+QZi2*SKpxtI`(% z2X*4+Ra(TmZT{1cgmNq;5j^k8jH{tL2VFz3!WyWyqmqoSLOIW$Rvi(Q>p(-=kQ9i{ zJasxo+>kjRSm3eTUx!vkS^ES{n@*>mSMbAV3zk~pr1&D?V z5udj+pzAf?8KOS&lUp4%sP&(KFFf39w5iG=-!Q)&Tj?^K%om-}M|lcL){MS7(QO#g z5vt~bHG)tIoMzi%8;TEoR=jgz2_9U$^gNhl8tVT$HTewrH83`>=SwdqV6e)0-Lp#L z@R9v%$*=oN*rZUW4t?G{kUcJY`j5^&kmtX-SfNC~^W%f;f1`W|(+r!O!GjI3exc@O zhUX^q(VcxB-arOzPl*k9<{ltwj}4Hw$^glfz!sE5M7k`m1{dWb>{Za}vL5LJkG{-K ztUJ-*gSeiR+u|1B)V?RDbCVUnBN+A~4Do&i=oTI5CKVr7mc) zd*tm+K!*C9-tj!>d@}U?E$mbN8#XW7a~l0O2Fi2iT^^RN0()*qcg`jmzQ`9>KE5^u zct-bpE;9JTlAqsh6rJ6G^~%(;pA*{QlIEN0!rOFM#-i8!V8sI1`#xi1zSRz9&=Tlsj$}SlMM2wwt&XEni4gk~hcNW1%nz5`Tbl=IjkI|(g{;Yz9q1V?1N=&9XOpi1|hrQ1Zw#|}a zz`i*<@(d4hU=JC@PAaw_ZXLAv@jRXdYfgNbPq602#*e)#+aKe>zKgm3>Mi2KrUN7j zvv=9B4V7ezY93xJ|6me554#X1^0Q9h_&X8o-KA>j_vE8km@qeK_u&Doty!; zl9Wak!;W3ol3R5b$C5qnysSw%hPYd<&e7^Z*j;;ivA*v|v9WHX+ztw1PxF|bXy^&t;>iqbzyR!hc66(Et{v0Q^k+!Y#@aHN}oBB8=EzgZ57&yAr zCnMkDEwy!hq!Z1?^em49ZY=82u%(jDI#4Sh)>a5JV;vzSrmDTjZ`AU6&AlISdKXWP zJx)?NFa%d!e4kB)t76ru1eZWX3Wt{Q-6mLY=eNn;Xg*NO);x4qZ34=%5h@h#vSAu$PGV7+ ztH9AHMeF1E6g*Q9e~d6;A?_Yu=WD;gFe43DDx)Fr;4iw9Qt|QjTh7IGAoJKc?A!omNyWuJY z7G&eZB2i9(?+UWxCsB{zsSe5$LsDh1>(dd^orA+bcXN$zJADxru*fpFdQjj7@%L01 z3)hg}runWnc@Q2+{qS|Sp9&y_Te&kr)2V7*Zo1LFC&X>P<6t>>`+b1S7adH zPnvpEZspupy3br(fHX)71F4zR+l0Dl)uR|6BWSF8ZIpr{E!kbgHtq zJzs9_P~lFD1=qfzJm@aQ%S|281>0{+oD*jr2lI3zVP-f1J34f)Q}D?)*i7*c^fj6R zW(9RM!7Q^dnEKxK1EWQh!}~p7zBmm#I%i)zo>~A$vlf<0XQ}Y3-^&f?-b?|q%0F4% z*R zp^x<#_1Y%YnP!)yE7#{Qzw)WCO%g9^AE~;{*sQzMOL?0~tcncT9!0fp{CMmpCor%V$3Fu%WB~&r8MH&qR+P{c3*K+@1r| zoYLo3lHG*XF&f{W`gZ{CjGhA`==1pM^HEdyYdfsBO8FL>wg$SQ+9M1B6u9r$k&*a)#*5-tZ@IX5& zrG+3h7W2s^@~+kjNLwQhy@R8$^pQd~J>rGPS#P<02;2tJhR@Bpk#3j_-o%K%K{;9S zOq)3u75)U}2nakKz&nOVB;Af4V~eR{EZjrCGs@FnJE>OSSV&^;_aJuMC7yf5JGUKJ z-oC=A;j{_Y6CHoLN9}>g(Afetwl+9%RMqs8ML)1w`GyOoP~j7t7i(VWkHGqi(Z%kQ zQ?TXoh+53q7GN4FEUHO~@`k>S)bQp8P~r<6s5fWCdqTd^OvRJHznZY~KK`>n&GXLL ztNN3OE2^)lVYLgA*OvoUO_8poRvnUCKLO{y2#<#&UwK+IH9;zxh~J7Vp0ZJ*!hYOP z-wfm-!K$~9XZxO&gI7G%7JcG0c+IT`9t{EO;I6j$%1L=W~rJ~S0_}hMuvTZ02#@?2lm_U0AU&ToJ zJbwnve@JbRz(EGqFC-<^C3 z%r#s8{cUKYpZp{xyBLI!i?lN>Cg6w5RwU4R3@KFv@qsd<4iZX2GXfA0MGTpKiut7yD}IO}Idq}JDukfCrT zheodi4gLVp(lQS3K;6UE?*zrSpwsOmi89S(aL~}>{oIutpnpNiG%+6aZT)g=Dah%C zE_#1c>i1ee>b^&@8NLju#3>yXyT)P2g=2wplHG7Tr~Z7>Gvqf=wmT+|eDC)DS?8=v zSAbsb1-X|;iea_SoiquXT~MN@9bKun2j}gN>vG=g29Jin9dX~0vfGlhT~EPLX^f5_0;x#zO~rB=j6 z6SX*i{8D)bgj6{EhrpMb&LjVAjzB{F(XWv=Tj8?+3&827fe7~)(((G9%uMGI z@GwunKx^LulUwC2Jq>3;pdZ_P6?^0x!vq7bpGN;*M+2MKH9BEI2KVT(QzgJ?>|K#l z(;~Pw%=YZWZM46&(V=mn*#Um^=IK@bdw>`BZu%feg-`x|%#f0`1XtNd^)krIAhFa< z<Z=f8NV@+7l02O8?@|jU2js$8H zRNddS^}u+mURCgB4MH`g3(xoV;I3J0*QwY&5biIu+AD?f(C!j$D@NV0QU8akslzO^ zvOc5S7@rN=ifYfL&d}neDuH%fvODlbGsk_0m`>mukwkLzT?2~YUKT36Ux8TKXu`d~ zJ?Ko$o-7bf0w#nU+CR}d;Gl8Kd_vg-kQ+Vy)QM*gYPwr|HoZ*5g#S+U;t7anUQZ)u z`QHer8ub6khc5tg4Tdl~CQ6*7C`ZxlLBuA9^b{VSphcGGK*<}t%aG#2nzit40(SCz zU}Vc9)N9YIpO%R@t@DTC2yG=ZKtzwbP%0el9|Z*jLj)$kv%40bWB8{*P5Z%P_BOpR zcbc;2Ct(7%v{I&Y=yG5wO!W6DHPLe$r$7{nZiP{Wbj*`%)R>9MiA<%#b3iju@bL?5 z4wluA{h)q=co#DIom6*s;hEcshE<5e{89xU^Sjsw6-L>9k#ts}iL!x3lGzYkbvT_B z!#5AeL>s|tH`;*AolmmiN|czsGyN?NyJ;ZcZZxcA*#r4`JknSg=fLHQ=L}CgYyt{Z z6NbX?hoQHRCz1HM9}G73+$|Ah!mJLSnX@Y{hx;QGA3rQCBE5&=#h1_9V1INtqql;9 zGdPEFHr(RGMpb2V0C@};-Dz(w>~94$tr;_wNY6`S$)_%(TZUKV(sdGEPoNyUpHgZv zJ&tEl1$3260KfBurP0`N!0vuWHHj0=KLT$0@;0}jvQw2)weu9&s}*wgjv!zTP`LGYA@brC4J>Q{%oVNoOMKiI{Y`+6~IT=<@@N z*Gk}o8E$pr%tX}eHnsut+92twQ2Eyb&2xvZ8nS{sx`B7X#}2b`x@$g zj0QgtX{P>kb_2>kslBCIGXxl9T~8<3^g)~WEE4-!B5p|C&1j#!3`XhlTZ~zIfIye+ zHF`P%#_yGFQmL>HXWsMY%wO67Rd+vSnoJS#5?yw9w0Z^7Njd0@#AU!lhnJ57xEb*4 zL)8D+|Em%clyrzl z50+_?P>Z%32WBDd4V7vP7)6@sj|8m^IBoE|WL&xfrZCr2-nlRXHYjfKz1F3|P7I&; zrPt8|q-SpF^ReuKecLTT@st+8!*FBljLr)1WELpTM7fG9lnIiioim{1&AVFr+bxorm=Ati8248pH)tLW$sLg z`R_9a%u}_3b@EuhKAHpbf)9)nhl$vKH&ZF)kvCzDr-Y-|Tfl7nc{#bAWs1no+xi7H+VlsHK z|EOrNn)};b^>>;<@u}XL2V%(YV)Ad6r49Ty z-E;2y{XDN1QDO?3RF(LO1mb|*En};Hn*?v}pS~Dzp8~VAO%_nP`T{1uU=OY29RPNb z%GM*2laQ8Pm`g#m3$T)fbA9Pr2X6X&ogx7=_=cy|hXDNp5Zuz_p6xIV-#^KnefD-7 z+9&!{4F)X07nk1LE!3gLSoPj!)V3r8=kT49-|u!{qR8%z7l(ULi2Lc-Hp<;~y3IM8 z348=)^N;15ugyX3#;|&{Z^eCY&S{Hm9zf@l9Wt+K=7HDgz{}(Xw76=Q6xi9 zqJ+h@HyOBS{YBDwluNo)^Qdce9yAb3bKWvi;rvm#S%N5sc0GW3Y|MljPiNlK_*UEu zxbI&xD_J7JxiiHQyv?^k!rl6CRg|~Cw8-|)J!27+`(~?u;%|bI=GB*l3&=3*G#N%u zV^ZuNRUxUeAQ8%c6%v{HM1jA2eeBct_9ifQymH7gJp$j*B~baspqyZkXY_ZB3XdEP z2p9B3{H=t9-*n6y;IreOe1ByE(4myQ{_yn{q&{S8*gH#!H(2!q*He!I+v@YH`h4ra zV~R?p)nEn8U*HNmeW?!SF^oT_;N1m0$3MpCoTSC#AKFZ_mu~_Q#wRf{b!aZZ>0X$i z*bEw+g5~bTZh&#lrj5J7!|+GMU;0+h4de&1vYmXq4^*C*tsWU1g)8Iszi(<)fT_`X znf&i8ILn6=y=R`(m`tPIB_HJ7p)j17I{$hH$W~Q{c$#d1J7>b<0-8!eA3QXg`Me5H zx?W`T^EmuC3RbE~31I$(CLf#aHhfN~bf5+?KrV_iTcpDV`blQRzqNCu|LJj*hZ6XSIUobsjP9oa?ZSD}s>% zaZj9&Jud$y7uFX>#iO^}R%*I{%!P$aDd@|g|--toMbcl}2Iv80(l zm=pODE<0m8=$uuJ%)BUi8s(0f={4x;ry$qMFB~J!4q#@QpvEh&e$ae0N=a>Y4{<#? zwtTW^aF&xd)f6);!BZ!T<~)u~sHFY6)9J%YcrBoX4L@gZWpkzi|k^P%e%+H9Bbyd#t!L^^@_0LzK zAJsAdq1aL|EeiSewzOOStxUq#Rt;8Mx7We^K!#I*(iE@>aTMlMUWb;6v9|?QC!x`X z`HtI}X81;dm3>lu8E|-&%l=)jgSw$R79ReUK(P7N+2c>fApI&UziRRd&=TF)j~^HV zy;=(cb3qe;A!@7hi0B&lN0KQM*^fBOr1CjMox7lHGrZ)q*BFR>MeYt*3E)~XlNVJT zIp$$_Ii>js>Xj;ps{9#b!Zda6)>ysW2j?EwGFn9NV%MbKT>GiSgq@emv!*ytjmZrc zlAa^5VHUL3KgOhwVRSwdFA3W`m|gVYTN3)?Smv=KtDjEtVoeI(qMPq{G5ozihUtal zSYc|3vNNLqMmr{V=YVkzZcJ_Rz0GAiUhEuAfu9D|5lmFa{v+bu68u)#dx$ia8_0_V@)I%7o*Z>F^>A^t;UTlAm)<&n51(Agb5iw zlZ>ar^p9D6dL*+7;=_3K^O>f=xsOvSChB#tiZ;$DMuZf5c*REgq8bH8vH{;l@8&=* zz7eNqhrA3Vn-V3KBy~SoS{ri zgx{Mg8Q(4u;n1BywXho8RxC} z@P!#@mQLj~=DP#EI`)rhT9*UXD~g|~5LfrRvgzX^Z$@Ej4(rtVPkj!K?ndYhBG53*eCb11rXL36y59J~m>+q*6vE-OUO=!ZJ&NlqfTS@)*C=>ShoP83F z?-JO#UA55bd)2#ghPnjlKW$tal7A}qDLGO7uE^a;on!K zd1(;NTIbDCHFm+-8^Y0xiL}^aM$(%zOm%Q&w#0w79Qka9o@nekAn#a}NP4bB!c)uJ&pQPc;A6&}SsL(&UBzPOre8dP~ZpgB5_!juqFV zbEd80#v%DUB{u#o(yf`e0qf>gyXRk!;B^#zFzsn*^WB>hQ18nEwHHDr3@N48j@=@`AAP7#-aWDgv-In|<_+la zU5(Fug~vzWi~nft2^Qs`#xWx*D{~Uqq*b>)Msv=Og5k4&*4v?uidcnR0tr4O*|hlW z{2CZ^A$5&+EC=dgVai))N5SWxiH%?T+F$|2=i*pw6h7yWaTa_%iF|qI&@QwdD&^{4 zdfvVZxo!OeZ`(G3(pT5>+$`q+8AHl3lO1X-Lw&#QoW&mW4%1Nn=s<_bwvVUhe4@d# zz52YYyJkRGz9f^(qd~B2eR}&8-xOH>W!mZ|MueWG0g@swR$oW0 zl>1@RwEFgSfIR3oPr9FLL_W1xH_e3WE6|xFoKE0N4tzI?#ZmGWff<6%o5YVfFze2# ztbCN?&#Cuy`tooC(6wL{OULHmzb$5B@KsWL_MEJ7s$>h`?0O~bOi6(;b>ERnm#Tq0 zkLFm4xXAH>U{c4kwd;`Kh%e1x&@T9q_>IM+`~cL&ex1;A+lBhSrvHVaxj3b|e!(Vf z4`7V@m)1{8fKC={G*!RX;a4M`F~d(W(C)Y%<6p$tVV<{YdNQ~QM}+vMN+v47y$r`! zpCo2s`d0YN9$h17>rBwydN~V)KgJ1aA#N<;(wQq{{adhAb|_J49r=U{-}BPhb%H^C zg+`@4M$ET^sk-evOZf<+$cYSsn_EGALZnT0qr8~+p8GSJ3BJ=rEA3LF7?uHPfej5;T#r1cT zcYuac2nX>ZIX;m@@+cHgVNT?RhFOSX_2rsUKBFBOehhb2IwLp&T+Zz2c**TTpPy@Y zdV*F4rt?k7wape z!hUc2|JCoChJLdKBQh69L1cN6ETwxDIFh60IT|tqEWH9YuAeIh66{3U-B= z!8tjPLK9Y8L-zIHzpKB1M~v9#+Ko+c)4yoFau&^7%lAU=czlB#J~ob_WSbB_KhzcJ zunK~og~b%#TtmOVbOYZU8ep?}>HWjkQ;0{1JLz z7-m-kj7eQmeA%h+g&RNVd)}wO^=K7;N_+JEKojQ7q0kC5&pfrJLH;k|DPKnCUF0u* zc9>E-oDI|p&UCw}HN#_}9Mv3-}VKSfE20}!9OqB3nY4ZMfaNo^%sfqk9E zxMbQ0@MavNV){V@wg8r=~prgA@~?Tu!LtQ=c)aUj8`U+srJ zJG%^0oVmU}h+TuW>1Rz#^R@v?5c!7pw|sbk_2vkHZwAg_JQTbimVt$kr2JR3e<;4` zr&;5)0`r-@W-a6o;406TFz1#Tc=a?hnUx*)qtp<|T!bi!lqx{~&OSUA) zx$f5bcB2(44g_qkq5k1O^Hu3`bYIb4U%nk(Jr3l(n!FethhR^%)o6Gf+S9d{At^vbk7`ogi&BzV_&=@sOK0DWFZQ>V6?K)UbeQGUx_(9%49?}y(CSf_KKzw#XQ0204@ z^FLw&(}OkeDcBgz|qZnWbkVzr%r}JX%*rTj0?C z?&4%D3DzuTulcsB1J<;79M=lKp(*R(^<{K#aBJr{-+RynUcC9Gq+>Jzl+;DZ8yhL` zgc}|mp6L9lF(QdOC&h^0zMo0X|KA2YmZohFU(@2sOdcl0tB5~Rl*0Biqz^2ue)*C? zSq9H{)k7asa$Jt=6?;e8Iuw-ezZ5A>0P%yqT5UXiU_1L|zMuo^4+;*^h!2YxnY%ut!eY!pc#V^^N>RB&`Y1AVNcBgSVh322n*{SL2N%86Z zhw%bux*)4tCw1zPZ9tncX_Ee$6iX(uJ>-?2gAWAa3SCj($M_4Kb*cM4dQLvaVC+MH zQlrS5?aCN5j5+#DHVpM{#0qIEoU+0FU0Zrf1xk!(-koPobp~AMT)FoA$QERZ__DK= zK#k2+CB`@BZ$oXT0fQ4T8M4I1o^5!w0(dqJ#+t1gp{oU_PtG_2jDFpS+S5fI1icKY zUc@0S3rZHxd%OjQC7bWKR*>UA=J<}=>TLl+pdl&IXB=!vUa&uwJ^|TzQ#&Z>$*}~g zcgDowV36?WZ|Ie)6M!r<$}Zn@8_+eTelvTp4+dR5>%~@Su_BJv)0JfHfQ2Ta;5a`y zHvVAgJDcMy=ndm{?m+q58;aW;<8GPIQS_|vw?|E2=Y)CSZ`1<|1AS{%K8zSW{Iek1 z-U-5QOq~3^gYw0~ZzRkSg|AWx((f}WUvcd0pbf4xsB*~RDNXA ztcmhHvD?B%^@&qpGR&rt2k{%j|E6C4>NgH*);7GXqp0!kuhuK6oe*!Ks0f#?90b3; z2QI%HOoJR>x!$!tTY{3zQ>Gu@5nu@Ai>{x;eaPdWy>;j59^@r`%2U0%4Ue0sGjxdT zfLIB8@s@=dufbq1vUu6y}=^3($Rge}~RP?Y|x9#29Gw zqiP81+`cX_sYV2}F8}02iy)Zih&!4zH3_VRwLj4g6X20Ht|^;$L-2S*S+LO3Arv+n z2ccg-L0Pim)s!E*@NVOyUZNrTPCFBHEAr$pNSZBmsg^|jH1V?zU;gWaq@3anT7+S! zlJ>!E67ki2_5OZUE}ei!6=oW%hE{;!QX7?E^D>ws5fRxyx%TTSjp-$}sgP$wMpN+X z4piSs(#h#$#Gh$$l$`Br0ZBJr&%dxC!Fw6vm2dNtU{}=dm%HPPIHw))>BrkFeNT@c5lJc0c>{W$_q^ryBm4kLg^^RZ8p5Yfhpk9z++RT)_M zLQegwdK)gBGL?%QM|qA|i|sv$ao7_hYg}(kg_V(}eCU#<#kzYg5!yerK;z4X37Ru( z*a3Zav=8!3unLTQ|9hGQtI?Blel_$D5WM_f%5bg1pw+uFq7y}G{Rnz@JGvNH%b*>|P5~j@a^DnwCE~Cc4w34|GpW}M5!bI zp>OC5fyHS@-Q;^CU@7OVpI2WeY$I#sp{gMOg{G44loj2e`oQDXhx}=%o369xhWx~T zm7e)Gv`s^QOfPG9X&Vstnmf8p)_^C6pVC>x?V{il6D{a(2hSN#wnfy`f%>HEk?p62 z@LvkcV&o?^^&4!1scT2i1;{SIdj}##ewmHn&XP~dL#s8k|2%%Y z>E9@{+*bTcN!Wm!YNt+R_cLG<)vj812Mvf2_Ip|juDD1>PCwa# z;gFyR^eHgoAWoBC_Yj{k%SG-J%KhAtbCBZ+4EBc*_+5!~Z53--oO~9f1mqRz_ z(07i_%NHqPv+zTDOO|8$ETC8sO%?vM2DVfFvuXBj1#ha~JMJ#hVZ6_%RkA%8@$>4{ z8_lKcc-u|QHhYOxK(8@>lEIV|pP6lOs`+vV|0CflNRV8Gw$edc$P)*gC|M{+a`O^xRJ4)D$%qA_{kj*|eD6QRhEr+n6yK)n{sXw-C=I`+CIb@S|AI zSiEB&lMoi=I51?=E`X_0t8(7pID+Y~h;m;WUS>Ncj6%hhYF?fQWPUR&^ZcR2vK8LY=;&1fwPj~**ESaH z4cCUxg|5B?Q-Av}bG^{NtpV23?vT9wj4Lfvs;VIs@GafZ>t- zZC#YBq)Jg*A^w?wX4bWX8aC$8=N`%782Wt`HM^BOaf1M!KlKs#Pml_4BX<*`(njxj z1@a|!)pb~PW$xC(yD`wMC{v?-at&0MUD!AHu?02SKIG*V?SUBX@#u9a^u3&4x81Tb z57=((lD}=C$Adm(xCAS-g85rwkEx5Q;9T8(T0-~%kej%cz<+@hvsQ|vu|78q$E$5l zW-?EM8^@08&6sb%&{fv&Vd#FH81-Mgr#pJzC9{fV1rwly9mODR!7kYGY3NF_U571d z_ntI6&cTU5O+AVTDy+uNo-+Ky2=p{i91qS#_gFV-r{R-%AW${>^osi|T()_m<$sh6 zBirTW$dQVL@_LG&Ew)#H;mMBOtlOCeNO9@R{sOiq;Pd+ z8%jLr)O|f^3B(sMrHc=$TLwE3K4;1d_dzVe=dg^B;cP-QM=^(8SYx@|F<~+V*NS4k zQ)H6jXBxL0eQ8Evf*5P2K?)Htb=Ouro@kce=_qqU`i^1FfEXeSqw|`s5 z+(P*eyUwG=`xIE&d4f#*%T4em>#Pc$ED4t2L8O{vMc)rbEGL3c-~Gv>+i~GJWLV~_ z@LHk6b{Mc3#m4)325eWetdXD|xq~Tl$8$0?-?XE=o_uQvOz#alOQC(CYERnRFIp?$ zU)PSVfEER2NcMU4bR{}J91lx611PZb@~<_f4JYB#1INc&k5<4lF*}vp^W@l_0NNcG zfV?bHqqSL~xj-{0_tZ=tIW~s;dY3JT(0Y%3I{@v=FSc3~T{}jBvk)ClkBCk{YF|6~ z;K&&e(3;OJBEJQ-*F**r<92`u5pO4J-T_~1w_g_mI^3VrH7D>V5%_2r(^I4QdO@R^ zV2JMq^ltA-0WJttJY;mMUcVBEhI5~icdG>b0(10gKS*$|2IDP0EgD=!AjoDe8~JfM z4C>tq(cZp8z~)KvGEgUQJ$5Z)#3L&oOZeXy0M9d+Ln_F(0Cy>N{m1kUn4{oi9F?tt zmpwM`Jyza=g|h~?UlRLKZc*@7(QqXUI;;9k8lBS*R=yW@9%aC8p4)8I44Z&GfF)9}zUvA&Q#g22FcouPw+a?Nyl4t2Kzx4Z_fw(y>%iWS=|yWv2bAZop1H)% zgx?R&av(<>0tU+K;+&CnAhxcI5M6Nq%{+;DN9)(2jkP9MgrKWP$lmE&4tVH*h=`oIe8#7C-u?{2;|oAFMBaLwVcf&a9#|Qxd$w zA=3Q`(+=QF;g=V?R14Zw=D$Q6ufi&0zkg@dc96HDK23FO3fjX}g;?PhK+&ac{PY+N zj%72;%UBG8!S({OD?#fZ+Ec85HH-+Cnk&|DU2+Uu3c088W(letKM-$uvI4#3q6qre zreMd;Hs$gN6(&<=ASWWU3FL08Oy&fV<9;seZ+6#F&W2@y&W2+LbWZPiJ$=^#ZB?Uh z2cZ1+I9`2~J$(@f9TTq3>D&XNY$1|KhA5w_uk^&!hXdab=)5cwwgK&5^@gdWj)K_v z`)d~$=i$CAcBb%E6?8hbVp{Z<92cV$x@<~HgkG|2Kht*`yHSos>|Uvn+=y=j0l_$9s!=Uz8ajr$Ke*WYILSSHFR~hl^4?e!u zZCLgLahBU&9J0JX{<+O#0oJ(Wa)Io~}; zw_A$%)_-1pQF{Fgj@X^`=eMK7A(JLOFE8prZ}eDGUp zU2Y4(aZpDpuqRB?0%(UC(v&iY5YIf%v4^!9n)(^>FbY1Zju5)o|Z!$sq=tS`b5oE*wN=qXc@%sTZw1N^I0eYHufaUZ=Q*RA z39viz9KRys;ha^uv-{`<>OH=Gns4yrYqTQ#Cjm)c4@Lrq0LuBU=$b982 zuX1Y<#9Qq8IEPW=g2&x+#arfK*H+O>{3rT3W=rVm-AS<1R|HX;cBY}DD=6aoH)GEc`GWyDpK z#5rFq5CCqTR#HM(0I8ud>J^q7fTtoV=%Gj&;IA9*IXgQ5PMA3;|CAuZpGkU#W_GaQ z*E3$@$36A|qf(YSA8kF*lNp~Fwr>DkK}+%cdb_|*-hexQauM1A-IX_T8z3%p^I>Qro%o_IL8}qRRT;e z(9ZHbnsfj6xjbbI@tY=y!GuXVOi^?C&${P4`2BQlNQsRI4C546w$MJz6-Ar3P%k2W z=_TKQWd}4L?X>(cwLKU({wd0QnCtl}-1W zc5Xv6@t8HDKsDTuc$q3zbO<>rP3XciXmAms;#tQp40ykyp8_Fx3wr%`|Nc*=J*YFG zH033|0?vz-NpOkmfwboV^HjjCf0$16Sq z9AuTIPisCMfcp45kMG>=FfEjPuKvs@IMd^3({-@}9$8FGW~}%F)%`s1@0O@fXOq82 z?>-Ha=eHy7+mT==j}RDozEa?XwHJQiy7E}5kYapqqwFMi z|A5#=W3B+RHNf`n)fi3sCR~Q^_i|p2ga4c?mE?l=0Tmus<4I43^HAk!__-k89r=Hb z`ppd_$@;=Hxy1esV5PrA?eBVnt{t4*>KIIhKDQC#>9K*ZKZe)8f zRR2k9^sgxp9kNeVItiwdd5VT7VGfSFbg7X$(&M9_k4-() zS^!C-ZNdU03J%*Ql#&qC+fcpv#`FTM026|=DWjw{PSQYxydQ(Jo192jm_S7MV{cx zA20uroCjA2LY9l&wxF3~fSt8F@_9T{n$1P|DK{bGORXXYkj7-;&9kgA$R;snErsr9 z`?W5TDngX_B;O^AUu%uvgs}2;6$r zN{+uEzNeyH7y&y8$>s4un=p{;0X zF&Ze_S0R7^b4!!g1D)`Q$wf`Z4;4VBEvR2DdI>7N`%ZlObQ)^+{}d3fAws1t%~^@Q z4w%qy5fmP|4M^gONZuN>L$RNM?IRB3FrjN|dNdGuW-*rSFi-T{Gw9SrF0P?`9Y-y1?C))zl@w(DRbCf5kqiag1orgnNE1fH)WLUr(WrdlA9mrB)9h#U; zf^wNZNbGDkkUul5#a)gBPxWyz^^1y< z{%028$$C3wQk7M}XmS(Rts8~qeX-TfcsKkQJ?0jnzYj(SWob28h~VYI)3@iX$H7{o zlHb$xeL(8>Z+=6fAC{{>y{j-xjT4V+Omc~>Lm`ckAgQ<0@VwIH*S57?aE0SSgz3pr zSit6dc}8Fo7+9XAr~OwBW8RVPDEwIg0#@7#udboFd7zO61&Y+;wNf6@e$MUbj@8p5de&SfMDVpmG`46SHomc_C z`Y3jKbta&8FQ=gN^bWktm;CTVB?Z%FI@uNC}c} zvC{_>*a@=P05asCn_py&-t<|6_^Xz#v#4h>P9#|g>L*@#`~?p znlcHTD|G;Do(TQN-?IapxhYux&aVT;680_GWdiKzDETsUWF7h$cD;!RS%>|ztGnes zi1*n0f_+>!65i_)mWy~nik}M~=#4*Q#!QHRq#eBppvKaD9islrMK1c0^sGTpbTVq? z9pZQ#BTQ{R3*7)iFK2&I9p3<#)z^RctWaU~A^h&i^UZ*e-Db=!Op2Z3b&xD`>4EYY zXLgbU_Th_nqyPEImVjZUimZhIDy&QF@0V48ZMK70rH0tXW~e%CF4)(MsEv5rbGZ7$!dxHb#a75w+~ zugn2AYg<-~z7rB;G=+>Q(iHTSHo(H+4>QN=D?uG~!TVQh zhj2k_OWJM(2QHg#y_V01K)|rRul*wOcgEb@*}Q)MJdTcCm`1*Gvi0uB{$q@oj)aGY zei93oI_{Egwn2+|j@-K5?#zPmByJj|BEE8xf_S;!Yc9;(Ejcu_o&wub*RYk2L;3lM zteFc@+?XzIq$p3viP;~-jo64C#|DVXe77M5_TOX5FZb33vA*RhkFYX9OusphH2>al zOyF_?ajfJdCJ@mUbo#h3w!Qg8#)?b?`}%WwcD-8|n;vsvU|$u-)@0P$a1Aj`pm=)k zi-HvP_=9+y>4+$H{cYN(<~~Wxe7+?5=M8Zz&fs6njF=>*Cfy+NJYEL-q8a*(`kW+I z_+pAo<%1Y@yToM8?htWpYW+(hqeQWgTa7j%B~n<+Ms&2Y-f^r$F{3@OM-;2$6Wghf z;>XrBdoI_3lbG}2^k94B@}5zP8@a3;RRh4q}t_h0KhiutuN z3v!$g#%6?{9edozfw6?@(o*{HqkXo>*Zb-0Se}VvSc4=FR(x@SZ>*OK+frsd?d!b> zJb#%h+Q-mg6;~sj=^B}^l#X+U43|(JnX8@F7tIwv;}?f#cLsrqx7btw>S0zzswBvr zSq1k?v>rWIo&arv9nAEq$cx48QZBzrfejzCJ*maRg5^-Ap4;}N!37e&dlA34z?}Xj zmC8XH?9cZIYhT*|DC)!v4$Rh}%vco5uy;S`v{KSIg(J^Q+2z)g5OIBv9NZuTkm7pM zj7q65+d#Jb`KMu9?Z9Y4#SxcphKJ&`LM?9(z@pp2Nq!dOVW4RAywgO5Q?)w2oEfIT z&dw!hRnQ^d;3<=}4v~FWG#Z!c_hts#lvTEKv!g#hhEF>^UV+B`&m5!Tp8(Rl1UC~s z68vYj(VI%Nclg7wr~6XB72Ht_*ga`g1m*pwh;O{AVV+Jgi}Pv&_(6K=gcsie{CKJR zTyonykkxNv8hSnsOeVOXwFtV$Pdd6VBrkxO&NE-N zJQdF|sD|b>_wXCjJ>y_8fdQYkKLC>tE?uzh9)aw3FHd;3ZNvVt%&Zeqq?nBESgLcv z41C-(|J$B&17tiKc^+{FeSfj~Tu?ekfnCcN#a|gMf)jaqqiiTQFqW+|<$q=pq_#EI zXSk!B!Km_0JJjFy^^;5fsqDAWw8MdW)BJ&N}i!SQz7+>a|0C<45Uy~0BE;Rlqp1WcgsPS++y*f4s z!aTPw*Q5L@@k?eZ`Rp3tXjGW5OX-4?{SRB+MM$t?ikX2He;9F7m$I%9Cki~n?rhxE z3Nl>yWc!S454yJ&Tv@=^_A)}jHkfMMYil7Ic~$--Z>xNKG*@b z{G0sPusLWHmX1+o{RFN}rL0LRs}T2KIogpw4oRl>uUuFof`rCUdS^%Edu!(F8Dk>D zXLJp5ZT~Qk>e+Mj{iS6Pz7fqyN=1${^iGo4pnO$A>CH?qW+3GF9Ki?XG?p{D7$Uu6qKKdALUqu8`n+ ze{w$0IJCm!Me|aNmx-YCJyp$@2TSl<#a4+F^5?Da9C}PtBf?ve&>F53ftJkOk&6=~pQ)h&Hh*<;L%L5S^56Ll$ z>pD^VS$lvcXz_F*L_d#vcwZXn40!%_ikmxQ2sCE(6(?#F!H@kbRi*z>j_e`b+etQZ z{CS4Mq2b0BB#Hh-r`fOpX+Jc-ANZ02zrHuOuL|1$u2cDkR4avGY2^IpBPh4H@x;f9 zd4Cn`$=VrSQ>cQHvm=UH7HjZ>wEpqaOyMx8z;nM?b`!k*_s;hCS6Y1=4gv*%I2F zV3hrlechu~Fv2YTBr|LgIx6PU*%)^KAt#-~Q^;%JzFa#_E4m5p>x?tX9_fZ!>k4+A zTKzyJIPYu8qh;{h_Ci*C8wCbjKNV=3?Lo7J|omSAyk@h}Sq%F*9dIZd%P4z35C zU~4WS!hY6yjQJ)zKJk6!%jJeCs2Ka!t#N-7u7~{7Ofs1UBa0N~Qb+oMd>(F|@jeIs zCRos7h|8+FOo;E;o&eDi&zpIf2vCBP;o}f8Sj; zi}fJK&ygK@BTKOb;ZruP9~U>^GinRmaXe*4k>T8ay1x zJw5$=A1rjq=6Uvw0RrPrbGj(X%T zqW!}Lhtd4-0{{CWzAj)~7SZeb$u?r%`(<@6#^xPCgsB^!V0**BM4EJj0 zVPjA7v@Kgd;3ALoTQi&o=~r|+nad}j#me*Zp~%N4NhWlIqG%oV>ILk+KfMn0RV~=6 zr%AAksU@PBY5}-18k3dv@BoH$<*9!xro@gXaiJH1m|fnD1S zPgrrZfA)fpqE92PRoIKgu7Wj9s~ zUJa1640sda4}#sG>)j>TN1m0X{H7UbM=}33b0`Lzk&9Fxk`92Esf2H`91bW;U&k1P zkYPH}&YnSCMA%IIYlS0a9IBC%E)_TKgAUO#62HtM@E>ne+s6ATVE_1w!u^0*7;it- zbR+d2d=+clTR=VqL*96Nu4NwskNxBO1y-g31J}}*q}gp4YbHkK{a^y{lesAy>aG9- zEp~y~-DN1-`X#;3s~7l48?6*9?4mvsrIoJuBrwhrq!~x|3#Pi&TP~txcv^Mk6^oWK zpb=-$oXUy#FpCNub0)~AYYmiMC6VC1si4pRss(a(Ru?Lxj%6^Kuw1AMFPd=6| zb3o#ycK2WcJ!Y>)VV9P$22P}06B>&~c|oNFDP_L{Q0(7!=3egvFsZl2ZatWS-|Egb z)xYV1X4+aqZfLJ~GW3evw@Kt3vG4)kucP_E#d~zxC+M(%zV2OSd<_O@&S=?+EkK>O zf&+PsM4-gORCEW;H~;djy}Ngo7899lNDVl*0_4q}=w)8ohspa3^I&2Y)Gt&#nNDm5 zhR=4>HlLS(3r?|)iP>bBeuIYCFVYquP%rg!U~w6W8x>yAK1+>v*Cu^Eq8T ze-9 zaQ$scTvc57Z)VU>n7;Q#a=_^= z^jN0=xcQ$XUV=DIXU-+k{@4KN8p2W5$oGme1($wFvE%ERDHJurGf;VN$k#p_`7U}! zDrF-`@z&yAE*aq|K$81Vw7oF{zF{vu(}8lB5y$JbyW9>ycZ3zmK4TIDG@`nH{*qur zJsOZp>YjXOqd0Wb1cFxsdY4s zrN%;wT>XyT9s*6_tx*A}zw@OX*|XcJ@z7`UiWCXtSb1%H_5Ub3?|3TTH;&tTuk4W> z8Cgkn-4T&gBpF2^DUy(g%&(DE2!&KgqB0^vJ;%!4viIJ5&)@U=+aH{lbDneG*Y)|l z-`zNmaZrch(*6@NRQG|)#L@*npYmxWt>auv&D%V&UdN}ghRP6pKsAS*`mRx$Y0?TB zjF;I7FIGVNp!)otD>Xqg^yf(tjEL~TnjrMx)F@2a7?Pi>?8cII1IhNI$OuK+$Cu<2 z7O?8grL*#BO>jzhKh+~R8|;b7=exrCG5srkj!$}V-ocxwzaep#Uw%&C~Q_tAbGHrU6T8T@nuGw=N9qfWXC*QOP_Y-{(hFCLL@a+eFC zHaTv;5chrGkBGd)(7%T59wr{sW&VK)26~)x@Ti7(wToH?oou&IUtir;w7B`1h`IS0?9di&9wpSwGbaX2Yz zx;HOimziDd{CC^1O6?a}U5g9QH2Q+n-hC9_xJA<4a-}4Y2Iz}0Q&Xe9S1o@;b@1;4 zAu^6%5eFDW@f$1g8ahJTFV308#vR~Fof8?1!o4q|SeYkDhjs-Sm^xeKW4v$h310;Vn zz(&E(tDl1L+)HqOam~;W){wH_s}hQHjjdJmJ1H75ZK-YH^5Q(q^_IYO_8?-yAocgI z<-8TF{m#P4`GjAXAnMqb{viOmv)159OoEO^$|k5e?}HLq>1lRn5+rI_ za@wGUnD9Ks^ON!LC?tBvl>q z`2*3Y7p7C#<6sUwZF@?zyxb_ZF24XzZf!n$lRgY#U0fWlbHY?YVTJ;qiRNYv+?>XJBnj(8Hz=Agx}!>UmC-=BKdn5Mn|av;3V)Cd6nLZ&NKk z!8wuLLDE;!hOvm7o&G(gwQxiBg}6=gB4$ugzfY}!bB_{Ml~(?)VsEJ3cnVV}a1PGl z`zs##n87>Clfp_hn3qM)?cIA>*q@q~JU_2p%+}7qn2vcA8lPWQ-MU_gwZED^Xtc$* z^eIQR%(#dNzPyrKQ*URn`X=?4e~ovc$fPvn{M^p*jL_4}Cbx zm^-lkj5oRt9L*Scjihvecnf%S(C%Iqu7c-1oZjBN^aNv%=bbcJBuMZRo7d)7ydUK` z&ra8}0=xV>Dof@0uvEf!0n3@dNWKYHoBB~A-g3JB7kZQgyK4}($~z4hbI#`d8A`MF_|DMJrtXpjxsJ7R<9z#0{77OKW+(aGVEmt$?6nBim3Cd%SHP!gf}%9~Gw zW}7v3EAh|G+ZBoVANBLtgUfw&k6HHMMP0Q~Ebc`kEBYREC3y!nagWJ`%^9p^p-}Zl z1r-wfPI*k(y8-TmE%b;>F(W@0)lw4kMU4H$XQUsPebUV<>qS+^hJ zj=@2H^0DD?{PnOrie!zP#%>?y%GLe256cM;3tR_AaQ-%v7yp$*h-6gXSwK0UF5FMN zPKNt{-ZjzAioV9a5ScMK{A~tRMxP<pV^WbZYoqRdri~-I|JFiG#DM3o8f3G9|#1{X3&l8s@CU&qEWtrs?+eJ__oxFMT zbtjy*TNw<#y@>@&7!|*!CPGR7~!|6J(#bL)#roAOW+C`?}@Q{XxD zl`6MG;wn5ZC%8F6SvQCsSO;^dNK&EDr4z*~u!m6?#Z5a-Ok=wZ!x6WyQlp`$^Zh*jE`~BeI%-LFX=- zKjJf3+#Tr!Mu$zHd6gWlTuy^zM4#x5xy@md{O`Tfxyvy-S~SnDvJbQO%v92<_pzPv z1)Hd(9qhE2|M`GN_zzPRjV!swz`(5Rc^K}!ds0|l-Gy`Jn<-y=Y`f*bei)j6hR+q} zQ`lS#Z%lwuS|+0^em*Re)6yosT8&*f!lv9FMTJ&IQ_5^OmOy>*+n>g27WCkghW!tG zAHMg^sg@)K=WKkGi>Si$QX+iT6m;|WxxZ!C*;}3o9ZekU&|5x$>jVj>hs8{Y&dZC$ zDv%ZZQoha^rOb$e4K$uinv)@~YL>3w<@j8>**P)NMi8AIx2mVn7JS#+W01ZgGXBu9e0urtotp4FvB7C`YY1N``sV%!Q;}%A(LmE)LIM~bxRu) zQyxPVWb4Dnt0eF{#;2{ZRdIAQl*2`*UJRXezTDxmA%s+G^pl>LOCb_&4R85L-1k}% zCM!-ajC3C?STM!ly!rccw=7)*k?P5MCVr(ONWZ9vEAX)ZN+%-{o*5QGIyS%lG+8hs zM$5U?ykt_u-PgL>ewPjB&tFe%kK{y!@*=}GxF(@w(*CyQDluYNeR@iSaSyVBosN|i zQ=nZ3{{Obm?L#g_iVef~A{G=Jd3OHu0eFT6|NGIm2es**j6|snh(Y-a14Rr4QZBIS zp~QXHJ15Rf*yH>bqW06gT-_GfccG3wEs1%^?eXD#xzY_pm+#FHY`d`L=*pfxqEFb@ zWCbxL(`wLr-$Qq4VFG?Qz7MB2s{(PE#PXfw32cYj!Ii^n7^58cs^I@%3A-a~r@k9R zgodn+NoL$5BIG~NIhyui6C2h&qU??D86Kxmozm(bggatJTE~gDF$DLkP!eOx$$35|{)tM(^gK@wKwy!LpG zto-|nzc%gA@{;$I4?Z7ehO+OD<%?KJo|fnh{QPD(q64b=jD%tAt^LIa+)p{NLnIKk z2})|!OOp(npv_G;Mfs`{zDRtwa;Er-&52QxooFAyf>ayMzRI7#?5mec9ukH zjiLD99ld4jimr6o@91XiJB_th1)u6+VNm#D})YwLV{5|B>c+AN+|tkiANe|vWUy3-z$eez$ySSfDEW)@nQYUBvx{ z)HNpRrzi*|Ooc~DOGmI5CGyg&MXOlu4c(=M(PpeU=3efcKq-V#1X|`)Rbi{=T&2@| zH?S^!4V$sJX-GN#!TRgaBKEeao#ATp8m7&!p118rhxjuMjYv0VfH#-y+z*y5i0Y)% zJzB7UT`e`-iQd@BGaC9D>8K1mYRL<&H)6u9h2GQ+yk4uFMhgXZ5x3(alO8RrIH#MP{<^=TLUx4_og@~t| z9UywEZc#hE75;Ga2Uyq4VEh60G+GY_a31kai7`7FGUABuv7{g(beSstZDAoo{l3q6 zbP4MixBj(0JDd+f9Q*pHQysnscBkiduAczq(0%8`)5HV=3c-#O9RIL~Jmu-}BQ(hE ztOI8rH$G<(+j%M{xq^|?c{K%(wP1u7t8qWOegWi9jxHqjV99?Yt6h%K6O?YKv|SIF z1OC4P=Fzx6#x&P6RnKG>e$v)v+}3EvN)|@W>ShoVdfyG4c`C_3ICKiJ&i{{uV6@Lj z5tBL$ftN%N-bQa?@|H}Dm0!2O(C=|m*bE8U*EWy-C^ifnnKaS$7Nx*~&X`VB<6Hrq zP+?c9A+RTqc=!nQVVP%qzKKLEgQkJNPfdy`jAo5!a&tQmQ<39k?=z-CO4(_+6N&Fk@8H(dKZ=dJ_}=4(C6~znKK~Lj<8%L-(7FdLt+=E1L|1aWaA83HT;%{2jT zwr8VoTu1j>-ON5FbDtPz#vWp6Z&|s|mC+G06lLq)*^Ppoy@0aG1!{DUd-3sv6$#;5 ziJdpmI2pl?`+0RW-fuP^S;%yz`C34#HkjH3XxexG9O~Bw8b`8 zn3pgT`W=%T>qW2ONZi~XGK|$0X1UeD97NgJlF)|VOPIf;`<)W$PmT6Q>28Q zy!MvN_F?!NZv1bKb`4x(Z`+&x9mVv#DOK5;N1$(UtMqBpK5#!MS5b?ef-BD%L$X`v z;Fb8X^LfE}SPqxv5eAnma9a{YADMQc!z7bj(0d#6f8}%aoERmcKWbsB7@r&23;jF4 zc>NF?wlpL2yS)mxb-++d<~49*04&NZa;e2Opff|)vl{2i zm#>`6QMQ@~1tt%Ty@6Fs=2@okr$XGTDxp@uisy=@`h;y%2nSFX&+mR7_cdi~+|?&< zB_a&ESi}Sn#^BA7lVbCRgP4Va1(R*#ICeQGro;39?U5pZwFad!(L?NB+*8`BfG)TzWv~}8u!~75vpZ0gw_%BY9I07I zhM?mw(Kjwt94VinF`0o3pKl z{0cijRrN9GCGHz14WvCcw{eIC{|X{I`X3EpRaJAFLuLcyoYOryCI&Ifn!PG2KXSyF z%=D`Fdmo7RYe%*GtpS@aKl=^rrr|_Gh=OYB5T-qDs;aq4f^B(1|HHSqnqgzYP zOJEVKNp-p50Q=I&6_Ng}4sL8lB!A);VmA&R+qu#J5&I+73-;-tDBt4P0$WYn9uZ1J$SGs9FUXV>6}kW3rl-w-;wD)!%IR8Q>`RM0>AMc)vniR3)jVj`>lUFXju{o)oylOepg~zDBo+%Zwm_VE zI-d1zIur!4m%3*0qWMqMH!a_=BeTcFKl+GfNL+0aMc z-1Yg@dk|Z6G44-MGgPboT}xTrf-)vOhCQ4!wm0!fb77wc1yN%iKNXH3h4|5ToAXO> zDJmwTj%2oy;D^%N%Q6F`|b595*`7>X*xX6me8Otdpa~xsW zghOTd?rt0s`1+dycBmAWM_9(8J(Wh*}I}qNX{9UY=~HntUaQW?9MARUTW4qf!hhC%8R>#MQhS*RWn z802M{fO-**be@_8d=GxedWfySL&IpRu-kMfek+Pzq@@MUOxmmh-nTx&JEFj3*9q^> zhdKSkdyQ1?6=tdYqp)JJPhK-N1c4R0tdbhCD6YJ7>U$lYkFYc9)2?SgZyv1+5ls@K z?~cbmux15-2bsT-SeX}^i z+zStFi$|p5j-V*hTT*h0s~|CYR)ZqYA1D(pcJBE_gZL$^@Q*4HGFeHY-LoF3l{54C&fv zvy3zS0fJJ86O-R29DX{>w`~*&U0n_##i3cyYj^=mdXx?)T_u#Qdj{Z1csBnvvQ=<@ z_j3_Nt^uKqE3^6z&U>?o?q?yd0;Zrh%568P(OA5_KOI_ue&Vb~gL8ZEVA{QiWj!B+ zV!0em`kR3~D>mT^DW0G7cio(3Zh^A2_U#~@2)^7WbI9>}C}7!=57Ls^$SbqsXw zfXNIITZ&aGv`et^d%dGY;RVFx3Xak!PNiwUjF=fw3&&mU!&j^Ct2s~GYqBHFrF2;@ zxk|_xKFK2gw*a^<`FabE41&%B_WUlrVkj!mIYYyi2Q6|I)PmnT!Rlx13!5+9uoY^E}L02(4-QtQ(AkRgSU7WQ*`sn(Ju-+M-?R>NH76zDm}FS(8Nfbr}1f?1};aH2$P;6r5;d{o+% zy`@BpoJWt}Ku_6F71~QGZCQXD?sXU6daOVkUu$zQH3hmtaeeIaO?G5#-p+B&Yy(ty z)cl6i+0eY~@Rz@Tk|9^SIWp<37K)rMxMe5j|Gcu-CrA&!NR zeg!j7MnCGGaGVO&JSlj?x6Ffx9!P6`&mMg+^j0Js{xg9mZJ_3yD zBC0l_c>mx`vk=9{RQMgl|NGZx5u`X`O8f2`56b36cX^>GAo5Z|8PW z4=H+o`|e*lysszWkmHlFd=f>7J%8`GD1vskXdmB)VL0S#=w;UZ3fIj&l+0QMQNi(B z&nNJl#6X+c$G2}t(3N3&y=YNZL@m`HJFQ8Elx5QWB;_d)i`0j=j*C+`|97Olh>H)6 z>Y268ooa!91J1?sS)@pl_+0j$f(R<@Ync8pm;(bT^y$jD8Ab^h8GvE8qd<+VN*3bCjT%k*v1~_!D2kyj_ zw7wqu0C6-~L~mOcVD&O(@>*mA9REGk&3|VT9R1%YT?t}Gv;7u}`tL}QY*eGde(Vo; z`Jzo!&gc^qRM|4*)mK1IW)4T-Lp69nui_itIR%DABry{>kIDT=!mwZg2ijga8yggz z10)^(f&<~iD7A_qY21PZbxJEv8a+ycrx#uL#*Iet`|Nh)?xW8@CuM2jY)+0iUOI3q zw^E`sVwaPL(i2d=nJlI@J`3u0kNte<=n=&`fg>SKxTj6${Jlg~W%yutpT|6U1767~ z{cJc94pXAHQ!RYQV1k`?y1&00QWw&DI$lIVp|ybP-nl%8u>GKH(JPGj-In){znO-q zhQr+k(gN5F7wo3~*axRu>!LrR8*pCvhUoEX0c39AV12NT&yTS@vEN-de~Pp7eIba8!C47|gETt6DvRtfOfi zkI~+TFpsI<1?9g%P*Fo~Z+8NcjMTq36|p0EX31}xy1g)O{vqo=-4+l%?Y~bTaIbjtSR`xK4`N>u?{~iJ50T)Xpv9Dw*VWJCgA_i?Am|X zBk)7NLgI!oKRPjegKY!9Cxs`veNU(91kSnN<`0g)hbOiV=N^%Ug4Y_&vJ52|dSlqS zv5EIvzm&ykWaHcy_u9{C0i#K9^t67_tyh*{oTld1!or3uu!b;WM@jU8uS7d478e<3%R4eKPX!2;TzG>p1_IJ!=Ca(Ot(pg*lM$tw%=RAN+&u_m4$m z?zF)eMbT>D*bWpLk=mDA2%;UmhWg(X^yo;+wGX#zP4H6hL!Q49)u4GR$2okz9A^2c z8mtUykfe*?TgeAAV6x3V_%X_*6s*=$}Va;-Qg z!sf1nUI|bex$F3iv;b|7e%qS;CeXd)XuqmC0elKXo}YrhLQiwbb>SzCaDLDGWw{;& zYA$oB^~QM~SvM*crq*{M%cONE`!gw`x$`)D^x_G$;=peZU4!!-lDAJATq=jN&Wwyk z#zQc6_;P`lo*O-FQaD5Za2g(3(v~riyn+xqcK0&UaX2QTOhs|@6e2!tCvbxKAATOl zmtxe;0WZGjYIB^c_EKJhJ_`4oSERPsCq&i2*CEr(!5Iw5`b++Octea<)9qz0qld7p z>`Tu@xeI4Id%kHD|AjOKTm79hD%72z(d`^u4Hxd0Fba;cAdlOxd`-`>B5ZKYhE{nE zE)#boxL>6KR~j@!Ff?+3?4=peC8+l2ukk`G>;!UiUh7~oe0z>N0dic{9yg4RqL$$&b7i zIH5SIcTDRWXiZodDPEIAcT_r#ORBU3QQ<*b$ssAK5h}J%XdH#C7Olw2JQAdd4@Dek zH$m?l#e1VO{Ae?N=jJ&%YBWJ();L)shO}%2%JYQ<(P9R((=EI&GHy9=Gf{jR#N1o7 zSL;4P`MC1*a!`ou#xA)<8*pC-J;=-s=m*8>d1AfnnPQ9Qugy-qn zZg#)XBSP0|;KS(48W4yjuF9HN1H1TNB;qWTsO4AD1N9Cjl-X7D;|T6EF!7Puzk_E3J&yATjXZrG z;k+oHbFy@Mckh9HfBM_$?kXTl(z<19)D0~Z`_$n~%&3ZSe)vF}0ud%p3G)^F1CH1P ziIRdJVEX*Z$h<}#xccq5eK?>-xiYR1S2J-Ro6H5;GuE7_Gr;6gQ_&!BDjUpEth7VI z?H`*m$5-Hzvh-AELj?p#GnV?SFd?jf>FKxwI~w_FN&Z4 z$ALzZV%F&2O@NDuTS8O$G#m`7N4^#nK?WisAx`6~aHoJ>qTYK6RNk<3dkoQ{qSHK2 zr0{$Wk3rr=X-<4kuH<+%8AoJH+DL_|wylCO$F)akYBS(^%6sh+p&3G`EXK2Qcu>>v z^m}!Nbj@sBd8V(K54WAP@IEPE^+5_b1VUVt+wvfSR|b z(!$$yKs%pghYR-|$ZGtzbE=*h^~LdXF>wo{^79vKA2TdLQ;ClkdjLCXzUd@Jsx}Yj zJo)T7zcZod|J@_^>DT~?#gat=$1qeNQtP~FA#~qvesVvE5|vt63s&61J*ae-C-|=L zAmwupp!E3`tX0J{_$SJt^e0M@g%Znf$M+FqN5X4pP-!@Qwsi=sDs6?Vo${dc%%|pT zj&3+uGzxOp!23$)8e?kAKLE{I(wh>#Zm@m27}UP$>U8nODq$-f;N7`mm0_59c9-?+ritky_kET#TQO?LW8_y-$K-{b0)EtKG0t z-LkuVn+B==ecBQsHwcGso)wPr;eI)auISL3A>d_9Jifz+^DzAtUkBlHn*t^IUzaqW zL$9OcNFwg@`9|X1N#?%=>)OFHnu(S0@x142DJz`E{5C69Lh3!lJe%ecc*}%N%(f<^ z?(?BDOnWZTLc3U+w7iP43bMRk9b}QUaIsdo9WE}3T z67v5xilFbY92-31*>KUM=%um)8zQ8}%Rj?k&!dKTW`gV-l;0UE(9}MH7Ua?zO^Aq4 zMVndG30zC!U|W^>{9DmlOTDo9cPW zL=X|KpEP{X9s(>II={{DG(&OO@Cl@D1G7T+8!r8R3a6DH-zm|`hrhvI1%9z1aQ%eC zWyWAmR4^$1$cWGezbU`m{-)xB_xt!>4@OqPQc-b}gJ&QlgUy~)#S{c#6FL0i+n_IO zuygA)BU)}G&kGsDz3j3}%og2$VS%+a^X(%N|Hn-cAaoz>D( z!#T)z8$Y|?3L}e5GD37cIVx5C&0=&$9F?JHD^dypbf$=C#4dyg9SDr*<^Q2YRMr)t zjd(uZ`f+D)Zypn}I($35dVAp&p}FSnQ#PU?bABOR}VmmwUEx1*gCL; zX7I8R;T-YvQ~xeJZh=1PF85l29w@4woqC-og4S-OF7*5C!ONRU(>G(gAn9~Pb@jPP z5KMM|9r64%T)HVR;PM~(Cgu&c_gO;g#G+n2joSOPCE989rqPYrFb?MdxI`row!C^3t3Oz41 zy~k6@j5v<{QlhKr03uNZ@2@q#A-wFoqul*1U_0Mg6G&4ItcAN$v^I?}p;X=#Udf4~ z_}y=CCH?}Qlz}NBtP~z({L{W4hv#a~{vtm9l?u(qiOv_`_r55f6+XkDR#4q8aL(Ts zMk8kOezxxofUf^f;DzI+KyhKTZBF+MbXUfEJGiAoe%X~5Ol<53Q?GvQ7XAzpN#%OJ z)1-qP&6#RG0yARj%G_NK9|!*=O=)Yqzmq)lCB|ik4lNi=IA>-uAzns#<1ZEDD7JNi zp!;|kI@b@j$WDd8Esw^WUd2eM`b2xB}9ZXz54gNYI57 zxh|f@GiRFxZVcP1A45N-m$$Qgn*gj{k-ue9gE;x>+1GjBfmn3g;b5E#8K+wx=d$RB z%$xCd4F-6T)oZ<6uj6D$;+9@G93w$<*Y@?*jN+ia{pFQ!b$E_S$S&!*tUN+5Z#<{E zB7(>X8G?78v7)M(&@*SEIZ&$g-zP^+e?hkPj*T=iDQXgY6_uOJhi;@KQ;`yjqF>j2 zmAb;25V@e-1vRS`=+juvEEGP35tN|Lbh{sJyogDq2@^)qwdRjOc^u~}3!TwR#65-# z{9Xrt*idEv=0TX$2=Ml_M$;M;;m_aVkMj!4VEBsIOfXUcI9-GH+bRYiBbXx7kBALL zt-D@|G3tl(-V~|f{wYW&DK)wOa~nhnqtR?tOJL2ZP!dD22t>qji=D#-@cC=anT_@l zFcg*OEY`+(tj+N=3QIkZDo>xpZOn~a!d~(0k>GnGKE=6nVNT%e>w8LWd>k(L+%sJs zqDJ2qLKiQ1twKG;FmWd7cNlhk^7mHZEHnn0C*K|Z55&UTOC|8n{d?A!Q$mk;P-UCX z=z!usm=EG8;(0d)cPPXd3>TwerX=Eq=d*YCxpU9z>q~lcfw-e4%dHAFjTC8|WH*7B zhry_|dIbi~YgfCw)&OSEpMhlO;oj1!*(BK}Xo*RFc6sFiKYM(;|AcIT^FX(l<^mB4 zNY~D)c##Nii+psH-i|@zSkDOUBRa&Up<_OsfoF3#0|oJ>x^d}JB&9zT8f+V4I5sbKS$Rr~0kqCpdaTa31q8bjIwzyz zVDLca(v9P|H{pl4WPuk8%1ZcfK}Na}&T^qh)2TIRiqGmiJ<yTp6JNV0C1jr6jHtej}(Q{c-wN9P`=n=eD=Rfol{_ubNso@p{0g8nB z;rc^Zd?-&fH7t!3%ZYTpOP7K|R`BST!CjEM@4T%;`5nydCeFA-g+NET*sDg36i}Wv zzqfhX7nrB(2?N>7AOUi`d}P(2W>>ya_oNjTxqbx|4RwKW41N3ecXa5s(7fzD7ToWw zwniD%FNlar@9`IP?m?2py@TdBc{D2LtNA+}??IWDN_`UWfT}A#)$2RW5OyXKkR z9s1on&LX~K0chi0ZCViC)7CdmPB-m?UO~akxDUeUTjc}Q9QsoDZSgylZzKVk{T|&Lag*&Jb&^VWp0*hnjYT3@^7lc( z*>z&W*&n0>rc2UNIFPbKgh)u*IMC!im6|+00EB?t8~@$=2Z3Lc{=FfkLrXD*pJur(FyeNhJgz|Z^ zuTOzg{Z*{wPn;jl@HvI?+yW?Rwiy_0_kdo8p8sNxIKmffno_tIXO{F5)01#2wDx)D z&L6T}FfCLJ`Ma_WGw<)r8JOeqkIJWe0WCI1&`ZAK&|`w>AMaw)CaVSQJb? z>nH1)jRM|xVz*>+ZNaHBZovlkG~T^rDsB_TjmnZ*pYLBv1j-ljE%$K#FGD~A-Hh2R zWS!J)WogEJDSU#-sV%9{k-D=M67K?SDY+$;J~YT)*D-sQcnlQBDBPC&@P1&Kx{}El zIld?TxR+SPjhKF{$1)DOvq}u)9ciq^|*p=JHyx%9ltLkY`{@ESKEB8CUez^g-pD{?coTWwb ziy}8K$kU?MnqHlI3HbM%7vaIJrB!G=tQL82mJY2Ob$3bK6hKxl>K4WxZA0hwWDYle zelDuInRn;HG7K0@8ZnP!n41OHSwn7cA)!!L3Q}33UpbuvL6W_p1Ul+~g0m z8`|Kt&DVQV_bJc;TY6{!og}){gw;83QK1OcyA3APcY%BmI6lWe29J5Rck27}NTiFr zXf3)Ael#UByh;8D6l>q&jqqHF%m$IMb4)h$D3UevsLG-|Sc6fF>Uk~F`&%ptFn`J3s5j{*FvtM0r=$OFNBYhAlg&A*r`2AbekyJ*8UI9P1~C? z5@kDzuHW9O3Vp(bb0%gVY&lXRWgiDIcHEyjJpZWt^;AA2W*wE)uigS9yUN;U3j2`0 zv-a>4`FD8UkQujp{TnQ;dh*o7&w_4AG&NQ7B1E4op8|gdbS^gAINTr`v=o4aW?%*e zKDW|OhtGi(g&yl@4=MU@(nV|#=e3g~-(3G)Q6y60kl1n12z#1}r`}Q$AyO*alV%&j zX#TwhZBiRC`n~Ehsbx41g}hp@;w`jK0UEv5DdwQLC4`QdUu{Na+>- zGZoJ+d{49SIwS=5McHwr#BaR>K^LDaqXTwCNy+2Yiu>cbt!_$vd?bRd?{PG}rlCeL zLoa{ogpEK1d-k-D!zv`)*baPRNQR<09h$BvPe295F_+CkHZ;wu0iR#tzRF|8v$=FB zFzmmTJAiW^&OUN$J;h}J5i-MpXvGV@ElOa8ZztikzZ;b){v6^q&`uiRE`rUa=h?cf zi!k~}dsh60AWBSt(w+4FLEQ?O z)p9~1?2KqQ|6`*7K0mgK&907NWL79@P7FAzYESaAu#q^b&sM`113)QdDU0& zppvSQl(d;o@I_<$!2I+fT)wL5U8lYTf8=zv3_cx0Cll=>i&~q3sYHqi_l_ z%KztNh5S9Vh4*5?JgR4bD7Fl;U%K}>z8nE_ks_zh{7Vomn@J<-$%M*WFV>54mV%7C zoLF;b73Am=3)~~c;9{xfr5Ukt#e3F%Ff}62oJV`mUSbgL(&44|)QYLRR6A zZOr6djN|)v==vFbI|XC?I1DQ){#z8 z+pGg_8%xv2C;gyzNYjTwdL0;S^`EsEu7S(tN541A%E1e)=sIxkuSe#Sxe-56G;T6z z$SQLTW$tou_EzHG|3Y6bCVMQxNR(FPG^D}PF7f6I6fW?upG$jRvK(~C8|IEC^Pq+s zcZyUx(!gT$ZMIbiHPZWjLjQz71w7W zd-BP~p&hzEJ86U4#_ zr0A9Lk2|lYmtdsMmLN*h3l(34Wzyq&Kj#LE-} z2i)J`6>E2nz%vMgf|2oh-L&Y_fa!k{+LWk7pFSds66gOcr0C`Dw805|u4KciF}Nac z?H6&372W@u`YzXK1ZK1JLmc8KLE`we9@6d|_?o1QT{Iqp@Dl{$%KA=7;%NIklhTAg zrxc4_w1^Px8LoY|2fJ`kZh2d+eF9`mPW4{>v;hUf$`G?V4P&@VTM6*y2JPGYKL%$i(iL|#)jcmTes zoL>fbR>9M7Y0&9!8eCzICBF8t8}vh}qFkP!%OOGiu*f& zCqJUPdWxZ7jM@?l!23?BI;?+g)q)GfFaByb+~Z0vdt`WH5Qx)x2!s~V=D!i|AWQj`e&q%_MC*~h`C* zw0fNo&-Nv8blwwOuZp)NOr3|-Y0e@ku^M>9_MWu%D!#wzy`l1)7=t0D)ZzS`4G_xm z$zAN-2RrqP8Fv-%JVW{vjZC-@I?5wm$$!5d3cKjn-iK|0qM@Ez^usA&fANWHEr15? z*h)X9VmyNQTB9(bU1qeIG~RLXC>>HF>Uu8gG6RKV^%y5nAN>1E@4PP0jHY$#0%Hp#;FuyqgYU>ohHWY#YrI1BwbwdW=R9A$JT56}G^ ztrP*}+e&M8Gb{M*?NrfbIXeoCjyOhdPyrHqdDru&nbF-^@(sZxX7nFP*>;f4Q6%d1 zxQpluHKO}`x77{jlad+y`0mNhiiiyyj0<*~A%iqR8j%no;h%TWk|#M5;0ZJ&3n##T zUq3osaNt4bmh+t-;G7S|*Y!gV{LH9Jwm0>z+248%!zveH7syOYx z*kP40y>6_&f_vqc{?ImjX_<#A%F8!ZnfcK5uCUdi59{#6Q{G*w{sWi{#A^L`$cV_L zZS(#st5EqeRl8M?Ev~`%!2ex~@L=2NdvVkXElSN}T>9$aIDmt@XzaU)AMB z(s=S9@vx}# z0H1?UBoAaV{Gvcv;~RM&y$BF{xpUme=^H#w74|$)i1!lz8Pds|uY+J;Y2BhO+>36w z7eRUbC4^r3TkUpg4kVqwIxarE0_{V!3{RhQLhs?fVNsPah}+N}!VY@$I6m2R9>EiTZhcFV$@S{b>#GGA!XsesMGJw?@K+;bhn;PzBe2yN}`(LBWO z8_D}dlD*7dz;q{wHZAcf&>8<*-03m~k39G8^L;Zo@2+mLeslsTXNnkA8FxYGl(C>K zH#_RKyjYeY{|A1b3f0Od;X%*IT<*B2aG@=Z#meS4N6@>*#hs4jHQ*){GE+Oz2bNVX za?YFh`^~!faSIb4V&)vJWasMzw$7t`=l$`ycb4>1t*{L^(wkyFY{H4onyu{x;rkQf zQjw?s9eBa4;kb*M!WOWLwhiUd?t}KV^0(@HwCMJujbT}#Dfkll>WBlf?q{R_QFI>uSiWr-xA)$J>={XvDCb3ymKjR)izJdF z6h%^rB(jyQA(FE9-m>@Jd+$Bo>-`HJkI!>o_jMlUaeR+?IQ#Nl{Oe3mwiD9{3$tL|`POIHPy&4_a0;yA%Y+HagVuT16}ZCO)OkMC9<(Rr zv`RLd;m=^Rj8@YM7)PXj_qoW0GUtRDLV3v1_0NR8W>~+mRAb;gud@Rm7yV03*Sn#w zG3Anj|2~W(RU--iO;9PlC?!TY0sqbR6tUv_LGYTa;ZAcRXe8Neu)pR*QaSrPVXz6Z zS!h=p>n95Z#-c}`;rI9b1qF(Rd3ds#D;W9|_nEfZT@baPL8}i>NnC$KfbKY)xtXi| z7iNr{bfT^By|b9gj#m6HPGjO`^sY5oT#M2@WJpoBWI*h&r^?f03>eAf=w(VPjcP5mhL&3F$JX~g2(ZUmv*9|(C2BUUWb!8jK#VlBum zkVu87>3$fd4A3A7%8WT-(Z_JL=ytwPVge}K2@L!!%Yq`FsH*((ra+R(_K_#In2{54 zih2YsJxZ4-C;HZ$3+#sqpK4l%!JA;N{Fgfsa@USl@b1h6#nw;9yiAk9h=Z9Oq0T!gC@ZwSD%H88uvhc6}`R1PmJoly0|{@V4nVn>lqJ* zelUCU;z}Z$`z^p?bVQja!BR)qI+G%;HUo>_9tlCTbOa$bG)Z zRX~8uWI1%^UXO#vsk~3~;g>+?k?o)gzOO{*?eke=kfQd9&VKFPJ&3VZvT)26M%8)~ zjNIkHz<91qXq=K4_k-O=Rw@EIYxmGO8^(s>Sg zW;BmPNv^}ns?xPNf=yVJ8q>I&ehRXV30-(#i08wneSNzdO>pcnqe$p;yf3dTHh;X{ z1WyBN9<_DsLxqCP+*%Uu7k(0{uS^{Zk6p5JH6$v)-@pf)x&LAR6?b~U%@ue{$8VyI zxunuuVIzSSYe2`IVx3IV13a~(%)%9|aKHDVRF)ngdi;^_V-oH+*ii3xP}3?0ACc`V zGf%qkKEgTn*~xC;m`c2WIHn=y2fwC#I3==CHW`1z&U4SajUByV z`FP~!_i4zr*%9g%5kwAk8f5ZVPi_249UQP-39$;%3v!#DK$S0|{z;Mr8Rc(%y_V7r z?b0c(rh=Hu^-$~l&VD}}=ym(-NW6!aM#PTM3#|~kuJPmYF)n0YA=OaXNQABy`HuUZ z?ScCqN~iBN=fl+Q%vVo?C3tq6C8}m{6=a63KJs0yfsA0zn6MXgNcALS9gWCQ7kQ2`y5kra*5U zD0VLmra~jSJLGxmAJ~N@7ZJYf0whiTUlcs4N%f2zqACU4Ml_yoOIrAinp-p3xtaEn`ACuY_DKPKE*ZIE{K# zvLMp;EuOsP*a4@n3$ggBnZT!f<|r2Zd00|RsC~`l0c)aNp@A=&Aw|mUg>j24Dt7zY z=rl%%><#Oe|Jz)Fdr4VY6wh}d;#64vg;U#*p!B@|cTWr4Fzoo1kUR%-@#Wi226*p4 zRh?sYWEzHC7Sd@Sa-r)TNk3B0&VuwSwP>C3Zn%GB}@01UXr6r$&k3y^cWchh=*@)K+l1 z_UeOKklgW?h`S|-47sVJZUvAauB#2xjhJ6_D(8(kC+?kdNvFOf#k>hKACrSVDc=X9 zRm-=v*e5;b)O@-1PBUm%Itk5|zX9WC3?By-CP0__tegEGVU+TjRIY5H4o(;7y}QiJ zh#n4%=WhARpy!{S=uufyqKew~hGpiT!2U;C?^4MmbbOTH$qgTZIaAqx{^7%*cYcI9 z?7I{SPWWbZAg~Ler5}GUXs)PkR5^y!$<#85>-^ztTD z*Y31TGxo5DX zvLSW@`HMs}jHp;N-K_oW3Yd+oo|-!+7y%4nV#h0&NRUaVf5hwKOvpAW?MeS60g^xR3wFcDN@0-a3W zGNJCgjV8f_bl|sd+8f8YITzjJ{TEA((EOuQy{LB^?3W`x9ifN^&FA*71KOF)`lpZ={VUI1r$M=zV>_Z8j1RITOReOTI?$-Ho30-Pg` z=NeS`g2m=A)rce;a!yMgWz!=?6Kr`EdXXgPb4V$9%SD>c38C}9KJThX(;}C>5&4hDhJZ$!+x&rXH@KJSp4rK_0mrx(L~o?m zV4(aF%PQuJC5*|Q-PY@a4U&3U`Tjk)&K}pc*D?&@{#F4;4Jgr*^VwSgNeA$=rt-oC zZ&tMI#Mq$o5c@P$a{@A%`a#0y+K%X*72q}AO zNt{&DphwCg!cENc_?*5_^WndRBdEF2#^BFNE6@}~KK!T}0?hOx(h{yzsMFTiyc*AA zMgK@cowHs6VN<(to!>6FSWJk;iGGC%74438#EZsaYSnJ|G9#+v1V(*AHMl1+uIGM} zC!A;Gi*3SuBJ?V(<4nQ^EG{ul>-usauRnYO|INn30wNq9B+Z6h!;GaH>8!}$Pv%s+ z|7&2Bk*gCmrbbLd;#zVpjetmM`kzk`B1UP_=1rnH5Niz5j;`o{^3{ZA>%OZH>6>bI z`XePOyCS9VJ8c=r^U{g3N;aT%9pgpN8{TPC$|oLUzQs4P7tEVO5u$iaw?>1 za`{4g_7LQoUanh99tE-^`vgJ9yFkP0a6jzLG1PdmSes6f8NJY(px23|L{gWkc<9rr zfk)}QS_S3~^HN%>_WKi{@EG?ZBFi|qDYZMM*hG)mL^ID=(N4f}*;q;QRzH+9FrGes z6!R_fdyHP<=bQ+3(?&x7g8AD^Hc4YY!1C1$du$>%qN%NXYBYrB8aV-ncQs`|Ak8#} z_=ylJ-=zC;Wi^Ojyn3!dnI1jwsEV;{r$PyAH$Soc?T31_{rEP{h3dZg^x*5gaS+J8 z`@3ak9SVP%Z>B16AO?4pq+fE2IREkV_2Zc#aNy92%f60%c~b>N8UvK*R%kO@Yj`9i zJv10Lqv;3BA=_=s)3ea+;rHb@G0q8|+vQPIse=sTCE9?y4bVXNddW^b6?m+7{B5-} zVef)+KoqqQvg>d56i6(FyAm(_E_FJC?HtRlTss-6QuO9Jrr8Kb7b&IHl?hR7P3L6e z{Gc)e!)S|V1SJ|rMmsL_lBm&g+~oQ56$sd7kosbM2ZodrkEm^=Lh_wi*Y}OZuvzVx zn=pZS2O^*T`(3>aG0!qY47I<3ddbV%t7b%K$D64;EsYkHKek)O+3;Le0QRL2Uke@DNY@lX^ga@ZxAR)nYo0&XGR=hd|KfX z4Cr2!O-j;v9XPkEySGZpjozHfIYZgPfyT$5AnhIw#3|Dn?bNso$3@!q*$s}Pzb|=Z z22YEj3rqK1?mu1!o@ewi6feKK?79xBcSYZn@Iw` zNAEw~s=J!Sa9>K;p1!&_8#?x1^!?hbG9dFi_g!jY04@gV9G)DVgUz2T zI_E=bVO&1$kAeLPIIIp-ZA9~3<7e37Qx-NseX=H}WG*>U8!8j%G!jB20*v$XOu10}q%Y(8YXbDN%}H+% z_f4Gd`l?}+#Dosovfirv4u&gpB%{5Hj7aMDcnX`%3RqhlFSx2{2TK*fS{xg@Fno?E zt!pb4lwixRYB(Fp*cBxE&S70={@}tSO%*f~cQggouYh27kQaK`1mEiJOUJXegOgk= z=cSu7FgxCFN4K^Oy~OjR^M{m3Pe7Myn1>DNxtMC7^}xQsrdi5N$0Fbg5B4+0ei3Q; zM8cu`#zjU;xJOj=x!{nME$-6{B^n`XrvgoKR z5(&^xe|wP~9hn*wBbmztxpVU4Z{w*@)~Rx`HrE4~xc2B=g&H3^ru-nC^u-*MkXvB&ztJUobtT z$b-p|?bIrRJEJ(F`?|})7fyp(?;cUO$iccSU&hUc}nZ)_VgBabkjOMC`Nppa=aXd@Z`?`%%p zq@j2VQ{pTYKMQ7oC6|WhN5dM1>Ri`K#eJFk3(lICaL?7reOLL8?NVTG+%G4mjf4lx zDk`LdQ!vc3T5{jy8Hg4ycGf?tg7934oN1PR$eq5VdhV?tiad~D>Li?nB)g%PkDm^K zriROCoPivoq+=21s>3}9F@Xa1?D(9`_eN$SiSUA;dsk!S5bpB`&eJ^|fr>tJ#oUf^ z2=*~;d#S;IZf41Qj$oe+*Cy9JhKmH~s(5}($7yD?`9xsc4C~8dt}c1R_UvfiH!5+t zXc`vj>nUQ3$dTs7)(!%lC3wI=I@z!@4ok6G} zS$!mosnbQ;kWwPGAG4**ZrtdKRKdC`=2%dialLPj?*VQ1cq(W1e}ROY_vx?V>`0AW zP{XkL5Z;MC_#GHYhi0FxKlzj> z-qYf}Vi7S)7-P*almwMCc57N6&jTkTxq(}&T|mJw88UEb9a3-$ zuBh4p$iIG1`SGa}XeLuOPwTRydP@fbjXTRgz2OwE;YEt*zs4S|>;e?W3!h?&ZZ_69&j|162xcpd1!^_BV4@EvY8O!8zJ@4*Qk&d-$F zZJI4Jg3AWMU#dA~}6|oH!0VPUb@QY3{n}MnBrl`@`*C21= zXxxl@W&6~K9OBF<(TKCWiTBARNG?pg_6qa4BcApdKaDR3Zkf#?ae-!d?OF3mvn3E* z-Pp9kMZdvC6FP!mu^IUFSaIUNskdOFUfZSaL4u47MP7;Ky@#+rEFW^*^5E{PrlWGM zQ*f%X^&Zo+7+}BVU0fU)O&@2mUAz)jL~ zfG55mxQRwcovzZMTLn{MeFom}sa1;Ow)1BYFdw-R?nQ#MGaMwRFO-2toz~Plic!dK z@@H%^i3BDx!b`HHp+M87c{DHnD>(e|s=go2j+Cfb567M?0^fEe3tpa~VZSHqAO7&7 zrIO7EXX*%G$!FU5Y&){9Xz<`;3iz z18y;W_O(yPe4W+nB8PQT5bEX{pVXEQ>~E%LjO54=DPdRhoaP>=HUB(o?Uf@ z-2^ZQ>F%}HBS!m@@$wJx^Wh};P4^GZS$pZsj5c`e!W+SG)shr1U{kGlr$aLjUGN~M z=os!78a0_qi75d(`D)qJxIM6zS_~)2K7xd7SH9~CZNoD0xBcH#S-`S>^l^f~AUxPF zzG^k}1I~7Ryw1nYid3O8V!bC91eLZ*f{W*&bo{>|fxLaNyG`;ph?@@ioyaiX5B>*_ zp0;g=w-BQjV-o_c<69u`E_e1O_Ep~)ipU_Is)NdVfzSO->mf_bOFZ>XK4g9fki56K z2Kpg4&0Pf3K+E~+KNq73V5cT`h~OheeBPet>$FLb|K$Lar5i%X=g~>8M-T8l|GKsN zwPyq!320*jR#}^v!3ZcB1_ZC-18~AIa>#`|lE0d2J`dcvI9OK=z%C8Y=IKS9KK@n~T zWKYK2xwgd7@H^U18;d)j=<_&c|KeXT@ih-(vSL7UcW))Fh*?6Fb@}}Dd_Ry&t0yY1 zAA(mM67))igy_y>-u-VfROr_H`2>UFWvJ`YEqM0s9@Gk4{B3ld8%@K<?ZU&)K1K?J0d$-hpn!kOG7GiT4u z!R^|-E4`Rgm$6`g!KauP2|RNh`O(@0os3#WQYK5lp)JbO z`xyJ1MH{=y{@n+1M<6^cL4YRf72<0?lOdxM%7t?Ta_GHf=8P*#2E2Qj^3r?j6r?JV zybC%ghFb;o?iyGZKB34GlWdU#QMu#oG7gkT^_^Wm4_80P#f>EX6A(rOfv?r}&NHGX zWVJMvAGhJ>O~37?geBO1r0z9wdmc90Pe%FNq({GEJQZW{=NqedWjGtrp%$UbfkoAH zh`rJ4q0+yfV4$QK_Kj)-?h0HflL{b3O}}Lts4x8k-mcr^de^I=RVAG+6T`S4Ro^O^ z(xAiUA--y>TNLO24!kJ5Sk zUD_&mlZF)jtr9_ec6W03>@hzw?V$wMDcpxA5ooGpF%3r!gY>Lsv%!l%-siC!9jfGC z8e5elM%>l01y&Mm5c1GZmbyX?oi26aEG@x2YFRIr4l7|q9Ya-ppxF+u=j9COyKp~M z`+U{W-(<+UqI78k?SSowjd}11esqrjM;1O$K{~PCV~KfUl%DlAF8;NFh^WZR~=Bi&nI(P{+`kyT62F9o2 zO?pxhFxiQfOoM!I-zI#}d1f1IMO#!hDQ3WeE6t64D+_Lt0|#(qM}m$ML4B;rdmh4&_e;F!Gf3*X0bH zH(i#0)lC-wR3yhs&a}3|k__dJZiNt;2_|Gy8d9BK ziRVKuyBUKT8lFZoFQBxcI({pLK+haptPgi(x-tvLBnI zIi~ zGV)-bgL$UX+vu%OxEkPl%94`_UG@DotZ#>TgJA@FRpFBm_dF*k*?tdB@ql(vVjY{;@HV%GjRJCc#2S2;`Df%&&G<_{nK1es_4RHnE5L4N0v#=q-z z&{p$~?&?Z0Fd2KuKHhJE{m~C!BfmI-d~N5A9|;u@x?}p`#5y7B^G%~HPss)W5h3c% z=SvVnOsGZL&Vr=E2HOOeqcB$?g2mJ_6>NSM-f%9R2d*~m8ApMBut%}2qgE5Jx}b16 znl=pDi}EHiehtB&?Wfn|w0TgCmDNB9<}OoAE8o57Mu~FH)zXyF2S8ekV}4hk5K`VI zUD{z9gAD0<>9FhtAXnSxum8eRD9Hdyz7zO-Za8HPjH{V8~5;4>FGRcI08b9)0u zPHa76T&F=URonqFq~ICj$^6$rK~*zW6n zhB~g|hd&z`QKEE%Y;i0p(s;OCeFf|5>+*CI8{Twi%4X<(z#j(mTD&pvG2UzWNiaRn zJ~acVqa(L`4di(hj6f^mnU+z5AL*xc{JBG!IZ`| z_H&+e=uwI(y-i6DOj8X;0M4g4TKKJWMqsY(zPeeo%nF=d8DWzjbA@tdhcTufG$7h^5qk4!2NZIAuo3uoCK6EF4L}oqi@R`Np27JA=)e^v@oN4 zrGLmL$Tnb;)SI_6xgBgn_%3Is@S^gf5}RNK5oEyr>Tw7&=ExpPK5EgMgE`lSGJ#vo zU?O>@_6X*Vrc)3E)UQoKZT4%Y@~>OqSK7ZS^%n0Z?j1_#kRC-!!U-g$_<8m_Wwdzd zVh^O7{>k5r=>Qk=tgQbGe?U&`7~d`Yxelj4?2PD9A}$DaW4Gr=pG%&*5${Rh_qo4+ z2PfX6_2u&onAU;i*=o%wk7hW3UYJwkuo;xOi!9aedP9iaoJ;gzCy2Tkh8};_2kSqi z_C~(N0RP(^f6Zh@^r&d(ei;2<5PEmNpe7sl|I+Xq^mc!RSK8^Nd|0o#v;Ot%kO4dT zoiz_KNHIR|-mTpGYyjFaXYS{jV*V6K`bgW%A#B<)PM&vu3Vm~K0+^%- zTR&XeGgJtX;y*KKcRX(^b^1seC-9-Zz*DDNLj};eXLFKLY{yXH@vkWS(;=Ll6}5u8 zO~@qnwygV?4dD-yZZUCX!{}X#wkujp$e+_+B;?LXl=-QU*w|$XeiM?tvm#=6Al0CU!y`_joz>;X})O;wG1 zj=puG=@>aeRNo)SRDN|Ff#wbzRS;Ky zw9j;#0reQ3bW-{<1&a}Gs$Yn(Z{TuXepbs0&~0-Q3HTmC!+B1_{@j}oZJV@RcUT8f zf?whe^xi>W*gML7Viu%#m&I2S`}q=Y>lxXQzJk)Wf9$up=#g^;|I_PKThJ;}n72}j z_Y+#SnUkN`(DTBFY8Q!Uk#O8c%UieDP(4c&gV1RKyeFu=eK(F0X&&*Adq9>7MxrL= z_jN`g!7Jjh+|wI;)G$-^gCx>BycM$RF#z_%CujTvF!w|3Kv$nd2<85~@v;5MCS;F& zuItAMltsZ|mDUHbU@S&hKlX$LO+?wc$&pc@Q`ZXR(?ZNR;KI1Yi zo->-4*~zd!-Y~~OUGS+7G}C{Tq{{n;dnST8B-f|F;87r*G^HroP~M|8e@Kfgp8kri z$2_5fKF?Txdun9-_eb`v`FThmU{t)dDS&c6kny&D5kbN=pE>?ee}j?ZDSO*@H-S8> zK~!LSL)lJ7Vte&Q64daKK6HIK1Tv;Cv)}eKfmST#Vww>n%Ah@bpqnxTEODaOdR*+l zmmvE4H0dq`QwqoH5MZ8$s(*)MOc?OU3pSq^9)!B9@-_d8Iq-bGW8OZ%hl1&urpq71 zK-DR8?h5R?r)4@)6d6y3)^p-Q6~Ax8lmIKgb;EP0mfQAAIl+bI?{!Zejz+=G%k!zE z1z&+G>CvL@aolSn74b<=2kUosR-J3?8Iai#;xl@c8{O8ZdRI3?ij0NSn=Z-zgWS&l z3PnY6-h`Z=e!dXz2SwZTFF51M#pyc2fHCXy7QiwEq;DR zGH**oQ=_vd6FEbPu-?{X#lfV3^UoBtx`kwI&`?YInEUQB)Gi3+($Tg;l+wy#Avqz+ z_FqU{c_V-h)<6AgpIZZwv65E(P$D!qaWrcS_dB6=#-QquL&#NdG(C7Cgl6DUu0Blz z81IJCdSu}}&wzJj4fc`bbtT%ZmaM=tF~*OBt%Z0_Sm|{%*ntIsQzm_~Lm*asoxWI* z8Fil5;PLFQfkUn_X}3%=bgxjP`F(o{xc0eCd3@S{JG=6&rI%z-!|Di`V+1v_{k0ur z7=-(b-k+)a^^E~(eO7j+#B)h{lU&oY^Il>@A-4I9= zl0rXAhR)dZWe~pUhX%Fl)!%qX5Ic$b&yiQ8$lqlsbMT08K(^hO~Ic3a-HJSyn-zjWe z!90nH?ZX6WWfF8pg2MXOMO%24#CTS8DiHTtlKc_E+$4U6xaPMrBz5%?*$~WJfy*uRXCC5Q zm3wQLP?<9q(zg`SoIKwR7sWZJd^=fDNe(~RD+LkMA-6yF?O++`Lo5%n+)Kdi1>H=> zvogpsl`#EW#f7wE&LkxKqe16NGlf<&Q-D{N_gnkJ4M=|wCfSjEfO&ZD>3zdjfSxR? zE|r20z4%Zc%yNwuJ@Gt0zGsPjbZ;2nuYFhpxvnL1_l2X#qC+oj?tl&53a`seC@BXm zz9l8k2Ne)^2Y=PFdLVSHeN~SAD5DGOO&@VzThclBXB067@-*%2LE1IY7oyxSbh{nu zDQ?u}ska0DN7W1Z4F8}S1*lAhVE^44uCueZr-1U5Q>->#FYo* z@cOPW;g8-}7*3;Bxt+HSMwxSU-vxppm6xi)H!KZSG)$aX#~IL%>%ni(Hz8!9xc(~G zv=Jn@FKdOB&B7}I4>kTMT68~&I*BBE4T{J_L93K|dkW^JDTK4y zOPnc&SNE(KK39)HML2^IKMVsqkH9+&mojkiX!| ztvWh=1nIA)IyvHduwnQxogQN$r08{2rW7p!!^t6Q8`>54$q+6T9bSm{J*V1!p6i8s zw9+^9NbsJJOM~ef*7qg*GVJFTwjr#QPb1Yo7T$l!sWyC!a{~vd^U-;KVU6QgdhRm@ z)DXEghGqni`~?bfD?HbH{o}~;q_Y^#1cXJ6-!y`~Z-mrQFI&Mc`;yPM%T3_0!|1k- zeW>@Yd|A2XSqFm5_XLHvj-pW7)$X_WeaMk8mVBq)0q8!C@WkSN1cFNUnk{KjWE`FC zAv4R4az0AURz}%F=vr*1yv`An+Lju%TfGXm6@Pax$Q%ImEv6IQdF5bs(Yc7+H48qc zsQ-T0$d1J5pT8J*=?aD0gYBQ5_CrwoWLFz4587@_xw3tq28|7!WPPoF2n)Htod5e# z1*FwAmL$8RNdHKixfbIBe6Mmmxm>XXmPPHy8nORDo>Ny_Pum&{*~X_xZ!jY*uMZ+# zIG?z2nSJ~==7$;1?gZtIVD5cA=fRs(8!&WKmM`b+9Ndc`m4Ejv07#tAc6AXh&b=0mS&ebEiw19z{VFRa4I(73zpMGsLv zq`iK0OPu}yBA>fjU!~av?pjuzF3Kbrx!*4%@P-p5HAVC13yvs@e>iPZrgswE@j1q# z#)ZG5|G?=;}jSpK>tid95ho2 zkdG_ZWe=gW=E$c|U{v#IC8eN2c{Ls~8D#VDZNGj))A0wCh$qc=u+yX4E&9iOzU;z_ zU^2Rqx-z)0awdF6Jsc$JKRmwN@(n&n7QbKrz>o5uBubqrN=g6~YlEi}u4PRH@{DFPg^9A$HSFx||TD|d^kZmw`Xjo!mUx!|?n$~*V9jH2f zn_7T?7sd3BG5mfp0yeT6^l907;C8l?j)R{Raa~Z^K5L!}8duX}tv~W1;=LDwckNo? zg4uGRe-;%oV$~DR{5J>LcB(|7gPcfR-5s$=cfd!|dny6Pq>=9&W2{hI8-U>3DLuYe ztP2hBh%BvvpPGJm#M}nd-P@&94*3Vh){*}xe~Tgs$Hf=F|3rY87t`@xyr1f!Y0-T4 zcop_quX_>&=fR|_1C{Y;33yb$y_SJF&*RSBZvyp~;f||X9r2S%m^3*a25c}EOV<{^TU&)pQ<4pjNkAS~WXSD-=$J{830r0YQLTS$4)L?0L*k3f;y{79;kDyoFK87|8W zL^Y@#LC0gX7OJrh$fzEEp_eoep0hR-26mT%3_(q)HT^*2RnBe~VEcDLjfY zB>O~dyqM6&e;zlw1Db%je|t1#1E1ruQ8bF*7a%!`2)X$$LzvR1PrAfJi1;#1AeTia z=;^tBj5K9Jaa@#pX6rT3Ds1jC__GPZa+^J0JgkM^NdIjt?iF}<^wl@UKOCsF!?g6O zS1YX9dUrgyM2YG`JS8qYWkVgV3F5QVBuK84^CtbuFciLjyE&|b&)J5-)1r+`XhNJ< z@#wD)VE_9u16>ROs;0asTG~_rf}RnQIkvB0aHLNC_;?5WB+VSSF3yMiKBxEbWDB8X z+NMn*Aw0)t$X)1cs4)i?^WWU(^V)%;tp5^%1}2jKzDZn}#`&8U6K%E8V3v49ce1Ln7nIC5xOL8E02%n=qzYN3yf2_jMU%0{8(qnxk8kqGM zo(b2GBjVf#Z^Zl9P+8S_VW#93MESk;>%jc==9>q`g)zKH$*@;e%o^u=+GtMy7LtMr z9C?|*`>VoTN5*F!-4O7YrR+kd4BXK8`ufRl0`xbc;g)sXE{NBa8k28eokKPC?=_J& z(CmB^f6ev-*fk6bd;S=L@4fD1D+Z)!dHWq{20sfT$vhwP49|DT&+~lCst6JLN3wgL z@pSvKX+tuqE*f$hJxJ_l@%i<9Ai;0TQQ5xDWYjHw0Pbd(i*T%Ng5|=K{Ce^#;P4H3 zE^#>mM4mJ#8*L5X{cma6U%GGblb`$QJwFcgF-6hy6fO2sTdulpGmxO=ycx@oSQ12D zwJ0kb&xul#NIJ=GG{a}s$Y^n1%(cK8sN_r7w;-o%dP0LN z7t}SS-th(&z+wCI0(of;?BC&fxrXy4#DZOXtpr7&Idg$YhlLtVc%zE8&Cg)3a7t_n z`+Nhr9?_o^EQW9Q&fgdM$c!w{roFj%R}9His5FGiY{3K96LTCJ&7h)qIR9VkQB+_W zC0dU6VQFeK1%n?kPgYs8w7F&%Zt-jpKBx)>O#@297^u%t6zG6<8M*^mn+t2cN|ny9JE8!Ap#?(yBNY zxDHaPe;qQT9=~SUoCiZ7nDpI~4|Afoj{1M+_TGT~<%S!HA=3is$kDh6)FSI$feMYf%spKB}0ux@Y44& zF$hk8O%9f$OgY3(HZ>1nZi%0|C6f+?u)h>!x9tO)gy=i@gmK`pNRs{Xej98jDUv6L-_LwZbF}B_|U1n;>uSJ z=L+0x+HI>rfV+&+agZ4;Y*B25X$vCqolC88ZW4$u`)A&n<@dlbjl3LjZ{kJ$+Ck4I z{9Y?sZ@aZ(26tbFRBL(sgI`RyCKxft*5GGqtu5xT^w*mTwlh#8&f|S1OETqSa6|O8_B10$C9Nr$`od>q( z`CYj`=U_Ip{A}AiB~oFM9~@-DT$iA}tyunY$nV=+;EWbVujzY#ixF)Bt^K`ORkL+q z9zSf6WMoAJfdi=rlQEFfcJ{>br6~}YAwDp=_#F%}Zu+7al z1hb#{6{=V_H+e1K#E0`77Jon9GUmYk^8Ny*w<-kaS;w2tzgSj4P4Wrp^My8e^ocaEsYHwhQtKuPlwa}! z=*0h|Fgoz<` z3is2T(J``D=2`{4wCox`_8NF?$t-;b`=0A&{hI0)YJo%GvAXMF8r-+lYJGQW4*s&) zw$|W&b@^)f*RnToA1{0-wOt`ZcN>0i4yYVO&)Zb9R980Ot@D=M6<7y%1@n0RrEo|l z5&!S!Ia-uyOV6l8Ac(G>{vSo>9gg+e#$kK!y|*$_NJ4Vm8KF=q4U|wBzmy75M2Ir8 zS14pF%3g)C_m;g!_Rf6o_kV{!p5uAG-}}C<&*wZhdY_Qcp{GxC^`<>Z(CnR@D8f*8 zNYH#8Grfd!;Vt6Hr7Ct1^c)oyN8`_1|C6?F*amQ&sS3S>dy%Dgj2;`7V9xnVYZBRW zL?|gWd&PK;5V?hM{?LMJI9;yJ_|QQ2)b zHBzMZE>gg{#0pH^M4vy|afXuY>2|IyGW4r<&T%A~6X91apTZO=Dm7vvU*DdCD{;hz z=k>_ZExo4x@l(R6^VH`-kB%|8GT|#4?uLEDBc*{;*B-%rm&29Q-`>Lbg#I?wC?E1& zd&r@_fH`j0V@rL|#F>*{t1^Y$_UtZ+l z6aI+rc@_3DC!?T7gIa3IcMQr%wbvKQdVoqqqe!`o5RI;0xM)!E2l9&RLuEtQAvk8Q z$z@0s4burZHC@AgVEIw~ReVost1Y}HOZ*$?c8whLM>60`-kI20?JRt*80|fUbGy!7 z3SK8Nl3_m?O??(8MmD|1ndxhEh{Gvi&F$g@kX5jp4EG&}`_U0i_3m*HC)n+!&#?vi z0swr$_eIv1-hpAgYdzdjGe59@MX=Y z=}agq{=FqPIGSP3W$g2;j{Fh0&Y`Jea31^UC+Yf#W|QDb*wrRy%tbpKQ|+Y-!Jkj1 zv_$iP5VFd)x#4xT63;m=3Oz%d$fC5iuY{rzy4^T#Sa+{NJ3AZs&h2)n+^o;{$z?>! zGek6AZp+{}{ZVYacoM$G1^8{cVPAk{+vkiwe?hQ{z||aczrXXF8-M$|4bxGye;vp- zpzLE3#lX{Xc<9Ku-;U2eKCe=*Jj|p+p61qeF{3h=i!qwcbF&jdr$2~&)sjGF$%|sI zjiX`D=|NhF0t33?p0z5hOpVGuw7=38Ux#I?v6W_f+{dY?d3dUC88TQ@Mem)<1A?sQ zOj_=2h+Nn6PUFl5SclFXHBBD@ors39%Q1Pdl=w`=4tq#`F49t)PqHAGo$X>F#CboW zdGA$AMl@O((bHi*1-Ea~6a^e1LeJQZy@K@^5!F#A>eVA$$X=M6wI`hueJrz`KQtNz zLiN7&x!`#?>X1{Cj^~bwb%@On_wnVV3SGhtFgK#Tl-aop?`v8HS}$K*g$9-7LoGpi z6k%7K7b2GnXRMu7UByXIiul*~_Yre2Do<0l8JUa^XN7Mfv3^%~#PKqHO z#|@A$tuA{jnF#Nrqn_>_;5}yO#>bnfGceoSVk^Etjl51js@=HW0)(-VgxBe5QQTMO zeg9onl+vCaCqcIhcYPDXolnytpH%_!EDKRY&RJ+JZAOnS9*_BRQkMdWuN$aRnQ$X7 zTluu}=k1|sCwf(1a|_x(JTAG2y|Kd6ClelM3!-P22kxi5S;FTDf}$a{>%HU7>GU4;)@Q2nP#(~t9nL4UxN&NavSt!_1b}{5Bp`V$>hk0v6O?e zO8`X#)O7VGw?o_w*Z-F6w&01aiuC+{WT+*9Jy4}<17!RaV-*$!5y_4Dm8aPA5wn@T zolcDV8_%vaG)s5F%OD0iX3WzeJmDUxoxTc1fxX>H^$ciuQ+eup*(SIdODJeuqCh3& z5^)~-%V1jaz%P=#4{BPX^e=Ju!ZOk0l~bQ5LA<9;q+n+SNF8&%(-=oFU)GA7clSB$ zrLNqx_)3dT$~SbG^W)!HI?a9mvux<%)zoJ#J)`it{1{K1!wNi|=NTfUXF~t38CCTD z`Ub!H!*WuC4?xbK!M<9a75T)^eab%F4}}CK$IS5e_!jn&HRL)2m;DW;P|P)6Lotp6 z3V1)TE3-{Y>;lySN7!#XWJcM?FOChq8;140`%z183DFSCxr&SUIn*`iwpDh82#t|O z-Y>f~4t|f5$T%2s;YmZZui|JW5Q~L;yWcYgih5~T?X=4ftM+CjtYjFrQj$Kq^i)Ii z(}xb-XV*bcEbP!NWfVBP-zZ9L;7g}FG^gA^Y z3Xg@&ofYwUL&wCxZE8ROiMy0{O(digi=BTv;?lNLVvx*^Lu#yRB)|aQ!=y^!p;Q; z@L-=_I&J0$3Y_aZLszpF`*{Wmf84(59`_G=J1!FO70$p#iM=;Gxpfe|!%B8yLKHdG z*6^uu5uxKEnbLx(JVAijgwc%6W($B3vt)ZSx2q7I}!CsaIO#O%~n1Gfbre^ev-wSF6BycO6r zWpS>$g7_72{}yPzuvjtZt^kX&^OGsq*ReLJ`?z^{8A4Z>My|iNg?-&`3}n^+;O^h> zN57cw<9%YjaC>wgc=X4NKM}%x(44!@^?fv`m`1!{A$Ju1yRI5xhWA2q{>Sa#mGdAL z?}&ek_7mXsl=;Qmdz~;X{MBD(r4+vB4Sle@M~jLtkY4@ALyo5C+egRK*-@*6q5P?^ zC6J3YURNYzL4%cVTi<43-gFU4@v6hV<11s*Y~*anvEpjjBi=2@_OK#Urv_|ood25qymE= zNb=Goe{3IwoZfD{t?B{Ne$Jp|Y6jFQrXD(!jd=!=9GPrXUoby~ZFbrf&smCDWIy1k z#f~Ro$&KfgAQfNd-&NcJ7n-uWjI6lOqRrFmDdtNMX1Lz`E@B;&wruT!Vr9_9O?9u% zmzWPj7hCZy^c@K5aHvtU7DN1b$*4QWoWT5*HC;^%Et(!9+TU3xMgw7-dG50`sFm{x z^(-WU9EPei(z*eA?~`3--oMcKxs_vyvI7)|&Ak?enn1cvoc`MaD{|CNs|w8FLW4%( z53J-zAmfc%bRT|?pxNpVR$tZN`aQX;mE!Fn_)zre)RRoO8OWVNf&E9K0#he5CD&k4 zs!O60_Y%dnKPR5~MTWHVI6~7g&poBr=tB-K_9>AF#FFu|A_ndMj1}02z>qvmNfxI7 z?r3|(4>^~?kBo5Dqf>cMRO9WsZ?gug%%_e?RX2kacUr3@Uom4$r zG7pl6n@lzlv}khLw)0=a82FA%Hg}VRJq+ zTyPH{Jy9y=Ire3riQ@~zn;4WvLdm)t!-BTVvxnz#Zh(`hHtedk1>iGCth_DuW(16_ zzUC%EM7*9?;=j@%+Yxo%OMzAb zw1qR*F&C6l(c;9XNod+FYO+|W1<{(6CaL_dAg4X`-%$r-#2MV~hO=5ibkS(3Rs6+K3sJdu2 zDjIad8;?&!;fhC)>4yj3V}C8de{=Mfb}x4^$Hq>?@n~px(i-cf2E}|3!=}SIzLq5(4Vd{isP|V% z2K^OVo+K=;1?7Ih3jL!!z^8S>;talb8~+Ym-sBnsBi%B-UI`9FnD{1Rqq!aQQp(0Q zYRQpYeSsZ~xG>r)khN*V^Yt5?wPB~kI>77GBj4dhW|Vc}(kVyGcOll=3E$9k!F=wJ zJ9-LBVD-0lvdfwbiTBrfkzCn^wYG;=+M9E5Z=RlVdYTn6iELhaCcuqeyA0cL;T-bC z?j*M_=P*}6*p)2%<^h=lZli1|=F4X)k?=bz?&ZYDZ_sQ zG`Lb4-*O9~Y9YrjKJEA%>#bfDY`X>$>+GKLfduHKbD^-V1|K@B{FJd$ejIE@X#6I! zInX`r-1$?20_Xw##@foSDv;pTqEy3kt|QCwr<;x+z}DY6-{=|&^rph$)s*%}IJ!{0 z6CvCNCZ*Jh*I3EW@qx4Ci{&|RRQXg9$B72Gd$l-OIrkszOzl*Mr7i&F@2_sr|2~4^ z_}JWSGkiXo86r8TB1ey}44;jYz6bNMuWrv=Wo(W+;n=h3vb#)S=GOM14)w33y&^E!|Jzy!H|bbaPIZ^6ulNVR28H!OpNCO-7I~d z;~XWD{Zwfjjqk0hrZz47yX0t4sybgLWgebC?oU}x;6n@VY4cpg8PHiqXPIfrPe6KV zVmYJ^`%mDKq(tN&_%p&m#BGi5of1@f@9^i+vS@3(iFuRH`5s4XW4_1AGggD6eE-0% zwQa@GSOC?0me4%?c?%2(jHctUFN!CLrDz}LrZ+9GiJZ~ugJzlYvhpSsFyPd5p6&EH zuyfET`|$374;CuV&mTdy?`_)uePl*7K@q%uMfLD4JJu_J?gvy|Rv@xJwEzsEJ?8`S zzeApT-)a9@{N5K|A75Cw18*raMoM3_f|6y&uZL1e5Z+B!r}BUh&brrYwH8w%hr))K zg9%2|+{~l<^+F9irWxHn{%;0isuoAgRq4fxVcd7D)R&){XGS+wZ6?#Me1}BZ z*3@7&MpT)(#&@NX#RdmA@BIK)1{ z8XXZcJsA;-+z!9~)f~?~iLi_n z4?^&G(lsViVH7i`UZUhJh-~K{_VnQQZLoR4rN2G`XzPhC6q?2MbvijX3a z47=sLEhwQECwp_VA4c!<|CB#d1Qr4H_T*yt zJW?Ni(++z;A55Cl7ylRnQ{>WhdYTZWsu*Mz?G(f3(LUbcdw7rXAGKd3KL3gQbUiKB zz<@dh&X?7m#P_AEJ>8X<+s#I6IB)-;4SEZ=jkH+`fbXaz%|YHcMBT5IX;z;B*SY=# zD(q$VzIry-2r=NjulA!;!~H<-%8|-L*aOxfZ@I5IEJFRH+QU)S0ay}!qHbgR8=|&# zo)!2Cp#oDuv8UC0_NY0`}pKscqp$}z44Mu9i)GgQxJfYV_S3-a& z_jv-VvH$Gn+64WM{vPx;#QN~z{P5MA8Bg3ih*7Bd`^)M(Y)B(P6iI*Ygqx?+lY%CL zLG!625YiGLA!4Ukd)r2!9Txm{^S}mVqfGoo|BQhDyGULUMs5`9!Vz|nZ4p`iAI&lLf_d>%zYe`1=+N*pTBltBhLQ`lmgP7vYIUM2 z65j_!@1>4CVIf7ox_!wwUvMIi0%0=Ab8|rZCg`e3KQ%f-s7I$ej&rDHlG87;w?MAo zxcddSQAlSmE;}CH1+O;tgrl47;8Sbd>8&XGFK;pKU|M z4rnnrkq1finGy5j+_~swyNV;p#OPrO@0az*SwJI_5YR078pMCaE+(k4q3B*O zFl~anLv|QqIvgJLCj-)j?*jIb& z`=8t(CHx$nW)U@Xjs@oH>3bRJJt~ZRQg^yB$A8GyOYA)f_TT=NBYueaPD@+&TqQma z!0x0!bk8y&gF?$F_f#UaK=%(pYkH7B|;2oFXZy`zo^n(M= ztDO7_JKr;|W#1SC$DJc@#6{WA<$|{njjx1|xast(LX|oIdyQm@jy4d{A}uz<^PtO9 z2hE2cNYJZ*>d(W9i4aLe5>C2AisGB|BoyxB^ZG%QGzmA(wOjSH5;gvY5t8EB5Cvjn zdVeB1rHc~z+@Vj9<0YrI!%=yOvfm z*4_t7hn*_CA4lMU7w>7$Ka42Q=lj8n^aY?VHxw)vJdRYIhxI8P6QK4^S!vHqH2AA4 zM-QHP3r|`vo0_-qq2o$n7u>1bU_E;+-#>p2zT^}26HA3cz>6xWd+n2uRM5)3ad{Kc z4K=gt)Nn7kAuoP8F%M+)&&3&htAV8l!p0kXqoAPs_syJyD7u@fC{7VQnyI%28DFI|A8&n!r^ybU1Yy{3m7xCX{i8B;p3Oo-jX&TiY{`J-z7r>s3_U}jgz!~Ijy zmtkVU*rRE6SgLsj`{Pi8-M?;VH~$8aUIVIJofKHEyqb$IzX+)5rl#|$a^57eYZ z&_{~rj#D=YkXMcKLSYCadcrsqmu7JY#|e`dUq2dx9Knipvwv7ce=yuOpY;gxuXvm< zqFjYlb;^itacZ=(==ApU6Io;vNY-~}nH)I~2jZ1nIrzl;Bx$~G0<&7?p>rleXr5hL zlwRQ&ir;OG|3O>`b@N`DmxKw?iA4*lSkeyM7t>FSS6GLT)4$xBh_;}hS$Ma^d>*8X zZYr=yErTMBKU>TJ2?~B0l(4Ed49EUddH#w{0rhb8jZ#kvoS##i86EowJ~q75?fAUs zyq^8?Yu_#`5Uv4tabjvcaw5+j}Udj%8S)gVyzv94f> z1l`wURm|AS0cRhRFqPU>Ab9J@`wHjBxcgpwaogTfmHmePz?}lwJWp1zh5-_`B{+yHd zGTd*@D)(MxL}e`EvQ(-hh^#Kb-Np|0P2T?S9%P7wvs05XBab@4=R5&t5(nl06+fpe zubu(wQtOvYLD(b0^ihuS-!L$Xce37c?}L@owIip_VBWh&7HPJ@Fj!_jJreD~hQ7z1 z4biss0;|?bTJPzOA*<1abF}#0^6s)xR^qY8kjh6EyPU;=+{C>szSYX0$2_Vg&iv#^ z$MVGmsh|ny5aE(kji*E7yG{YgOn6=uMB99yni(a&h~2!II|6dlT;Bc0N+6O>J^E57 z1-OPN63B#T5yf$m+iS}zu*`i5KDuL`nTj*J<)2lEUYT?Fm4H34UzrD=vwZ`xrbwqT zB@)!VO=Tv*LWlOuYJ_KS-t&g9eC^$1gy_)kJ|--bsEOiE z>wA}4Skx;>G%%+?n7B$*%7l5M$1Y@h&at7g$LK$YbM%O^x8C=o{64gFvyT=T9YK^` zoqhf;Q&9T)T*sK-GJNo|^j`Zwfv(&-;^{r!0_n`*Yjx$5(5%-Mr}Ur&Vpk*c^75vj znDK73`6dwztljps8-LDK|ILH+jl8B@%@N?u`%nIG824@ykH73PE`XpBH&Z&5 z4j7Z=ec80}1Ey9N7OzJbMbjWCD1wIK`w~tR7n+@j)A;y$L)<1r0B;({id~pAQ%cdGuiFj4MftO zgWE1UP(=HQLHpnUY)=>TCq`|6aWEO1y2}vQ{5zRXb%PGAjKvRV?JtAEd7XJX?9KR3 zwy}^!r~|A<=U7WtOu)h1Z9qk=u<=A4B$W4ygUVqlH|! zuW2H^+WV&p_W<7*ieFfQOJ8o?jTZd~$JMef2kdWbtV;-;|c@Uf5 zSOpXWwHvyR@*v$mrcG|m6lio~zJ)M(1=0_v|D=#`BTDvj#CmtPF_*e-%w)C`(r3dS zr4Qsmip7AqPDdJe(aoicztsow^`<93vnY_08^bf=7j%e^vA)nCq|hz4^X(rGO%yFzt*z#18Ox3a(`KOgVwQF-5f-YXn&ADcf`HYwsT@shfJ6& zN85uWV=5paF1{=jdx3Xo#4HmBM_@>rhgE_J_k{k^44d|nA;wl&b6!m{iySajk$}qqr0b`aw74leZ@Sx zd0^cW3Vx{5i0Aeiz~Qvf8{PbA=>PAAae&nXys25)~hM8*3ev8~hDw@?Vx`KjTFD z3haw|qaw(oXE(NUga@5OY?=G2!C)^Vc7T)R5U8IdLN>MlqGLk?OBQ{Qc6#GP6t@$6 zaUt-Hd@g_<>v4_pi(n59qtCDOGB>z*vhYpGaa={vp>4^c4N2F>Of)A+uM;=JY)v(4XX!bv6wiWmDZJ33?3)pL6B< zSI5EKow%7!m=8(Ucb#C(Qa~;*`Y$;@!#ssZIU-)3}^7 z1)m<2*>B){Fz@tWn`T-zw5ls=gmJxxuglKjyuU>d+ly4!9PH7i*Ka%Fc>Xi+<}Pkg z9vz3rd=eRlk?$bLwCq)XjvzXJ><#a_`Y>c~CNS4s--6lUVj?y=5|rN=!K*=^2+gi; z<9y59h*{e2>PgBe*xI-)68D%3Wowjkk+cqhkba`_U2+oiR*)e1FklSaGzjG({tIVF?q12e0 za=4WN?uJcPjc=+TN}XlJT(lATjy&s=q~688c+nkpbIk4Z?UG4-L<0W;iQZ^;4e9XCrxw?WcF0aNApm*eC;vzaLF#7OhiN`-GR7DnUul)D| zU`)OD)OjYP5uP{NX%Y;VkaT5KPAwFxTq93>wE~iwQ(B?F7QpGtj|8L4Jg9A3_*CrI z1#G2JDJicDfRj$!NU)v_QKj+vo8HFr;Hh`#kZwkoFfToBUbzHas)Vv{6}P6SrDJDRD3!~Fc|w>s(PU(gyh8|qjGU>y6@TF zi_21|t2;*V!!dG1hHOj!qg#cbRXLw}p-niyCsD7Tj`O>UoAzUv z&v)xx%Jbd1ZXgWVefJ`L4zk{VUv*)rf}4DKb(}sI;K2p?qd_8TaF3*d=lZ2xAlEDR z4>YQWpW|d-mJCBD10o5GmC@4Q8vQ-cZIGo3Mv=bFIcllZ)BDFtF+>7Zg?u7ZV= zF=YZIwCDvJxwpN;9L~E+gm2|^KyF(lQF;X-5)tf)6ix|+TOB0jUU=RPX}bdw5be_y{ubc=_d!jbxdJ|Jx)0DA z(x3#-RtPoqLN=8ZjE6Qq&%(B`>`nN1j+fgqB^5!f2nk6_glKfZ+w4)nLY_I1n1Hjw_7lxwV>f|{YeNNq|=bZz4fnE~#-6*;DUwaD)V zuTDCr+okECd{D4K!qo!9#S*q!y(PfPP(1b{gb)SQ6ESBi_5%=-^xRg?g(gq67vt0T z-1yjqN{wj^@?uI?W6HmPhINH#MivWVeDH?i+SVT!bio=b?LMgPpa==WKH@z!MF*20 zT9lM~w%qj?&c|Ju=P3Mq35F&NSYE}nLww*hb*9-0ur)6)m)F|DzU;UOSMd^=n3_Q_vw_z_fE{h6drlfpMuFw9RaraED-p)un3oND00}gwiU=Nd!LG)l z`Bm(rE;kAA>>pLPN(qlFx>TVhoTHs8Q|>Kpz&jI>DJkyMmxwij0RnL2BhCPCJGOh^QK zB;u<~&s5{NJ5%Hf^M$2Z7`&1&ACGx+^gp6(1y#o2t|Z%a*`5mU@_hcVv9b^-VmhlC zr?KB9_`)TP0SeUP&6ugw8Ue}XR2gKr=WSxy+d@migbpKkuN+$xKrGe6_Lp&QY=2ba zX~->cWFa3?(WgEQ9{E@INlb&`et;HzT2L=UQ6x}Og`a}XyMi*k?}*XhqcAr$9efTa zjnpeJ7D3NH-<#HP%!ST50^I2!h2Hp;g64%R(XK3< zYkSyXLy!0Q|9u}#WjS1hWLICoKW7R+|4)msdrmI&;;i$T7Rg{r; zjKC3My4}?hL3D*nE_D%~+xVVN`CY2{ObvKz<~+iw*tw?<9qQU;zwj>ii%&k9kzk zRJxG83YS+2BSdyGwp9z`lIXC6N#aNeIr9JJ>1TJ635|7}lNmYE1LA9w z300>Fki>)~X;+*m2O#3%se5G*b_85AD{l)XDFKZM?QT5eaySq377=tjas zLb7oiC@Mb4=Vc{C^~1V1Q{pI*`X9!%cWg5-*JZ;lg8MsxCXd$#?~|dEA(5}1ATvMD;Oz7pG0)bJQWf+tkDq{cf1oywL$u6}^VIDQnPdgI{#8a@ybUEn=dagLZ z_{n|>7B6V=-_MVLgVGf17G6ozGqGY#bFUJXvYxS!_520;w#_#M*_dl(Lpf|yo(64a z&pg!oG5)Q>^`z#BQjcO>hc5H$dRljwk@c0&6Oft?`l3#8RMI49a%f4p{siXxIAq_~IVT7`ht20+ zOie@@AQTb z6FiTFxe&)Q?cw7f`JUY^Df$o?HiPSj4gW%JaiKo@o;w(hkLS*RVL;FNi_ zVQ#l7_{)k2w>6sS9&doixaO-Zp)Q!^iN8|Lp90-ww-p{73Zv>&UEhNz1F$ETqxp@q z2YwuTo_t?f7|{lqo%O~1HVuIblwEk&udx#`GJ~VLyQ|) z2Y4pWk$U$ZM^)~sEQ^#g5O^;789l=@_%0b~@RN}QjR}m9oc5~)&WVC5sb9oM&ynJ3 z03k2hR(&WRjXh~^xA-|k={b?4WwO~(hDo@`UKyZ)=O`C!KM^l+lOSG6Ql19SCWx)! z=9b0JQ%%>Z01szoBy`hO%!BpRxj2w)+BQUzAc`ISGPQg1Oe2~=pbK#=MyUbFs3Yf9q!uSi*70J2Z8BRx_5VkP}3Xw_tWl# zs6A(h@bka`e6Qbf-ld{Oas!P;{5(WxE6HEyzcn%R+=q3u&!!Vp=6*a$R>OT}$7?5o znseZ80@Z#EH4n<-t1@I+!h8uK0hdRG)6iq(#p$4i@7b12Y`nBg=uV2=MdD9s@J7vS zbHEq(H72G1&9pSauadUdvOqJ4Y1Rp(!ufI5gMhRjs@-r9XKXE5_!GXdTK#86hu^Dd z8ZXHVabMllQvY4^1hiXBj$T+7#C{;RiH>)SNL-Y8ca4M!(Y#VkC7|F%%4c6?WIP^& zBL!QA^&vW%a`Pmihvj>JiRpVoW)GkrO+7n?sT?@S*s^t_Tp*V2e@zK@bT|@ zG!Nb%>_U&;v?%f~;PwyR#oS(Bcgm830mwg=)mqpkgN%p&yxI^YMnl#4PCV7)nB#Tb z_Y)^2I=W(HsD#h$+a?+@21z)Vvf#Slq5cDu+B2W5f6N667t4Nrj<^^%E5dl8WK z{!3E8K1<1cORu7gBZ%uPci$A|6->W$SSn1yp0{JP-t(OJIbo_TD^T4C^g|=>dJid4 zXYif5@~5Rh&8JH2@MatsR33&`JtIQLq;u^{KH&RO_z!!8dB#^O+gi-(I8b0s)7UmU z<}9lJw=Zga1AJuoiBsanLH^>IZ`W>Bz=DR^Tf?v4VCazM>7|YlI32a0FFQ|%7~Obc z?yrvk=^q^;5xX8(-6AZr$2m@B)v8tA!XF^cXEbhq>HvzbTYIuyB|{gaOVga0WzdJ{ z>U2HxHOOJw{E|S8=R9xnLWioUFu%N|larqj{Ut6{PxwcRSjs)RxRfw@E-8X_{uV3x z!+bpC5$-o|C`5Wt$2fw~?z9N&$RW7BkFO00!*gW+lpR?|M#S@SjPYztKYV$ndVIeS z|2}@^=kCY-1bLrIPpB*w_c8njWV|H}3NOF|yo+JKO8{)wKz#Uv}FJ z_r8LX!UHxV`ep#9aF%X0K~!BQG9M*80ulM6ss5bANb^Z!62VJaR4%<(Sf3UKtrkDh zoV>okcCUPpW|LWx$BQK@!hs7NX%IDL+>QpWBZtHnEwrF5mfmtUhyxMPnw@^cg7Z&RS#_?;_Ki?V{k>`DMa9C*A@ub#!lAEYuqUFD$b|g~N;eKfb1#x1=a~=3Lq!>YEA`fidJcM& z@+ZJ&eM$h;C3sb;n;pPAV*Ym8S}Vv2b)89Xz?|m$ZPqch>k#?-)n-G&Fy0p&?h=PK3CKxVDuaF`&0Q&dQy)Q$g{1k2w%YqA5!YS{vm*5U@P) zUEic041*a>i+r(H_IrHVr-NSDTK06&lb8X==IoEwGXh8gM=otVIM9!Y!TQW>PP9I@ z*OVedfxah^O{yqSpu*%K(f2QAAYc66bED!hU>r)Edf5I1I1fxNSQ*bjAgh(BZr>1O z2OZCGlWv92`m-4cN+oc&fP;Ym=d%;tbK^InxlzV1xv)y?8_m0rLX+u`1e8TvOYs@o zu&HrO%ZD0s;OTCjG1OfG9?e^o>#|d@Lq^1U9_LpJGK`1*reXd>^B4KO^Q)jhEwz1U zCW5}6co=xghcazWDXK_KQ8O|!b9_07vfXVB|!@ke}4}|V9 zei8ozR_3~nCeMOlp;{+yx$HFz^SP?Wd5a;|)@L8v!*U?bL^o3P>kjnll0B19QU z*!q--1RYPh^lMxJ_l_r3uG(E41s10(#=Ksb*EIf1x#`j>Fxg1*JXfrR)qJ=9g&%W} zIK-zkEc6lMBd z5V&5!kHS8cDh!530-IVni+Dv44A?Fa&|Dn{Pqk*YVLKAUO{TNfKez`czkfF@I$8pr zoo7z|-*f)*L-L988dl`ND1TlvI}WJ0yWVu!4@0HG#5LobX2`f$QEqgt4>s@X-4ShM zK+-`w9I_XAaGs7e`Z@H2-krGzG?s4g@5Om8htrF&CDU{3MLosZ@jP5OF&mzY??dO#9}Z*P3J?~y z`{?qs08Xf?Q8H*3LqRx^Hra+boY&18juWIpzdaubytXGoT9-}$Y(m6z~0&PAWUzPZ|>LxM`oRMGd}r7)4$_=ANKb1(Vm_Pw6s zo-#l8=n!QnSbP-@>D{;r3Jhu2#)TP?op>SF)QNqtsja*g-nIo8BW)mV_#)8Oz{Bl4>GXr{T95uXz^JVTKv7dO&s$rciZjv-;8O~Q7 zBhek*fH$s(UUy7sP))K-P=2les$Gi6YY;eqhf?;0w_f7>O2V}L1pa?bM_);;I}4z_ zdxNUgjzZ|iXzthAZ>{ij*HCDqWff=?)%`ky#nEj1qXB1KLL{&8XsAED8;ox|w6@9Bxh4$Sn(@Zz>JyVx!$y%)ONaH9u;cuU>P zp5XkS2Ty8}g&lO-hSMY0ELQEDrEI9Lb2DY zf9g2TIJ0CXtf!2*$Il)WUL;)weHGZq;$TK0(IgaRjeqf8{<(HG&ixDR9P}BSZGa&& z)i||HGoa z_o#Uh?uu0Q9qVX^9x4s3sGKDbX;q@fl13CMPJ3|Kx*cpD7e#7Jv7%KLxs>{^f8oQ2 zOc|sz2;+xG6Lg929@kUt7NgZ8Q2WxM$SG3-Ykm@bh4?)uVbJ-;(P$qmRt?C`5HO%z z(kPQ1%q62=c`Ps#JPg5#G|KIl4&jD5EnSo+Ejm=Z`}W%LZQR?=BO-0h1k3%KwX)Zv z;ZzU(!Ee@SoNeJhg`{Pk-sSpv0Asg*-uZAa2HHQV8NR#;0)9Ec ztR`#RYZ*~wDZ;)9)t#%vn>(cFQm^Y&w;DUDiMz9OUOXRaR+b90XWD@0eYq)*kti~I zq94Fx!vV*4C<>P^;{B#f@r7H&tjO(qKIKk)6BwZ2v9r4MDl=Cdg)Zv%z-5n&G*wF`wKfWQCj05`a-;|_i{cgywywhBANrD)1TJp@$arayviYy zun{t{437EUWk*9&SpoqM=+NQD{;cTaFnssz@i`xJ0Bd^xMf}WMg-{Dp{f4RMFpzRV z(h~PMn!Lgcmu;3IAhSib^4=8mKUaT!lQk3C%#tkq@ILW+ruyZMUx(1qW~{xVA&zz* zr)kx_dkelqR7|M>Way0W-G}|#n=m@)%V=r)1%$OvUAq#$4ENff>yMUZV}9A`U1Gj{ z%=gkdKJvB>I*-IuRRZ; zy!{$5_l{B8d9C34`APPZZ~j7)(|_N#(@NmVeh8Nr&fiJ%s_`gW;=WefQF>p`TAW{* z>>7W~i7JR%QvOwTK?qggG$ZCDc#)5IvlL8%%;-x(Wnav3JWMo6Hm(GC(|@&T7SDHP zRQePo*J1OC0&UxiZfM+jDDt$E7R{X_xTlDF2T~R$$2M_4z~Y-X?}NfAa4T`;|HhuBzdY!SX~qDXBNwW2W%_1&loF+PYNsdAv7#Z}*NiZWJw)_O zQ=trRfha-dB*ke;H0Ub)pv$rrHe!PW`4_OynSnxC(1QkDKb#f0O`mOleoaRK(`FA$_e86$^Q10*Bh?#Y`Gg_KP-V+I-5^j~L ztU@R&qhm`;e;%InXjYfd7elBkt+mMNH+q-Zh!FUScNsARYv>t0?_r%*-Uh6hg^T3 zxNFa9fKlKI86!~_`1&z08~D8j`||5Qm^uj1V$dzu4|qRO7b_ljW$r&1GBJB=VYmjV zBR?+PxbqRhXhm}#^D`r5CvDp!lnm$^jcmTvbz5MrJnH1S&;*yDqr!T42VAJ+PIv9^ z!P$N0Ql0UmDD|X$%gtAOh`~!q=@@$}bjeK(Om1+ZF#C-LNny-g9=!2NAMf$sR5*Il z=(3{}8}YqZ%vaY+bXXqlq(Ubi6`D}Ca=_2<4V5?nek7zC_Wm*bA6W4{;6HM}h>~U- zFP|aY0!nLzvaRuTC?5z|3piH}lPxDbR_^vgg^l>R+s=&Wlk{W1moab&*}5TY%!t&y*XsC4 z)?l5H+ID7e6`nBFd{lYQh{Tc}lvQn3f$(z&enXi(kV_64;3E@6OssDN+Aa#Bq)NKt z;QB;38S74Iz*`73o7W%m+$BU6RCF>*m8I$jz8Mf;hP)selx zF5#NNe|in?`yV&udVd1d>WuY-Zbr1??^-chWDBN(cSE8J$WXESyAAULR@C%swM#FM z5Ls0p6H9eX2bAB-AHh5djDP(uZxG_%cB8NGH+t;rI#;8vjL+>xM|oSaiP(`(gH+I` z#BXriL6`qf3;V;zdh)F_rog3R=R!Z`C#DUGGT6jVf_LdlTER)o?dxs%Z=JdtUZ>o6 zy{q&Ms3k7>Rpg1G1$v1!REjxk7oM#r;avI~)50m~zceVS*FEmc6`aQ=Nx3U6*$b)4 z6WiMptY|xJvhCiB39x!^9&}%V30c;bJJ_o1gY5oQJ%u(Q^wo~Kf9?1$AhcSNBbnhq zmIeQ9yCz~Ts+)>^c>yh|`u95OI_5FC>)M+)zVC;(GPSu!ZZE=RyX%B&)V83Tsj%=z zkr|n)MG}c-w1KjS!v)SAVni*&ex)+G0v-@N@|v*w4u-PNxy(695DQ5fv(Vrc5Zvn~ zy+ZZ{=O10di_-Ak=IF#|Z|@--_1-6>O=3lN`u(%&qNk}Ga>a0DI_H`5lU8MXUi6uW$%%__ujns`)`M%<2iVq?{nYR_4%CV-KY#xoQrI6 z`tQe!c+ir)@Jowf1kUvio(_qb1vh^FkrJi`FeuJ5QTUVw0{v9>N_$lh5gn9&i1~f2 z%*ma-LY(Nhbxy>nMJpt5N2>QaP@^+W4E)7>6`(s#T9xym0`6WK4iGuL2+vq;FNC}y zL$hKmAwOmR!69Y!#DJDCV$!1i``fk-UU<;@nFw>EXn(ciKgUVY`pSI#6-FV%KJ{xr zAaV#|tV?nxBC+RlNp!M1gc@yq4qB4#<3S_g>ay!qwU7|`dm!);B_dCMSGsL94LU;J z)Mq#1;m>~r>L;w}(Zju#?}?6>4|h3#^yqC4r1^LCc>8l^RKTnMf_D`6FsMe}$~+5( z2(+Iw=HUdy_f$Q-!jB>#KBLtULxn6!xFW^gZzA$LQSNDFt%<#Ik(bEucCVy>efM4&5W3cnrh%xpeN6 z)Fp~q&?c$A`^^LAYokvy?=x4ynVf60j|ogcJ1xxAs)Yt+2KLp}j?tl_-cIGqW6Vfk zLR2qfl^No63in#XFu#%`6c{gO;y!R1gSh@bcyo2~Y3ee5{_#c2>Ru&AFRfX%pG7yq zbs<9=(MMZAmiS$wqLv1G0aqJni4LI8$&W_*^9jVar%U>Zj{w!%E9!Kc(Vz&f_~++m z=~3}*?v>N{Ue&A{{fi-B4Q!+~>Xr%cT+{Vf%CzAM7~kPP&)+u$9%*$3znnPGOhv|n z;T@b~(aX0}#oPz|!q+zrHPgX!-86Yrz6pX3dd|ukjRNzzZjr_>Y-n7Hq0_8S617#l zDqr#31G=HN5`lLpP+>IrUZA5W`kBEUG0+?fWO~fuv^Vx(W7@3w2hR1L?i*BncT`Ug&I7*y1SisnqD|_6qZ<8l zU}lv1cgLe0&i3rxDqC)Y&XKbIQ#d#6>ZasDSHp{RWmqnKM7X~{FYu1*JqP+l8n88E z!+`=NCnR3~%mj~$d0;O}JkL0lrd-kLJ$8L=!;3$0c zau7eaW^{f~NoFvi{hLjNU*o4h;?7_FtkhmuXW)2qO<@TbH`L$Pt|!9GpUu)4+^d(j z@PGW^6akv`aw1*ZBS&=o`AK&7CD3QVo0WQidE5I|58Qn^U`w0ycti{C@s*w7QJ9zo z*HLmawYq(nZLcAH5`G+2nvlI|HyQz=t=JuYJb#dnoQyot-vVA=_VXh{_QB^1L-50x zc|6baE;>2u4OtBV?Jn$bu+-+Oq3Eyy`DODgIcXiB&Q0mEqKfZ9u}!q5w^LzKhG11c zYYUE(2Ce_jwE}a(%3TW@3Y6FpXfn@$_s$`Hmv54gBWB5F3KKl%RF}(k(B~cnDG`$* zscQ@Pp2?kcm`#jkm+7oeZ!LprDgT?bVVu(lnU6LVSq0CY&r8v`mp$IX+sevY1G{e8 zLtH9;@YqG?^{41=IPNYgdHfzVvVQNsp!+=r<}a82i5(q+@XD(hia6(PyJ^n;^xF^k z;ApUL{jxY(BwBdj#5oDIFWietESXT2n9JWY3XDkirNi-CxHlilz2SXwz7o*a7?aY^ zqad{PC3Z!44*Y03?`tmi0E?T8pzuDvcf4X3J5^Hz1tI=FWAVQ7P(eq@-G zu-XBpIfFDi{lw6ZYf*(K_J`r>=lX~5u5%z`c@{%&oh?{AL-xdur4>Bw>)YGC`A`OlGj1Z|FH$H?i^5sk)+&F2m(fb{X!kSf1psr#7mlx0-gKQb3`8F5RuBEuRpW^ zb6UM(rr%bfqOSxu4U6Hv(YUP3DMn=O8zLm#*$qrP1p$p2+( z1c=_-ZFT5TqZE3c`stfTP|LlqcH>+k=sCqI;fMeGlNO$LX(+NG#~OO4U3?yHqOKUd zzr%#?k$eg%e@ut^jkG>}5b1>W=Pk3YA`ED0ZJL_!!ACgVbvZA!(F#0x&am;QkRajw zYoXF_nURom!HEtnGUUz>^oAYZqX*v@m5`RPqZLLvX9vuoB>kF74K{B<&Ls^?)i1w6F-G#;)qmSCns@zcnL9s< z%!Wl&H~|A{G|v4vH$`$F!q{|t3>v8e7Z=y2VAkhVANdA7av=#xFnmRax^COEY&{f4 zIXRxIB0kJ0w9`YXhhGq-tW<``?tX%oD(WO8SF`xfbUD%1?YH z{u=>(LsoaY3Wgvt@N8MGQ9W?ka}D^VX8`3Du?J1u>u~4ia`bd?8@%@UVa-oKi0-G* zpH=o^LW~(~6I0l;(CKmKu|sJMIF_EuURwVN{Q;zr#5-m1Fznqlv4S9a-3}gwB9TOeV!b5&EjNV1kMDQW@#!R+${CpJsT@;_V zz>W6)DsASU>jV1i%}GJ3rrHlDw4sxtokAaA4c|_dqw~*V9$AGjO6T?`*Nvpkv7LE`7b9g8=e5Vm0rg zJ_M0pF5SC#H5b0VmT-ReZ3$>z*QQ;f=0R^uxIjjB7K&Ex5*R180)=1lrwq$dDB4|E zqr$vItMY0-#`JAyy?3Kt-4o}RZ`@<{x1d7)H#1wt-o1gSvnR)L%vsTC#=bCf<{m|Q zrHa29OaCC(>QL`TN;D)}IA)UYG(hTw9M;n{JJ{RR8ax^L5tx+qm^BTVP>h|H{<;R{ zXIc85BO}>>_yz8OLj3w^x!ze2sL&vjXbbB5{oA1Yd+>|*=@7^gF!xx;{!b%fmplFT zE8rIp#4|d22t^c1Z_FBKQFk4FvnCeirg;-M{TquoX3c!PJI)h?5~4YCY#br z^&i1CyX)2?a(u7ddrEuh-3}OU(kk?=@*-j14@OCKbck4csN`?T3XGq7CE3H)0-+Sb zlxC&#z_=&j9c-@)QqPpo|M#{xxnFlG&yu1YhqqJ|rOmKNd|OP#oEE+A5iGq`GyqrL zr|-@X?8CqO;(QyyGH8}PLYp9(3QlweQcmI7z^cShYVdmwjwY6$9JTWX`hA%b-GiiP z^rZJTr@9{mjlCkiewVjmB)QPPW$d*)zDHbiX_m6yguO0hRR*yspd+%<84Df*Qm^Ekn>5Q1prA)|W33gc4s&O` zzSV$t!jSDPRSDE6bSMAxWz65oI?@*|UkBOO8ZIhWuR+W=g4qz29*DZOS?^Hy4@kLk zTy1;_(fY<)P3gNOki!1ey>@v7ZYuRh)$3r`Z)ca02x=X7_*KxEnk7bSe~Dc2aAD|sWK5+ zQXra>7nXeS>o~O1O!Fbc+?J!h%*QHAfwM_tZQ{gfbh^K)Nns42OuSw-c`AK78p$Tj_aNy zKwmd3?McI^kngv@G(w^U5ZIFvH!Y8Iz5Ex2KF;kY$Q zX}ou`Ey|9<`wF?ckKJDvvLJO2O5KEyKOktXR6Vh741%1+f?gk?LD9-zI{RYDQ3#>< zF6}}+2s~$G#GvK}BwJ6MJD0HmMi&MQZ{c2Ffan#qFFkC? zXuF_}aEl2Q7E^ba;Ji#|c*CtJCRZq|u4`!^e+{JlgNq8k_Q8_2pxHUS0vs(^j`%YTqG5alT6rdTvj{!ZpPk zcN5m&d-r`ENUeqrgYN%GSxtfKN^aOAnQ|EWZ4z6Gdpfa4mw$ER{-;&QpNJC@Jjmh1 z^`8TooiJ3#q4rhE9?HJXJ1J|Bqv00}l-|ua*8u1E-{a4l_btw0`@K`>_cWjLgOk{E zs87Oi?awF-2QS2=O8*0m+yAx2w=p3-w{L#CPbpD7@kT74Ha!|9d9m=xfDqNh)Ygl1 zEI?h1d5-0aS@1vWX5qlL4Es7rwkd2AJ#xd(r%&7W_A2tHmW zv{?n-NL|thoM)~u5F)=R-VINCyBRq2$kEs9EThT1YY=-S=-E5md!blVWm?02BYk(? zZ|{;qfg!Y6JTqhx2%Gc;Wn$=%w!NBhKlZU+zVPAtyQBsv5oq+P9K`1WuE;(^e6H7! zQ0~{k`|FG{Zt5qqNf7xi*C8LDzm3V#W#4>Q!+gho!_K0GurvDRYgfbsOm)jAdJ>SJ zrW;P@UCs+30?m<=PJh>dM9lgGHxZt@Wfj`7{2YW+EPEqDF9i^5`Q}oD@h&924`u#b zvMJ`Qo=9O~Ns(WUepNTZ}zcs)Xo+;c0f z|1c1urNe7B>6;Ds^CWdi%7_CMTp%-I&z=AkbAwFp7X;`;_J1Pu;lDt`NQ0^2=Qunp zayGwx9D6hQ@9w>Ry$v$F4dH2b8PM8~Pez`nQ$R!K6z9<2bKuaX|5QDe2A#_6SRjAJ zj}|u>|M6_q!JqXL|9x2{L0nVi3HE_M5* z$t`+xV@~`<7S7#&Q-4}|rg8;p^LAqW6-5vS-N@-uhZeYb)!FzM{`V6N<6fWkDuFG@ zHsuZfDj3PQau-U~!$IBa;B|I-L^9bTnBT>YnmmIZ-zq@x^PS4u3ey3Q@Ucizzi0^@ z+gj5eRoMIaeN^8H=Pzt#)oy4^4*~0L72l)EWymIZ7ne?R06~-M89K>x;CX4Weo%u9 zp6*^9>$!Faso%4cxeqoWh|;Zmb7%>SE#LX8{>O-3=KVRDA+-vAv?=Q75#INh7N0tw zj(eJtl0#Bc^xX2NrYX19&bNU~_h*Cc$fe!DjKRCQC$KQMOh5?VZo6Fr5AJG zXxWeO6X5xk+|}WL7S3uQ;t*|np0fest12;~>6xJPl)&M15+Ty)T`c}WiutLAgdR6o z^x@M>k>Ht~X<&MHSJX+N4VE(8jKscsLf)09x~nO>aGU-HaaV&RYE|ejI6_N!)1 z%UtvkU>InzWG%f4mhp5y9{SDzi(#5!RXQ(|3rJ5zP4WZ?2@%_T&`O zin#yo<}CJp2G)h&id%+P4*!^LxZ*iG&HPvLJ1KCvEL-{7nGG;dcivgM`3;UGRmg1W z^B~WgN%su!eq$^O0S5J0Xu_r^fzQdWsChddF0k;7Y$YVaS*o6dc8>%2T>hW_ zDco0Q3}jX-_=fX!)%)8Yu!r&AZJ|%X6;W`jb+v!qrwOLE3Msa#tKb^JTx#5Pyg!v) z^$Ws2(4K(#!+U$!6WdtP`4Q*pL@q4#ac(cd#EDyP46n{W&Iivf8y+U~?b>`{!G#?d z`hhkBoTg#x@}T4omT7p9CG^wnemQiteInw-x%B%^k-Linq?k*4ApHXO=2*Qt%c^e+ zBHhG0WxDB%NK1%JbL2rMWOmAYw(H)8^P0K8w39j@`;WH5eF`ze=%jJ!&FTWU43wxg z_lh757mduCBNebn9=02f=i@?`4xOZThu~7I@J5l+3fM$kO{cj%3?*M!hkhQZhMAqc z$1Au8ef;qWgA=JP;Cfw!|KKw8Hh~bNlZMIS`LAuRj?_7_<-=-BOnuhfbO$VFA-| z7?&1{+)-ghNN%B=?Pf2e1`H8yP=l!c}sP;-q_ri&@2SW=;Ia(QtMg}nfM(-Fqx`xD*z#F`CGI;gFSUt1{umD1q<`{# zFvqz}+B%y2=RTZQB<#IaF#x+dqVlm6|3KB>PMWoq5|vYm^@M1Sf!zb@V-7ff{@j?i zDN-a1Qq|1b&@v;M8#tR$OPm2tH+QM3`8J>nj~N><*Z2K%uGPp{enguxYDeckiT$u= zyu|0GKxI~NSAhH%JU~xY$|r3g^;eybH0GVl>(t~JYNmj0$^~Mess$RZo{uM8mO-hF zId0uz8^&!9pAZkypkCe^{R9y$aIix{d}+D^f>$r9QbhLw+r_Ov2}P`kAiD2%yi6KA zpiCbvv2}%FDJMlX?4Jr$w=jAhSq?pozdI(yRw1hxw8C1_6Li5Js2M7^&dFzc} z8q$Vm&42Rb=-i_}$)}Yl&|&rUv$P`AXm*0zUFbaKIGc!XXy>w`G_}m(n+{~Ch4-$e zfYdq|Mz{rbOTUJO?d-d}77S>+=jO14A0ZkvC@>}n&x0yAaplnPN*GpYNYc~13Aekn zi%FaY!F00nCc#c0{Nzb7d{@v6p$(P>!Q|MFqe|5f&wdDxGw3T-su}Pcl%swkzZ{4j zN5t-CECSN3E`NpjIeb0&JJ)%C!}c46e{S!2QIN%?|D*Y%$gK3eJt z6m5`4k%ST>E&(nER*gYWnzpsSWGIC8V~q_*Q`X=s$L1{gcn`4iZv`9WFx6k{wZT5T5sxa`sV&3_*N{ zpq0T=9JCfW`RXFfeGSie+x)K;elpSxm}9@9LI0%r#24J}n~dq=Y}x_s@bs`(Pzz&4 zVvHhp8es9>!8s?~^E}2Q)LL0O1sdao0q5>agH7t4e-=`MpgiYcb4Vl)bIPJK`hS1H zx!DKd@@}&rtD<9jZ+`+DA8*M~%8q~mBQwKmJohoUoZW6nh|l{9EHxPx{3u5zI4%0v zci^Ua>kw&$J#;}6se+FOz^;*V=yKCXcpbwfJ>mWkf;!&+Gfx?WyE7_D2kQjrtR|I5 z7_SJrqVIfGNBIV)8967rj6LJ4`=ve=|82tCU+gu@bUj!6vti0Nqu-BIH zyLpD-IMmGT{?@xei?TE}x7}Xlz#F#0KSY>M9+Fm58fCcxk7nxkPG?D>hasU4oI3}A zw`Ji??-w$}tnlJ#gx>|UqDIa70dQzE9TtgJ-h}V%m zYuJFnTIEIM(wE@PCaN^!QUgxy%;66|48Y>m_xy;l8(fyZkTbE(Lzq4Yx}K?kkA+pU zYeI)m-_Y!#yZ0SV8}_#MT5dwq!*=09>I@kAeORjWiw=EdN-+t&xCXPLe|^eYmLblz z_N{o%B2ZFj-B&EjgV6*s3Uhp~!U&;);em1N89I6zo$G~5+P++$vCp#j_xUjIRLnKd z_6{E^Scm#mJGBkgaZsVRcC?jaLH&nm1ztCo!A{Z7S43|XI4?29wL}u4GY>y-S80yJ zTZ5cvX+Neb3|)c?HN3W2*6VDdyLmy3<`HDuusSZ+j4=>PNv=n3y_YHaF&2 zWl&z1odnR)S0Sk#hTiFJ;%N&KL>%&&CG^||xRiO2GZ!xb(?!SMB>H)9S|pSuL6{Y7 zKj5MjO_+ouB0oCcc>RW~{Fsj>`!whedf=FlBZy3-uQ3r_B1I}XmQO}Shrmp^C*lwG z`3;Y66WZdr@4A%A`-?9PpSZ9Tj zeo>!+8DEK2GA$yMXKZR(m9Y;~qKTuNb&N=<_ReuZhH4;r$&%A#Opo{&&jiXu4MB%t z)UX*D0V30mBd|&M1x0^bYH3FL;L?Ud!!YhAJ)ICV%Xr`bSza?a{;lPYjWL>_s(p({Sqh^0@phLX>wY_4`B_ z?i;jbB$F@4K-pQEw=$hak<;69>l;_+VdGoyT0UPNP#2U6Z_JAA4diVIS_Hf2_)R+x+$Mhke1hDtKn-su@0r=Ggobaf35FiHz5N%))7#;eC%m2Bf;&L!+uV z4l|}}$GDk?pzgS!isRNUP#W4^*RAS-fIO1tAKi#htFf>IG5)!&kX*J`>pDQu!&p4n zx1_jEF&VA-x)~&MC-#?qHG}5_>s*WYAy_|`c-4uyuCX)CoSoN+(P-I9Gp`tae>L?_ z-KRf=vRA{(=~(N)lHb5WD_|cU@oZ^aVC6@>g~i@I9C|K;y@HhB@%b(IeK64PNcaUt zH=YzU-CKdS$E>``*7*G3@>b-k1rb_rPT-F48VA9W5YHV>1S+yUC2?W+_ja+JdG)a` z42o0p-5A1i<)a}4)}`C<>Q_~iEhQiF$bL7Ti|6QNB*n{{*i%ME?mv_BkOY0~VNI?- zS_Q0o%2`pr-@>VoZzTaT>_yL51^(co0rk8i&P8Af)>yr~r9l{+Fsj$~Tg>;pw zt`G^6AZiY`AK`Nu&^kBBYb3Y=4{xbIdS_h*7q8Y7{D*U1hC53!-eF{DI`@xXPkSs7 zE7%3p;l9adc=>HU8Di70iJa^(b&{8wU~Nh)d@Ff~e?I;E4!7QbZW(1B4fg zU{;cK{~#E9m{j6|@2;Ih_dZ?omm|&vpXJ4$d-#3fZ5$V9+=O%P|3%F6dpp7BD|Z?sdk*Z=m-ochuwA`G^n~Unq>znYi@^C=X`VWZkF{^$_%c6( zWh)P2AALz{hUGbAua~~f$&#T#zGJU4wM&6v!_Kp2YXLfw$n+I(U%QprspcSw0ttsw z4bdJYM+)b(?Tl8P!QkS~l$+miSP9tYo{Sek+{#`Hj^mOjEUWaz8PRSqPU{T#P$Y~Z znD0H#_lbw=y7xBK6u-jTV&$TB$sw3nuA?yT+J}REvL|M@Cqdi2xv-Iu9_<}pEp5a; zmk$aIA=h%pA!h4(&l#;Fh^CV2`g!A6Xe%}ge45}1Z|H@n8&=zZc%AxXZ!H75Ns%i2 zJgFD1ouhZ8etkmb>%`79xBj+OR9JA&bsGjn$qm|%9 z+;RMcC?;Lz3SxI`+@nYLYU_<9Dd3{=&pC1%08qj18Tr-_Nk7t@?#J!sx4pHO@bTm8gG7@I)eCk(mfvyQ=|7fN;FPEdr)H{ zUiJPm3*utk@x1@71nT!sZdO{A!|{8zF2|_|kUy`JO12jn!b(uG_LKvVxv(JTH+llS zes^S^)5{bhkBBXlovMZl#CpH&*5;r(#&%5kbsogi`#9Vq9f1?)1=P;S20@v+@DKi* z%&6+ilgDnjCqG7~^Yz)e5lF6oNZgL|jCN1Ik>Y0<<#m#}~pwHg;94t7DW=yT&{0))MPknpAkdo%p9r+!oWYv-8{K|#y zG)CHpN>#&;{Hw)_)O&c|Xk<+FhYOv6KV`C6bm;0iYOPV}8kk$HDiMXFXyMicLb;F3 zsJ`vLvU>!JU>fl->Q>VX?lDzqHZ4AYE|y8T*ZL!{__B4+%y1VvuO1D|zRQntlk-@o zGnZjj;@0P&pmivG;^_9-^*%Vv$i3l=!5+#Mc^l1L0yG#qa{LnRsU|f(3=&iC!G7&l z`srQ#`kd2h+bwv}zN}pJ8)}^MVV-PK!1>tRt7O-meb?Z64!1(ZQ_OkhKHVw7xCU)` z-CblCu$PKZNy+&(58`@YNUvwigNje-o!+rNfvnuW_OKWWqv0|RodSIYLX!I4N(|`Ja{syiiiTnLf!p+7%o!`iKSn9r^zM8s4x z1ZqEb;h}-QZgwjf`lJ0Q(~XM*6`DB8CX6_OowUDhOi>4r`InZMT40{rwy@a0S8Jd$ z@W+irsUP-FUn3sw5kOkfm7Yu&$kFY;tFaINvLb^IZ_=T7ddWWw5C%W$Ec~sG2E+UBdJ2sV!T5c)LfAEeeE^>s<>0FmzPG9d z_Ha+Yt0_~OZ;hcqa-&+}2nRV*7y76Crx5eQ--`x^y;_Fg4AtBERXK{~QG%0Kt($?@ z&YnzklmrnyAd;X{UM+g5J0k;$*w3Lmak9<%08U@I+t=51 z2<5R~U1*he;H~kls)+&<&eKkkT(e@0;`{g3Eu+DH znPQ-5W)B9Pj+z&2@4+caiq;c86F{@JP^)}R7|oEMygY|tJXB5pfdKxvOA*%DBnN7$xTXt?0b73NV>K_wLtaj zi&Y=N_TN@iw>uF!!cuClN?Z$Fb{u_8dK8wN`8W#mk5BwMzt7B|h`Au_{(3lP!CE{f^w#D)3OjiI&^p)w!fTuU3oG`9 zXQvy4)OKQ@!+~1yMSbDS0Gl9`mlhMwo8}l8bwvv_qqli)AWx7ij%={I+6U8x%}W3hC|PUcF7N`&-P7UnYy3)zu3C>~F(MOCfj~?`cKQxDa9ST&)GDVW@ zt0#V+W;lN+JyHaWhbG5nH88*M`4pR!oW^sj^Z8B3cZPOAOL+HGJViXv+?SfZ*4F|%u2ZKu zZMhJI-58&a!7I@BDLyid=W-kg8s7OdN#IXIc}(&O5i&fI)LhX|jzsDIi4o+sL2>(p zZk5(6C~Wfsm(qUho40;p*0v8eOM9i?*L@&^Utapyx)*Sl1YBoV$KJD$>nf7pHh|Rh zB&#ystB~u8KI;(RK#ak+4~4s{!LH8@yL7AI%cke=jU+~N;9oLO!O4fF_$p;pe=S2p z*uTcu%5KnUj%t`#%5Yi7ie@h^9z5&8UY=3%L5FnO0JwqG0UI;K3`*bmz2)%fTTca}k$tE$s#`Y5KUEA9h zS0q9ev0@^kA-h1#ERj;gv;`j(l;|$;;^zsG{&vw_5k%Rm8Jf6w3SIcd<*-@X3sVoo ze(xH#fQ$VT1z-GkSR>}wx;+_z=V3k)TU1S8WGQ&RESL_h460i0;B(1xy`OM+EB1BP zl`AP@Pka(f)LN<<2l_!-mP@7LYs*)irvs3#r0opJcLTVWEKT)GiYp3Q*D9o^hr| zr(8a%J_uk%f>vvcVn6YG=x%!6ay{O&80?i9unmGMRkB>$hZRtMB5m%RQ4Z+_1Ig2D z^h{{kzrd~>fA)glDA1O) zvU1y&gNDBTX}YaHimyNGh%>!)0FvMSSEaaE&}}}&gCfHs0Ih^3MiW6qYH9VI=nWyd z%~AZ~a$FUZ-T79a#7}@IZ1^8@H@t*vBz*DyA9rBZ*xN2xj0%|#aTE|1vmy7G`XkQo zhN0Dt(pgpw`?zy2ank!Spw`RDRu50Hqp-8K?HqMWP$lBUGW4IH*>}BvTJ33}t!hwXJ?YrG7qesUU1@tH62ccx$)c7(JDLQ3hbm=PP7;HMW#H=zL z0_}4ZhgYrhaCm+BU=Yu}W=siqBo|kJnzMhFk4_N%R=r@QdbkV;)FNhaxF7$S%+atJ zfB){Mb}%VF#@^2n-;=$>qrf7wc!Vf zdL5FX71iJ+`ptc~X-vDnuF($fITt6d5|m*s!H*Qa@;xXD)E(X38v<$>Zl42VJ#Ziq z5$etQ2ZoQsr6SKSVV_Rxc>=0(5Zmo@>1e|Jv^SsW-jFrHOCD;kQC@y@eQ2u8F(3pq z@_YyCl?y<7D`IyA^Q%Z4r`|lD)`vrWsj{SqJ&+eO8D6RrKu%7pO+5v=5EjQULjSN4 zj{fewA359r6+{8Y+J>7zO^9Jy3kU@T;vpH>%N*Ob?$TM}kFKwr(b(NL`<1 zBH$SAM-~xSsk;_Kcc5k6kFKxqtYrO*j^-qY-e?s6F9hds@>#v_9fkvCazcJyHr})Q zmH$=S#NXqjUjh^VMgsL^>!0}^b#PZo`DFYfI>hnO_QVACYEOpojics0kj+)OMT?)$ z6uDQ#hNlQo@Ak`zq_pSIbI5vB4tq0Mmy9h6E<}UKV_VsFH%jEB#B?PSQlY8%()}uJ zoR4X^@}HK@0faaH=6R<^iipqmHc>WHBkH@3ZPY%Lh>(Hz{k9ehYG9#aXnRV4l6q$C z51iTIpo2>8wO0jP9Q*=uq&s+z{oS&3haZvLO&;jgDS`B-DRxO)Q9#%s%GT|^2II4C zH&z!%;3NOa)SIdqMT-Joy-i}tnd!`E|?=x1g zx4T%+JV*!?`c|D7pWlGzk^hS5N!H=Oc`VQ3qzjbthreVn$Nb;5t0t5iM^S4JN6zwV zJb$u!CV4-d6k!!gUbxi{ARk|_Q#_dl0fyDXV=ny2uj)#c*0B~SJ-v~fDm(>RXA=6? zx*Wjag7uM`VT#=S|J_;YDWoRjW%oAb*LG z{^{`w*rf^x8ZE|ikF7z5XKf9zH|y-97sY|RudKiD``8CVY3|WtHSw^Sa&YGMtr2L? zlCiCMJPy%(#Szxe0^mtXLKO?aFCfvE_x@9K5;dNc8PLkfhR?q4Z4ZjrkdkWdD)X~W zaB_R_`&uUUwF|j^_#pcUBCdsm4de5fwypVfRqW-kiJECoiJ8K^oQs~7vZG*>RR55~ z4D$|DPcwXaI1I!mpDg`1wgN8hlsnD$@jQLs@=D);D@go$ryA#54n=!DK2}jvFqz6C z+y0ge5xX}9MzHt7BO{~BfBf6QBm1_w^*9q+vybW9#QrId{i|<;b)c zLkw-w0}*`AqduWJ){gyA;;#(e5)vTZKEBU98FQej@txK;fC$;cD_u^@Kfrdtbp2@T zb?ooe&km)cL$62vID|)!fF;pzvnSIbyxz1SeS64&)&*xf>W>ZqLt8`FEw@du>gH#y zkspS}Ua_7-pHUDbp|ud2tpe(~8WL4sc2p~A603%NxNKtgd<9KILm*a~A?s$)MVO0F*7u;9K zAXSKZJ2Vf>A!|{0H#XomrL17fe{1lrRsH@mjy+&~sc=?>U=4d?-=s$*HG;2*&aXF9 z9O!jakk9oWBuL^SN!rbF?AQto0UUGh+TK)I5nwgU#6hZS0<=E2~p zZVgRh9gK-@pORL?d&xDOWee4Dc)T9(AB68?p-)u2O@1!mX@2Y3?1XHve;{A3GL;C4 z65s9=8V|zCyk~%qZ!&xq6B(pEPl`0ZWfN+q?Sfgz`WbIvo$Q0%wh;_Q-`tzgcE$>9y3hOlZ>MKZ) z1^PhT<0U7p1Oim?;HX;iQ$ggDI-R-xjuQ3V_+X=nd(6yLij;rH@O@iq*$mxE1OJiT zjU4-DAYEzt``;^3q{K5}k%8~ahTY6VPNF>MeCh|4yrUdwQF}RZcbN%YiuzC}UO|9X zo|+q2WHrFi2Mn}L4f;#VkjK!QIo}x7!J4b+g_?u z@Sw~ty@zlEIL%24hW5FTxIyA0hu?$H;`2^f3HR~!!}j|8Q+`0r_t$sHJD0#&zT~UV zhA;dmj?KP1n+Z?#CKRf$ciD)bY@Pu7F|Aa~FIb&CfC23@HH!74VCw$p-AJMkVk`=& z(9NEPqYr^T{OmT^<~}g%T^|JBb^y=#gSxg zWeLDMvq&r8HasYhk8hFtg?Y1Al+xDO(OdVxLyPYN&_@yDWwgMmNUg&lWcH9Ab?z#f zTH!f!Z3Vl6AoeY^Q4NzmX&^+&TS}2*dR)l)?v{<5_BK#ooAx~-(2aXF1|szjUSdwL z)T>(KZs08!9ePA7fch`4N!_Vh11DrXrOQZ!Qp)Z8uRUG^a%(LOv%vzmuw|4 zs_O~zG;z*~qFrsRuzd`q92IVz-lRn)*f~6>n*t1di%d19Vn~OSr2A+JITD{z-f?_K zgsMXn=|rFXhV{Aa;LCl6U@_{qNB@Z*X^uBs+*fk}?rn@?wx5Eb{QFWrF)txDD)wdL zX>v6C?IN)S4+~<*5*rye7DD0264@*}Pb2Z@g-3?W{K(3-zw7DGZ(z5Jorqioz)CO7 zdY8o&%*FN?&pls&cr$aeCr_{s)Fv#3s&WsUeXE`olBvLLA8a2z^PoLl!(C zC$?0soCJRIjNZ^4Psm=>vb&{U4Gv#4wJ#3}pmSo~$0{`l(9#BPb9vty%;m0y9u+4* zIdfT`ymn|1kGSnXJAXHH6n1qTjbKElt5rN7pQwOf5nYpG8LM!~lCO{4O%V6~ay|&H zt%Cc<cXEp>7WR3fPA-8}24H;X4{MV$iz)xMMCRV_04BNcy?! zB*P|wNJE0f5M2N6x!a7n8~vg|_j+dg;P%oOZEI3DIKS>37wlV^2wX1I4tX8!5Q z6?GD9yS{O`TOA6lWQ7p|-RiBUQhA4j%EcW>W20;rUX-fdU{dv<~x z)2nS@O#Sr|6+VBdaWQnc6*)sVK}e{&av2c)Q<3wPD}duc)Oj;+_aG+!NAC&DvwFH2 zTU;=U=lE9VlT!Y}^XJ^pU*#@hPW++DNT;nhC^|UyN#nhajj8KXk$cUcWH-iQOo4fg zu^(CNE)>BZCif>+m9?PduIyOqx0;2)=M3+T~ z{zuVyhhzP=aoAqjBYTvQkq8<2<+_z*C1hk3l0u0hQQ4&;WrdPZnGx9|W$&52_uebp zd%yp79FC0V`#kr3U7yc+ma#o0yIkH6HQq|va!d?J7SxPpkN*N;3g5QW9(v?(ZQ1)1 z{yE6q3C$X<2oQk|bvOH8AD~RgcaIZD0kYYzp~(|9&||e;^&__$v{PB?q+?eg)Q;7K zp@s=9NF3Z$pTNAj@FUH&b;poPr@Z^k^}%w`?|Axfu&QZD?3^qa%0YB=A>@shhPbIAZ? z8c5jx+#Lr?uzyZWjz5QUbwcb?eL+`-sgwEKKcN48)x6}O43dL_ww}r{BGsNy?^o$W z2qFn4H&`ZM=tIbw`v42NE95Wig8QOb>L28VY#U)Z?CH|SPnnQNVDe1ff*whX6xxQ- z5@4UR+pn$j4Cvz1uH1mWWnh`U|2kYu7aot>aLi) zIMm{~!O}C`PlCk|VhVIRDP(AYz^QSWy$AOufwh;Z9;lJmC(%cRz+!yK(0y_oQic+@ zpLr;te*`UWZ#^%Dcr&_>8C%uxy|~_bnJ5B=9VBj5UOR!ztmGz){>_5p$rbSJATo?{`WYzbA0o9jUx=3K(p5EH|T zkX4$mNEs_yoM3ne?{L2KKeKdwqDjzelmAm^Upc^3%%-4(S?1dH&#YX4Bi0-E;zUsKyoBTQ>()|NR=< zt|3OPzAFb}0~F}nahI9By&OH@%lo#=h-?t|PVw9kwIX3&81W_3r>y8+vN0-J` zT>O%xk;}@p5WB2AFyAJNw~;-AmTmUq6!b~ZSHZjeEUe3*9Gs{@j(dJhOtN~XZ21ri zqoQ8l>u%WpQD?2@+XFBa7r%}9pFF2+62{C)k-CDKpekEEP~EHms|Ghl~ zo2Bnmw`wTR6WWcKW?fpmCrr?PcpLLt#&cO$dG+q`r3 zL@Bhrr3)&()DFIOe{@Q#=V9U8?Siq7VGyD$TgcMA3~>fJZW9)CNP29Vs796wWvldl z&OXDA?p_~d-I3~qg6a7g-VfCv^C{)m7i$ufb^ZDGx4w+1yY84L@o8!#VKrIN+uR4V zju`)&`xD+K1p6?YKZ*jMzsb@5Lx!%A>TK7=EP}Y|QPmF>({PJZkX2x$3ZjZfZihBt zKl}0DHG%lPeVBA9)a?r&dgWnjtl)GUwaaad#dD4U1G%)T?Mg3*W=^-<;e`*gKX$2B0?=v^?bH!sIn>NnT54O8i%Qs>f5TPrx)Is?$uxbzJ z404E|x1T$o(B@L3$G_uC=p*&8$G3hnY$XP`qU0%cHn8u5ZoHN;p9pk-{-my{x4(1e>9Wh{^easewjXyc519$S(QP5 zT*>`fFu$$&mRsxxh=G=zc}l^=0Z$ZjfCM7>^ZkHC-D%&eKnEPM28Ov zK#=xBsC8)tOs#{@W=!TlgVdq=S)3cGqrZ0Qkd_(|SL+8&xU_*wK6SBFIU@?y2r;P; zrACT9-xAr9a1VFngzk|$n78m=Lh3n9C&=|~(P%x{1jmKf>Y>|7z*oN6_Vq~s40k~kD(6y0@x~V^M=6}mapWNhKV5j zTr`IKI=)Bul34C1?|=Y7_~ka7|4GXw;Jo(yA$(MPqpg`c2xntDcn)KCu%~(GoH1m= z%~aL}Vqr1Fbz6igg?AN_{GR|LEjiNt_$%v7%@Ev=O!zSOc?*o6yOCx69RuZiwuB;K zJMe{~Bc&{O0(v5U-kQ7q9d7GYmr#-Nqw^GpdlGrXsJG3~LynUH6;SWLpB{Mz;RlIb zq5qf>^Q+x~bxRubV=Frk2n7&(kfX%=Z~H)!JTqBm*#b?8mu$#xF`^9LZ5ydKn8$I( zvy$!MA~f?|v_8bY@26%TA6lwlk2Qzpsf~hBAd!)0vRvwb{0yN_K}SiDws$*uZHX`< zN}Nmli|qbS9W|E{J2FD^8yCJxW_bT0ehy@2IvKMaDUh|-#2#?b1$D8cLhvV zEW?a?g^38h*UN-7D?Cje1vJ%^NG6Eyvs9v`iDTjFjp$vE{!jQeCih! z)1qb2M(Ry^=PVPdcH;T(0CQKx;}uI3#Jr#^W7T5eoGy5ZDRRBSzBbx<|CI`UUgZB} zXzk+SDDYfaF?1JP0b{w{TZ!*R;myjQT#hrC3x8odF=jXe1a97_G5kn{?5r+d@)&M| z6C>6B4P$KR_8VWytWsh$fAx0q6|QnH^|2M<(_=%Q-fHj4XM_UZCo50YTV!bCCwCS_ zIKHR$BYViLVuy;R@nG(c8tQC4o&t*7gU9nL);ikuF5goPmH&A3c!9jDrz78 zPoaH~krbsKi~B=+m(ToXD8+>e*2>Ivn`YrmxZqdwtGwu}m7PtAV=C@P(|8$B(;~6y z7Dn?d3KaIOQ9upJf@w95kcCgF4v4@SYZFfL=r`Tc!yrfP0;5; zKq`meuocd!7ZR{n{1!lZ6w!R~ep!%5sn=42y>S->*h$#1?__0OQB*>L3Uy@G(|)YL zd&t!RgF^g%M{>3}bWn%_)iJ(5CWt*k)^^`LZ(5H)=uW&@roa@;nCmGAV(-U*tHEHz zXfIqhWxM04GXX!Y6Z7Ws)q?wRURO2Tmlob&H|MVAMDJ3@r902JgG7i?wQBAr+-Zxy z&y9N(Br@82P8?D2diIIn!>A>=d(i0p2A?knsJ=!7UK{~w(L;)yI$o5yz8Bbiegz^J z`_9FGXGIAj3XXEm8i2isIZ^HJIs`I)JS97`0e^l|CLXLgz`dh^F_9KH-}K1%hs@Pp zusAH9wyd84jRu}zYMm3vq=`R9NlO-8Zs;%l`feV8#%PDD-2WJTY(aTL3Pr5^PpQHG)UP_gn3*v2|e;$ z$V`2?J5X2_{bJG(c~Fme-tJ>DEPuJtjSbOzt8w^#cVS`pMNTv3QxmK|x>pPh35pwH z_wvB5e)oKR-WI$c?Kr;~kMkTXdj9$i*Py}sihstj5;zT}A`Z8gKwWkr|8eam5DPKi zE-(HH0R!fix$@Xo;BlJydm0mZSGXSaR(u0GI)ATmYqo)Q$u0G_z=_DR0`(IX?W@7kb6QvAr zr*t3 z@bA$fS9u3P>qLA$v(6H=K0D?IeD+s(n=u3OU|_t{^~95SAn@friox?}7TsHEZrB6tpq0_! zhUXQYqKdL-x<0_gAZI@6od^h3WNt|Mumd8tzC~*KbHHObDbSOa1Z$T*hTVPB0>k#& zx9*bWKm_R@cIjdg9Qd+tJ3(kJPW#J^;<%(#+%jn~)yV?H%Jg1(f$}cSmNAqZ?P;RjXWA;WTO9H|?9FKwaZgVbs+K zywzhnA0;@DVXa=ukLXJHO!9E~>WL<>JKDZtf%6D;p^8Uo@mx@ICjI7E%OXfc=iB>; zpGBuwDc?`~t^)B~UvHv}E!-n!Ju^2u4TrU{$_bvQ(8LvOn+$_tKsTi>(Y@e6lbS?J z=6syUdP~;q{sui_o7tl2aq_;DN-3kqR-|BV3*0X`(_D^HiZ_g~QOyA|b08 zIRfX7b8Ij=9zkUBT@~4Q|EErTt>Nv^3ed>+JKC(#BKi`}&jQ0Az%}PvwCta4kj^nD z_<3;vz8{bdEz1-@!u#jWqSMRp`Mb!}qzo}?k9W*+ZWKp~ZbGqoYY9Mmr)8T{p#t7$ zJImbDErf!f-v6~zP@yonh%=M?`!FFJzu&ord6qP_pP4^Y!m!q;#A4+l81z=pjA0Jx zse6BH%?@i};J5S0lK=taxEiz0dFLw>$1^F`B~F4W1%Y43^JD0?aIcb_Ob2LnF{pmw zU4rLe8_r;=BEfUuN25Oz%`Yv(3-K=` zt7gMM<3PgHQ^<(I2b+Jeg)cy%*Nbw`#Z0Jp`T9R)zHMo;}GqJ2c zg3M^cw8qS_=Q9Ilni`8>f{y&{mN6IV)N)Ozh_Hh=3+7WFR3=zd4=YKlx;Yd9DIZdzYbXiR738lXu`xw%}BWd4WdsA z5l}w&45m-1TgPJ4rhbwH_|ajfKi24R*DQ!t9U(fALB;i zjn=4we+Mdt`G4mf<3=x^>Bf9<{e``&3PKWs`*2Nt_7r{U6sWuRy{Io-gHQ3^ByUm* zp(958CM`av2AfydB?%CstW9SEW1Iu$Io{&6agPC=RoQWTFCc;*Y!A^N#hl?o?^oiH z)LYpcw%>WByzzsg3QD`>isd3pIgQh^{pKc78f4^zE@Grj|zOKufyw~1^ zDGP~v3Z=MDL{BrRS3C)0&)*CTvc7_K7e1#N+{?8+`HSlhsSIk~DY)n>NDl91L|(ry zBtye}i>9fW=3wXefS`QiH1d#R)``8f1`_D`C+<1SKlzg+EBUVwd;-|Mw>4*gTOzkM zlOq|TRs6N)%$f$b&5k_2H$#Imp1Rb^|D`~=yMray&J9C$!rN6gv21vu&%z?cv;o7% zje3u7Ps4-vZI`?`=n?10*$Qq{1A#h}$4DIJfKPQ(&)jPO()W`aH49$A!+&O8LaGet zL!^=EN+|`Jw%*}2go)|B^8lG;)K|V}6Ps-VJFJ>I8Oz`)a(s3(g6%7`}|YLd=9D97Eq& zEs~)8M>lWAunq%r)ZY?i3kGC-|AIrZr3LtCS+jmHr$;WF#!As!8!)v{^WLMX4$@!w zM>tt!!POMbD_Jj7fa-$F)ceg*@SY17Tkq=v;z!*4p;?9S)=(gLgk}{S{khhxn~ovD zN7;jQDQn<#QL#p;v>MJ;KXRe@k_>wj_x&?&%wUc<%bn7m4fuQGJ_D^DDQdnL{=M^} zH}HJ14I#sM=KGH7LajNZsD=LZJ3|Ln#HD5>^UZn;IR1XVI#(f&b25H)hiD!57E$?w zK@OyOw4jSPw;Oi9$oj?zM1i!%iq-n27Yuduw_W~ChYW8_)ZD^+W;TM$q7_A4sJOGT z>dJU2IMZaY_qHv<+4!U~t80>o>*mIQvPT!5+Y%(DJCwi+ChDs%i+16W_2cJAF%C4T z8bzuF(!uVEVD_$~CfJgcpZxV<1t=C@nU3*nK~Aqs$n9ZDq!~)`4C%6wO>(;@2#n#*PhfzWN#@bCO6KYA4kBi~xqz}3WA zvkdnl<=72_Gi=&GCxqdLUiJuhO3JA`xjGHj%4H?jjIm#rv(Ifyh!GXH8WEe538PSw zdD+{xEpS>?CHw&gE1C`5;TyyLB-V>>wNFWmz<+FSg7{7Dz%28(GaW1LV16~6Ir_#Z z7AH(p%M7`SHg<~DJ3jMP$UZ=gIH(j!th)0o18x@5bvFYmJ4Y6uz&lM?bNtTUgEku^yV&Va6t&R@)tqgdO9P768y*QJ1l+r2UN5) z1bO4nMJIv>o~=_vNWAwuLl5RfXNY|eR}^7Hve&Mhy`j&DtjYp5B=NtC9~NuP@f3p0 z!h2`MFd{^_Tl&!O>ItMBcie3c{~q!qJIH072vKT}k+hl=KMMR2&glQ;40`!I-t)48;tsdN1aXA+pT^s1Paz>Xh;2T9Qhz5Fy!A>{y1C8BPzj&x^3~>~1Vq z)GDOw4!ye|9tvgEF3(7Czwbr9rf??qHNSg9y7hB*1~fTHk6cJC0{fwpkG=jaL)+jB zM;r28Skd0cTgY9gISf~BiChCe>#OHpk4}Q}bb8ku{{L6h)Z2_@CD1l$l*p_0c5t}) zaHpDq3*DG1Z(eGNf@>C9pKMOBBkiV=tBjWWcrW&%uAPh?4I8Hnb}Y36i@*Jh20iBd ziY0M22jl1d{Tb{3WLAK4o~YO2&IbF@ZYh?L!D!>qJk)1L7;voe+yV?a~kf5 zt^o?YTALQcgy4s<@H0nJ`{1i>sdv~JNpybrj;#moH*oKpC2#2OLaG^; zu|SL)(67`P8_M?s1ecl9oOumlqxx@(wBlisxBRim8xIf+QN5Oa;t)zWpUnL?&Vjz| z*6-_j@S>&d@0p*qafg{7!z&1=Ky6U6{jI(U3Ax z)zJM;km55aE#aKSJXD2{_Zj5K!-KRXsc#dO2A$=^DG$MeI=kNw@41xQ$*jEbT>0)& zy>u(>%~***Kps~^@UT9I~C^pgk>pu&qyN4 zY&rc2nFXNsw;~J=BS79>BOaCQhrsnps_o5-V)$A@nCa(6iHc;cH5%(`;HAFx&v0HL zbUyFaBlo-sppjiGaHw5?qer(sH~KOo=hz`e)+%w-CP!SRrrrsOUtJ4IEO`;VEPJ16 z%`zOhW!iZI=Zyx5@_Exva3c|Jqo7xTl<2#Qni8!s&Y9Lcy`ULOf_5zb{B-gnLNa>J zfj4n~@kgyzSL7%Ss_Scr&cyq*A-ceg!8@^Fp=e^SltqF-ef)uD)e4AtZ+JP}^9P|M zHu*&jK6EYiw^V)nFi13Nc?)+wUupqifv5*AdDv$?SYQ4W^U6Ff zn0fy$5k#qK>8E^oFb6J#z=not7@YguFXZA}%I~*}9!)lw`=dC+U#L_I)g|j%Oe7y* zIJ%pLH|#02`yZq3bm)U{b?+ZDL+t3@$?8jQ3A*9oyOQBYn5#lX80IuhJAiX?w!t7gf*R2a-Hc{f=?1bQVY6elGmzf;w%F|+ z_MWfSXPk680J3A2^#PdI|Lp$OGO$PN6G`D;$#xSuiXS>!VIjf%wio z{mcCR7d!5?#YZh z?cs0PEs!3Tl6iI}4{oY)lw|9yLi53ZSc53$G|MqAa``Obz4`ZhLr!#P#Mj;KEYlK1 zK~-hPl`-hiEGrcWtbzts`|zuHF0>HjWNg37j$Gb+E6Uo<2AU5wSDjR_-}A>Q-#q#W zAX3c!Bxz2Gl;fOxco^A`uz+^8`Hg*`fr96%7X;DmKO`=NzOA5VR6S8+pAY%BlpaW0 zQ6S4Ekp$oFR){Wpye9gA551m}aU6cih)i-;DP?(9z{JI|w)-48vN+X3z5X&5xHF!; z`R>k!)LG3$<5d=cVApOh1$*O%O@F_>Q^k%_dj93dr8hzOoYJL0+y|!IoR}MUxQ>yQ zv2tMCf&1jKCI1CdpftVY=hZ5-h~~8fi-G+C1YRyMV7o|*Ox5Bpeb1i9oCzo91BXtK z?~o!6$ntYt&_UM1qms`S{@kt+_E1BB!q12 zEA(yfA!zx!$i*~Rwr^C}j-^1Q=4T!}CEb8cg@+*`m@j!^+p0Fja|CYg{d?kB{1Hky z)sJ>*V!tr&>D<;mN@Prw!WoYHa^n-cUp4VOhjn6|{$-FdL=tlQX&fU#ZpDi45@bHY znRZ%q)}0Jxusv5iknIL7+pg+cNh@I9O5-Iz+yaj-ygpEzqC;LOHwEZ~hTxb8)q^}$c&FZ}06%3`YB4C#X?{G|jvdeyHfBl;&1}P*K$#o0Suzm()IprDreanRI?Ohf- zVZ(t)978)+f*4R?u4doGj-yDB)Gva~U=;)fn549bvG3!MlQ)of14@MVIj%B@qx`-j zLluu};HIkZUEcgk&|0-h_*jB__BJ0Z^ZH1T@$^4_3N=hkt*7ss58_0cWb!FH1>PRbE9mg%xmWIA0vkbnqA7M~ zP?*fWx$cqySvDHK1~iwzrBwRCo_R40dY#l_$InGCYjI)FfCZR!^xyc%jkyFfCoVf- zPSza3yVZ~Pa>4RXB)M0r3kbFRA-RM7gj(aj#{DiNLj&&@xvW{-S8b(sRL0-W5!n+= z7MLqgy0RPTiTfq#+l$Wgse^E0_S20tMx3Itl%6!f=X!e8({;D;J(8bLDPl$%^OiQP z9KG;9&!v_qc4RIVLJn)vneSjO+xs(OtDdyTS?QWNS2q*-6%+O0-}6e$Ve?7oa%Mmp z#1D3+PcOp*GndM9?${S#{>@c!{s@{-uDutz)eZM{TK?!sPQ%~pJp6OBN71gmZ`h*K zD6Ernhecmo$6P;$u1_Hh$WJA;&z)fjE^t)b=UZ8ULQA=pQ}vxdqWq})=Cd{M*DnA;|4&fth z=Y!%>eE=Bh9HUjwD4d@F_OHKRE98}d?$j+Q@msVgyk4)!zEK*bu!`+{ zxl4#T)BN%-z8!&K=Bo6v`}}Cq&+-20oD3+WNy}?^vkAom50yeMVvb`erM_?QbJ*r6 zXzLznfx10!XvTlHcp1aD&tnci$YTGWc%v9H3glt+wB$k24Y8sPoh5iq(~)~UZ4*=x ze~tUZ0t_!U+SRb6!0(7jUWOlAIQJV+kmxIn?p|4YLQ}p8>cpKs2UYD*bf?uYv}*xs zwTzs2&yN9-!c~5c_&lI2|7b8I&W2Pc?ymG&TYy9>v+#980;EhVzO^WUd%!=wIum1# z^P}GaQ4dw}Atc#(_4?6K(CfLn+wMFDPb{s^4~-v1GWW!4C!c)Il4HYW=O?M21RSc!%4YQ%=p0gHj1?R9o^w-HrZ`^+%3yq(_+|t`I z9HAD*>#*DD=Q_#7kL+l7L|Pl3!cM#Lbpo7!ESK!0|8{x={7F(yUpc=FCZ(m9BNcGo zD>-K3@=!IXOx??1BjrIqzp^I2lomnH-^xCJ?&A;lv`_U4$yUS3t7heGD+K7kyY)vW z-p~9goHOq9$9tSz@n_ss6QEIJqxo#26|&EI6v#DDAkkXKd*4F$Kz6SB_(1y@NPihC zn`&HvvB8DQ#@U5n_^E|GrELat+M-lFnGfLa_DOP<6lQ$?b~Vm9a~j2vKWcc4IS-@L z^0{X$k0PawlHSKnn{fI9heQefJW1}pAge|;3bd_;XC8$Up@PrsRcSl8*TU-RvFn5J}cAaN^wc7wUPs zsot+J>6|MTqfU(4HkW6v8Hyr3o-5?pLH!_(D2ViVjw6Tlyc2t;YalG7Ci&qHa#R+% zJg#qvdm(7#evKs)vQbPoNWi&g(nR)X;cjwdoO93m?X6`9tu%E?K+QVmJW?_M3NN`&t$rGfe9onT(TPU-$h z8kBT6#zN)If+9c5NiEkeL6+thvn-s?O;=7e5zLwZMU4Wj$D@1je79ZWAI{qlIf>4= zFb+ZPP9|r>=Ob<(2xxhc439eMxm)2eyl^&sG#*f5k_Vz1i+9 z$dhi~tRt9%?RTa+t^bKBTe>$J!z*Uh#uTS@hyUAsC9*nOlB7zz~wjBZ0QhtrhgoHVKU4u za&Q@Wm4T2}T*xI(4wROa-WyF$iaP$79%ZXxMs`}`x_^u4(FDJPF;j0jysb955dJ+E zQhg@1bXYJqoY%OB&^-M z>oJI)!B(bF^Z(TCAR_P5;Dbyz7W?A4{z&#A_=`RbTYw$bIx zdQ{?B^@hxdGEmiu;W!IIX~x{wULJyg(E1`zAOR{4BPx42M1f`%;^GTFj)4wwv3M#= z0`?@d>F&$0BJHk}r(Fw+aINXZ(LCN4)z&96LC;`j^xc#I(c;YO@)Twe|haT;6zpYfjR|7lij_6Y86g^q}CPHr=*6kS$eOfVJkcZ`+pM4W#JBnOB@EU{xQd1`V z84lF`U%IK1s2qxYvGnQ-D=}(nAn@?Q+&;IA)&pPdVh~nJH1Q0gvJOc(M!?JU{ldtP$K=&D47`! zp7CXCLtp-a?0iX&D#s+qGd1uw2hpM4z$T*~jzjQITZ&)Cz6@SX-@0cOJ_v7)XKlDD z4gz7YOn2X9VzheqXpciI8TzzvyWXFR65a3lo838m2#Rj<&UeFW;g87IGoOl1V1Md# zgryLkTPwUKTabvwdrn>2YQw+aBvVk9a$yMuJHkWij?F_$bkA?wAFL>^cdDXfx&|VL zPS{#kmxImAz3LMK-(hc1*uf|<2b@`_1UE>CkY8hCR2fAzywSRIS{CzIj*^B__(=;P zcIHy4rrHUZD(1cqg0U2zsSTTJlIz z8d);@F#0-i1Ra!GUdn0t4JWUy+__4|i1^31-Kf+U(727uinuEeGCh6jmkI9i_3Ihc zf1+YT*LIrCo!qlvp@nrMMxF=N2rx2wn$jb#nontKFE9thNTVX`?*>TzBRcTnYXeh- z=T90`DG=9*Z{BolM-hCbnSbWK1tpr~FAf>;_nCUhv)d^e?6nzft3Tr2L+uF`*En-^h6Bl&^yG9j7?@@S&N^KP@HBi<$C^l1KEIc-EG zC8{c5yWgF^4E5DCzvv0Fpgfno???AK$ZMFHxL=}SzC;u zL_89rvpsPWn5$>j&~l_<)VLRBAC!s4IT*t+^e)zW;)FwjPv8`-#nKe5u%IU z_iyVlw8E%nkbSz`4nO zV%=~rl{t8DY`MPUCn*x+tK8rsAw{!uw>@`yC*U%p;L+s6pRk?j??e$uhzcZfHgxuQ zP#*tm^R~$%q`r)IZQkcV>?=ag2Okn4^i4uG;Wy^;)toW|oMS)p&)m4F=`U<-D7$24 zr-CRG`FpD~yHGT>awVl@1pa-n_7B%@1Gml5hxWsGKD*|_CjD&zVps2%zyFj7qsEE# zoOb-^9=qzSp3DhUoHY{RVmtuzdly~U2ei#cRhE7D0R_-n1myp_)BuHacjjLgWWbLBVjvOO zf-))-E899obnc=|%Xfn;cqKn-AF4)!-e0VXu`nk`wtA_G?zg>xeff=Ve-0(e(TlGL z>mx@Q2Ige`7pB1>B1$iLYaaf4t=k=6vH>fn$p5?UfuBR)#YnIyga4`%J<9$+uexKB zKDfw$3>y^4m81SbWz)xvg<}ygB*OG+sq`57d!mz>F_HlF^F1lvs(S|~e0pcP))ruB z*E`dEbp?DYA6d@@cLTwnXyu~f0Vs2ue|XBi3MO;dnoM#UpqowA6>eICRLd^6Ab%zJ z`j|5q&OC;x&WuLW&{43meAmAIN&;z91*eu*`$3$1?Ts9q8?W&in$)>m3|#*2E`$r? zJSZK}DLdb3pr7owx}r1!jCyKb*Ha(E$1I1HFB1nq*&||eYd!~ro?n=Ksq+eSC01@E~37_eJp9w{U*-3TScQ_I(@ci_SYW1_sL$l z?68I37hp=qofuVAO`Lvvd=cLEPkA}n(IV@CN?QZrF<{+4b(skJMyF$)FAY24drZfG zgJUEwN}Y~1t?p+=#N6MXKEQreiI`){GRH9YdTEfx51Qamyg0OyV+YbbPFQ5!?SyTz zjH2X?0qDOj%jMbO&{L22RcnrIVhWz;igmGC|1MPq*$G0rFO zj^Fs^698*J62ArG-cqJ>un_?@AM*1J8?ndvsi9l{$bDj0!QG%hI|zHOnFM;W&O2g{ zOjCoY+tVnhR8oIX5~49KCEy}Bq!01dq-B|G_b z5BN?zbrApj0utt1iw=Hc-tTo`!rN*`P>{}wsU`m|q)V7|HThCEJm%psFGGHgfuXZVO7o>=c>hkgukVpz$- zK7(r-|0&-3)eVnglKOU&u~%{;>G_g)1o*Rix0rp!y`vUoikq10b1iCOA z$f1%!Pn#zfSZe!I=gXK8-TfA$^~Y<##;Mcfpt%YaA$6B;JSzp=mTMOrAG4tcpCc@c z=r)0~q{hd8Zwmfkt%mvvPy&2qGvs@~|Lo8E90E zK4zx=fk5>?8-WqY1@YhADv>9@;ZNmEo-5=zvix9;8%0^Fp6g((MKV&(X!q2R&i{g20 z5Erg-B_gE~K5!?0(dHfp$;r+$w0NID8*2CSDdwC!ul@5u4Cg$=lB4%oxp!e?|38aZ zg-sZIy!c_^XA4&M0mv-smxr3oS2qixqHxev>K3}IB z%6XLuWe&+?_O&9DQyF3`>TYPxCi6ja+OJCsTmkf zJ6^rmihWWaS*k5?U+I#BQ1mMEG&uH6UUC|&fjNl>gjd==!blU9RhD@*%$Astl+xi` zb!XePLhO0I7-(oTwkV12@yCbAr8A>Oq4paLOPvsX$w|#M@eSxXXw9F9$^-9py3%@y zJ}@m!kT|2+38xQYR-Dm1xNN=3nzZSFl~Vik^EX)#|2qTqaRNOc3jI&RL5B}%oqxPP z={*C-9-WQ&e4zlOE<1*{;QL3Xz20Nnq1Qklf1{x>WCfoqo$_lO(58s;BE6fOw^`rfTTlr^%-RJH=mwEt9Q zZ{XhOf{)vox&t`+T0!HS1l}uDoj((K6z3%__=ZVXTf^VblJhkkxKBmoN9l-ts?S~q zd+(&uBcIl~;jI|#flvEK?ZRFKy4|s8IH(8uV>DNih=YOmQ-iB^J|W_@Hu&}k`$8(m zUMLNlWPp~hPW%X?2vX>iJ6kZc3=GM#EMwwS=)6O8|N6f+@U94ZU)kRS8DFdniU+W# zHKpV#$!HP~|2EuzjOX!j`eXflbEIf0Y246%5c6s+Uf2XTav+O4npcvS8=#0VO6SYB zWbkV$ek&}^kJdydi*)1{0MYF9lRp-Nif}TG6$J*=@%YE45g{qs4N$(t@{kMNduLwN z`6U+Oe?6Aq_=x}B!@>OPE=Lf}<;uH`$_Jnz8=0^z%Zl#V7F6v#oq%-rEveiJVU)#d zvPRcMgq}QkJVvf?94#16r`km5ZrYW52vO;YFvp+6GeYOBKB~0Wnmuv zNV<*ro+Cj#n+XIxn8U_al+}`YOc*WPS8KizZ~)uhmwjmEDA3Nz^_wBtV_>1tu^Rkl z4eGmu)Psxra9^KcocHP%;QbHO8^4gE4c6Pkk@^xSu_UEmEEs#*pDo-}#r&mN&xfi0 zVPZ&(P$48#lN8aGS#d7y?1IN#*A5NrTV(mQK&%@y3D1seAJGa~fxZFHwca}HIqz8E z6MD{o)>xUPCf+&V{h+06(eSm%K&(?PpykrO?Mva^0hxdn1eZ)sArvbV9C;?IO) ztl-_MEB0>3sOSv6?1eY<0}8eGUOv&K){E{_vt>$g-*eTb}N<; zVp23%m-YP2_cqu$`Qg}Aei{^Pscb|vzXx8Kxg{<4a6Zg%<`jK-C0ya=UTG281Ive! zad!@il%n5xZ#cMr1|HY;Qq#-(z+ak^BR2a6DpZ{2IxxTGu11#hDZYR3J%3Nqaex6m znV4N+ox92?r$y1oM1L(KZ>270C{GN>pwxB8OZa{N?H{5j@Jr{iZI9ff>^BUd8e$a2+#KbJU zz^>`iBa(a$`Ds6#u}9cX(Nx!GVD}nYW=a0r!+wmFGH05w++k?=C-ZRP(jbHs*qFea7R;E(R5f*F$fs%*X4Snb-=1gziU+ov zJlTi9Syp+HN(uWqcnk!!IPrdpc0hSjtPoBn9SEM(KY+Y=GyA&)_}pi4Om%d$6iQ3d zzC7zp1WR(+YucU@FsYcvC!{a{qn9FI9VLGVpFH}MzG5y))Aixo4m-=RW$OAW`9nE0 zY79IW|CR=?WYqc?!-wIZK6QU{BmiVa=Hh5SeFq<>JO@9uWw_=Vb=#hB2R``D2d0Fq zgZ52j3Zvz572)R08b|rDmnQr0MZR_H&Uqe`|AJPWAszc26kZO` zCjEfBao7F-@)4sd6Y(P&&T=r>(j%fUegs7lSL%{>>_ACnwwAv1C`cV9m9OBQ7wVTR zJ2BA#ZFMKDx+-cxBtVVS*lGvrE_wzyS#QAUTne5fiZ)QR%h}!ihVx;?!q~` z)7p7~wCHbDYvomGHl&#RL^&e<2r}I$RaB@xgq+kGaXo%2^op9R;G8fK`a!74sopq- z=P|4SqZREC|9B#e(47#Gxs;Xl{2GDDgY|J@2TF9W^zZ)ZTZdqn$Zp>fmIlJl-q{dg zAL7r78yQT4DNwoYAUAx00GU5JN;29*fsQ@tdnva@gA}vp(T?B_?$NjXEc`hDCM(~jc<=YSFF$^s=f1D&Jdfig+)ZEN8;mgmo%{?HdofaYuvn=aYu^G{jK80y z(e6WwVxjg8|6iXj4MvTrZJ&CBABScS>1}_pjaw3!Sl%hJ98i8Xm*u;Kp8T@^T z99c=$;OF9bzY~pONR}pcyg-5tT~l9()4(}gBc6b(xq7n@Th8zxQ*Rpk0=BHSeHWqg z{-sfo`rq*DwGgjQ$~@4e&nX@B9l$>&$x^p%BGl0Oo64Ym53W6atjBVS9|bQZHn=8X z4wc#QNJ&9X#AsjNxNuV(Nf@{n*S1lkh#B2mq}zDT6T;3w@D}r>J|1_^xlD_6pZ&RX z(Y^>aQo=)jpOZkHzAJA&rBb0Iw8>Gbm?vIA{xs;%B{CG5%{Rg=um)d_E@{=P?7&1u zlO)g7DAY$EYu><~?=|_>HmSSWke+{f;VAC&&)bDpCZ==%9l4v=mz9su-r*d~>`RE8 z|A`(s>A4Ba8=ut7LJ(m~%wE;fLoWpDWBjE2)9W(65iY8}2T-b{G z4P2xrv|K0*fKESr{};(T#5%eBt=c<+f;6bA1k&ALbjW;qW^x!7nG%NPFyAO>=+3cO z7yO^>L(@-GIa-hp4Rx2}eC|HTB{Tr_G()E=;_d8@A-vsZ3 zx2gZV#C{Hvy9qC*<&i=dv6X+xCm4*8`Vvt%1C=dkS4?;hk~-;|!giPtz8htlu&e=B zJ7p3@CKpnzC$c>&Lx>(8JCxkxwE(kf;VMVk3drAPp$Wvfq{{+sUzyX}Ac-fi!4>y= zuG;1KsbgLeNz3}|n-7HODeFi#T?U>Dw3uyWIgNpel=i37j3lVBdT?ar6$QFzARr^% zSpaVfO!M2$AHa*R(x+!^2+{B9Q}S~-Z|JNne5yFT5t`rKOIS?zhI?hgzs(eF=U#3Gqdgl0h(ldUpys?b5P9+!ewX5z|B}B z(A{<()^Jb7yQ3Ra$P+$Ro8bFiTE?{Jvn|+eYiwLvih>MgLeFUB5BMy<8B~`_fId)f zcv?-)f>(H*afBXLW~1-2TDLRrf+V#EMog z3sG3m`9QqT`>kr+XMJs5pt%&W2-zF+b=N;)9{&>I&49Fih!Rs^FKHz}SUiUZj^}(&2AqLwA zjL5J%>Wk43_F@eE7k5gE6y46@_HVmDhSY^?8IuM1k$6?HXw>>4(BvLD=nOlA@KE(7 zzT_Y9Rr}(+?}Iw9ASBg1X50d)U41{~?c@+w6xD!WFlN5BTTvC(tigk|x>obgWQe1V zL-E(SQg|t6oIhfl4_5SFI_QR($&k ziZ}c(hDr&7FM32MxAyGGr6c`ty!??*Wh(`;Bz|`3Ydo7IEIWr}#L%9YlI$ z{ESazLRyds4|iEFOq_2gzP*6?NSwmAE*!zVf~iZFf2A&g2J1q{ezXUO_*-6S$N6E_ z2khh@q87n@*O!LyHw{`7x4U)1*b6_m+PJ?*G(y~RO3~^0aj=ZHlzOMR38(eNYv+UT z+|8x9eMw{x#2W)npZF311)q%a*dqu~)W!C4ev@W6vOsM2Qdkh}x}KGkVaEMh?upUm z_q(7JFs89Sw*`C0pD%X*^98k#F%|uQe-Lu{ewkQd8&}ep@RlZdR8%|g6T=T&9 zl{{^Na936&8gA2*NjU*mUW~nRJ&)f%8s{HKbbN<6Hjfj-?u2NZkA&rvQ#R;%icRj) z;JKYL_Ii38^s23{N z9GRrju)nyW;WVKY2jX9|)FbT9fr3?X&KOn#6nj%w=!Gx8NqZ_+tP zf7=jFKz9`JX5N)*AjX{abCJ!`C904p+%1H6bcjI4hcij7AA-E!CXU=*0@K%49yjp$ z-d0ZgAJ_gOAdM4zoVn~sau=3d_5_f_o>olFDH>EzX42c}7Yin@Z|ODrt%F2j@{X(0 zH0IK}dXa@sfy_VhGZvc1kXufz;30DlR4MYFQg>lStj{@bclI)4?yQ5n^jUMb#E@$E zkGcU^MDAsrJoz28v=2a&dmT>2vVACX#NNhK`TdlIBk0Mkh;L5=IZ^p;scyGc2ap?z z)MWb}1zd@G{w4zR0h(@+DVyzs#i}3C=$}@QJ{h6dVX_S8wOo(qOs#{w$6hz%IxxFPr(;t%Bf_#?yB~X2AI~eX_wf2jFJ&9q{@rgi4u`?wSq{gL?|C?;7Sb zNc-z3hdrJEmnUZe_}QD`YeU^=@(vYhs9!zbCQXZKV((wQV?6;pya`{EvMxcy5%mNL zgAUlO&mvtX&4ml9HhKSWuDO3A)9a7R0K|5k3H^xYJB#)+4h@${5R=~9{MHI8bZ41^ z?$u3Ev<#a$V8n!Kvd6E)Yt2J)?CSvw>_O;!ebL=YaTOfY({6a}5TcLk|BiFqB}Q=~ zc1m`ihJlAjDa)CF3iaqkvlA{bp&t)brFfk(Aj9Y$lL7YKUUwLOpegVJ?t1mk=?d|p zzPI;Q6+1&9JY7>pz;POKLdM!+%Z1TrDe3slFb_B+wwC*g`<7Hp8Dihsn7X?1>g9gWE3@OlgS#Gx;O@^PdJMhCq&UnMi1Xa%mcHz z6Pf(Ns1D9jet(!U)d~%20c^J2Q=oO-;*F{{Bia?v(T^jgL6Ls1zv&T<0I$7OZ!qS& zL=|3Fd8?QMCLO1|WU>E@?Av;|OkxAn8kmrb)Qo{!0I9gciEf||`D-GdwFYf=Q~AEz z_wy_zI;R&{iBaHB$F zussv1Bq~)|+!aG6I*;CUEG@w3w>R-R3&N;SQ|p3jd_QE98JS11lOSPh%d^%T2k=1u z4uRNOt}1)ZcrVFQ9;EW|Tvm|~86u4$j_J9f%`Z%~>YFH)f>o#LI}g}*wU zVKM(@LCe9+X*11nkfUi1i^QJoNCMM>Qd0p`(<>Wk8Oe%dl|TA%&(I_9$g11Nq?ysv zSA{YB_}sli+UO=M+yZq9BJ%1_xsbpsVJ)qj^-#1a75efa2VCg=ZD(h904rx-YVk0# zqBpL~eumviON5u6`(|W|y!lAVcph+W96AnUV4Gn$i0MDpbF4^6m5n1B$!S z5Lbo!e)L_0L*%CG5dX~Bha~G53cj*AOwPlGj@ey{Ti2pP<`;fG^VC}hO`n}hI^5(4 zZQ40&JYYlKYNk;|i8Ijgo;Y>=avMYoZgXkAiGikDpZ^91)I;9iJGwf7`LL?$qq;H0 zfJ&r7SDF+L!O8R$?V=OB@2*bZc+M zFcJFd953U`z=RwrG@>^Tcd@Txd|c6S8?aiB7-^MpWcIW(_CP83N_Mjv##|J;6;p9 ziu=Kyq=?jLVVE3qbf3_NC70oTi`n}`p!h?`~=bt(&!j zYklAMEW0>La=Q;Vf0Z z36Lu7B)yPd3TSCIucR$wPVT5Mrl%zQ50<{U~Zd7js#I{FO zzjq)+J(&psL8P-V{XxFXzm)~)kLJ+_CdGpJ!;JS*d#jMy^(~U&1@0|=!b+F>1CYDQ zpO~=t1yY!QJ>wt$1S*eP-UoPLAJ?yU3fu?lxL3VjO!KT0KHj;0-yUrMUZDTCW;&$mPugwXfYJ%OO) zk5HMUm9lze9}eFuyx)6P4JS%MypNj^qBrcX=-F=JJf`HqitXt&7>-CdBPB|TID60P z)e*0PWQ=Rma0Us|&YYEbNjm}uF{&P(u4Jg>{GLhq&3*V!F-7NcDL;B>zt3a%h8X96 zub0+IAHtvg?+)@$_|W%l2I5X~?5`mEWYl|a49K~@3AB7lg1j%B8v)sv-%%|1Lb-z) ziCoM`xN5Qji_3p}$v^JG-5$&Dd12}(B%rOPTBrx8w9De>$jFg+&F%KpXyxLc<_VBTuELek4=@D{D|+%w1fzSe`1 zfs(&qp)G0RbCLmRWHa~icoQO80f!q@POXrTdR0Wi>>C)|L2VZe@N<14asP^FHPqQT z3QP2pq0obw<>O_1sDsm3WaY;)gk6~0;(GrIZijTR7%8Me!N|ijQ#@}gl1;9&cv%Cx z_PnR&7fT_Ejy#ekiU~=${%FXEU_-O!bdq9tFT}b3r*%YA0!eN>jWXNp1*u8qTz(bI z@3|f!Qs7F34l-X@jby3)EI+mkh1x5N9}V9di{u;uRxt z47Xo^Wa}N~*e883ofOJ9z7Px*e@}A08t4JW%d3I5eq88%dsBKc_9Uqn{LGX)z;oAa z&l4ff)OpO*5SUA$s?I3&qrLKlD=2V})%%fx{i1IZrh>yjXgC_NzVlVvO_^Ra0 zafWjflF1i0i?Jt3?r}`-Q)V|P>$qD|biE#a#!190Ijq1Gb)lv0yF-Znw5g;$JqhIw z8Yj)((V?x4#cwLt>fi_a=)1VCaHu{LWOdiB5q^G()SBU_#eIguLi)oQ7?mN{;lex^ zVcziE`r#4WYt`n@k?)7s>Sx}ZkFc^EoWa!|pNC$kcdu~c; z$dLl4H#s6%aIW6Wf9zR>I2WRG=xzV4vIQ5lOf)%odhmOkmLw^O2n{OT;Ji_Y_Zc3P z=BMdL!P{**zO4cCE`rL|kMg zulR7UBlO(;%(unZcktG>`)ZgL=nIQlUfQV!s?2=N8Mz6#cqZ1Xte+au>}>pD8BK)8 z@|k&&7no6KlgdJKPc01o(0WDD#ef6|LmSmQXp!$LPYZkX1@OrzlKmiU55@;%Ol7Rn z$Z7Mk(cO$KNI!1p<5{u|pf+}_@EHx_d3-S;v91GT&S%9YT`h$wrUq*x(K)!T|3HtO z`UjY;>c|!xUjmO?ei7f@Xi&;2j{9H#ZNS0kKOI*6b_k{#-^{W53!a8!F^u^8P#Pd6 zuZ;P2XOYka1?y=LQWO6h^k^N{GEDO=W^gxk)ForYX$ImeXZp^F4!}vTX3rGUX?QNf zA@yI_QN%QRi8vi|+)n&x4&M4)2^R*HW^66H;T!9n{09e&$Zmi~DCS!oY#sbYyE#XZ z>W5IKSSPF%d(xNEOI-061A_N+nKi=8DnFpMrG9z?2hdKLLv_WLzC!8!I_&a3Z0mrsn zX|Jsj;Sx8yvXbjO=%0+0y6SQiEj1o8SFJR_ipu76FwQLmq_&qU;M}=Q;d?Dx^C;k@ z8qvuTABBt6;Qj<&GYk(FYHJ>nO+=80o$_I7S`;;aNZ-Ggdvd}{b_vN7SvY= zLyAO(zT=HBd~SeX_!Jd-{>^(V&a(vKe>NOu%fB%x=?xg^CO|JN>%h2j=uzW- z8<<|z`}MB41)r}sodlzo;Pg(I?UlL#upVY67bNWjxl$gFJnXUlOZ9V7iCh zd&q?xb?bT=nlQIUB(?k$k2k!2D%uy;!U}pkihC-`yAbaayIX?iZ1-y7IHx6h;H8*P z#sUF1a!zA=NM?Zd1?DfgYO{9WVuA7X`L1Q)GJjOi?AH$TeCg=j zt(}t>o}fge|2U|wXIVh;65R)JoHyo*ow@GgM~c1(yrNbRoPpkHN$F-5?2qCtR=MQ6 z4;jf1bR&g#K|5hoKReJFep$?KDK3#AnY+T04ddAJNWFibSn4upP2QaTC&`Pdy(OB@ zvxp-XF*&yE-acTuVJ&yUf(k7^TZ{kqX9Ie(2V58BIFX%OSx+tYfXfxsiq8{pp^=|< z-i))`An;)JsN5SZASCNbDN4ZJ)iv6ohY0h;86IsWn8-lpLVX1HgLMcUHF}ugg?j-6 z2Gt@15s>SqY#5TqfDDDWHQpJIL4Rsy(HMUbxN(w3-akW#ZrIJT-@@}qo;j}VfjMfV ze>wVkE9O#*hW#W??&L$RH(~>$Xu2@}!RwUgLN`2|kEkK^BS#zyg*lDK6wq&viwv%Y z2N1l}K%2sW`&%>-C!_{CLFeq>T&LAWn3tg_3%933qE}#MLO~c^qL#gMj^qy%-^$D5 z7-vH_v+a*=`LqH>z!19uKLOH>s60Wt!hi}=U2Ds_xlod6mFTnRL-^&(l<<#k3`&M; zlk=%_K+)o8qf_}dkn0izgne#-GZx+St>xHHUPheyaep7Kl3Pkzt&k%+vB=GDgxK%# zWjFYg<37Yt-L7oyBClic`SrXZ*PRy z{ceFbEO&lQhGXv7c#wSr-k(2s%tpy^67T)P9ohPn+u-xZoEZ=wgd$0vu2M<{6s5ez zeZr?79vLTHJGj0D$EAp-%StBUT?4y3qdm?!{T!D`!aiuD#rg?1+8*GeAvx@5If}f$ zsyR!2NC)-t)sC!7OsHS$ZkNVo%095kPHzEIZ}VHr!zEBEyLQ~;!ZZX+ojxK| zO^phSN-LXfXFyVudHWvA5wy(^n^O?{9_+~juY`Wyf%7Wwy^F_^!A?5<@UifBm^!2M ztN089lBE#+iF6rJYH#zj>~#;ZjEEF?{b_s!i=S!JpGkTIBm_%$e$a zOt-|#u?Zbz=Wd=Fqe4$ZIKDAE9z{RT*4^1Y&4yMcN-T~9{|3qyyTNq>8nopm#6&VY z4>wE~YUkY^w*>4O&Eo34JV#Mut@UB zesKc&^1R;JEc~2F2#DTz!;S2XJCnJ>7?51<<|FYe?1_&WoP5&Dh_b8nx7MxuU@YV3 zVz}=NY{Z7Qb6msxv`_4!J^DXDGJzaRm+Rehws;9Ql6O_B4z08z9j_tBt2lMnro zI$qqE+zE!%AGigi8sXf@Cjt9C1W4#!!8{u=84^6y%RQF=3j$dyNU!^mA@R{$M?VkZ z|K}08%eUe?A^YUS?7h4_DBB>WUdZ9LdSr1IH{hTPF)3NM(Z0Y z-^SpXcdqS1Z!;+A#NB<}ISUhX9Gcay$q`S6nu&1E5!9tH@vrDE0b<|j_)~=UIF}*& zRQV7KiZuzj`RvjLD9yM!wf+eL8;@A+EU_8zJ2CK*V4oJ9ovg0(otuOVRb%esv}KSe z`u$f_FFoq494j2WPl7~fyPS1Tl){^P1oRdEa-i~s_j_}Ys2Or)W*#w4GBrqW54&x^zyT5>s z$MKpA?k98|`Pyuu-V8It&W>53O`ssl(ezlk1;Vn{7f-ftK>JIQu2-b2=&U7a;6QT% z{3CSN*TUb^r{3opJvZplj~9eb&9UG59$8_64nEI0uo8&n6OBNui&(WsJ^{)&{4LCx zxd_F1qAy4B=fOAL%l%JnF^9aGJpC`;r^a5Cn@Tu>vS$Apii}i1)wf5EUuW15SX|Uu zG#`LsL3gqbWj~>@W8%KoEBt#29g}q!zBvH!4`b7Fu5iq=rPxgit*UmZQ2C^raD zbs|mZs~K|CefRaxq|9|#3jI0A8(t06?Fqg|liz{r!V`5_;%JR1>W-vCPmudd2W$RSIt&D=0$iD zh-#nu4Xm<{tQEeAp`6hKMZKHYqcYr(#D;q_-(E^MbREU#iKR{cGt@_L59$3T*RwXr z?)lRckkthQPof1@@6G@NtAmkk%mi5VRqYb0`~msE=0`7$s8OEd^4zip_TCPZW$ena z0H3tRxScT>677^L2(iTT3JJ3dM3N-vW!o_^ih*Vz+*^ug&0mLPk_MS3t~mI)Goh(o zu?Blr-Q*pVDbRDDrUos%uRr#l^z6Oot3W?z*HB1hfqO?TZ=@Ri!8t2g(m4S8Xm3(b zi2CB&2N6IXYm8#n7XVwT;GF8)blT=aXwzR`Osa@YXmCGi~8by$G~_3 zD$jSYqFtdOyTLFV>U6;3%FC0e!zXb5AmAPRN+`0vw8Ms0 zC%;v?%J#$lzQ%53`*CzVczRE=b_Z^8={@I^^#|TFFBUUC)WFAV9y>$#aBYq8c$@XuWv$3Mlrz8=C zO5@Pmg5C%5xM8pCYC;KpC=^?G{qozG1XZeS#muKQut{D`5`FS7Bnb_iNOBwncEX(Q zFuo%Axy+z{-g6$B2&&d2PR)Q^b;Oj?3tB`}{XI=lZw&~H+B3Z5Fo#t5Ru|WQxThP^ zYZxg$1iBtyZnlYH512iXB3<1!=rr4GtaFj0*)geUKau08HNoI{@VP&r@phkaYn&Dx zqr5)9;K+ewe?8gRXd^_y>o*A#cUOS*`Wl|f4nt^+Sc8Ln8#FRMB^+A7`ADbH(aFJX zxN>KO?}lbMh&)t(7uDPdy7_j|imKFTEq+e2dRrGB{j6A$)MY|!X@fVu*U!SoXBn|4 zs4IcMPMSR*=i?tg_8*r2919Ae&y$vi#~?15hgISW<}LV~+1T-;Kpzz*olaiiM#39L zwXYdFfMiy3q>5x5gqeB`=xT?t*T|+cj({3-0EsR4i`dW=viJ4P)dWcNKe{8QXoumZ z1aahWQ!`{6$={Ai4}f6PN{=siUbK7DX6D4yHt1=kT=_CE3qSQ+)M#$}1m7Gs&Srf;*b4^jUzi)@8>K$!kPWN_w|>5m z?S!$QpZ`q!$03hqv&`;QGBo^^XU*y4ML$%}?P*PI0qr*Hj56L6e5GWl-($NA0hUwC zX`)J~&hIbT2k}{WCQ91VQB00hTCll|Kl1?L{$A*ICJ5cfFJi~lw6!s^669*MiNzBweKLi%rxzrgTi&^0=k zmMN7+g#y9xQP}h45VdslkNpaq=cE$4&KV5r(Sa0-LDVRpjV!wv`#AbrGS;qy{okh% z5ylV_2h^vl*VQkrVov;73fAfhptosuWV1Ge%Rdjw*uQ$f@fzt8&cZy{EMra5dA0%9 zw#*AF`u_nTWk($uB|WkwU^6?WtyGm4NnEw7Aw zs>9EYs@$sU25uJx@uBoqh-5s%@|BDX=_VYjyt;%vq z=_cn@$Q@R!QPm?xS3V{3ho+DrjlhpZiM45fPm}f(F8dHh`*Kafe+MSNxFEV6%qh?{ z{#Y^459X_FZahkOuPtSI-e_SC2uyY2K3GnHT^mt#-)m}Q=2@+N1n1_6mw)Le+i$>w z>~6i+*qiAR!fNJ6__o8U2tJaqUCLnv|g$e$9s$CqFOdK)&sys_4Ygy=2d6&@zNM? z8bWG}a?z4531YsZV_q?_0=>ukq}<=*zTX3u=PdIS=)ZacH(PvvI$q4BHH_a|KR-Jj zc-w{m@h0PZz7RheelhSsOg$cc-73tVzcvN|VzP^i`2HK=(^l|HkOj36oMRopd)%~K zlTUMUN738)`g2>glt@>WD!k`813DQmM(#zD0Zo_88jDm$Ac{ZaioXHon+>Yg(d`BT zJNIx~b^IE*34Pc9#Zm?X2~_{BS0902YF-=STYDh;Gbi;Y?(03p7E56oVRT>dZEbV< zID{Ha%}254fvkLy;aW1DbGY6=T|}}Er>O>WmR2Z{53pz?Yv8=nl}lc9KgwbBpY#4* z?2W3QvRqa$-GktqAfDzsoTxumQuATR4&2+Ek&F{fLqB-~b2xK`gJAE<{M)z(Kh=yIkxnMUFA4aw*&^fv5@p`l!N(3HKP;f3m zgQ9MuBL5n2?}Xm(6nzeLJ=vK-$Jc@9wM>7A2ovhbDwOHQJOXoBDV1R5C8$@jm;dc0 zhNNCQC~H^*sn)I%i#!g+9`lro=b3ghpoKbJi5l3D&~CD{T1GacQG7piC#FM;lm2XV zjvi29^3dzl7Vf3|RWy>2Jc^ddm7fc55}|9`y5DKxh540J2cectN~;2rORr zQiHCy!Kl2rwL|DHAh>>BD@KnNxtA6W5MJ$oL+ZcF*L?_)VrSd2&XZq3s6y3IpiBfQ zJ7&DxDeD4}qH}JZICm3X$0x?UzX8#5Lnc8uM<(Kw>*j*zSEO1mVmw0s0@2XtDiVw1 z==*?Tj$TeLl!ZUMtrSRuC_Rgp)7l7-!CAi?>p#cP+Ve=C^{!2z-Q#F9Kh1#5jO%ir zh9tn;+K}c3DGOTXmG_q&Ylh@+On2?ciLme3soW#t5EO||mBfS$0Oh+uiyM_+;Q0X^ z;l}Y^xIKSk_k@27I6r+HdMf!c%$(+a*Gh%Y1H9Ls5YiH1|KGx~H-<}i4)lKJgTe~b zuzNUAjrYKP-(_hfcH9@V*%-hSOWZqFNI7?b5LsG~N~d0+N6hmNH8}9!kLLMFAI);i z6S}RxfCPj?0D zGQa-@lX-_m2Yhc;8rlInrWA0FDwkl&n*_l;k5i;Wn3rqzg-m8x78=mKB8{m9NZ7$Jr0hoOYY)5CmgQZ1P((TAScokA=vL!)+_-;Nu zF38*q40N*^txFBi$emcN@SO^MJ1utvCGWzM-m}&sPdvcHz=M|aB{Q1*!}8j!fgD|{ z5W3$&NQs=hY}U&@yMYnQXo{Ns33S6DpK$}Q2d_(;E4_OW*uM+5y;q?{<@5DGZ)5Q(ibb0VP+S&V48kg)b9tR5CefQ6JN*$fMU{_Z;p!fb zvl_`T%*Rlxn#{}r#i&uEi`qKGu*cYtD22hrr@00ezAf;n?sxa*ZV6nEtSGb5r9`u3 z_jZ+}7lH9*$<^)*DN^~a5Lyya3yPAlB8Rspq0CvQicGKts&Y9W{lI^> z2fi|2G~24+g~}J7{?BuuFJO3#KZX@awlvlrAs>LT=V~MVx#cia`ne+WCJQnOO`Y1g zy9}3iKM{L{a-&~1`Q`n|`%qjoZ@-(@3{U?E4I7>iLZO0U_bP5sAOe!fRH6;s*T0%D zBWf}X6s!6t9}8|k#18MQpKUv2$$y;l&h^Hhr!v)z(nHlOK&B@5VL#}cHg_ES$%XXi zcJ?il$PoE@M6NKk44Pr0n_0!at|wwj;=lbWp@HJVs_YBwQ(aQki3!D?3dY{>Z~Xgk z;AUJdu1|^d8Qi!#{og{_V;V-m z>ftBb&x{Oc&T;#$c^d9{5uX#ICT#|S(c6+{H$DL8h4ON5D+M&)|BtR!s2%uBjmykG z7J_mEwN?EG5p>W;^rJbK231o3JX^&}iT==OsTO<@LNuclBg5Pb=(d*Np4hip=wPk4 zc}mp`AqJB6{1<}ZHd6*u;Wpm)Mg{J+lfDKQ(u@(|_(;f`(Wd(rI{`0T885X|VIF#T zMnWxXC{P*47q4dSsCso)3lLFYFT`21K%VnE;CMO6Q!;-Bf|7{kKYOwu8KSo8gXC;z z5F3`Wda?k=uSU)*o|uB~(}U;hC>T)VW%6tfDnisuV4F|9F$51Ky<;33r-0qyp!Ae^ z0_c1Ul^^yYMkBupR5h{pyOv7S@%Bdsq?S)-7UT8{W*%PSXg62Wp){_{5w+UeuG~Sb-QF)uCi3a!78x|@o z6U!i@Q%3TwbTcf`cjy`gVQ#pMY?PE$FL0?I4PBCMfv2C0Kekp+ztr z(AffC44URu&QH4lPi5AHkFZ^GYAi-1Lvc$gcYO;{MLhdVcT$NMhK!KnwH zEln30P}&Jbuyf9Xj+)ky>kC|HqZLJ;nH~eGR2nnPc87%X*M6mtk3#hL`>jXq&Tx|J z@vbkm1gL$YTP5xP4XIKJEz!2Cz@Lf46Id#M-Al%i@((Hc$42a8_BRw%1j07o&n|)F zuisQ1k#Qh>FKyuq6&+d$F_=l%@CW5f%X$5gI7eWS@O-SO5Ef%C{C4KvLuTA@@v=Tj z8>yT?!+Kj9dA@{52TUC;6c%-j(nTHyJs*8jYO}TE)|WzlmG5ZbiKp5TY}F4 zn`0J0`TT4lk1j7FdC@3lVj2fs+Mz9mS9;<5iewIBmj^adX;%nZ<2>Mp_D?!Xl;}!t zzEVDK1+ckVe^|aIhV&0j8xyBuz{gv}&pJCD9#J<$U40k}31@8*tF<|h_6*fpWz-Th znk9!*Z4blvyAFnmOI)Zk%FKGsWCUIiKK{0siamY6{o}aN6iDXgJQ`aTMcms#l0B@9 z=xLYUlE0uJ3b?148GT_LP#-&ryL^bFL!JMk zIzJ++=d}|a8UxAI+ZzE395`R@O&ORWfS7Ev1&l8ALCFJO`tNhIuz2C5)rr_S><4rD zTcf-M?{c!LmW$>=D50Y#$)Oj|A2_4=3J<|C{Z|i_6eS{VR&QgM{SGCY{tXujK7eM9 z1+5)(D}<(v4Q=8aAjgBAnvd={hk4OQ>}@;F`Tf`%W1hx*hL9|M^E`3neA`RO+iDd^ z+#O}u8Mx4l`^LFXOO{Yq9&z2BnjYPkxKx>x_y=0Y=Ry(QQ{H14yOL9!kG=A*h0OKw zoa)mMqZ#Jn+l#+Qs7T#`&rfm~oxb7sbz)I}tMq*!GKzN9II#y4pB&4+DT4moB6+3GCg>-7Nvrqxr>d88pyiREIY>ErPKIr)7?kPj{>Wx z>b}XGXxE))H~O3nFtc5>YvUY(s{i6=Tdw@_`>vg*j70}%6$I{{XRn4rQQuhi-7csm@Kt|1OoOTpm5=H~(4fclWGg%P z9`6xywkd@2IEp$cC-3XQj9ALkH0^r^fvw`Mico+MGNh#NmBAjt%6a44H4(cY6?`_} z!?Se|4yP}DP@f0Qo)x|Xnd1;SVE9=_o(LJ|@pc+r%f>x15z%1mpT5GErTYHgD5Q+P zN&b&*6KXXwzsU-I0ZOhK`f}G|kntvOiLJ^5#l=jy2iTLbX6B12%h>CFaaSWl74ubx zCdc+;7*L91o{~29?un?j^NHO!id;vIv-2x2!bcF3Y*TLsD!-O6Rt4;PA>)sF@qGri zU#vtC*v$Yw^EJo&P@(U4fB5@j-^kgaOsCJhzv1eqYpn9dmC#;Tt^VjP6}sVPS6=6L z03%OTt^Paq23`hdHw#P`!5xvq1~)EBBwlzXMsBSN-^YTEtHh-{K}It>Jyi@G^Dc`gT)$6JR`*nBVnL>^vnPnajelK$du~hghNk8ybiXN59T)pa# zId-na)@hbwJK$g9IrPp+0Qt|;Ytxd@qWc=HIcc;0aDg|!>Mx#KC%LDJessmT|JK!5 zHcL8`tzAR#Dj^FzyhG2K|7cb@y^_169bOv`%$Qp4Gps_6HjP;0s5QG z(nK<(D0x#UH@CzcUhh@C7Ur6OxS864W4lMuD`^#}PQ1@{&u`-EXi0&iF8qP%Y2|Qn zx$_axGd!PbAlDzV$9`qPzmg))wxM)gEsrmq3|+FUdcr3#3v@iRxyPb^L#Q_!H3#;{ zd`Zpv_<)TR-8j6N+8-~22>bU~Jx|;Q%DXSl_svtHGvuGwZD!h`&{Z2Hj19nz`17K- z*7||`k?6{a0PMpgP*b;WE{XAjzAjd61kOD6g`q2R)|} zTp!^%?!6A#nzMKDJd25C`JGxe3_SmD|Ga29G!2HHjl!H`jfYA?1UR3+_jm1_>S8~@ zkPp?VymoM!-mRbPI)?1u6>5}caiSE?=7MMSJV|1ukf{P%~!(~jkfffa{M0x-0u7oqD^#h+sF+Xwb{J=sHEgHM5w>2=@0~!2} z^DJ)?p+>YpA1gQxs}6)lZysHN*T>bI-Uv>>KO34~&Ou|)aLmhy-3Rjsx}W=Bq9jB= zyic+8%3!{#Awxj;KIYmz^)?{(7=`~*4eWAH3nAMJx6deix&mU^|H|iauijSYMSc{w zEb4yfvOg(X0g9E=YhAyWK~eLr9j9SF2%J4_DyoF@l}(TGL*)|SZ2i3F#o1vvVP3P% zR=f*&hr<@d)(q%nC&A>>+&rjnm90|Maii;hk64vyF2l>~uSHQd_Oup8{FVF5f-L^% zo=Wvi1xx*RAJbqMZjtVtj3sbmJjcOanV)>2k#2SLLEE2A%jh$D#PTp{*T zey)G}EbZh9{LnoyOr+5R0yd>Tg{5Rrn!XZQ;65{w`LO8rs)rdRR-MQYoS1|+7uLTp z)%e0!c3*-^fuBM4+CuLk-XDrqWSOx@*1+dzh48sNf7mMx^V7LNi@r6yFnBdhjdsrX z7`hBEfOMYr-j%RQ7~*bwP9{DLW-*N$Dt!ZeMF zCDQpQdKdUM>Fqv#uFW6n`5dgk=j5Kp_7;CZ_0~j}Czm@=yZ<@jb!Gvyf)r^qT{uxu z;QH1T*>>oPcCrUrI#f9IK3-cNb2@10w`Z>(M}p-|3Sq_vaGG-|W7~`j@t^c2(5U+d zoiG0Rl%($fQ(M#FrhO95y=s1Cki`DB#h2-i6#Kxr?d&2~I?g+t{^A<@sRL*)ze;)9 zdmrCZc~lBc5}`8&$F$ts$&h94{@_2%bNuYQ{&;v7-*=lDj&8YNu4`<7YvUm1F&etB zsF&M<{Apd0*MA0q&tht0uV@6wqoRf5DR|HykFbyFj|5PG!q;HaKbSu>_8{?LNg7bF zu85YJ?!&11IR|rQP86q=BE(q0gj}>j&fl=3M>(e`YDhV1;9G7v72~KNvPtwDdNTF` z{xdysoCwdmWQ3U#J!Ll_PW!!>lI=SXww9wU^4J3JTbHJGE>fWVDOJIyH{_UqZN$%M zjQgGg92OU!wF1-kp6?qUabNsWjNt;&0Z8PK-&{Qs0x3p65**)lz?XPk7yTP!FmgXs z-!^6qjNUr&)@3jwUzZ%gP_tHunf=PH-H;1ZPngB04>^(9k^z@B6BFWBHmN!KP8?n4 zWL)o2^ntyPa#e0_OekGc?n)oo8sy0&*16#4CS8}mBHaNSvT8}3@r`YRk#?383DIs? zSuY7TzDkTt%LaQ)RNKMx^RijlDnv98CDN}@ zRCc0>>v|d9HF0i$7d382D?iFAg_t{g z6;1!%gYlQFk$vttn62yT&ir-&)><}4{*1Q3J>VLk4r4tRbr86nzL zYBAh9PKj1I$BsAA?gBOKjVRBN?=adwd(&1O`{TVdl)p~R!uiPv>O6BlC}*Z4aENJz z^Qc9OhK3&XIGp_PX5<^xTZR*@Gf|*JS^Va!Dpys!(NrgjHV~P)9$n#V2@&$fRNHYJbK?>R``nvxt;z(m-nv*hU>*i${PrgMDyu0>@q80 zvo5o*$VY}s2jxN@ydgyzrA)_3_u7EsM`T~iG7}^ zhry@af`fa2c@rlT#^_udKL!DUyQjcBe7mwZn5jnwI z2=gU2{;2$pAjkK#yYtU{^ypDiTCB$^cOG!JWi)$yV?(KIgi4{rA3!SX?zQ*^Dx{#} z|8hBe3If=9h}-{bf$M5x(>A1QV19tVJZ$4|*$#%9x=)W1;A(J8O zeYVRehc+Zg_j7?|)w>EHEO?juVeAB|{cq&sHyK8xsZhgm^s^ONr;wTZF;%5W1sL)zU)wKKIU1#3l-`GXpoP8 zv_V6IObuF5c~Be7OZ=BTs=W$vo3(Z_H5BM(Lx4~+eQ%%d;aQG%(tCzd*2SOd5-spi1Fe{4m?t;YUMsA0ix)7CP;{N0V7pe~_GM|+TgKSD0fznq3 zD4ew6f-E~BdL(;=gzZlWB;g|O+TtJh}wT| z*10+Wy~bmy^B+mj8>LGgjyuIberh<8=~*n!Etv&9G&zP$RPC>|DQ3VaXN4k>q+M{| z*Nm=w#*VrUYAy-h<3bcxz01}1*~ai?WDB)8At~&UAZ^;`W>M8>2TfoNH%;f@_*KKDiaJlFNF_}`~+_uudc=E zB3Sw(6y1w?jNg=Y=2pn3VRmgmRhSm%@82ZvgUdB|Vj7#>l06TtKf0C~>(?MzOZSrx zJ}1smgn9DP_2V2uH6|=%!@g2`m^$j605-1B!sVF{f;%0hm*oDILvE)s7LtT7TjSlAN*c5hq5C56DoqLBUyWLsCS+T=}{O^E;~w z-ac%g#5_lDH?^nY!yrX9YqS_eh3NNE%(EH;fKp*8vgUOJ^sJ1h>?UKrl~U?!wgf_C zerwiGUgwqFfS7Lx&kjWW*PXdZ3EkzGjj>ICL!!TMQ+?| zChq$bs5y9@M3qUCnG3j2_qK6=f%Y{ON)i&jqpQ>jJ+p$=#Mno!66bMg%e5PrA04}Z zSjU0+V=l+G&r7+gP{HSh+-&ou&h;z;(>?c*03F=RG;#MyZs~(5QmPY8n7cM(ZvWaWyiMj&~5S2|lY8i=7KO$ZK?-d+85^>c=Rv zY~#R?<tRjRl_5cgQp4>tJ@X-&NEr8oox%88aK~!XSUq z3lb4Q6e_t|c~lU4Pra5|{V`9{ufm7^0rL=q`iBkLhDX8ShxxYmmbB;WcK{)z zyFbtObwO5YnM~vcH9C^mdSpLh9S(=@46oA;EJJYJMt z{BIv3a=2M)-qnMli6&bF?xnPFr3+9r?Lgib?{H#69F!@ZEFddmMa|z7ulM2m=TN&M zO(;IMAEsYALuJ5$CLZ2;db(jBR@h7Cu|pTic_&=|ISZm6h{368r4bfrEk@-Zi=eN? z1|BsY%kV7Q{j&d96%ePUF}c6k0Ko)96sA0 z@rKoxQYv}rqR7D)hKpkG9#Q{0iE<c#0zF!Ll5nLe0;$Y0$*e7)=72oWBO z1+gHiOLB4Rv}cj&pZnx>F_G}*cJ>BD)1&eLo0GlIW}(?xfpOX(3M8g)WbkRQphVJN zA58!I1(mOPR8j}q!8|~juAuuL2s7wbd?jZ>lx5F3>c0>o&vQ}zkqxv+u*b0U{KhIM z`*k7LxhA+8DMDXXONY#AcxAZ6I8pEk^LLdv&loPNM}6NCb8;xxcwXZ7yUxo8>S@Jz zZs_to>8=bHT5j1tlr6+wt%!Y*_jn&^mizV00^KAq7v^Y7(#?b1`hj+9nHTJRsG@z~ zjraAk9F?OotswRK&$yG>PdM)UfiGN-6!}KeooYA19E`Un5nd`Qkg@xgGh^}#&e8ja zlv-f#ov4Dfe84`CUnM6@TjE7UMV*_|xs%Xnx14x!EC#5@?31im)+|ANVB0wpU*ZFMv>pQJ!l%EMOj7g|q%1pOS(6%Mawd+ey&Ec2 zc?F~g(Qmox1<{?}@1lP&FXZ6fU|7g3&h1QQbfmbGAY#=ESw?;m$cvs^>*(i2_)0A6 zd}0cFJce|Sz5Z_$OcH88`ehTMMP0Ual^7-zz|u)qn1K5Rv=(|c2^(g`2zjwPtm@6?P7wAlqmbX0r09Azxr-z~#aw4Y^sSD}_2;@=rZ(u?4 z7Wq3*|2&2(4DRtI<|EMm^1b~r>90_gZWMLl-4w(#Sap#*;XU7SD_b2AA@Z}cFVSz9 zfZdYke}Cv>FIT3m!gV~qd3YoN+T8h(AfNs7Y&9pS3r~n>M?0Y3$osxcup9o}rgELa zy~;!%X?n)kNeGs8q7CR|Lk=foGP#d!0!{9Ky0-}<;?T7!kQ$zbo}1%$-+!)zSjxVW zRE!tl@RFpVJo_K`Rd%x2C~6$iNx&gBeh-=_qPA&8FmLMw{joY*2E@Q?r}lQG9B%0U zk+H$QrxFF_&Cs3=vBTW=*d?$p%_TcC|NcC5i$~w6_&W=}v805V%e+X6o1pciZa7?Z zyT#42nF-=S=d6-4M<91h_X5Ef1yT~zdzo;Z1nGlu+lN#KV3x@FE!2F=K z5%&1lPOY90L@I4A2}=Z+Cs}DFJ(-&TiMNY3?e<+kLWSvzV4E1K=OGlaT!?}t3~YLN z!Vx@vzSXFH@Emv}0)}={GGV6Vk>jg)ek5dAWVM}y=S;(Y1-Wwfz&Vrijv0S4{M6H` z`jw2|;YqxItjh?HLct`z1REo&GS(iL!2GiFs@k3u%YksmRO}K-$UgjHY0!K!g7Xr* zrz{DrHo)R`s^oEboL6f3!litZ1^ajE>qjM}kngDLueixopn0XpzN)ecKbRg+Tlow^ zU7OjfC0a)0e0MQ)#-9njG!%Lv7(j?xbv8CW{=z-qfi)6KckFvvz2Hb`Is+FY1q=$! z8BpZw(!d7%KIpy8ZkN3n11jmqt0GPxMbTdgHt!srhGRW+wrmP*kTa{kdMcOzrF_YC z^XsI-`CupOl=FnB=;!u3c0E?aFK%$@UT`q*Ru10&i{Izx3_IOI*FxaB!b_@>*i|4Y zajn(F?_=+|_!hg_QQ#@O$YU&l@5{}rtbVQp`1?z+MBhS&0;(IwqQY1aiT9-C~l;tR3FT*KYAekI3d zICg2j)jE$Jas4&Df0bep1~2@qjn~KfK^iwbJ`*o+@*PO>v7kmbR34nw^~wROp0`qY zqZ^?2D$r2J<{w;*B2%*evH~}@=Id4nwjlqWf9)aO+o^xPmgIj_5UphEsR!5XK>kIl zA5(cvKv`YUD$l+T6Vf}K@#A?1%hCh@(vU=ldb z5|>m?4Z}vuT0*S~p5qZ8Rg;jEMUGPgOZyhscc<=cX80lj9!K}(>_%pQw=^$re9{EW zfV@YhG$X>>YMCK z@aO%y)q3Ct9F>%p=E8YkzCZJ|clRhz=H6*j%B$Hxwq5ywP)ig|2DgYXGL*ro-wBR_ zN^x)}E|mEx=FPvZleq1XaR^P75C7))(xGrwjyvZ9W+3#t=6b%I2)b_1Tcp}P0Iu|p zoy{e>phe@RG=4myn6inLnzR#O(4?@DA&qlu?s95rI)v!5?bPzAFTWrp!D61N?hWv4 z3Mc#2X29*AKB`BVLZF@ba)J5HT-{kGgDUAXs;;-Y!lcwD;eC_)%h2?vwwK%JHj&KDQ_P&I*4zQyDN6)Wq zgcL|hIP{jZ+Zvqgp73<8W=C|^3v18up3B$z+1?zr1d4TZqjjUfJ!Jl@Xz|`dDEuAU zoqwbOei*=Z9tXZR_QxtG{-j2ZEfZQqQb&1sl}&97UVC#X3RD5~#M+l5xJA8a>?MpKfi#`veVzFIBR5 zK2@0chkdyWF6~rL#$b=!X!1r@!-GNS`1c@QhlCdy`t(x>yKtf+p+6~KTZs|D!S?lj z(J=@>w}rIMa-#PeQ=7i=WT^S2O0klEBj`TW|I;FV8s)XIdvQeX!)5ou;QG!r(3}t< zJB7WRKgd5*$p#O?{gW?O^Un;y$8Ikl72JC#wvx4}s>6HV8-r(BUto_TgLa<8C+wGJ zd*-S8oE!;@Ub#E0x(Am&KU+XyWT@tq>aAmQxc?UByb z&m^5@;qQX?j(hoh%o+1g%ADjKxL|KkxI_K64AFhuyH=2)w=y1cX zL+>}wxgj$soAnPyf1QdEoF0dK zPr6h!H4gOSHlyc9-F{eWatJIYnuVA7KLa?etl*J0!KThPE~FHeMp*QB2Fx_?Y=)iA z2d_|Fd(rTB*uVW!z140V(!*nl_Z(T!atu%VM2-tY9Ha|H3<)BEmx^F?CHNKHu0?31mR_;T_vVroNIxxCv4m(UajwR zMfWZ|RgDq6VMU3=w`=0n<~HF!#P44^T$!D0}L1| zyL^gS&_q#=(Vu_iaI3)me6c<^s+(+OS2;EVT)y-ICGOJbHnojO+1GcFZY`58#I*{R z|8X7M$)iMJHeTrok~HY8LBlI5I}&8_c_mrnFCnt9KDN=@@C8Qay=9!usL;qjeL~8Y zEvU2ce8^ca1dVO~g($wOgQi98kn>kdz{BU4X|^8;%2Vvf=zY81BZ_^RDBw)|DK1-baCU{ZO zN|8p$phF1?HhIivPI;~I<^ldb?PD-&dd)IK*~Dy4P!XW9F^|I&yE{N~Fy$yBsRMQY zcuAL-%3+;&#OKM=G`M?x$8wzQBzls{l<6>p`>t?q>#*hO6ePV(Z%z}tWQn;S}_EA*35z&&5dEcexmHyS`d^pD9sm10?gZBY0 zp=Lk&Ac~y-kE-|^n1S?QBC>g4^c7B%WcmUL4;4%9&;z=3h6tRt`)u(jo~{*hf^Zotob=dY-w!ft*}&3)Hc#IadJg^HRF6Lu7>0G0gntR| zXpp;?R%p3gC7c=AocX>Q0n{y=F8P-yv8QTcU}CTg7Cv2$8Oy1Lr!v$6v+u>xy_s*% z^ml}iNb35JxpY;K_`5AFx>yUIf%F>OV;{)g}e|)0^&%5RSg^a?iJ=9lacB&kuM7Mv-1$w29 zLA;fr7155 zD)_!7f5R%89{bR5?raB7q(MMs(bI?W9EeNy#IHf8Ik>RfSQ>a?7KU@k8dLDzI*~Cx zrut_asOLRv)%rUMtZLad>W6{pHG@c>e_Sl1hd!R31W#t^bva_N=JA z`*+R!8(w5O%tJ=_NE{Vj9ggJ}S^)!%-wMBXeSzdykBU)~BqG`CpSAt+4H8>rlBG8G zLGeHTW|g1VAGI*omHChho$zMPQXyW2GgmeeC3;GLI7IWvnOhU^i)okn^3PJ>KW1Z&+$IQ@BdnG1RH|%$sukR)JYYoZ)S9=fB1BP;dFH|yA0}i+ z+0q%EMuYYfBVSD4AVW5!N-B~UpTo1y6Q71(Eds0g@^}FDr*==BfGf{9CO_vh$l zf$W;3W5PvikTPTJkXGkK{W&z+7B7#YR~5UA#1@l~y+CESsZ|Tpqn0;B@w}LA#>Ptg zOc#)qYdGJ++`dQuNXq<ZkD0DR>H~@b+8hCNEJS>(Hgg_ktFAaV1z@j` z(T$g9PcMQJ(K$j^t}dwLD>eSFjRM*GJyrNeJOF)PkGGUD&Ond7+X+7=VML=`H2;2+ z5{0(gO#c%qTJU&or#zeC_F!TK3EUV>FMRI z3s+(vbgb@~P9jvy&p_ki$BewnZD;hPm+8 zCWl+aFn2=3Zupx3nuy&}m+l<_qDwDKjtd0B!t71$9P34xLi$f$;{4$FPJ(NNZ~?e! z>24Eh5}~VS=a{|Q=fPuOF7{bgI*3^KUt+-iSox_=jmM;`;I5;vE=yVoBsN}Zc}JEp zSNhiYG5vYqw0TtC=eY$R{I3jI-_8SG!JHbMPswokyXspxd%VY0>u69=@5VXRY~m#K zR*)@V>2SKW3q#uV_xkW2qjp+r+JPw@@?Bdp8wz75ojPUeER5K-_7rGgFw;oN(Xy z%r|)E?$P?edovLQIUh%xII+XzDS%~Fg|5m}z zldr71DrN!tsOk)7Fc+F(?c;~|8Tf0|qyOEx9kxh}ojwcUp0nT7C%XGAsJK`m^pu=1 z=IL6wJShDE?RRA?U%kNhVn5mYQ)EJ@^T#{`^>Hqw{xmCp&ba`tj`KPGwOYk|q!-`a z)SDsv@ikQqBO|zcC{CyO^Z+)8_B5nzJK%}O+Vbd1G}x*By3tcy3$f?r>{^tUAz?%8 z%fUK7Qqhu4B)v8a&+ePdD5rP9tJWj7+(Sg@!zr$mfXkY2XAG+*ZghV1L<(qfFLiyJ8UQi3gylzklVEc497V!mBkY?!sR~V^Ll3J;xE#NX z!8Z+{tCq26ehR@EL1&8m$!>`FHwv!Y{ zSDHt|N~9NpK35cdh$TkyF_CMf8Qhf1^g%jI1x!4IF~Ya=I`lxxz^9p*ZeK_zRDipZc~8B5f5aZKvLWy8iE#?mNpc z{Owo-7xs;vv-7JzHM#&3q;}r7I~L$0_Xh=8u5b_=s+(qDABE3`(sUlqTNufv#dP0s z3A~%q6hv_zfUb(mE%GOxuf_jhuW{-H!+%ld-%k)B^5V+it5+G&?B{6jZ@BmALjB^j zX!JEWty!hK|AHN9E}6d>EZ>5N=U;2;9$@d~<4Ldow?>5S`O#ba7=f!AWE48Iy14iF zZl;Sb7&?9*^=LP2gup)u2AY}!xF4H+VnFX7)TadEWYj-un$0 zLRWnPxji9>`+B;DO%n_-8W}S@$5j91hPli_D#U9{nf?33Klq_?J-ImH0K8m3R)w3* z!l~WxJ3HrhVAcL%a3Aim`t-4Ra2w)Yhoq6AUCtsHM}4c$6emHH-+6p*rr-r$rNTG~bY+-}eLOKI1Q>$!pERj985#qrWFyy}=^#(QyiF6;o}#RpMTI zp_GHeYZAou(%SJU_Ui^U7-#$3=!AI7&tws=NzrmsY9T#7Z|VV=4Mw*CqnYV_L!+hh zGQt|70vW%6(f^`9_0TXVzUzz1{?iOho7xYotrwtN$MLbGK^xqScS#U>*9AMy78|L! z_wd19{w+RKd1keUQqZWg7E-*_| z$Z`E$2JH0oRaA=s%ac6MLO!p6CjqIHM&dkJ8oayvsBjWkHfkK!^RaK>gV-j+C_CyI zkoPq2S%7KF)PV*f5)?kwLN=#z55CgZcGgcXfi;&a-|Thl>kQ()7^}77seoun{GVg%{C-hmR`&Eod+he&dmBl?Bh`>$_ySL zMCT-&*^BEp!H28)u)QHDH+Ej`Y2E3|Sk=x9&9YBdO&#QY$OXP*?bJ%x8BFo-kFo)%wLj z*fGi}E}><3Jtb>pkj{j<{pn?Ij%Z_k)<5xD+_#>PyHsAXR0Sj9EoV|n=0UUac=u6f zQ8Y(-PT34|44savb<%@Z7 zNd!9FumAgobF7X$Iv<^j*WsW|yzd^K|0UWhaSY%+jgsQ1!3Ug!V~y54Qn;2E{B+oiyg`g^>u9=B<`siXr-izlLHIcjd%&pP zVlP{^4z%BiJXNrN^iAd0G<7dNgc6j;CCVF{C24f7I&d$I9C5*kpOb`oiWia zDTW=J&X4y4Fz@d4-sIgYtv@buH`Gofd;eN7WzAS_A@%5>= zFY@H*^L|xwL|$W&9glq=CxkQzI@3pBY_pZ3k7E_8bCv2v ztnfRtNBXGt*LCb+C-SyAONI({M&?Q1O+(CwZI#QyMCeN%68BeGgL|~i?@Eaz(1WP5 zDRa|F@H8lDir*{-kBP)8&38oT@@}(ZY8o*LxnLZfF5QE@x8zfDja10>sZpEXupY?B z*jK)GNe1fL{NJPhjX~ohwYR1V9H{-nzqKLWWZ>btX?)IT8_JG8Y9GY!sg$+He|z;N z;a5CWP2{^2p!a1{vBvxE-^nAfug$yQ)V?w+XE#FdNM!|(ufk#G>8~uB~ z*V(_n0>(BCXKO-Y;co3I=S$kh(Q;PW7+m@Xu8kGJ`*_cl0z~t@1l(xN;;(aQArDeH zGCWQ;{T77jxG3v;S&;fyM@|~^4ye|w`)A+Ahg_7p2w!f;gJ{Zp&pvGeC|<})veR>d z%b^6yQMjKk`ZVU*9cn;)n#Y=Nl!>DwE&9*(yND5?(x+p*B3(ck^~6*Auo_m!dWdQ! z@w<@s_EOw~Qs9<*7iR58jaGRR#v7=&;TwhXDJR_)kbN!JVuN{hS)Zm@6ZqIr<>`?A z!NyVWB1u!Rj3Y!-{F2XJoCNUQvD3p8eJHd&56N*wMhyIli5R%j@DjLcydK zw^=(lEw?>W_8fs*!mFBWc)m?oIub`cdjKVIN@Q$!-d-lN@DqGjVQ9(o!i^Q|As;F@ zGb@U@aM!fP3L5E<(1U%#SKdEh??!tvn|l(NF&5-SGSHw0p2c12k15b{?>1ro1se2l zrY`nw(-c@4x#pGQ-uP5PeV{6>5Gw7Fm@zM212!_n`{6!&;Lhx()s`WS2o5KNU>5f~ zp3;s8JKLr=6F`vk1TV3idF>=smI@>sR z2w#NSo`!zG{4QgW2UMKXuzrCv;?^hysyu%78T$`16#KdA&ktXI6uA}OFd{&UsK1Jg zJ742R+&aga?ie#8fA$}3$}Jqo>wCqVNii+Fr@a-*sZE5~2ji5|$k@@j`KfbiH)mno zpheG|u??6uwzCX0#gJv)*u`Cc9k`TCB12O_gnsT+=@{WTaTz-=cP0lD5_q22_trod zjSMTMpPE?*cN6_Tv)6Y(@<~hR-+v^?VDTsWRh*|&H!;eu;K&AxD*NWUax%zV;ZtG` za)&S5rAO^F*pT9U+(@x58EU#KdnG;?`)tH`9h2^?fWKGu4<`3u5RN}owmcSqy#s79 zJWP5(V8fIMXri9Wt&aGNfV;w7zx|3;OkJOjy* zrGR17bq8@Y#X%}c_@fkBMk0OmXa}LK^rN-$bzT(0#d2JxdIgT~ZzzZMbO6V-OZGO(%!tk}Edqi{;KbbB`#-Nw0PU%P$i3PsaBJ)(Kkq7u4ujNg5*OgS z7&(i{f|eu-7i@HV%y|T9F^(Vc%@u~2CYJp{jUr(3l|FxM)BDb z5+G#`5g-2DSl||z>3 zN(#8BF@Hwo8{q{)w8`j~UV<#hewDzd}`Ya(zP`@tt zP|Xq^z3lqF$w7;(8cBBzaldbKnMFK256>A6cIr%T1b~Zc4T-k02q?VKng50T0PQ-t zv94aih|>AEhO_x5&^}gg_=NXdW+#|S-hbjpA+P=z#d3d!vE`#@4+>_0pEWMvB<2O$ zC-fchH)KSXjROiY!IVhV+$cCFvj)Bsx~bebHvzV{tKYQV&%{yYV^-9CgYeWYw{T@| z0!+7*1QnhB!dYDkJp$ZEKGRil=h%f6c(mkKv!Bh3uIZ3QoyFdlZ{KhIktCf5;XKDH z{5KC_h5KlJQ4SAU(`|KJ#P5PJ4y~lC)m!jar-&@YF%eFk&5Ac7TZ17-8Lf4^Z|M}R z@@&I7W3OxKPHGh6fLTz~9-n$)-m0MMnI9oCy5MTGiE}q&evjBK$;Hrr0mn}qwW@~` z7w71TJ!z1}x3l%mwb(Z!^{pw6ISQtA)XtdtHbA}6Nd*U@c^F)LLhe@D0_r}b{n~T< z=*QN*SkloV*z9r*KcY7Ud%@zp@0QsR#X{wx;)xyTk^gwFgX$3c+x=3j+~R@OJWiMr zb8lJ0)o)xIw*cO1H}`>FAw(yorY-)c8`MsnVW}`>Mc*a8dKko6QG!)bV9ZM<^fRbZ z!BLqQHL6$L9|+h4yEFw-cDrQg{LsG~a-w5g%;E}Dv=PVMJ zboa=A2Yn+8JRUh!@Hyk)NUJ9`;`+=#!|R9d-95T)m*dCa`p#kRt0PB{5zpCgPfE5x z>*cu{7YUir)p5Vhw3M2ev(1eQdgeMmt#KNGX2oV{c+H?Q2dG%=~3nMeE6~{8>;Bk;D?J4ezZX{k8lm1 zygAD9!Fv{{k~1d`JCC9_=dG{3n=b>;&QCJRS;ZiC!9&-#V+Z)WkMu{~S_h`_+kYZ% za-!Ea2UMkFhe3|{d)3=^W~9Zlqodu7HcjwHxs3xt6cktd-{Bw|;$U(SG{w2HI5XP%mYE^ATd7JFCi@=z zD9^->ha|(_Bj0S?16v_EboTY&<>zq1vs2Hy9{=3y1fA1YjwAh*(*i^$Ti_$&a#g8V z6n*O#3H|)O8g}SpL~_n;!^2$pj+5%gQH!@mkD1*D^cW-(J>V5b9aSSAhmsnBM|}Kh z-34(ZAjNLwL)HnkCpCi`uopR%R^zlA;|5r*HvavL{joj@o@qgz`2BEupXPjLH(bsd z)v7z01z*!ko`0WWLJ#KVibgG3z&cs9QZ=v-asxEh_l#-K(MT!h72RF%G0eV3zP<_; zwvzWO)DD59e{_L{X#w&AZET;vq(p>QiWUN8H((^U|MWWMEitxGlj-R5po>=w{;6b* z!rXBiTCG+Qr2Xsf7^B7psGQVD?UoyXr!|+(J&)Rf$ezlJ#EXQe{H%qdVplP|U2vwP zFl0umgV8FSgA6D@JMvs0^EkY`E4>v3(LiFNJ{5Xz43LoT;@i+hNIBC~XLlk2QapcM z%YDO$tnTN^3Dh&7r5BX6)sH%Wt2z#E^0V1An-O){z0Y zabRpQe{%@zzW)mwSf)pRowCJul)E6eS6+LgbrUAO@c!$iw}aE_A`uM!091*(q!-dCMYy~Xd z{iwS+M2Eiq0fRnW3R)yY4;QUX#r1Svi+LV5c?j9cNU-~z}U2a8Y zEIJ*&nr=ruNoPdjFX_Zhv8TdxmAHdsyaGPmQ+-j@F#!%sKF-No_#SjpCWrVpo`dn< z6`o??M1H>#_*=1$fVSmo7iB*YsxJ!1SF5Bqzy;`RpYF%pjXc8$SJmVW-H9Lu11 z?ulVZl@Yj(>9}}f57WoL7q=|%JJ`vzK06HiWxQm(uNE`U!RMMqxnIK5K>X6reFo1_ z9#8a+9=vY^Y4fQEBY^*25vJ$8p6mjLqiU8T_R}ukO4=*5-T^tmGt1PYTflI$EU&5` z_YlUYEE+Ud!6bf_GB^wKFaIXQ3|kMvh8Ia}$0P>|diEr}ehqU-mu1p7B`2Y#KPu)U zUnh_}|3np5FMv`;+>YIi!`!d)RvcuI3YkLv`Wv5i;e^_Eb6K}q%=fi$l_J2uhi)YI z0?2}3F`vkjVmk*s2F(LGW;xN~N+%D}afG>!<+kfyr0DLW$>)Z=I1id75coy}_ayxd zIRY8i!Fkez#Bv(nFAT;#3~~M<;$wGY{QW90GJdaI9g4l{pOOk{)5*}8w}HmL8AZ% zum!yrQeWmzEyD?o)!rw{e8~CML{W@7?%`@FXhvrDQXUrcQOoX0-Xp8dKoo7 z6!2}C$a?_q1@6pU|j&Y!wFNLPp{Mpcm*q)k& z9UEHlczE%Z752!c$jdE$YX?8me^YOT+TgnSw{$`5ezd&diKA>{~=kqK-(!=9Usx#|wp#8*Jr^U;CIaSdL%@`1{#280}3u*-iej&2DgD@~qhf?oEMw=5O+K>k8e zx#ida3}>1CPJ2Rz?w%3liFt$jkp$Xzvr1K={rm9S{)q+H+<9X76wfcZ2m16P)Y z$w7XIs~O1GiA1k4PQVMzHQR}+n{b6_)Lw%!1I{_h9ud7Gi0tp!?D}I~%wz4}{>CRW zz{Bi!SkZl)Cm~!!ow;P_4KJBaG8ZBGJ$0jJoV5Uw>TE`tu`ic<>Fqu4Xs$)Tc{TVvlbO@;k{O$p?L18_E;dcH$F~cFbh5x)y^^L1%lnLp0)lr9O!uT z`Kn{pv*2FXeO(>rf8LVi-{Vf{2Ajo<&0zBtNF?5Ok^?_bzZen4Yghu>r```TF=M_W ztCz^+wQ6WfA`g5%I|$c_Yt}VsgivkYgH__H7$B9`QL-6cg&?w{BilHCe$~WNEc>1i zTBgW~5mN4fB4FQ5p<4x^Bl(?iY&-BfYG$b4c@kXcWvSGH@VkHbXr?MN8~Qf0WGOg0 z1I5fLg2SuKXefj)Qhc@$bVsPw*gtb3;-fu*m;Wh4IFXig#uOJCyC8V!8|KhFN%keC z?I1$t&)VcK-)aSmJ#UO1xef=vNj`+vpGBuSHiC7gb3mXbE5N>H3vLQEXwY|(peX;i z*tbJ3Ku=yd*6%AZ^1f?bb~dsLO!T$hCv9_}X}z)MInOIVi1rD=>5s#}mW>|8vj%{q z`gb*r^f|cpIYoh%Wf-m!%xUNSHxGZQMRRN&NX`ltwx;GCq^omwdUn2IrK# zr0(b6Ou+vSt1WsSS<|7d$}N-e%T#DKfj(#Hsw?bNtXkxx?Z7+~{I$+FfNy<^m+}f% z!MWqTq8P_KJeQHX9fx@WX$=SAs%ML__eNMxvWpcBe0YCrwCf8b9?|c+jC+A^*M937 z(7%HNuiUp!c{V`vG0p!dIuC!W-!=@}d+)tN3Zan7bql5OD-nf6OR{IBl2vBWvPz)hZdFH8}8 zO*fr>vShQP;{%5$W=c$8uah4pO9WB73kl(!w^Ar`y{)4uvkShRzb8+Q=QRD+p?z$d zHSh^mwVsylg8n1H!ZVnoC)aZ%eJ+m#sTMexG-4kGF>%#?j|1kRIKC*qA~6QN>j5A4 z`PtAa|M>^I$FcHkq0XITzX!&1mK+;~xzH-(Ozr{yD7Zx&&@MJJq7l9#roR!#P=Ywy zPIF!n^pCo^Nq5trDhB^1;ks?yzX@nkCzU~Ksan0X>x@W5uJCNI_X5nwM^BCueTK}s zGOEtySV-pd@MyDm3Agh+k-@h<2wlA`XdagX3h2_o0wX^fWEkXrZi{nmJjhRu^Z?36 zn~C6hG6oEj!X^Z2KfADr@h&~13Z5P?@{eBIRx&9 zH8(u}N~4oLMr--8yohrmJ^YHRB$6n#c`yHm1Z@vnluLz;!^i#=vx}H_>lf@)ppX@d zJ-JpZL#(Z!c5>~zS=kOW3X#Yae8IiqH*XXcwy6<4zcHf4xp)Wm`X|ZcxW{GH*}Qso z3$}A5Zi!+4qg7}{lWoNmpo?<5?t|E?!WrsJbBX}nn)CPeBOyjab_=?Nv^$`C^S5*# zDbBAu6m-46vIG%_e$?}Z?Z9G`)^wHh2+DkZ#(5%m6_zxG{4@7hkOwVWWcZamprgMc zY(Ry3NHvmNEsdpcoI+jpK&=*5iTV~IaUb4iYUxldo*C^|JPgrz-3ni=K8ZFlHe=qe z->PFJJsP|JWiH@OKeW34ai=pRN3As>3;Cou@SiWmK^316q84$qeEl~LOe^eW56Y;~ z*lt$X*M2;YZU4HbAB+2>=2PQKFGvu_6Sh_R8`u{yA}U+9T?W%-HiY}x3MjXcdLwn< zEj-CQxqKVpd&S{90fpgda8PIeMQe-mnDR1Zg=I@1`{Kfr{A4Ze0Y#v9KWl?>fO7v^Y4ZT1!ATTn|j`lPKOb6oEpy7Hr4Jke+32O%nN<3yk zH{@P?2x5%_Wk>rS+Y@*%LL%3;TGS582Ko*ZBYlua!y9_XxC8P&_L|z`zmEbX`)C@U zEjW`?;kfd4586wV9_xeDv1ei0Rbct!9Z_A}%BfZOE z|5ykyFY$3Doo|BWMjm0C+7j40`CoD0dj+7Bc(8k4G6k5=G=v5Gn*&deEhm**m@`~6 zK9X{j0ND(wmz+Aaj{V5&x8EiTqTFFx#?Y%Jz%4zhd+P~qn8Nw|mp@N@RFe$niO7#i)9)H_#&)KHmg?hXc?!L7vB*-3_~1 z$l(+^|6`VGd2L%f%^)cJj;Fm@Nj z|5Z;qnfwBu5N*QrQFfG36Z2Ohe+THpqjK}{UbJ)r&2nK+-aRTC=~@FxG}#chv53$2 zS2_#?zPr&N9|O73)$|&8+)MuSzgsh)v@bxO;zo(?RFQwm(&I$$3*$Y|*f1P_w0-4m z5gnp^OqMI!v;k8bAt{>)weVbD(P_4h7dgEx;y&}R9|4g$~H-^8aIpm!wk90i_J+&y=7Qh zL(dy|-amoy5JYKKdZ}UnJh>7g7^HTgCz2p}`YQvHmemoRw_XIw!#bKl#tD$=;!{@* z?0{n7N~&_ELx>mT_J1n71`jSdeLsu$$iMG0@0K6nee(TBWR!8t=u`Ki+}Yk02oaKJ zG|X6q%p;kc<>ZdgJrQU}{GKSj%=iCKmG@% z`dh|Iv%DxVru+Tn~J)hBbUY%VBBZx&PIxxVIfnczEL)o*yYS zlfK{U1XFuclG>RWIBqIEawNYLLR1o5X$cBJqOtwOvq4%EbWXGOeH)%Xmk!*c*(XG7 zjGU*ZQ;AXSJ?)3T_G&@rYM$$nmo#X}_{4w%_VN6Qo_HfAj=AqoWwvN0+kq@okt~Jh z2=X#6x=kR8JuOe(s}VSl!kOkm&moon_b`$*uh);jVockC%q=41|CJ=h8|QfBmlCJv z3yNVT$?B;f-hUS5TvX!FOaOXO?*7&gMzqb8JoKqi7De!c48^eE{flo$wqri#H|G9l zd{%-9wX&aEGPNN=!I{vHLe?s^$r>YikOhxGb5FF9xwPT{MURYH&T+^rdRzF1mz`@WyH0~pxty|yjT+N2dX~1Q{p+7 z_mLSv`B*4~xol|?;rFs`PiEj8QveL;zAiql&V&k2SXkEHVMOjSeUTUA z7|~E+v2^+z?n{@V#H9!sBss+Vhtw(xxM=h&LJs!e(fFvwhfq@VG4JW0bUYWWi`;g+ zj`=-l7iDzTl`x0)tya$$nK6hodiQkaSOdfw(>JcZzGj;^Dk*_POq!8QClb09I z;&b_~h*PPu0P-jxW^L(fhv9Y>=C|j%p@t#F=pnxM+B`RoV9+E+lv8|fdxF}5^P!rC z_V+$uVgAVVDU=9Fywt6{$Daez(ex*pg*ecv4SP#MAQMtG02Sl$9n4F4ua#CX3uH`r za`bh0j`%y$WPrQ{WTuji^i=YrtHK(WqPj)VtBOGv-n4QUsjL~kD1Z@r>ggzxVLH(AT`vR7z4kmF7s^tYR2d8(k61;8y<9Ex+^xxjI?$;2c=V{ zA*UIK2se1-d@`ZaV}zJ$K$elp{r) z)f!qSwXv7^iu6fy%2dxSgTMwM;hjQZM>X~g&?s46R`gdLb0=xtP=5-)x5Tz2@cqL`vkX%4F!0h{N%syW zYQRd9)yVkIDil4ucPT1+2sUapOL&#mz-@=>(FW!qc}d8t?h?_X-pA)VNd!4iK);tA zS}cJYf`_WiGDnbq-G%QKp{t-S%W7HT&Wqk%^HzvpltCpCu7VCaC2;LJv5Siv8L9|+ zpdk8Z7p5iiOVnA2Fb5*6(S@ZL_{Za!mm`~jT=&wT%-|mA5p~{if0hmszs+R_DLUab z4`q7}EB3fL(YF>o$9YwUIYZ(8A&|7>5YnDohB)So#8iBbrN|&i_xLdYN!z^DpCpTc zOgcbL@-O~;F3sG~UF?E`_KE4+|38m>(&@h++Xr2GRY5gE1gLfDoY8u0A#~sUlWJ$H z1vM*^T&y3HVNOkx_*`Kb^t0CSye=d`ynkpMg!?9etZhle{E!j7C_H-Ru1p_f-20D8 z>Z=f9AulXkNL~huo&fnt%vt~DoY&*n^#c4)&MMS7(ISzPh0-OMBgHs(LQD;N1?I&k zmw(qa1Fu2E%@mv`=!?7&ahQ+*Cv#JF9Ip4nh=c3sn3M#3B5aaT!2KAtpr>ynNm&rC z`>)LZ7=mE3ur$(AI`px9!Q-mS1_kgq{?D;J+~2tVvN)lM3PltUFgIhLqLl9`Z#Udm zf0?cF@*g4gR@0UaGdvi9wEdd}f^VvU`NLF_IV%aOjLY>izc2~E$Py<%)zM+^)EO(L zd{V@Icf`%ctQ~S?|JlxQiKDgv$0tpiLMUD1xo_%C7W6TQ-8t?6=d~QqQJj472Y89p zIOB~jg;5jk+Iry0}tV|FkX?sQlvx=byPNbBz{qKNc+i}EUIbB2G$?Df*slfhp$-EMr&ld&Kx&~{&a;pK7jvwZOZV2H%88&( ziQov-?+yAra$W>dHYum^PZiK9PctQi=X26LBW&JBH-N18{GB8Za&-KyV$cnE zvYPlI8Wd-v2n>0N(NNZ`I!Yn zQf^gjUUVognrF99Y8Fli@|+kC!v4HeUMk}n?4e&9{M!-M0)niDd!3r>h-cH zP&)FDuAqhyJ^!5($el9_GUsoQO1oii?dk*aLD5cdQZ#oh`$~+m^hL4^KCJL9eeli<>4*vL zi?*n2kZ8fIdlnxXEuKFd5O&aA@Pm?sbNpM_JHVB5)<8yh1V}YkmXsb)qLxcy;+Llw z(4&jX|2>{Pg4kU??&?{!fvm^Vqdc{n(2$_%rS{?zP`;c~?3(C>sHT*U-znSSZ8_!R z#4FiA)w!2xEY6HFLb&@=E~x?mLE1Z}d?u8yz8x`F4Ip~;4+&8n2@=Y={HdK1 z_v^7r%t;e_2i)QG)Q?U0aY8^eL#qwEnI4$122a3x@IrqR_crJ@H}np16QU}P-iAvK zcR)Aqcr_UFq7tUJt2v#0Fc?TA{$@!8-AKD3ol-Lh%olshu0NcIg7XuS*B0`C(`qEz zF?Agz`(hNadmG9GG_HCE;l9hA-Sij{@==V)~6`0d(<$Z`3pzOr@mD5FgV0xf3 zbL-PMgxel|DRy0l;~mz4l3VP^{QYxue|rG?TKq$wSogwNTe}$DIXaZ3oWa3xcM(qd z2My_?N00nY|NyTzLPCPh2M-QxJC6-SN~3c3~#3vs@}di3#+bbL-*fAyfY z2y>eYZ%WW8Vvnz@+RL+NKY@j2np-}z6k0EPaxL;e8fn<;cG0~PLOj7*yESLFVDieu zl_&SBV2zdL-x@s?GI_Qo-fBRJ1c|fO=uee^?4(H9ty8(+rB_BdoJ5Mbjbed`43W^& z=M)g+<`1n~FV@QQn!ry?-)f4!8e(fl^JQtC!*$3Y{b{5LmkId;9aC9Q>fLeH4*hrF zsJ+a1@~{FFEC%GSo?8X&Z&s$Cl8?YZb{(5PDH-BEJ#lJ23iE6g=4li$|HnD?^S6b< zK)5qm?V!&^jHEfV^!Dro(d*a>#~hJxSTZq)l%tYGibuEYIvX+P#Ko$}{i{2i;yG;b zU>JbKJ4Y3A?)1R>1Vv*Tn>L`iSj=uNvJdCi#rGEQy_zRFwAR;m6n>rVj^?-~kIpvU zzb`3`xq&1nwDqYTzA;OM#zmG9r6%1c$8xvOa;A~yYB{Q>fEBHWMf4N z494QV*k^La%-ZYVAuBR1`>fN*S_0}kjfQf6n9#_z-ro!t4uG91X6e0VEZoIY1R9Pg zXdDo>4vScarjb8#@(ds0H{aF$@}edCS9Qb&8R z$O0hY?ayi~gP5zr?-S-ri6%|+G9u}{v2Ax=oTgR~3P^5sr_^Gfg4RQ7ZrrDl@_5Go zo}>|MK;M`op$FQ(>s{HO-GyGmCTYYEnu-oCzbt+5wmOP*Nmg_ObF;}0#LH|4>W zcsCO<8waW^IrV3zFA}W&k{-PHuLZabE)jh3j)X0X-DM$DQuOe=m*-m z4;^%ToN*&C*TR!>4bRJ`>Gv}) z0`{0py{W9V+5k!K4&sAfl*mlwkFB9h6A=5J)GfvQE!K4n$$vP{BDfXi=eaf3#dz=Q^CQI4=s^kS(_A5xHDf^nbhM`)X7qzZ*U+dE&hwlR z7T_rM7=oG7CGEn-ba0~HT&=*~-GlX;7gQe8VJ=$u3z@ndh}-#bu_l`y$*!>eb7~+# z;U-7&#ryBW1=Yy0G({t@V>ftT*@tr%-MyZinBQ6-I0Z==zd^EGmgV~L9Ha`cJ}Y9L z0aGdFqW-gtNG(YVNqXTN>Zf1%fBZ35wNaCS7;`rzCDva>YL>xVb0R6i`OEU15|UH1 zq3{7c+0#rJhIb*xJKT7##?i$irDe{9Y6c<}ZVvv!x!2&ivwQ^Tk!;Gf{;*K+PkvjU zfcO7A>hw+PIDg@*BSLNPvIj<)4Zf0)Vt=mj;e*IbXSkQa=E-Yc1w#pQhu_kN;6jec z63Lf2XjrhCwyd9m%mKX^uT(nhX+7s;NX3l!s-M?AohVA@BH%knJdFQhQEseays z&)xlOH#GQB*u5P>uZQBucKuxV6_$N4v)oHExwZzzDQ}k2K4EXw;;4e>b$q_^71z@j zs{?mO>e+0c&+yu1x~ZIq9g*$5O`@M?K!R6Ta$4jtf7U?flFjWpJa@KxzFs>Henhk} zZb~euRaecj%~$|&`qeWD#CXH!j_Il-F--lgT?) zF#e|h;SkPOOEz6_jOHUmZT1ntFIcvq*yRCz&FTuQ#kj|4VxNHEY@PCOEivN%SbnS7 zga!pR-W@;x9{1HQUClJPdjLE?@^YNN%)^%IjlAQ>+F-tXEt(teG2&PDX)-C7fKjg~ zYO1mvF77;_W>+Cb>tAltf6!fl_T7(0vv{s=8YBK$VzL(ON~0%B_1RH=zO;cwDj$0G zGHv)A_B5nU34MEZvJGB2i|2gkK81etQ8>u#Qlopsw>sa&d&2>1eKpM!NtDT7Wx66l zgwAQ4T&tznfdnQ`Z1y~WAM65e8$+TX-;!{~_3Z@EM}F?qQYS>E@&CE=#NhKak~AML z+Jfe0Rpp?wvS{w%wQ#oj4JeM)Q1vYv0bQjg3x)^|eE&H5o-Kq6`MSiLxkfRgEc*4^ z{w{CebB&gLz337!UD9spFfNCx*X>nhj^yZB%g)Nf0la4jlst3YoDIos{4i|@_z5{; zw$1Jjw?N=oiHq`u3>Y>3ZTfg%6I8jGS|k49oYq>Y{CoWhkgMafHoVdg^26auM-sO{ zfusO2s8FNjzePR!^>}~W8ASV$vIT;*S>IgaC4sEGavGU1CbW=})HhVn4&~ET97k#~ z7e`&|>}|RokgXF7x2mK-av^UbyyuqSI9VRD9U6h7mUrd$aSm)#i}k+(TI@&p@2M5J z=sJ|foL`MBRfL?*idW|rf5VaT0weRMt9TxsJVoTigDS_vB3!O9p$7!Y9tH9#kUYbz zOcqIm@?Q_F@rk8?ZI(aBTo)yhR(UU4e{=w7!bI=n$sI@0-{(zZTxrp|MtUNpI483H zRr!oBZv?81YwrEI=nP3R+piynZ@|%At>@FN;ZPR$oN%v+4J8w}Un@do@YC)4ucHt_^SRoE zVHdLg3;dA%p&Wu({9j#483LB?{S#YWSwOEv^js5jr&hZ3E1uvSjlpZHd#@+v;U)+D z>ws(m6wG$rGJ1mqF-j9hE9LIPe-n$(4~NR(fsj%5n(Y{<@*8o?RdvGR>63ou*fX{C zdM@ZyS0zwUR<`zt6CmRc0rE||<|b$7P1iC z+=F7u)p~-_KJ24Xt+E=$^L+t=Hw2UGFrTP!dhf#@*x}f6zK8oPzht=v4_0b{{YOIA zYNs&bU*W6CS1EzS8(Bs7US})syl&4rT&{+3!%lZvYdN(3uE4*Hehf6d+T&{Qezn!2 zhEcJf0(}m9V!8R95M5NrQ_w?OU>C-$sJU8Ns?B^>XIy}gCC!YhI{7Cuf#L0&+ zsvq)5i68|YJ&vG?Dkns89q)av7Sf~P#3aT^a?JTUN#3QU$c+du^}b8pqDFC3I=oaA zZF1Z%&cY??y)S{u-a1E4ReQ8%} z0Rnk~w|TglL2vJp%NOkVIMEV9OGj}4Zkkbz1=DT7Ppvd1!QKr*>UA&ZxO*UHD5Wv& z%_Nv^Cz&>2ufX&-jVr;J^LF5+T0{1V3JrZ{IB%5@3q~}hG57hIkWH=UHU;L(WH79u zpPtzu>~PK1mZk~J=r!);v+YCuxV(ZX?i(o!k#sg;zddy|$FY`HoPP|>Y?({ifolTG zqxt`_p(*0c=g(+6V7F7WQaykZaZDK!^;7Oa76Mmw8DFe>PViWL4)wP z-I*hAX%h^Mie_RQXCYpC`d_{_4a&N5%;*fxW5){W+AH|Yz-^{$4h6Rv5p#`ucI_7) zWaE=r@mJawTFvxom*nT+%5=rvD?%RBDC2wmP=Obzmt0^bTI>hTD;_ha@b5L%C5QSL zS4PCR>cz`)wFZ97QTtogZ-T|ch9#5WQfSe;ANCyQRa{AEQQaDEd#e1DA9$v0;wpcb~yP@ zi*iji0}kwzNzeTr0pV+go%@2+D5P)Vj`$e`vfq{ak#YH!|hhYSsdVMr{708QD z+m(N^3#*2IauWOpn1|)xtk!dNlmwM|*93U{oWLB8jZNY52GFb!bf3Gl0&f}UQ}0^l z05}P~P_b))XD%JN+6|SW1L4x24{OlTx9tUcx;uJ+{D9OD?2r0Q;>j@5{fl?t^v3Ny;H6Dpcw+ z;TKji7f{Oy&D9e8IfZ?!#j;xtNpuME5~^G6y;)Qq?CcRt5Z*z072t8=!wsXW95} z7EIHUw#Usi!kC=%->OIfq+Ic>K~{VaXlF+X2{?Oz^1#ee8*}T~(nQ;Tmvlq)wY>Zu zbync987gW$_zlIZBOK#PbC}P+!?dx9{WiB2EW|M9+}Bt2epme%jMUn_ygXV1j&6J$ z)Je1 z>Cnz)v<#)J4VI#&8!+*2kmyBD5?mga`R~!zN7$4ZT{wlkE3A=DB45<_5ZBJlG49*U zs6Zm7VT*Pa25Ej>ZPmrSWy?6FZi5~8k9yMo23j{- zP1&hEFz}8&n)b5;p0ybtd0;*d30)KibvwQAM@d8O#yHLqHedNhkNsqw`)!&Z47=g^ zXJ^&a2zvB(yz4qwMj=F=CLr5tO@o#4Dmw@cox1SrBk01SJOY5{S0lNKa?4jZu8M<<;J%!U}3~paj?^rHKgA4T3 zy+4a<;D!IT7d6g#wVfw@Fm;9k+5LJ^t1}{ip1+@RQ|{V^?9wBjT+&itz4mhHcnK@2 zy2?0*t_=XAvg(ITnnPG{r5_=z#yq@RcWy4)r-H5V8HPpqDu{~WC-D75jWnzwoP>-R znadqH%Z2w;<4GCM3}ek8;Edb?+xt?ueL+C|r93Ap5G1SA#6CI>a-I3Gc}CQ5^Rbx` z(+GGbDHK0dmO*u~<+}Xjc)ro67Bu^?87w(px5XSXpdDJ#=lKbk!&dnE1l2J-zd=N7 zf2J%z+)m8zrvnq((CPS!vmTHla9z?!wgi@Mu-+-(S?4Qqui9Z;gA6-_g-s|W}uvbj#; zT(*sK;ujT{dC+oNM$G&Cl2n@)t5Iphe2DjRulY6f3fS2vwZx6)- zSdEf*+;+gvE8DO?L&BlZp|3l>LMwo{2Wihg>El6LYT>#=r`XXM*&`;6G{i{p!NbB( z+~afD-FjC{D2DojzrIi5r$L6~I}EGrJ>Wh>-9-?=hdgO@sTn49;S86TyAb^WWO5QI zBsKg1``)9mV&iRaSLbYu=Gi)+E@RQU{caeH58HMZ;wOP{+P6Qz_6RyL_sZ7!d^ym5 zPYxKnC5}Qqt={2dTLTO7$K!u`i{W7vlWet48YI-J%Y86OgwwQRT7s(|;b->Ci60%i zIH$$saRKK@97!KlTlPY~Swt>i>zlBt~<itF%ITYv{yfPXGvxlRZ%=FYq zF_x{u{MQ=3hlLnXR?s2S7mjk=C(_{baO=@Jks<66jWX2jX@t8n+Q+@==u!UJFX_6z zf55A32wH8a+Ty*i4{_2IrDfZK=~Y#DK-~a!I`Jm(zyFGiHgdJJdQ4V|vWJ9uF=uiJ!=>>x13BPw%hu~D|F?f*D z206*b)k-HYN7moXmXwDI?HTuQ+q}hof_m*%?NoN;D==pm_L~uDQg_8%59LRES0`I7 z;+>(za{uoc&MF|PXTCqexedU6+Gp+7Hhj~JLyc17z`1fuSLaPSkCZv#irZH0@5t8miE@TWy*D?F$e zf03q-pL>Ie3YB&YDDIZ!*}=qZC{g>T1QD_*XF#cQTbcxYdr90oNt0}0b*X&rZ&H%3NACo^gMA7ZLcUNc0dSHyYvvKNS z3+$FT$u?{-BKzF6kcLVRn6@yWqQ+bf&hR_6jJ&Pz(e8S(tPA#w*lk;9(tzRLGm5@yVcgH< zI+1!3`@GIS;dr>w1o}n9slI&;P^?XKqBMF5UbS5-vr(i)+mBvd&N@edTzLp9iZPcf z?(NZHQS()Z*#Dq+_eK$9OZZj0nlhq|@s@t($l*xXEHoM>0JQA*_Pgf+luQFX8ymkEk48M_+n* z7?TAa$xQk+*IQu8`2D%*5C>>Ey)jH7*#>)&s@aOg9#GS{H)R#hkDlfZbgbbX&ySKS zo^hsjJfHt?J?qROB(g2IS7C37rb%!VF^M1|(8*Hyv^5Uj#!Q*n-iaZ-`iW=X=Qt75 zw`Ea4Su)1%dJU>kdN&!ii?3m&UgbM?U+sduwI zS_0^c^$)KTdqMdAV)XpT8_d6EQcC3nc4>CDWjJj8N_JrSW%Y{SuhL`--ueoa~;`{&fJm`+~+%M?)Ui;?xC;#R2gu` z+%%env!2sUfJzSR_%y1a>A&>`I#mJ`C3M^?@t6p@pzww~{Q!GEH>ue2vHwCqaNTyr zBo)k3WW0N_7oqj%%p)4XX4s&&8QOg`2m-!~yH>X-(As}4d1I$}5OdP0gKJ{`4=(#V&%F+*jnd7$WWi=v{6#vC(p{X9s&4OGywdSBi<7GTkyN&M>ZNVqqY;Jk5A0{dIhaq`p@=<5+!=nETzDCYKDEj2u!``T`O&VK>eFBa?uzZO7e;-3jFvoNBc>tR%* z>&vjPxwtNpI0}^deHTeyFT(>%w&(0zr%>*>6wzCZ8u06G?$^dXN<^b^?RoK@1o~sS z@WG}GbGc>Ar!MwxgZt!8o4zy+lHW4>!jJ#Gd4D&-ulSxAb4~4{;^QRH-r1@YlWc@K zMh(}FtE|Z8yXhq#-1jI7dTIPRi4j%&h+*P>*9=wC$3{nN^PniYOH*}2484AN|4l~$ zGm^YMxz4q(3g@(%Lo7_O_wdJ$+<$oQR^VF}bMM^(&^pUxlDI_BSvN)g`8@`nP7ENSoG{UclcFz zLNJguA9P<|>mY9_hgr95;nr9JG{$PV^3;f{X1P@t zo}0uGq~^a~0lw7D(xWG-&;z4A!{Z~>ApGYnRiI5e=n@?}|LY?kS|a)vyy6xNmU0uU z@iptfNwfd@k?9EL#f*^4m^1)wkh)Aw`!uBF3iwGj?!Yq+;cAjg1<+xqZfX(3f`XIh zSpVGJgchIl7l8L*4lMm*#F!uR-^^*QZyZF3=8;(=*SRb(ynnXJ0r$X1Zk;wc9xw#6 z(KRP`t#ZI2nu{*@DGw@-=fu$ZeQ*@-rILynhIM_X^e@z1P!sXY^!`;6M0lb}c>F>L zApf3)>Xa4`BeMEEpEnO|t%1!VQ>AXkk8nJptc4$OixY?uA6_t$i)*?@qW}=U<=2 zh8|yZbX>%FEl#ya;TXB$|G7+$#N%#WFaJFWbeC=G(BpA%A}XsIq~$})-?hCi zDbpjGk3Q)~Oct?E@=J&he-m&XntYK)H&?8cs^mkc!vM^Ej-i)7!&&g46wLwfp>O#mZG_dnj1&{qbE*}8R) ze92K7r{L*k1MDRntjO2-REK;2O%fl5T0qt`m_HtSl;xJN4usYomfY6g-*+m8(pB!O zr#UA;Q%YNPZM_JIO9(8}`O#=OfFHnQpf%%dlf>K!u=5kbcZ z__B>7qG2mjb@}blPugvQBKmReoE7%iKKX9= z^g#`1ImA)MlC6Qy0MSyg%@(NTP;b(m?tm|a_hf$HJhk^|W6lY3{2cF7jN-%Rxwzv> zjrwMMJKyf=*{n zLFJ#)x~%FwP!g;aO;v1yd&SnDytg;u$?P}dFX1F8w5t9y@m)F;qw+F4d65)tbnOde zs4=4HJ6eC;rZ#}1iZ)~c`*dqRNRHWK&W?05OQUtg3OwbZ-I<|ZKeEZewO}1Ab!UtYg>XJHr0uJ+P$a}!iHHX`5TXZ96EiBXPar7K z*?;BKZ_wn_iRfJpg~&Fo-)%u-@Z-t3MmxO!nU0V@{}A)O6)ZmKF<}0-{l`I*WMXqr zG80NPHlan97Ioj|7`V`Tj&wd-+Fo$Dp2Bp6iy3i7vp-3lZ39VyP*s`>*%1EBfsN%E z0kVyFAS*+`j;5nNef7)Sg{`Bf&iU{4f!M)Gt2cxpAj%q$x7aI!qO9BHS+TE`F=BDW zzP=f1Y1z`YvT?7rmZ8JwIQB$F+&@>#Oo9DH8bNo(ZeTA;PuR2tBige2l`W9MfQ0w* zRZ=eC-j>nk6=VA)&>`KsC*tP0(N>L(c0;Hj z60DmspW9?bDg9n{Pbwmu>HRbE0pDmgmjco5FZ5QPJjYHYE9y*(2}lk)k@|xlVEG`|$Fy zGzRK)!=bt$Qls(Re;&(wS ztE)vnf(_-G>G^(pz>1vgd#!GqI)-?AtuG0jUjb&yyRs!XD)3Bal8*TX5qhyWe?5p{ z2Q~y_c}4h}Z1t1wy=szY-_rCC7}MIw}$@ zRd9YV@{Y~f%NbC$X~mW%y$K-C(OeY#32b&na_RG9Km_)~n=2OlV-ma*5_W%J zj=FT3rz=`9&5w*BfMOcV!~4^X`g&M&z(ItU-$9 zA|myYM4y7COkVafp)CouvtpMq$C)K;h$Y7cR>D)>MB%>WAG77;4byDkF7y6z!mbbI zOY9Gu#~8p}vxkLwmKbGNs;4AluY=YFGNOT}WZ0vVE@P;{g1)|by3dDuTLe7nDa#1o z%dB_*`$$uRdjK!j3U1>({1v-g5l%8>8|-q^$Y~E~`E)fR@%MaIr!M5*FU&!|OHyji z&5GW5eJ@Fu9)dlM^h#GHLbU99%$~Ks1=x_2z2ZC8f?e&4}45;nl z95~S`kGNXn`&@aq;byZN{o7}I&>?zIR@YnyWoK1#{C)ReGNR^tIL=w~X43cY{D}dU zzq!Nmy;D%fS^Dus)(pf&C|#zP3snwPY?K@B9LQ9 z_YbOgk1t0f+|Z2=gEt<(@CGqOUi%etMi8 zg4I>Tz}%tpXIB=lc5BPE)BLl`_c zyAI|pYgW-~Gw}6e{qWE0b>MI}=FmW8AL6!eH5O#Y!N*$@muOk=d{F0of|bt@B$s(T z_Yg}3&))eBh08qXt;{3SuqR(3LD9(GHi#c(n{2DGJm*2Ga|a2QYvs`TqF(KEOEx?( zW@rB}GXyt`nyl{Q_b12dihlLOemFNOTz;Nt9jN*Z#cq#PL(X@Gj8kzEXxBcHgYCmG z@ZMW9AZqA^o8`j?-8i@29xdxq5Xy)ibL*eqyVzVGr#JH_vKdPNj&&{YSbe3K`Zbmn){ogbgp?Go;*_5kkGe*gJ|;c z95ZG_WKSw&j&p)TQvS9_X;;AR^R;_CWF254|DxK%f(gA5t{PSkG+|4%bD;GbXODFy>XyGYBW`ZC-8pt zbpN-b{OVQk$M$Vg;}1%daKm0SYI+LpE^hXTnAE@(gNb5-qnQx#(75$+WTI zX1^iS>K_WL72hg-TRHGNT5wzK%rX!@>%UNgIZ6bXOQrco8PSiMM8UbHLr|JBzrV&r zhF%?Y8am6K4=01_MlMdCL=~SR$zw2g>cjn?YA5RU;ll~0!EN(pP-hZ){M8-v-QLN_2v@c19**F@-DqA7`55sFb7~d9!$fI zquok-_K*Y2*G+Srx^KG=!MhP9EI6N6{Jq62XVVsjNrYY;qZxrmo$oD!L-F6;ld;qO zxp=>L>r!T28zJhNE9N=7Q~|Wh^R)6S+~~@NYjNBxA@ZqoULnqyfX71@1v%f;fXw3F z>0jr4V3FKY^OHd^9Nc=6qu~1s%+(rHHD*}Q;FQLz7QB}xf2i_A^8_a%d3dj#E{G95 z+;T4@hztehDw}?fT-@)S+0$r_?}6>&?B#yyMp$`YWBgR20|tH+iwd5yg;QkYS?l$} zC?(!<;El*Il*uaR%iHsy!@GBom5LcWnabFBb9)K&6iIYwC+JZ2_s>rZ3;dzq>tT6c z`4J?`f3xYtVgqoKzs~!lwE(1-cS5*)$D#K7)iUwiHF%{OUQu(32qiryC0Y&0hVAiy zM;w^Py|M=X1Z)IQy@-rc2>m=5Mk#(La>abvy$F&}C(O$~b4fOi9^cEAGCbD!_rRHi zka_wgF{-U4ec)rti2m{F?|&vT2C4HjX0?WsFqVGSjCpMt6t{~4Px$NtcW{bYZ^I~T zw~uX*7nH$yOE$}ri7Lnoa7iw29fc^PD|~yfzS2%Ml_QlGJOqwf=h9rP{P=LY^@zk=`xP~=Rt*pE>Mzj z-Cu^Xlmv1ud~O}o^(@cf!d!U{LAYg)c{{UCC+&;|pxt6!PrR}oenzfrYk%8-V;*m= zus!5Lms9N1u1*jj1GT~qF0Wcxt+myEvD*tjB!oozvG?a@q%o(R0|Ck_tPL3RZ3pS& zM9iIIt5Dc+JZ%wsErU;a+e^<#;2ds`mETwpr6(s`o~@?N)CJfdgrh|Atywub+`O8@aHcr&R({R{mYrh#x%U??}F5$b=DS* zb=Vo|B=-5X0MEX@o1`XLgq8evWNz&#u$o*lAQwx9qLpoXL?dS*Q1_qxRQn1{s>{8i zuAoH~8ik3@UBhsFrYN8mwxEhFLhQpx8H{;Owmh)S2lsbGy3dEK;UXJvR>S>uD7LY_ z!1`kfPS%hPKTO+zzJ=fMM!^#hG?L@g8pVgcr*~T=<<&X_Kuk29?pL>sOf?r zFcdg2juPX&`z`v<)up>|^qo*i@eJnI2c~dRD6yk!?L`la-?1X+Y}xR0n*xX<^PS)A zZfdu5#xLQuT z%QQ`i%2%V*=1;Pr44#!j3p^jM+aPBc>8b~^p2mg~m>2j)gj2EC<|pv#<$66{o`5SU zefPvn^C5@&k!|ZQ%$duaOcU>_26YxzLot#qxS_e%sX|c$>XG@Y4XOQLv~fPW!7>4K zjX1`-D7aD4X6N@uve<{s^-)ivj~r#aQ?dG0h0ndik_K|(EQrR0kDJbw5#3y2zjS+h z3jC$UMo~PoRI``2_I*L?*&dx$)uaFg6)6WqR6c(>$ZPJ)ViXqF2pQp`-` z4U=I)(8FFGw$;ML8z1bYtuNp`7@K~tetveDlj$TYD1ebHwF#GMR$;^t%=9@i=@A zSG~Y)e6tE93Lf(29W8`gC&@qQN56*fa+Q#Gbu>s`IM=Sgs2!d&IkM`!s0RsozT;GS zogkB7$eyiChP=gQNJ;-pKuFBBcx9IZpg6;2uL;6?@H3AN;N`mpcolZ! zV)n{{;?`T5UoRdXfTp!gb;Ten+7omtV!S;9jEB~wB{`vxG)PWyZ1pzCX$RU39LgY{ zBUOtcr!s(pQ<{HBiW14toL2jZ`*qd>ZytxG&B306O=tH;4?HEBJ-0E`46pcwrqJjZ zm>T}`r=rV(LA%SYH(m~d*%227vr%CrV%~eRdiV&+xtPdv^vF@9a&7!Oz27$=EVx5! zAr%WB3BNoN3eAHZDl*d;z7CMN^O=oQnHx35W@XN3M?mt)CbU9d46Pw0K4)ZhL4L&E z!`f{azWQ@|FzAj!a7IhWx9)66yGA;GhV>BI@4TU>&168%Z@T*Z$y$Kc*G1;TO-fW1 z)t*he{RwEUDM#CDGNQHp63%}%_n`GcLeu!WU3j}TJK!d&0YgDb=SMwA5Qn|NsP~u< zdRHST_xTbP`f%^%#S3)NK%O5Ah=L#KACJ{mKqt|iZ?pQ5ar}r>n?FMW=e;^2b1#r~ z^nu`e;yF9h5y17K`t7}RIChV5Ap?6kx@1FoC`^7s?A7hZmglR%B`W1?bIUS-dr8T& z0zPzGZ~mu8?kZ#oy1wAc?1sa0Msta&%t$+FVCzw379`YmT$8>;gsvJp`a zIRbym*+!a%Q$Ro3IiuFP4TNRe*orA|PDX~}%rY|z>X?&AUlF55UsGc#;`lKyVy;10 zPKg{T-STVIrvC;n9pft_RjH7Z)~(`8(sD>_c7Y*&Xai0$OBWp8hywEEsjDwT62P4H zug-e-FQ5t+lTdcRd(W4w8EvcBi~h@emtboO+E(j4@_q}TWrrQrx^gPCmJ^RW4oDU@rBSI9cCSx|3=T){DPMc^y3hV1vC4`8o zK>343i-I2+n$7SD>T420+wFn9mptjv?!XVrdqnZDulh*oyXO*|j{MrQYP1Kk+V4s` z?@a;+v$?br%`S8w6d$3R!n{1`|Kg6U5+Y>O=B7?ajA;Jd>Ak`_3?a-FhZRkMu$SoG zt>;IGbl-cD-@e!hF|3ke<55!(Qs||kTJsxxtHt!P_OM5SX{q%1!7iQ>aBysO6hYoH zPyeqjMzl&5^rVt>2G&vLj>3ZjS^N{mmUe9>uguO%)d9!0f#{thb=UbU&PV`zcO z^U`A92iqZm$H&Cn4fDx7v(EnuSposIY8soP)F@$_%R1KybNiPY>X#Sn;mre=v@-0K zK6dUSbwy$}WS43`UUMyil;wq3@`yQ{J4+HiRlEx!l*e`)cNU<_@p_K}?iK4@UL%i8 zCq*T$xlzGF)u65SD!iMi8%Rr%R*w|4pL zBLY%%!a8NVpspXD?5tWp`)vmDf}Xj2;~mic=hgE`$5E)Yn&bF(Ivr*Livu!d_Tk!w zwvx54PHk8}Cd?fz~2&HTlXseDJ90DjUF@@9x3gD+!bEG}I_?7U!&V zd|Z|#`pJ;lSJsN>b-92dg$rl#{BiOkt-;{OJn*g-&|aSDf~Z&$myn@lcw}fBGIEOu zF-U}}?a~sU&QRhaBh26Qed4+xQLqedwW-o7lvF56W-GIKv<>&-Mrln>B!Id-YxK7L zAQK+oXkWtjx%dvt|Mfu$c-OBqVYHZMWr z$~+k>=5&1By%`-|y$nhiyY}o&JCr8P#_x{xz?70qzu@dU(E1vD=kNP9h!!4~DQ2TW zWK#G2)o`ya(t}_)v?&LQTl{Af&d0-T-Y3!5vp7*pT-J>4A}jhLlX~jmUCcLnLi_uy z2A)@6zW;qSe-)ky+?Djh{Dq)Gr#*A!EEqYGuAx`UfzES{7RrWCfZ)c7w(h7{SbTHg z`@?TEXf~AC-frwGta^O@W&2wPig<%}=5H)P(e3E4S3E?hD9c%*S5XL&xl_Cde@%&4 zE=Fd$pPmNOcZPgCE|@=R`AInzd&NnTMe8y)0>RkPB(}$t3jOF|x1;bCKz(-SPLEY{ zqrH~j_reYhb%uol1?unrprdf5G{NfYT&> zp(`LA>fcCwaSptc3yHVXTVd}QrwqL#^-|=2p>>M=uS8cRXmmO#?j~+Qx$*mRp|Y*;oTxsjxN!&)F8MY{YGPit zI=!z~%rfM?AHCn>K#pq7L;`PN@7BSU-ILWeyD*ty#N>L|4JFYRjpu3z5yPIn=fT+` z;0-ot<2Kv|J5~c%@(BDne;^-X5!(RG66Mbom4EC*1h1OeE!^9%#RB=7=3!DZXJl1 z7GAv_U!GjTIlNhxmoyc3Rnfde)4+14{5hF20ALpPz9mW)rBk@SXyPI%68a* zUlUO#MLbL3W2wP!MX(2Fxyv8iqYQ?92b!zwRiB|v?e>2ZegwGJLB>a3!GM|@)#=i3 zPGtIdj@d=gJy@(-uMkOQL4s*K1mgOFC@wkL;ONU9@V4ohQ0?JGc5?=$A6f|!y=biW zx!3=|_uLyI?{m{YD5LGeT*r;5%%tmecbZ|>ho;ii72iwfJ3q3VPX!No5g7xV%c}AV z>$Yp8#W{Ns+8+BY2umL<=i0{{hzHIkuW|2+SXF_vZd4RKJv}w}80Qo<3ghRMt(IVF zAWg})2>VN%HtjX}vO!(%=^NXqZQx~$)E>S$3UAs=q8)$pp*af6vLiSzBy{TRi_QXi z#9Mi@)TEOT?NPj9Jc9l1i^;;vXQ(%zxpKUcbZ;NpNNJ?yxBkLWvD!P0jg7#0$h`ll zfDjRE$BCsk3ZkzQ9I9XPNYFz3qkLkPUJzSir|Xg{g}4Qtkk1TF&`hRpb_u`tR`|Jk zz1NsfOBp-w4LNE=asQ+5Yw?pvs&?EM;rk?~c|f;?T^WR4Q2J(aSOnhZ&)qdu+JcT0 zCyJ%|Nzi{peMAfMt)!N2z3I&5K|)z5IgH!_SbC30+B-C3ub%wL3pL-8z2-y zrFH3+e((C>f*kOJ*Iw2hu*nE=8O z9Puv{LzQk*Vvk66pqH<5@(m*gswY!>!u)m#)^;02zPQ#xXOL(!^_3o2NuPc!wmc2$ zGcWE|VP0cusKKchVw-S0Z{FhBZ%UMGn&NPHWgocT7pRVpc!G+3cw9kC9h980Z%N1b zGC{X`f+rRnsHc2aEVghTDws^Ea&HYoz7NxYvhi=v85sS}5AfnCMtp0%kRZ92! z3KEY(YR=fxJ4gb}d({u_XY_%5=Ig>zrd8nGv^YDwQV3bAd-s^9Hy~hegtx7)6;7E> zbMqu)uG_f-pFVuvJQW=8KX-~7bFQzGuHLEzP4oC^>P7^2N?tQLn)g7lcCoMn?*BW{ z5UtEt9AfX&ly}j471)UWSi@7tf%2^%7h4*UA!?(GMWLscAb=Ox3_SjU%*_OfxnG!b zctu>SasCvlCDpMM`hoMzy8Ms7bH9T7vh1x|M(gk*X(9A3$qc+2wlviXAww!thi|kx zp2067w~szJFaOuKm%D*&4CJgnaKsMde2u={i8L`vbnv%Ws+}kop3v8IkU4F`rrxVY z>vev_o2t(J`|5Xswemb;D+yQEC*@yf% zFW7CsTXfVMbMdlTCB#MwVPH4zx2=npx zd>)uEp%ndqEBm>dK>mlS-)%7o9!suEIJdNeGhxqcNkc6p2qbWnQ}4ic8NP6p+I{$w zYMkV#MT1Vi>JdNJiM^CylRxjZ4t!UJ&3<(eph23WEjcXnFhNe@B0)I-zan(|!rqaf zTdCJJ}M{2mKwX9GZfQM3?s;51v4$>rHrC@x7hm{G!lL z-X18^SpDPdi2KV=tz0z2)8P!`i|-y`6lh*mN#&n7_TNQnFJ!wdLEff{>>ynM*a-(4 z{^~!Co-;XV^W}wr!CS@1nXXp&sOYI}K1z;4zA*MVO36W11D#_fzGwG+;V`XG$M;g} zr;((Y>tI)8^L1|Q2mCz!%RHNg3*{E7sI0%FLptlT63!(!N6rybUQhB5LOwniUUFqe zQRgRxEQuE3dR}#%M_4@MeJ)b8avO#20ZHDlvu8oGG}6W#^CHtK%ida3cY;xosl!!+ zL@48ZYLgw<29hRjC?9j|H5PoHD>^3wak89^xh*47kRo^j~<=7+(n3Xs{REq zxV2%wyPuRw?@tKJl1wu_RgIrBDe`W=2~gslV~L|DNRbVp8-1TI&QCTo(#S_|Lik)q z;kt7+u%6sGzA8zIF8Vg>mS4d4Mv4Ez-c@cuxt{Eba?A>}il#Y8NX`I5Y~4!+u~TT8 zQ`;)YZ5)C^X|x{x!@lI~YU8@w*w22x_PXKYRTxfLZ%@f{hGnVZ3;hDzNUq}j%$Kt` z*U)+9`~Ej3q~u+2_~uG4h>9yVK2Yh#d;|OJ@*l$xpW69|LJRlCi`ghzeJIggMR)e7 zn|qLcq(|QhzkfbSs9fzYAwg;{NuQji%E8=!s$7B&LX@ABeWeZG+cIDOT`jp(0b?!P zGt5e4D0t^5ZR#b=E65JG5zDaxv~T(hy|zZcwuwga&+$#j+JE33?CK6w@y)lp5_2F+ zF3<1LOennUEHJF7D22n!I|^bEmEf7xiGAM3kPPkRbi#*J=}ZSxD5QC0;Voo|QEnZdV8&+)m3l{Gw}eg|S_I~K&U zu#c+xWlHq}MG*Nf{?tYOMko|s2|Get47oXlrp^3x$j-s@1ns?5=+erGNmWXL&JyR- ziY&zVK96we6jQk@cRTZo_XgAJ1?&9T*G_$9>WjnzTqETqQuV^=q`zb)gB&R}- zJtwatk5XTshCi*+X6fdu(0!bZ{VeYBxLZ8ra~>r`CtQ?j3It}sPP#bsioz5~xN-h; z7AHjJ$6{~u;+_*%iS@*b(PglYJ262rSphQ%{&tmd`%quKvn!mO1S-55S4d}Bk-6fH zE$c&OM4Vlftd*SzcXSCaDm=q^jy8{3n}t^EV>3>0K+tb+NiA@o*s$ zmufE(y#KOHbP*m6zY11q!z3daS+K!5o5lVL`wY)SE0P{IKRj;Trym^}`((Y5ow|j4KT)0&m`mi=8A#-y6Nou>tEfk_6GCTg&A%3A zK){Y;ja=6aNXs+7xPkfd`4r>I8gC=Oy;k5|+Wkt;QXYBWlU^`HEiA2rqa%0Mh~99^OBoigDX+m3Gn?8uG9Bb-IKtVPVgX1fe>ldU)NZ^&x8CfU$H$@=?C*? zUm~js`A~c67pgFoLAXNAHD%JvhzbcGcK-RuiH_$P?NM3vSsy`UazLqQh_L2Spj&5dEVeHc}0`iWsyt z&omtl44@NP0?OQQHliRJ%&qM)6!HEEG3inF;p7pde|3lM{zf)*L}yRa++{;`?h;$7 z!el6EpYzbA={V}WG)3|d^YuGL4hBvhFrs3eq=;fCPOx0#C_Xz!fNrl(bs68Phs(TU z503liL)E&oTGu2ojND62=-q6F8DU}iQ$>8}igBFN$%K~>8vRU(M3)P}$by%T#x<~Q zi|70BtrA2N!bwVPabJc0R~^6iGW;g-^OZ9ifnaqmtu*Y7vlEh`x#}*C)Mu`UBrymg z`qYwEEL7V2@6M`5z_4 zMYwm=NlLkV73RyXnMCDbe{J^}C%PDXe<+d^XBV)-0cur5-*YYc?ar8#}D5yFrhW-d)oWocfpqL-f;4>9vE%Ej31u3U1~rxjC*wT42(f;vL+#xEl4ymQE0P z4*m;zA$$z6?Hl)T;~X$?g1kcN>M?YBNy;L>jRR@@sXyh8&rh(@O0iQ(fi90HUDP7u zMZ%msBjQq`cpj@JH@nY|+Qgn8oWt|al^1G0@%=)`-v-i07W8%<_;cPeH#5$G9IaG@ z#X>gZ8f;h%!1?}C%XQKRq)CiIK@ z^lB?x0B|a;cC0&ofj#La!frYyloxrWbn{v{++VD|MG!`SEc19K3cmY5pW8VN{+pyo z*bQ+nO|;>?oyPK)$W55mHh4P2O@|0WKK(YP{{oRE)%ISKzu@nr3s3S%1K3b=79O79 zLqz?1&vg}7p+3_OEKob-`+hFwQJaOE>DO-BKFo#GV?+g;cJ?soY+lzv#fa|bFcD~2 zyn#oftZf^}2u|m|t$v%&fNtMr?DFCXfq#$SvzXp8^au~uRpUGn3#~67OUne9k2WO~ zd|^OCfgHhRwb=LZM4t6(_7W7-JPq{Ep+!bCJ>lVlKY`vfyV@oqCl6v6wQ&ESFa|Xt zXwHS`7$Oc+=%&QH1k2Wd!10I?2(>=jW>C2VujP4WM=>wUmA;L+)R7g{Xl~?pbkU-L zoo7e4-!P-{W**Z&eJwyiOiD`eh8meXR=gIo#)i_v=1D(bzf;Zo$&M~^W<)yLN$X&P z`@8oG{J&<@L($2Y=vthIdq1Q(b@n^cJ=?*1T3`7Jom?rtyg?88+Cq3#YByk9K(bpNGpIeckn7_-70mPs+?|D-7@a2`!i zcB6+3J$xlR=GgcW3>X|ln1ZLF%IYxzdc%**2SaVsI`Hqe_S%PHWCHfyCHq*$B!Iy0 zivnSIkEi-JnDl{y7}{jX4U&zeLC<^QYhG33e0}!BeZ#FP;4CwHVehd7HMhQ|j=f?+ zQ3L1bT%KVb<e^ditZG}zI~ z;`3vDfnciG3G{gP&E+TR6~HEY;aQ41_9?CL${9IePtgMsUguC^L~eINXjZx%)=GOU zj_Ibs99wPtC{I3!&HOCZ!MVCQ!|$aJhbKTJ-o^M|7$;(iyR(pk_wRkFmCw65LV%u~ zibLkw7Su<2D={@;o~D*=gPB5x?a;u*dDB_KMXzB_Y-0ww1-esllZ1~cK_k_=mnNULSrH$pfMyx7kDt#p}y zgp-tg~EV-GX;D>=({y zGN4)Z%=Xuqo4P;c=^1!~Nkdn$q?j^|Yo)M&FUk8Pi8k0hwarpV*a+#7G0g^Ct zRgPD!hQ24yR&$-ZK`ipgeT(!Z;5=Dm*KM8yDP8aK_MO6^B-h1W!~)OdIjSW$m1Iyk zt-{jTGA88u^wxLpxAe%(uZaCZoDZBHC30ZLdpMaEw~eb5IUxP;$bXmdJ}UlS!eN`~ zKCC~zooIG38|Oo{Mnz6hVqD+_kr5wfsB&lfgin-~DY2`1RN^!3=@icO`CdB-9M>#{=1!x)5eQRr01%KWOy-2J*1S&iE zA}`Q0w}JyK;My@0maY1cZ>DH_j4sdTDOK> zp!lvpTW^njucYU4DjwqJwl>8FZ?$7+DwB2a`t>77?)1`WJ-<0PL(L+uCXT&eyjgVl z!y9nCa(s^Td=G?oo4AzW-=jx>eCDQZGeqpX7fr>_6LDWZy(t?O6eTy(FBiTIezCX8 zDpiG1j4KhveD`pMSi)}IV{>RMK8Nq2)~{#9j_AM&USNzqOF3Ou}yNY_|*IUep3f_BI#XOsblRB5G9B{tfL-n-cU;A;; zTuD7UaO^u|2~~u=@Q#JRm&fl~U_K^s6f@Ii<36bR4ixLI*Fw{)2a5j%Wx*M($pPQ6 z9ymf6Lm^X1glc}i9OGvvMnZ;UFX{giK-bNZ9BZxVQIk-QleobKOa>UdiT}|DqMM{k zLC<)>Yl!g_aV1$GL$4}mw=#FEMcl63-Y+#we(cY4kGk!8&35Rp$ksx7P7Ugn1dtY$L>Lj z%s6_qU*0`}6lDDi=SG%6?xXWcAQ!$5e~R=mVZuC^XB=Ten5XbDC@n)B?=dvk*Zztt zQ=|C&yTY=I4q&kN$L@BRJbLys;Y5PpKD?zJlWGAzluWuoPHofyV?4@olph=6XA*lw zkK{J=zUVt}z08chHc1yQlCmHX-xM*{A7k)|DWcx^QZq>H)t6T}k3mT1jbCJwm=}Ei zQ9wd}Jt%%C8h&_-89h;N9OKsP1rgK5s!BccKK&g4Z>w4t-39_g zAyKn%|3B<=Quf&}To?j6>HGWf#GNPD*?P;x= zIhZqUK6RzM5H4FMQn(Q3Lfq%G(}!34;G30QwpbVTY!avs6Nw!`mJJqm*<*qzkn{7F z5YD-rE?)og5Z|+NIhgt1XtZ-E?RWgTtCT=!X^)i z+!XL!VfP&4)@w0Tle;pZ;dBTR4q01y|Jaa8=MTGz(=#C1dM)t*=QMPPr?yug^`~p_|d$k`1Q{-BB=F=<|IWu z&Ql1}<}LKnpvG_($Ev5Ta5Te%Qc->e%BwadOMmy=$p>PKD#Av2SX3~J*rk}y`oJp2?=32P|NoLR>_*yR|uQ>&Qc zbwk04z84C`;zgzTD&UFWuwefD9t>Z%s%OlRhUS4qK^MO=2tKnks)y$f!G&g}FJwkx zpI_slxv(#^yVur_59Wd4>0ANQ&(vtcet^xpsu}X<+>Z_5UKh1ruD&l=_w=mf+bMR{g%O zFz?2Hit2>yyEXVuNN*4^$cVxN7LLweWJ6J391@>!*F#P4GaF7;4y0hnZu(wx3=#wT zL;v63sFNppMiYd2av29*GoEw6ymE{-)Zim@`0Fy>#&Z=u*e9SG+YSFQd^%~U)dzn#?Uf(+;a*mZ6Je?Z?(s-milgAc9(u=?ZNJ-?%iP;Y z>#n;9B~PhReQ#6&eczwP6Y1@sU!HK`lrOP)d7!ZM24ODAH1$g zSRBsNHDewoci}L_(f6V7?{|P}9zHKoZ@+pxQ_X;s`n(?mVZNBdZ!d272t40B)kl>~ zhV!`;tDZ9Vh|s5RZf^BVTTto6=E%TFj;`Hjftrm`&?;Qg`PsV%Ekm~J;nMZ+U$uyF zaYqyEGWFy96CdLH%ki|?W*8)YZO`Zg&?CF2&n&!$g23|y!`p*+GIT8P$LE}^2~d%< zZB^?}P&Ctd??KH^i5j2J`UGqyL9qMfpiky4kX9H$_(5+3WVGxW3EGF?W8Qi5WLjDz zbGWVk-k=GNOgG*8H-7-$uPcu}zOshTuRc-4ySQge+|UxBF$!^idOjQD9umd9#-IQ0 zOQOE0g;;f>2?*_fezd3i49fj^=07K&=dk~TFyU7u30k+SUi?|t2DhW+TaI7Cc@Agn z1!;={pNQlT58SiidGKP1sVyGri6+jSki`2mwbAA%UQKw~KgV|V&Oe~(2=NqmphIGk zbn)i>l*q;UQ4(te0n(9DjN9X(N9~5A3k%;4L7#D+{^&;*^jykR@(M8l^3E_(i(TeI z=WWcSMq_3m&ngQ&!F$q3myDQU3px~|S6O^6cL-i+a=+x3AVpSi_}@+U7@)q@SEF!B z097%TCO9lBCpDEmz+D-nx}IfEdkyE_Hjk@` zBw@a6(~Hdc)XPxE&Mi83mjS6|w($wTDr6Jh^_?1*KofPkGRfF$nSE9u_KFeqQ4!sA z|Ch4>%o1^BjlF4b>FRT0N;@4O7HViLm&<{Y0&Sh?zgrM|s?G8g_E2)ytuV5@+K02r zS2OOz7=BLuqA0=dcfS431QRO?B&ip%8M9vsiLXi2vJ`Znb4i22>@ow&5!WV54sL=d zesjo*9|cj(rteP)Rsj#-xldv*ddBa|J&$B*5Lg{8%~0)z8}uzHZ%yCBhkDq3(vSu0 z8P7dJV&LuhXy&R3fJqf+R%VHUewGhyIr{c%6N$~QGQzJW% zIXq?0Gye0z{)*O+P@S9p*n5`oL0K*kzDlmS21fIs6Ki}FE7>Gywt+a!IGX|SSYHah zX#D|}9qT4vTYZGcx@+<5qleJR9JMd6!-S-Ma95qtqDIfXN==Jx$6-NTvRAq-8OFBi zI#+DU!Fqx(kO|M9jvfewuwy>@`lhkG@uxNXUh^$covDZ7qtoKX*%U~LFiB}Z^9>B} z5gNT_p+{NA%+69TmB9*AXesF_R&=d|oXoML7P`N*54L(9K~6QK#Y^|ALAY+K)n$wu z@s{%)7sGw?ta5HfC9Ni)s;2d>;bB8EX=iV}z`UvCpA!r9M_7y5W3}wr3bn@Ux(TP9%)(6~^9Tzsu0q|l zSzn&8G%%8^4Cs@``4@sn;e&BfWFQ$F?~;dmkN3S&(${bfG^&Q7WvaQ-!Nj`h)MPH;p*Bg8;(;O-uPS6u90BFexd6w?^;H z1h7Af{q_ryA3W1AI_!LC@R}Z7rqyc?z)bUl?X||M49+kp=UBN|iu>E_jdyFs%b;Pw zuGL0wA4=b+hGTjqJ7Za~?|-JcEGru}jHwjB_~ zctbTY5&K>!cgzTJuHM+k+TiK+PSAVckug0n1mvry%I0a7fOURg+V^!8xLzCkllzbj z#j{PR2xgF>?G%H3DswSpzk6bdZhZ$>Za#P{nof=IrG#V4vcZw&$eG{^XuMSepDlI)qA*v5PjtT86*?i27wJ$YGJf{(0H)Q zQtK51r{!a8MyAw3`b$?tUdJ$;KU9sDa<2o1kFl?eN2g&}>*(((JQt9nkjTu#+z&M! zhB^L)AW+&Q_@dO<2eSnx3NLoofFY6jd@Q>uWS@_V>1w1zd1|1=!aog0A;prkV>p-F zkdU@VU<%H4BJpis8?fJZo%06HF$nMddib$=7&y*1xkll6@;RD$>&e7*cxKG!nT+RU zNA>77+n89;PP;5x@g1G`*h&vr=|bb{$_{^$WJIy=0slKWlWT>_kjafbSIS$5t{G| zTXt|}LVHnOkG_gX!xf^70bI0ga8x;^NEj`^c`8n`1Px|H7I&x|fOEa~l-@hum!n5d z5`Lw=#Q8rr`-{4zqJN=ZbKyla!34aQx!g)A-U7Dz4S~w^6R>jIyG}KH9Sn;3Vkp&7(x z1Aav{|DS_@I^*qJH6)WaHz&9dqE|K%g`;wP@I~iE5*2AVC{1e!y~W<`WY=>l3fPNx zQ(wT5YKsBc8lFxHYMX`&kCPP6rgEbSe#$R{pJ-8JOoSEDV@5PpdogMB_6D$CHS~Pk zPm5lp**xt!z6uWnrAWxt2cTq%!uWG#4_N2M($P_|pl54~7QUo>NMbQqM1ltUy+cab zhB}CmQ@yS4Q|uvm;s)E@x;&1=&JK~ zGXj|q@nw@I1}`yBYu<|DVLaw_sr2ZH;ogp)C}&yv{xtB8$cCHBV7`FU_i0I$MNnD$ zCtv>ND9WcDpu3W~4Adg7W2CRgAl2=?xd|cW?KEr@6*Z5;=Z5Iw8-$fmL(S%0i|0Z~ zG;Vx67jW)q=4N5184;2iYZ|UKuYhCruV1T>q`+|UqU?4(&P$!sI_WcA`?)yy_%`n9MVwC?Ox1N&Wqu8F7p$G1 zrcj`o%kASMm}4AE4*9W>c)nPYE53OHzbD+DKOZ!026pZ^BX`3LSW2XbAupyu)q&w( zDDivAp!kW~4F)>2lT{aww}Gf(D9E}<@h4=~J&s5+E`yg>3_eM?gu-+;#}6e|ek8z= zlk)3(He3)<717lD2T%HP$oZpp!Rpocftza=4BmahcCQulh=tnUO;xSI)tE#rVagil zs#|lqrHAh`!7c1^O1RgwVf7SXd{x3e}mVr_O~0pQll%H=d7>h&>{Lslbt=x z<#^=c|F=Gt64kO5T2|b_ef^^zmw2aW(S)cCt4NR`RR6tpyf=CW5-M)$>D0x7{{zCM z-^qXAPEDQdm-H`i+@NxBfLal0jkHWDBy_{Jk&0=<)Gy%9_~!610?#*Y5>RstOakNd zopU7q+2F_XREBYP1_&Ap)Ryr)BcHv3STVQ{*bO-M41SX!k}R18$}noQ@SyFI(^Dbz z)6cKX@RlcxB>CU(4Vs3v?2zo%Ozv+#pxuQkj(7fs~ z|6x5CD%)gv%Jx85?l0l!;WGGDdiMkS$}f;LG$kQF`w>o+o^&^2y98(RtFEZ~lA{ay z?k*42sE}XI;-r#eEHpm&_)8LGc-cPT+1`+nXxcL!F{qUJ9z_Od&9&|QlGo=?G_f#97%y$)ptM2J*YJbuT7 zxDr#I41U1==A&hoZY8$CReKv9ej#S`x-YQWViV_eEHhAM$V{<&y5g~hzGi;xtKuh$wdyD+f3-$Z868b=oO&gwtRKdh#!fZ zVLR5DM2=2atvek4Z`>EgstNV&B*M(EICgKx_Z!a*!A99ZtTzXIbn3 z7GGC5ik^nT4PKM^zR#klb*GhU-XscY(%U3C628O0dL-2|>DoBzF?n1tyZ zS zA|2u{`jW^-clgg}+&{P+N8sqN*a5y)Rl7O4X<+3(R>LW<18n&v^XE;n!Q4qCz5RLz zcxSzRp~=?*%~`c#%zKNl5J*wIO+E&OK}=f@B<6woBjx!&U2F&^jIAxl{=s-;7uWgR zYLMF|ZLqz7*}(W6D~Oj_QOFOy-9&(EZDT z7d@s{U`>_NoBA~bcS28Cf%Y)`9u9otpumdwR~YSz@caCn@1nO0Is_gY9ZLV=U_3`6 zH}J<^*(|v~uH9k;sA&JDoZRarkc^`mN%CBQJW7kpSu;Bj9=ld)&HWyt*Hmw?b$!Hq z+sj1f{;L6P!*QLvxOYHi6gkTDeH)r;?HN?QksaUN-%(^~ zg6nao^WQwNhi-CKwgsAY7|x2CFt;6shuJb+3D=51w>J8Wj5+rDOp#f{;C@i;D8rQu z4thk^r{ED?L5!ryqz67u<6a@%=-ys5&ObX1Uy@Nj#2zOa**<1sRP5?#w%5A>g%6!x zBt72;#Oj`65XgplXIXga($;YQvA$V{XCD0Ta(9HjYJ(foSE;lO8IbRr^S8fXUgq3_ z&FJn`9;C17COhrbfpejEm=N|${qZs;F5{U6<KdTdp>web`{^|Mat=)1$e|fiyK_JF7!d8n@RPcH<1o3Pp}v>i4bS>=|6O}A z4MKfn`E@SKP(${%QM2hNIyIR~H@Z%M7B15dv+s?-wZ4dNnPbavZjaz){Eb~uUz4z) z&D?{_EJQpys|lc5t$gfMmN1%AO)p&f;O?LDts zLS!^0v``_dgi4ZjXm6ptRidS$y@&SRd+(j}-tQlf5BfgO_qwn9JdcBB4)!S|Z}LCS z1L7$MhgARs9d&4qdVV|#RHl#jpTOsw#g7`Pzw=4Z7n#n6j`ThlYIOH* z8pi##Tfh4AGTK2rzToKA6g5&&VJ)ztrbN0vP1$-=^yuHvCui+Y%pEAVvmC}feZN_y zbB&P*q`F_a@ghznEX6$U##IV0t^TV>I~ar+r<30;JaGQHb)5Cd6Bo=Cp{}f|-GHRy zX;wdXNs#C?PcZ3>C<^w>iMhnH4y^u*?0Gon%}4QO^!^V%q~*-Bb6g91#037~E%hYW zaJh9G6LX>8qt?KI?;RhGo-1C!y|p^ESLNGHF_7wS@S%iA0V&Lm9}xcGM=SH<#U8#Wu}wmg9EV$%&7@9EK~*TD3&E9Nb}&wN++ z7VmA(U60Ea5Jntf@BT5pc7yTZjU(LMyy#t5R9_e7upE%`C_1bcfrZhSX9o8nT>sKZ zc_W1u9l4T~dxjnJBl9mgk8BYl8=a8D!y9x+;BRAz8|E$0h|nTG%&#(D4m_>mI0Q?x z!DlXKv!UIG#*f!2Xwk_xdqEd)k1ONJ9m4p~aOjyAmS=g@0jqC%PO|V2p`H}(+;d7R zz?DK~Q}7j7a9h+c7rc!WBID|QKr_4D6%~n2sF?gwV9kef`qT2^ zCn|&yvw~L4j|Fb@oJd#4FB3cEN#pDWrO6P(FKz)dMZBN$J8xr+_dlgaMV~u1rhGMaMgC zzXLxaie|Z+c+V};+Dct<1GYVXfA_*X#3IWtp*CJL=rUs*NgK%;II{P^;O!#tF4N07 zIvxTN<`WO%&B@UX2Z3+aJ~}WV_p?3X8=m9IE*ISvUI1}TTIW3SEtm***M0fy090jS z(@sm|V}7fZ`q98k@cqTZok+1BSUX1l{PcTb%#F+W@0v{&JdUx_iZ^FOudG_aRdm*X zKe6?UzQO@KNjvNNRf-V>QAHnY;~vC#BVqGE;Q;u|X!dMg{|*uIWpi3-KcTVQmsM|# z2sJ1jF$&I`hJA&Z--5e~FfCBECVZM1-AvZ&akb+?H+>ymo^<>UFaAt+9N>LJ#!m`4 zGK(zWJZ>3fA{Y*@$#QN*#Fv5Y^pi+Q$)_+yVWD*_<0y(QZf1B8Esl~|9PXay#<`1` z^FbXt{7Cwaf=Jx#9uPVG3n4p8k8aJs*AS_jfs0~NRzVRX&~u^{MwIe_NU!nD-}qce zID6*$lcg=FO#W?tcnt3q-tyhPLu8FTZ+`-7FRs9cb#G1SjByy}IuV!ln+>rQM&t)x z_y%{T9;_r{uG?eNx7&VC*b&J)(iI=f%RG7Lm`I=10%7BwO6qFVsG{?LMaBpJ+`Hc` z6CZZfo)n8mJ?_Q#JduWWQ865-I&D8RG(8_mZ$CRCs!|4?ciNrgS3d%~pXbXfnBQ%o z@bvd5T1qtW_*(4F8uq%cZOxu=z+C5s6P9;MFwf_@qC;N|0g@qa_q!V<3RFj*7nkAt z|E27MBQ7@dDAMHul`1no_JSUM_adH@_xG(W%^*Y%1?AN9doc%cdB^W&)ef*8Fy3~L53veMa~_QI5$E3DSy(K85vzy%wNU+ z#wZSx*PKnAAo@-r`<*K*l4!6c5%|;q4zm;+A6Mv6nH5d3AlDXb^Ys``O>6+H_f;UA z^BMbe+2Uw6p4*AeUVCYTUB9%sN!~o?+OP`UFj!pEC+ZM&VrU<@-C2asO`a zLRBblC#V{=leuecgVtxg5~mjIFVqxZ@{PvxX)bTEh07vD==J9b*kX|vt)Vl*p>=lI>c((L*aQ1UgpvH6k- zg@4##N$VN`!vjV0EBGAMWgueRh`HDVIqtL3v;E-GUA3w=eE`wdY7A=mM!+jO{Xu-b zAbLUMarq6}0ms_glzo?uz(0=LXWDUY(>lk+;)VPwjMbT>5C#w!?5qg=)$QLjNr zg2L*;5x*DbU-S3rz#>s0{SU*j-oF@FGy6l02*^6)BV`!Sqa;PclMSoDRF%0F zH@r{j*2EekuI;kVP~oJO*P|=j--7xX>Gge*!^v1yJ*F>)_?ivKoP< z)$t6>|0LjUlB6ryf_2JG)gPBifxv8OlHB`H)ww^p_yt}>u)!x$kISsJ7#kSC%R)(RVP!#O3s_#XCilj5)Q z9B7Fz<)URBp2L&tHK^$a;H=A8x;UJ}p{O1H(F0Zq^n_wlPtXh1l0sJfC zZQo;lpTIJw?DX$%K=2Gq>=|g$4OJUOXQ`t|ev(qPqhJ+2No#)puLtL18OaZ43Mr8* z-LPkQI_B=_KNV$-XGP-AM+RPt48mHtHy3qzF@zTo52>rRK`5=6Q%s2=+_+L(#)bO~ zN~XDsu2e7K^;G?{TpTs7Zya|{;l;Fh&aU5cMK%5&HLdSd^VByCVsNF6H*+-Ow0dT#?B1%=Pb z%SfT>^~nQ5p&am&wSVl}jQ2*O7dd@4Q}G-cQT2|u8+;=uUb6FsfEN?p^|wDrkdU2W zyj-IAz z$1P}eDqu&6oH+xfkrsC+JM^v2U(KtAtHUIOB^$3zMm-u6Z=Yhd(VebEi zr-75?lTsBq0qP0s(T&HPb-}-(J$<+zb|Je@zMqjC4eg#&KY3076_*Db<$2T%%E_mE zIEJ_3dsl>J=K3-)xN*%rYiNVMH*X_EhB0S$c%A*|cqUvhJp2|`GJ^e=MSXAaz2NuP zm!EvGOoL6~50gjw+n}u|o5+i75@OYeK5t@veTg-%?Q8)RdY;^E+p)I-&Ptu;JB;6e zh5hSS-h0GoCq_m6Y3m9c>hXKLsb$8V^DuOsw+fOC6xU5GW}%Npfuyu%6NI!E)UR9^ z2LGU*XFS;V+`)P1Glb8ZlYQq1Y3+!Si~MIPorPhzKN40IfcK^9qC+k$HJr$d@#5O; zCCq#8X0_?fCPs{VE!Vnv6L6o7Xq*)DKxm(z6S^T{4rNAtK7F^C(8aj=lmpB?`?pQD zf2XAa7Ax2$^YC0u?bj$1WzUPA{PG*R%~cEL{SHJX;%sQ=FiK3sj2e~f@ClW%;v7`X zyg+%B1hQgJDU`Bl26Nh6dh4KFc%zvm`~~|pOjk4Cf5zSofp%|s$-;gh4J&SDn$82Z zH!Afa9j8zgapH#7KWa2^tu;tkAOQ+;2E3!O@4oANpjN}jW%$dsH7?$Z&&4LSp9o%; z0gv~5^qIkA=vOKaSin9T#k@M_`o=Nv6Y=dm<%jd}PHZh(KF3j~+xtqPk*DD36s%Zx zhZQ*H$b|Ev`9_WIe!c`(sQqH+505F~%S%KCg50q}4~UK&3)N$F=FJDnmyH*=Vl zZoKJ-MUSF$E0L2g<`)pq@4?Z;PIu5%GXrcVqKpF?m zdnf+h*3z4Uv-8fr9)lA=&UZ`84)Yn<9vq8lsoMi8r{|ygk41s1v6`&ug#|d0uy{xn zng{Q)ZCl+!!r*@3j*kuf0f-u|-AOWvfl#F%0^^SN>{9<#j zfD-3_#dy}MzEh$fbG@4X;e1M(TCwR%u05D}t;Q1S=mVi;-XH2-ZvbhNyjN#;9_aEP zo)E06hJd7Wm5>tbgE_@AIU5%VBmeo@>ex-dhy6yMHj6I!B&uCMjD4&9yC!2IL!Y3{ z`n(&G$DHb`6G0>SJMfFknURf^93=!_V~ZAMM2T}W67@#i5MMv`?SybG(3XV0th)09 z;=>E79`+NUFd2gx!eLfq`rt|^&niEnBjwu-Hh%z9YzkkMl|)edi=^!U-)*O z7DNl@HRz>Qm*7rj9q;=kS4ceOU&nRT5jd`NT03uj0v7|>_Br-eC=(|e_hLVaE*vcI z5c^d@R8~L5U(+SnG$^TLWF$t@oGnYLKmUNr*cS1ZP6kv`<}+I-iTh$!PyDqcenPrS zmiNVCPl$9YA4)Cw0zamXjBg*SfgfTPJC}7@U|U)0&XKHR$f9*gUu}^Bd6Sr~yi~%R zmRj2P^K9W@7Il9llYR|ezbcZR(&`5`^x`!Y=`!rnux&Y6U_ay+ac@==PL>=vgW6@g^zWos(5-F1`<3a@z&xOqH z-=je`t9pV~FEPJj*C1E}dw2E(nY*Nvih*;!_jFxO1F$nF-gC822L&H14U-^7R8b^Y zDy1C&>xz#WBUhK9G5O}2fhs9lruI<#T)>E^ZPJ-}Wu<(M3ED zU0`}Go=K1T-M=;*r>X!U5{r`tox5aAJ(~lYY8F3@S*Hg)^b%cmGE0{mz6ai|Y9!07X zlIWS!i%0E01K`_pz6>cM8N^H)+I3ne87kEY8jbNjnivT;BAyd1o=^r< z4d8q4{}_qMO4~t!xuSO^E)eAS_CkJzPlMraeUrQ2K4FgpcQdC!0lXK^xgTNq9qJ9U zH$o?(pnd+PhXeL1o-pokE~mvlJCpCjJ~1TdHAo97S}>xIuC}IUW!TWMC;lgW-;pE1 ziNdjU-y=BZ8baY^g#FGueAzFkyy04Y(02(w26QD*z?Q>e6DY6kL}fphMuDlHsVc5y z!sQ#DWCqb2z!2dhTA?)w9;X{3`^>t)#kH?c8Q*K%7Br9~!FkR8pM1UY8o0M_Hz^u+ zyaAs57?OIP(*Y?PSBAoZSWuOrA&m#lPs^x%^7uF11?Y2PTJjk>^r4}>F50*gYJX@i zv{#=*drwcvn)tdvF-1o4P9yf;T>P41wA2X{^-Dw4^u*}yf44@e-eC^VN3OV(BSMJw zovqZ+&Jt*! z$KcpbgRqw|2hyGnZ#+>q2NZ@3w`X$?q2j?ZiSFwF_|vCTY-&n|xTgrZT(|on%~y7@ z9)BNbPUs9sCRD@J`IQ=Ni5k4$ZVE9p{|h75y3wZ#e?y#gy@B8{oHrN>;1}2$1D=RA z5|t`?wAy59N>4<9l6x8zo7X#G+rm31G=Bvq?jiJ+U?q-Q?OslN$q&F*`@|&oLi@JSNYGQ5->z zF(+I$iZDejN9rsQQ}euxZ5@)b(OHAv8|mTCCC1N^saOq;A8L!Bv)&ANL# zbng&G%4%5x=QpwxBl%kVd`vg$C(Xlh!8McNV}&r1a5hBNdk0*l-%eE45gdCNud`8=UzdsUWDwhTu8f>RHM-h}@NL8)rL?dc<9c-1DhX`~Esn zS2ZhQAv#5=hrMGHhIGzHo2no>luqb<=3lrt^!|8wS0?z}ZX_BT=0dU}dW&tbn{b%@X+?^AgL~OF9JrVF z_e%2apl=|!J#G`vJW7r(3Kx!R;6Ajqh8l+~=1l5+AUNhGj`ws2*Igt@65w6Z^@sM` z)i_7lI^!uH14iC*&J!cpv)*K#CVF8Mb9UnbcJ~QU>^pW>@|qkFdtqGAGPwogx`GMc zS1~7&$Zvt)b`b2zUo4cW&jWQrspB8gVo)d%5?zlKM3OfzZ0=Fequtuu;bu41A%sku zGsu7mE!|U@bedqs{!2`Q5c>fabQXCEuHjztXuPG6Z#4vy2fJD8j={Y0fXXX-4#YDm z$f@Uwz4r#yTt5|$BOMJzUxj1LNd5Njwn*9qDAl|(6^e6jH0x`|h8A4tqJ7)_x}Is6 z8=Z67^K66<3O3E|CHW9i@`LBEVFf(8puRkfb2&w&U1&pU3Z@cwq{F5<;p$PLQ(oGb z`}EsxJMwoWFr8R3t;al=Bd1n~%B8#{6ITOIP50W|rVO=0Hwez3nt! z*bbV>$J8uUxsX)!3BfBNj3~S+xAmX_=h|XouH?9G!#~m()mh9Tq_I7}CxN-lw`L>M z4gNN$HQsTh-Y*>h4ZV76E9WZE-_DZGXC_3sr04W|#71CRd3La!U;zw&+)Vmq%8c^4 zN;_%nm%xMJsr5GX28^KoZ8iQu2>AH5@oVi-q)z7Yx|W3-I`R|j3r@MgKQ+;VXZO6I zOm2m#q^2BPqGFpT*YUn>eMwL+mK<(4wKX58c%Z{0E7a9~+Ih)@QAvM*lxuQ2^AlNK<{;VuLl6`LI z7W%ypUY~Q1t-NahqKkEVAAS)d$?Brfk!9SY{*yMNm5seO(gFe>6Q@8S{C+fj80Lx0 zEo^64Ga#NylDHnsV~Rc7JV%Q^=Zu$cO-758Bchz>_K55jFsabj{r-d)StXZM>04p% zSaZ~}puz|8u( zAKN@EKJdElp2)OGz>fRZy&UmymDXyMG6Zus_1{TlsbQ`Xb;i6X=C@K5%yL;R(xDCi zWsk{l0d($1KnI@_53+j_npxN)g>=piak691a!ca}58H2K$mdb(-VpWzyzmrL)}+LK zCB9x&lY;}W(^3fJzs!tYIO`Xys|7;()a?AW)G>sFI_TTV$&t^muA9U79(8f!la=}^ z8OmO{HH6Ax5-aJlB{|gL%mEc^?0KbKvakzG7c%8+e88Fj^dr!p`CM zCV`|B>>In|rgiWNwhLmH7=i`SFQW4Xx!B|KRq-}K0-nca&tdL-^9G!$k=@)nN{X7a z4i4>uFrQP#KZoYkKOn1h|9cPLJFQ#4573Wo2Qr)ckDHoWp>a~LyaT@{K9#(<_wxQ8 z2r-HOaR{o1uX5B&I(^tjL$pl_jiLdEwgp*i{2g1wP6N)k?qJbcfH#C!!~c}F&YHJO%i zdzT5t_gK_?KAs8%T^DwIjR{bNSlQ4zeFyYy4!YbG+K1EhjoN}4F!5KAnkLrU>B$|{n+iCih(@FggHLH51LB} z8LHk0A+?Ni48u><4VvLthK=?_#uj`P@=zx! z?txQl{f>_YXW{gG$m!78YG4{GWWUF>44*DYB#*tB0xHJ03g+P~h-BuecXhP{JRqB= zKkrNcM~m&HBdo39(c#B2vh?5J`|Ce}&R6B2FT3?j+PDpxCuKGN?ocCnMu+-|fKAS0RfHYqsp2^72NR48cvujQ=ef~yMq6|k%exLwP}#D@UisG17hTVy2c^HKoqG6_QmQgPP|~pps{f%YPnyhU8_h2jbS7ATG5Wa4*LMnizij zso2%Q)0e%;W_z>n=PYY_#~)hc?jNOHD?*N}vs}H8RN$V}TvU3^b!-DYO0Ndd2DWCZvV2PbS&+S|a zRmzkJS1#jyU|#aw$n#w2yNK)Jf7oBu%;dJ@%Ay2GLDGJC_h+G!a2!; z@NAF;wOJ+v#k^4!l>H4AA=GY3@@r7@r!=_4h85jl*mw9Ziw$wAg_Zr8?*sis?xWc< z|Dl*_gXoAbB6NBwx$lJPcX-s^Em3ACi5A~x3*TBvgk9$zkIoJ<*xe2{eX1jfE?pUX zPHDCWAM}$Xx+odZX|3A|EVVZC#R40PUb+N z9pAvQ)@d+~A=7(RQ3OWAdg^IpBxp`iI)ubd8u93TxP01H2u1z1Oy&Kw1&ue`rwJ;5 z!Z*2#({C;ip}l(^x4L-h;l=&tw`r;qV9`6bOhK3nE_(ex@6V2aR~E6AO1 zSv=K6fL5P~@(sP1gNM^Z%%o4a&;~(d)B!;@yk6FGoH_OqhKhd*mDRUE-toyC-%rG7 z<|spiMp+@wX&#d5=mmkAo<{IgP99u%`z14>au41`z2NWBeg}hp-K6_lP9dSp^TKXz znb>#mGeSXV1@xwTUj+})A;!~lPl9Gfpm>FAoneFxH7A|9vtoP%J+zHCDD0p?^3~+d zwdg7v!k084EpEIv`E#YQDma`cX z6}q4mpZ*HZy%H`9M8$;IPvpJ&Ekh7ED)irCbe8VL4$!R_`pS-TP22Y? ztSqLfk$ywl?T?}3Fs4*nY_ZIUo_kf^Ub}V(OrNjJ1()0g??ulz*XTH))Rs}q*u%N8 zhhM0gabME=3t3vHIL@({H)c=NHv#d${wY<@8gPm>B6{^C5BK<91daD%E{CpdyWlkT zxrH&cK8slc!_>UdZlgo^XL$G9M0Fap9Z!5_^DGM{EFZ>RoghO*yD?!$R{2opt9~vL zN=}pzG3*_Y&Vz=ZnoJcHW&;Y^czHL)1`KN>PEzB(Wlx8O(f7z%V9f7sKE=NVJC#Ef z`q(dSboaESwInyXK~5^u(YFUbf33`I^JAXxSuMwSKAfZYuC&^2z6m0lqS}GNPhgJc zdBojmB9!?)e1}-J4;1?Cj$Ly732_w8m+FFvQBc#%DGgC(toqHZ}r70sh|1MIW8#+`5d%H|O21Rv&kbYqVBybrD4 z+hgdaf}vVO?*Pd1Rk=O9OpBb$Qk&0RbO6uCFKZaf=+WSxlRn=$t6=?Tt55w?LUhJ+ ztDL`s1YN(UW*(r0_lPbfEw{wlVZE5BC@FasTpP(&SNHru+}p~%E{g$u==&6L*|8P= z_zH4!;2apC^NpA1l;{z^rIWSGP$SJW`@!aii{NPyI~HyG z3beTSbF4q6LY3>A^`xq9ApCQ2zEFP`$lI;-Ph(#9K2gv<8Rj^DUJiNLCLaM$#5`J- z&P_m`Nw1xVSsnPF4tQ(n^A*l7O>tU9N+9(VXQI8ko?0MRRJmCf&5NIT$%RY%n*T&p1oRPMril1(Q}d1Jd9v%vB8b>4~d>kwUM%)!H749jxg?24pa zVDa=}g#>>JY&wVh*}2b&g0wh|iAv^xT7oLpT513c1l#w%5aM2?1iM_K1~*!y>Tiha zb|Cm#J3GAn5M^1#nk(jCsaBwG z@tXDuzIXhP=iYBEL4fpg>&D)638Bk&6^HfMgK$eaP%0#D3_Ne*f%qsbDsak-j$iWw z*E3HFybapnMB&fX!I$wMXrW8wcT)*@dw($Y(#?aS%0FeSf#fKN<4BB1UprV&rk6Jr zcEj#+c$n`~E<|Hf$X3%m0Qm;DqSEe-f{AnAV%{q5S(;ZQD%)66Nm{`Z1LdAyA`-hB?hX+9CvAGy8DUV(c3(xRw5hGct zh$jtqu$Lw=c#32YbG05hiC)?eM792_r&XVFpmdLjk(ZV<_`Z{_YEy9qR5hgEI~Ys@ zd$E_m?fb=GykDwRD2jRR7e9{L(M-eqtJaGS{uAKlV)%*vXaxw%@yQ2zQX;d=kHxtJA!#W z#x`9pm>W$q;w{4;;svLqRZ>>k=@CaS&zC&xnR>I9KPo7OD<6xjzW%gDrH=63eh}OKqjErxSvzEALz6hk^XLIO5|+Jb;0>U*oye z2GphQ*<9J5f-z3r+*koeP_xF}!V>}D@k~a-KX(Z(^@zG>f2Bu1sk}Zd_jdzxnCJEz zE<)rz@k5wg!2!Z~wp}RM{TOdpRBh_7iDOVHLOj99&*G7!~kmMUL`9A>y99o!t*S*aXt}GMFPysdBruB zj=?$OS@#X)5nxcbJbyoo5V7jKbh`DT3wj>4Mt65b!Qdyt8;!1HUQVbD!GaoO0Ihd*_Ji;dW{2$L4%a z9)TGm*7le$H^a~HDIJa zAIaG<2lDR0avO65h;neQ@+#dvG+PwExFp*M_s-&)aq}VgKYr6Pf^*qT>SXI{?7yJ@ zv0zAfA|)c~SI;jHIe-=Y*G%Zn1IRRvYHY4yLfwP=TvR1gs8{%-&T82<nL}U@tIy>tRsCJe{Swd_MOb zX6z9S_ByTb2@3D=T)#D@0g@+q`d*3SUY4_a&g+_CFioOvKYWP$H$+Cem+*Nxn)3v+ z;fZpH*WR6P_nm~6H%rkTA%Eere3Pvm_Vdn=Rn3*uE(6z}VzOC0M||3)B#?K;99ElH zbI1Rmi=R9;GkZA#m#;6}*k3(>VE2^DRikY9Z`f{zYj*@%x!$Um&eg!NDUq==l3eHy z<*RR*@}HnQ25~CY6QO5ATKkimj3}bgkECWb6&CEjX1EwP!p(KB&>`IGYy7C4#~`&1 zjBn_@GO}3Epuufb0gEbt6HyvJG>@VYZxvngAvU0IUb)GW$%EclJ=lJj*AG4YY#Yz6 zvY{=>iQ;(jR-8+H;$kU13gU}fRwbQ_KIMl3V)=HI1^R@mI*vo$J4~ex$X5 z@QD9iUo|R}k?)sCMe+$Ivb-7sVpia+kG(zZ{S{bUMGr*oa-h2>9L1OQ+kvZ$zISJA z1D-BExp1w79zDAfce{LO1{C+lc+W}m(cmZZdlJY&$7P>6KOY$B2KX-Ez2Et3 z+*Yq}kF|AIn=JMo3p$edbRlDz7F}^He-v#|0Nsp%op%GIQTDS1pXSi-z$?n3p(9xc z>MtDshTdRD&Cd4_(J~48*BjE*@^}Yqt$XdxU#J86d&Oxf-AB=J_ZLkB_;VjiJ#F}C za0g0*b1TLLnUJY&<+TdT2VqR#)=bx;L1g+_)&KB0TY3ApX9zJdn%BBz?JkIWE^j3r ziA|`HT!=@vvO+HWTs=CNfX`XVP1Rp>yxZYkx|7;f3tx~HD2UC%y(d!=6=&D;jEMNR zo4)v^O>ljf^Iv?~J&2fc5+0#i1Gz~zhxbYW@W9AT@bx2RWLZZg&ly(^LQy)hw^SNo z^&=LXT6JLlcEd^MKkjg0Iirhbb`7e99+%8i;ytkWtyQUc24t)0>Xj^?1~+(Cx*Wvh z&{@>~{D;RHw9-Cj*O9UZvd(IIqjEtM=4xwp5Z4LsF8Huy{=)Yo#bFGAjs%EL-@H~Bn)vEMvLWnYYZEHo z{R&S^3$u^i$_3O<|V-e%%f}|t9z`QvkMOeN^O%hg^|kJPQnQ`a#U=1 zji-W`96kJYVr2`@BQ5&1kp$t~XwvdHbX<7}OkIDwHE|v`VVPacT$dHyAK&RJDyBme zTbBl0J?)@3{MvZSLLp( z=m6XzQ99);d=%L~9aUPuy+(pBXW#gb6C-!SIuCk$kI!T;OZKs59#ji+iCfpUKp7dA zy`nw~Vg}XanlqDN9~rQxpBoOD+VbD)SVm!rgXFq^s}npBd0BMw)*e{+wg2HZ*@jPb zlw9>nBk(fC#!izw0s@TLkB58dKr&Sw@3mKWkJs2WFi0JbxxC-qZqSjVwW;tbE9DvZ zln#kB`H`UZ&tm9;Mj|lH=GOm>6Gm-?jjHmoWQfshRI3c13no~duVkmG`z9AYejpX3K?)e4%pMCLL7;Q$4?PpZji_u zIVt=c4PTtflh7ywjpLajmc;vzKTvLm+K7?QwYq7-RqT1rbBN}}y}`v5=ZjaVqrvFj z+={(_IJ_)0iDT>PhRnmkKa<$gJMKi>7t@#v2G<+5vj_hI<>#XwCBp2;?_U7F2lg=V zN&ZJDM1gz69LMNx>`Y<4}CBL9m1Z2?#C^r z>UdwutN!s-D!x~oGc6NcIEuQ6gYc_K2zeNsm+MTO1)fKa3VYMjpx;CXSH({vIwILH zS`KdX)_uGF%-JD8qmML~b-0lA&X+BdDlU{HlPb<@wv2SMjMbn4U%?rFNGo9 zml^}4*>FbL`S8nu0CJhjCXguTf!9aV*Z(mD!%K#HtK((ZQ#7GwGtW(kZumb8eRZq} z$lTl$c2q~<{lpZ9RQe!vm0M1&y*3BFcXVHep0XfBEK~cz`8FImRYcKNw+UwrNyK&k z(V}ONv#tO4^QQBtZ8Qy>wnti}>^2;%a$lJESML|0kz zzFzen2d1U_c_&{JpjPgRGN+?|!2j1pl8>1CVWwV6oPhW7Rkneb9~$hze`;5+T@alH z%_ND5vUbbu2A&~^gi)i zFN^PnU@FBMVf^^#RKGb0XydttmF_D2iyp}Pd$W9Xk^p^cF{{_KUWH(h(rNkleb8po zWipc^L8p&(4l*$&;9i?Ue+=he2)#3%)g`3-veFMSAKHO+-d4NSmR8(T zEPW6sD1lZ5zRDUmY{BWD_sVs;KESm*UffQYbb%<>{UPvxG!Ax42(EMycpSP4;R-KI-b_Y%0Ly0mhaPQ&$K;uGAB zcs@B}$sCM5%zZ-pBkEC6aMJ65S)5=C5&P8Zcj;8 zY{=2G`V_J7gf*}>d{y#QeiC%^_Y9YL|JAy0MJ zc8a%)@O>kU;C3V}TGJh0G_|8g0}B(sQgJ_|GwQfR{bwSywm7*_d5HvtcJhwPoW}bH zQrh0;7c?ky=(O?aw^2ApL}(^p$AqkwuO+_5o*r|$>lbqA>!Ci^qc+Et7d4P3`7eAW zLrrUU-xlYIp`Fi!-wo}0psmFvSG2(gK7`%L$>rDr>ehp;_a5aCEh6Tx^Y2OsEsyEN( z3g;1_D4tE8Z1YlZV2*i`sw9B=TF+DQ-(3U(6)Yh7nFoJ^mOcsNUeK@5BI%xa?B|e_ zhjHs>_}eeW-+g))-g@nAk-lL=fu@>@U+qdaa(yFnsOZqz8s1B0vas2@o zDcHkz4q~AFy0>sl`x0o6Ec@@iphVFRHlBW(AAs%LQ1O0?qsaOJ>yHcAyLKvTMOEc; z13Wfc(NM3z9u^Z623Vtu5f5a0p-O>+FqHd_Ztp7W!* zL6~oF;(!u4Prz0rah#*g05tM*HEX`P3rPyj^K<=qkjzUT9Z=7M#P{BijrQSvdTon* zYz+2@(D^Ce20#!AGzyxfI0YP2DT5H;lLwPfhbM@xsv%0Iv2HpQ_sVuV`cl`l@<5tQ%ns! zyIEq$9*^Hk^$|KcWn1v`xufTPDo_(msdXNb8L&vRIUQyZrtfS{{<=O_;%O|sN& z#N3fyhAT0v!)iH_TlR(`A&{P^1f$^Uz~)}!m9irnpL1r9cK%& z{Rwxh4YF9@J_QNcGlZUgV-WkxxoO@X?{_7#K1A;Cg85SOHJ{>1h++D*+@;tLd!BX{ zOZYx_^Tw*VHtsn-;=8KP`u7c#z8ksw-%=$wP*lDvy!H>S&#p|!xO6#N+;@AjTN*{>kq{cyL*Wz#Vg0D|fE{_=od3Mvs&&9%O9* zhxlh-H=;hcQEAK*d>9KDBph?^ib*T0(WpaZxMhdP43vY^>sK{vkD1~}&zT2Pu^ z3eWzm&IdkjhRv;Wg$CLbX#X_t&|QT>7`4kT*|g9DU6r>~qS;ws#o2T`;p8qX|Enhb z%FBhA!_PIeYyATf<+LodxlM?aGuJ!Cy9Q~m;`knV9>t#dM{3tG$KIeO=}OK>IS7AK zc&T`I2<|h+NY?u>pquBUts{NO(R{f-y|~dd{3Cf-=8SWxBrCHMkzZGUE;Ht|LFN<~ zIxB6gwJihQF*-&XA4U13IasN4HD~_ZK z=+Q*I&G=v7UiN&PjX!q`4?f)e&#Dq8l8h|xdM`N$DsWVU4S zq|l8NeQbN)BO;Lpeoj&+{>iq(M~nKCR{C9VN>nwPurnO`M3pWX?qI~nSRIA5&IUB) zvRjIoOo0RYDdMG#Ubq-nc!Zeb7aVNgNUr-qgJQ&!W$18U>0C6SP4#jEEOnMLFc)5g zcS0N-ES0lB>M_Jn6T^k>iyQemI;1L)h+X*YI918~K zIDfAfl}*quiXH_DTGis;+w=Q<_6-MrU>8j}|~x^I-x_ zzx&p7NKjBn_S=8l$UR!a@nt(1%3%MLps_a(-oj}kst2#2f6VZjhaCqxef%+nJI)z0 zsLKZKI4*)gvC`)irz~*(_tDSnK|lN&pL*7+z6nR3i|)E^^+NB2wwFs-7dTbEx!8dF zBfE5&Wh)*0NLj<$u7@`eq6%&$W57T3pHe-;yF-a$I)_3^Pc{MZ7|dmH$HK`vBN{gX zoU47daomuO0bLOieQtd*5n?YXaEQhCz_LTP8pUY^#OG=?L5J@unfuN-RpfA3t7 z6Gma3bFhKETqJtoNda;ATxk8k$K zZ0r*vWPPH`@TAjGG(>%FL- z{aeX@`XShZN^!2`w|1&HO6nzBi2gAOAMG<=R#r4Zj^wxaBMTge{X|hzZqORknW}kO zm2Civ*@+hoG^~j2O5gW$erd2 z4pj>#Muq~ctz0z0Aj&8!9P~06R*@HV!Y2l#@Biny8cQ_^I}s92nU{JgVfdEJO zizR~ZMAQq7V(DX52 z-s>VqrWvco?lC3MxXW47hB@oIS~0y#u?O(r`X`@|0zNc%`?QSE4`zl&YF3snNaj8<$?@ z(;&vW+gze7HQ+3_>n2Zvd6rZh?wtq15IeNrdyjArYK@BA7G#(ajsAqPU*0P?OE~jf zU0E9SzNr*tJtYYQPjt1&@&2r`z+bsktq3L(3#GAW8%FjH<&CI1z`yg|GCb^sur}|5 zVw)l;opN~aR(%C@8q|Jln-ieMOBZ}@JYYoUqxS1g;`!uZ@TKx%7Tot=$VjysVL;?5 zvb1%KeLy_%$ku+L0;+Z|HC-rv1*Zt=R32roVLylK1{){t(M<33Uw%e`Y<_(tQRJjW zV?#28JNBHYWZz+vJ$3^wYzyKqe;IsS}n)wHHFt%80vO$9V;G`wS0;F_kZ?uAk zMvWGE8~Qa>|0G7fukUEe(PPhjfP0{{`Y%wspg^ea766nYWOd;ag2?*9AHvK|3Y7ck zg|4e@CG2oiEKJY+gNO1jXN6i!VX)%UDzOkP3if^X-JR*-33f#jAIXtiRMr{R#w`88Fvh)Du;+^F$53xs%zQgy~CpPrJHof6D z7c+Vq=fZE^CV*s*vp8qCZ$b|9j=AwS26Q_jHAOX(2u*7AaX4a5>pCaxnl0-*z7I^5 z$eC3_MV#@QH~Hg0y2J0frac4w86rpi_|?ON4)y)rka1XOW+yaUmPh6^VWB}Jhfubr z*t>a91jp~+J9I1MMm(vlbVUyrz^RX*(W7hu+Czm$j*pU}joby|o$bC*5tmMW`|(wR2u;H5G@I8g;?xd%4pZcbY-_NNdT2TNs{@D z&Y>SOanYZ(7|;vRE&E%kL(nI5>id;D?;uB@iE822M+kpoi+CJ~W`{>+?y+Z0i_)%n@WFfiRF&4P(1n6auq6w!e_-WuVGASQcqc{1FlF%M)R)Y z`IBY2vlh85(tT#$?cjv_XuCrUHtBpQwDZFHQ#)d$?t8%Fo!9}-*n+Bv&NYG+t2~dz zb0*Xha3HZby#;iS3mLah)k5MknOrso2ITk3Q|GM{9ojz2s~YP@glxYySxC{cpytP? zyca=uq@B_;9h!g z{Jo@Yl^(Ep6j<7Xy*2seNk+UsOF)F1v-*+a7!Y(y(=vpMAo1B-CU5YbcOlV6y}Y~} z7DLraJ}BXPbTP|nV+Hn=uyNT91k}Of|I%N0o}odnjk5-S*M0?$NK?lol^qD2mB~7d zdle(8mNz+0&qIL7rvJtGX1E-1*>yDOCmeHhc{rF`0&IjFzoXn4(VtnP8;A${qj_eS zVzzcb(NezJoze$nwYU6hZec&G2C*#V4>r`t?c8|$&mquTGQ8vMJ&t)ZoTthNegjV# zXpN)}<2;sa-w`?*+!B16z%Z^W$jU-Pvu{=W?Bi6znUy@o+<7{SakpB@bCne z{UlvWuUjDO{c^Kz_X|AO^lTVu)ixwV2ba7jsvDT5C1Tu^=PKsp4!^D{T1|sgUdcUT7RU2Og~l^h zlQ{p=SRQ!J=@&c|`;*fBPXH-Ks`x*8Y64-q^3O^s$k6!t9xX=9t!-SqpBTWm4N-n$ zt_R98z-rlPwjGVDOWZD8_+&`Ocl&vGzD3~c+QG)GT!g=(qdlShue>* zJ#pSVUX|J!?*X~v3*@qeNf5y+k%F5~I-p^~Q%5=IH>4>l-f+G85$_F)=T)XzQ5`>> z*o96eoKJL}E;3w)z&VuwHcu|}+0yAr?>6QM&D!pX4|Rat$SZwg3uYvjR~0n4&WFrb z|5llBGNWMwF=n5z@@wUzo0akd-1q$1Yyg$vVUwzRfFB%1?>V)Ao8@*NkxJjgAu>A=rhj z*qaZU3Hrgh0I^39V?H{Od3e4Io(m7n<@L*Iz~&ONWhf#?LU%&VmWA%Y;WYef9H|#0S7rCKZv%b&pK*3qo#jEyEhYD@cvG#${@)GV8Y zfBu@FS2ywU8Yul)Ac$)sKp30nbn+bLJxSg8G53cCDK8JGmnGnP+?{hGZG4!AEz#&f zM12G$#jqF3 z$``boKsYWJh?YoDYE|rd;Vmr)la>wVe>wxmceF<2;|dt0A8w|oQlga?vK7YM`1jY) z$~3L`3w?&W7894mP`DSV{f^Z#SZV8jB%|j+VGdpS-3gt#zy6!hQbNk&oRV z@YA^VvIXX$CfnCO7x)guW|GIVey)R>BLj0g?%7H4{rlClB7!zc+B(wjU`}wl@a%fi zQDozI?3HifAXFZIZRURa2j1HW5faKBPx^da+R&sj(rn8Q{1cHvD*M=Pa>lq;Wwa}QopY`!4P6w zet2KoScEfNUO&>}@E+&$A?*g{aT@AICe`4*mg3+c>n-0ykTCc-N|lHEoExNFk8vMy zEH?5zuf+`X5b}?W^wfek>3PWo`X+O~H}E_V~`OU=ZUpsJM9E z3TB&b7i+|Kf?Vb{sf95=G7u+=zu!9wzg7bRGRK5uWgbNQwDuL&uOPT}}0KSWUh* z>2ZV!g(YO7iLqArE&kzZXdDxIpdVK{kof_=MU%J7Mki%!9xuGBf(&{e*(V`O}g9#9jiJxIxodgNC6ACF7RX}OxsYbj`ibVgL zBizi7g%<8ZV|UDXI+dmIa4d-w*&9ZY^Vm#7%7gi6--B$ZH7iKe4xmKq?-c%Zj6H#1 zbx*A=QxdeDv7RrVy9Jev?|)3AcTjIg^=F8C30?_`nO@o@M)w)tCnn>(@};I$#jBmk zP-A-%+);8 zy)zadg$}vu&2MfMfo0HDp;n$Fh<%K$p2KDbRE|ca(dk?V;zCc-`&^4ack=4RdrG@t zD%F0bw?qr{TpcLLaGzb){9z1j@*K=R)q5Jjxd$o~R=@8Pa-v25;v~E`DzVw(xNp;Y*Al)hbEy!fX7W&a0e=RX4?g^F z>V@z*`^ZBpnZYm~^gyxYaC(Oj{m0z8FdV)PQuZ6dyD<^aGN`7~MTY0S_m4T>$DU%A zgBbhX3O=+c3G_0Vn{d^5Id~^*8|sdBTCU^w4DrdAk8H>=XOEpLB>64@(z;Jin!biZM$rIwBJ{0h!fxR5Fu^I^XNOE*FfWBA!*dxrna&2-?@XMt@brs@=8fV4OIBVvv-Pu*x{~qmcsn3tjT@JcV zbeb6@Wy-uuY!E?NGNUcg-hFV;_IAsK(EzmljD!rTFrT}xE9WyUC5o>7s(Xr>5ly|N z@$x;%kKATcB7EoZ{nwB@=a}UHNN#c1Z=NT|?~}`3qM>e}7?8KeT7&1>mzWybcoxA( z&@KaabktcnAR3;HIBGOvzu&o_{e*Ui82kpG* zb0tT{?KB2-&Ou*`Uu6%xL_#)nZX87qcW4`mu}@X;s!gk6;2S8`JR?eQa|D#;x}3T4 zxR95a@7UGZVo2N#rV`R%L~CM?loJ#70F_-#Abj@*Qby*KbR#-JmRmYMO|cMqG0;pe z7JD+!?wAbi4Fk(GKVEdEL*v5lb!}Pf1+?wUNm=*^5fw_BKkH{e+FB<&bVm?n*{7Pn zm!U+ZR3SQTy&|Z(()pPDxDd*3Vw*UlF$EEQx{T=r%@8%3O_v)!3RyRK?R{+4L9g@r zPQtexc%0&)Z%0IesscNhD{v3~h2)4#trrIhddm5j5_3|#zu(=V!JZAy)Q%AW{VK@g zn~<@#Jzu@rHXsr}jnvEcc+`CE6v z!M-x)a{eROis(#p)4U4;PEr=8=`859d{$$G-XR3MOgZ?WI|D?DPaFl(nUD})Z*`?{ zF8KW`(tl6Oi8_7mygG9}1(upUTi7vgLqL3YnJ)|XuTB+5fBr&_bT9IlZD4d0^28aU1w0pb66yW4O;-gP4=aO;@cD6i?N8B)=RVY);`P+7)_`vw8lML+XGh|l za{gH6E_~_T$~d)^0CRtBMSnC+0U~peST@aq2b6BKrAE_m{enr}Cpe;GrbCSA z+V8p49NmN<+71TyoKj#Rk!AkHA&FX9Y450=Aw!@2xtnWweZW8T>D3#!Z++4+eTsaS z2{G`C$4F7&`PW&Q^Qw{-P`W!yuhp6k)Q*g%Z*hJ}`sMhE#=Ly!ym@@m;cOj*(bukp z(wD*b*CkU2;;-uWZ?C3{qzeL*#=9RTEI{7@<1o^Puh+PG|H?Fpl zPetv}=|!f0lAj!n^rtl0n1~>^$I+xg#hmCS;cDn-QUYW~II6kU#*JLQ*Dts^;@pU1 z*{2Ur#(_CQ*deiu5@}Pk5v4M-AilFX3r(UdNI+}i(@g^GD_MTvTEAEil}b4uUNx+O zcAr$xJLm7vH6*uaEF^#|yYn4$>L;Lc<7sY5LMKdC^JiH`BmvX4ukHNuEsz(w zbYlUUiNmJ({J7BVC(YUxH~gS~@D}Uczii0j^<8PcbONMCEYcaa7>{GZI|WoX=V7TU zgwO6DCn9n2`S}Q~fvMS@)~#+?q;b@@LId|_j&{mXpI9eEk|ROl(s<`&Q&|cO4zX zh-Tr7=8j&379pEQm*1zrfDhtlwjl%QR1&gen z$zcIBF-l0Vx>gNe{MY2q>R-zR=}BrLE&6K_KdL+(#*vC zgPB3;*ojw5FsY-F$$xYKa!kK`%lnCYL7gv}s>#Js`^Qj8ZZ{!RDWtG>=F|=_Tbq0A z-eE`7`u#z1<)ff7?9Fh(w+*h|WjgrM{tsx5*j(?uJqFPwSK8wXf5B;=AaTEc9-t{2 z<~OuSj+W+qO9 zYhTj!-%c+0CkWBrA$5ehXY7KSRsvun5HHUjyav9p?#&|z^Kv^@6B)i%Kr(T)`Q`)z za!!l2Nc3F>c*nA*CpXzG6Rt@fhVhhv#M-rHaZtbI2!@mMv*M#-v zYLy7{pKH4Pl9vK7KjbF)2i_oKIL;M) z@ZHW3ia!cEREd9qmNg=}Yg;tI@;xZ4lsZk#9x+4>2uYA>*!bRt7^ zX0ul}{eD2wL5E=9$|SS|&C313UhWs9q`FpORF#UIj;18?s_F-??e0?X=?V_ ziDXAxs-{;=D5^nkQ~mSk5EUw_I{V`8+azd8sP`M$`2*$C5(a1RT%FEJ^e|b57`dEl z$#%e82|{hnP271{`D1}yFYnlv5b3}PBz9I-OD7Xg)?A%k(UNFm0Nmbl42h= zj-gz@7MoLcaFHWT8lM|_4*LyEf-9gWUzzjl!~k5Ic%9xy z!;OYthc8Ov_ZRFuCcP6QjxKU{lh%Gbgr#pbJ{#u3h|Bn|^}QYZ{w;8@*QKw6xjP)4 z3_MZTYZ@Ms;Kq&^-X8nP`I303SFn8OLN^ArFBI?BuLgkQ@24kMjRQb2-Zc1( z#9z2%-+7gTg$-$Mu?pR;U53HB1&Mg|?;w%07H~Fu6MSccI2+n1Q0V6~bpDtld2?5} z;ZuD%tW7xBiRKa`vxfh6H%~I7xlMNyLJ#bLi6H!CC$$SQiA|ThM5)o3%5Jf++D~vg z|NZC7;cjpfOFrBiCqk!wTvz`w?*h}Sku0M;JSatgAimjT5;i?HK3@#b`*88lua?H&8S--CoIH zk9qnr)mqy|V#rY6-ghi#6Y?^Y{MQ4yky4uM3m?2U8}45 z-+Q$V87e;Zrd1 z{V63Z;s0||&yXkho>e(eU__|b3VGl3>|ej3LcDFHi$zPN5Gs6LD|NgLmR{^;-9KTkSFvt2HPWZGoEsQZCT0&>CBT0ClFXY7a z;!zGHO(aP)@Qna-(+8@zNvp6}Mj9N5J>?JPC2!~9zVU|bVz1dKA(DF}^e;}J0j%Aw zr=-7^MpDUj;xg*dpztxi#Dhc-QBIO@hw%-=LwZa7YHK{_<7;o+!h9>aek~>M!mpsL zNbpdTO$yQd7*7%JehUFZ>TG)_sZn-=z3+!Z3UsG~VVqiK7D6nmHolJG`RXk8OLpH z#~%?w5>^D6a!Aj3jJfGVZ;0;aJot^hr8>dd`e)E$%=VfX^&uE* z&n85j<3V{luVPRZDLP)3;4$)r5$U!hXk1z4Mm6EGu2L=i5S%R^q|X=#$E15R?aOcv zyIz6y#6THHRHZexzg>gi@~(NW50xPOB2$zk63@Ya1QuV+k3at326NIo8%@5 zDRL+G`<69_{eii2Q`gTHf}zrh?6|aI5UjT|9kKraTSP}TD6#{Ai<_aQvqTgv3MX?V zV9r^n9c`x~6AAi{p}oGWe;&T?-cekBk_{&$q+`;^|G*FqxoQ@5fy_DS0(Msd^q&}w zwjP-{I(pH=^8?;b*tzld{q5vO#I#vDh~+&bX6W%;pQAu#cP@DZ*D)Y(rs!zGEqdSV21yMhX)cAMd_aIDQYIQrC2xZK>37+ZUM2xnz&%U>} z!yEe02Bwb(aQZ&)_&z=_JsJK<$J&E?&(GN8JKYAL;bcn#2?ahAQT!>f{A~~unibhzaVn1X_AWvCAx!m?sNb;m+dT-?>NU}$F z{*%Q#Ue4Onj}#b@Mcf@81Im9Oe85{`#7u_VM+iF3*I+L|!cDo_L|Ww5p-Pc`;vsx2 zc=lZA+aMj=}}yu2!G-$Rd^gYbzGQ`4qeW&pLJJeMdmM$6<>S1 z4!OC%tsFisKx783qv9(!c>MJ(Pmtgy$Yx*t_l|`GJ!&GoBBY>2K_PU!mpzQJ0Ov(6l_bSY@}SZ1=S#E1D-c#L zuj@{{4|=2zIW3-Hu1bOOY_<|1a#JRx*wpz4##w!flDlMx{mJWRgqX7+cj@JsUc5hN zNx$Xrk+KkYQ8T)i>jbZfZ}0|MV18Hb>AfemJ1~`VvW8Sm0F60cbN-5XkP|iwk$=5^ zVQz&^7N-g;BA58F5>L#CmS1~Ct+N>d4Pj04QxnXEFIzd46VHs4b$bYDx{u7LSlU;eLNKmP-@Fwk>zcAn8o;HyB7Ob5<6)Z0P2K9S% zCOy}f5ygjo>aDxjAGTvIehzUXitum-171^**^awNgmbYgOnx5Uj4R-HtPrmxTLBnR zI{y(c;zSPjyNg?M>S3e(;?WIPE~MnN-p`2lj0N}Wa^GdpBAa;`&b?UL_H@$o%%!0Ypswqr12|1BWX6DhrxB(7gNHo=tcPn)$f>EDM4l%yJi< z$M2bjBH7rNUP~}-^~}RNjvwb%^n#Dt>_Yhbv#%F5_MzJ(@YM`!HyjN=CM8$D3v!{Q zjJX#vr=953Di6**$=|D}lJ!0SN9Is-cZqorCl1@XdP)pgyR<)umdl4^X}WX?!pI7DC4(<1ihSy!w|4Y5 z1hdhXkMpbnEg^m2GXl(M8H#Rg`}7aqw!-zv!5LWB3D8)b;73nPJ7lbdI{>j?uIH}f zLSHg0m`|E{Ll;rsh_&W4oGH$h?DEAPr}nZN3~iclD%Je?<%ioaq;+T4if9Vf!#Ul< zaW7eko@|z;iwvEM`g)p+A2#lLy_`X=rRQ#Gazi$Bs^~SD-ILTD$uf6^i(L zug+GD4gDubwyFG>9C`jX%~q>C2D*E>5mKSdh`Ny9i&dx-PW0B8bl%;7{M?y4QDmDi zd53l&k_q>rE%*N;V&Fz4)r4`fCwic}C%rTcKgVs4y@*iyTn7$=YSO)v*e_I@sPc%V z2wXTO*5&YicgG|*Za@O(VR?!uCZ+a(S^RWye3%!Q<|Ybx6%!+&B%!ov~c6fwuECGVULfn@i# z+)q?gNckrzoeSnUc*dDHBw?QN4P$mcsvk^fE$-bmO(-|&oF63{ynz4D<8Q6!S}~xu z2b2OMl6#Ppb15+Z_uVsr1J3woAjbNkLkP9&@cJKi45b`-^+G2ZYJcq4B4hBo8v= z(P~mj6(WKRpX}Y@3fTbOBr2zjRO|&wke7)`I|Mq#05zd{9@NaB6Z+939)_Jhk}|Z# z17TlWWy%dkH298I)7o7KNrinN_qOW*Jos$^_8QNb=X!Kc zeclJIql*I$m9&V#I%b*82j`QuS{7bV%OjK|ZyplBisFmPwOC&K0$GiPdV4x1a2Yx> z#~?(6jP+|>T5#TNh9zeF?>aX+7DW?qe2oyPHYjxI~EK`tj zlX`mj5k_2)T$sqhd0W#iDa-qqQ!qAGM((3Xiu6+dRr;=_!UyXsnlg4f@Z_4Y<~HtA zE0NJ2Ucw|Vc6RzJ^VKQyrd8!by}eAIB0?dw(oSwhyOr{A#!Y0Zv$Kc+)q)P zvZK+mi(!RFmO$4-ug~Dz7X0Pd5IKoGbd$9~l^&)7$Zb%}^lS+MT0F_8UyC_ne{u-V z_~HA0Zq`TR(<-E>2bKL-&7TJ#LF=-B^V^??O24sUzG(Ds(xXrRQli)1)glg7eUNdr zh2W;@88pPxb7o@r5Jr8!N7Q(9!H>#3VPrlJ(>1?YIld%;#|)>=f(Zwjmnn6cXTp2B z9=EQX_YA0+vUot7`T&@Xa(|V&&ER_!WwG?hSbSd@)PA)@h!mEd@_*#&f-$bk$E=bV zkr~gA{Z7FRP<5HOdG@~@Pe0^YP^?BwC?$r?mDyns;EP^W4^T+j_r08AL{TbzPS9nj$Lvf0`19ER} z=Rei#2fm_C<-cU_K&WKIS)b)KM6uOj^dbrBx=(TU^tpFX^5G4=3)?g#=uX7Azv%)T z4$au&*o3w1W2_~~fgr-Ke?+To7JBYW8nqnx4wyW^zQfIh;xAdu(ZVj?^BWAYCNm=U z@}(0;9^(AT^^JC+FT99?`yHBICPaM7f7PWhZ!iwM=u+P=1ZVpfx$Dz&z@}7Boq*39 z;}?~^a|7GKI$+^t{Ut_Z)xqHOosI%2c>mWx-R}v!=l)Fdb%-F7O===5oFB1`qNO?0 z5Cb6!i}?mYq)7RDXre352iKD-UXmW^h4%q3v0@DWnOVhvQLuUloFBedXpaO<;;*gjrs5CiSXCWz!?5*nPCR1@vyJYd8-%}pN zXvMIeNE-y_-K5XDEv4Y;oXwqzb6Y(Uc~u9MKVh|YfOc2l0Z>S3x~{|w!_eDs6CKR? z@vNfc?!7S#N$Vu6R;xYG8c*bnvS<)%mwenX!#3D|6)ZRF+JWcFGuhz>La02jq<2?% z9t;VRW%c`);3zHIrCQN7(AW$vr*hALRPwUDOLo|kYDjV=B%~9hq|{>DneArwcNBr(*g#7l1WY?Sga+1FBB2;SnPJ1LxO?UUlKQ;$-p( zySKPp^Hy^*j<&D`tcjTiNQW0-)>uWF!$J_XPPzF;NY2BezcT3+m1X-RK=HHoSz}<8|`zPjyDxNHS z>6y%ewqvBHULHG%D6Bknq>oagko{fVn|&Xk(`tjcQY8~Y{qi`1P4FIbMN+hJ`8N~} zd6-$Y9zeVf`7=_?_hX9)yFk>=g??6s{;}<+K!StQEtvwXpe8J!!Hn>^PQ!2DxOh3d zU(Ri+u%3eRoPDmQ^Se0LL3*ioV-jAO+<);Kq*X5tXE*uq7jPGY%gezmm0xR)8 zzS677d`CPHG>YCUR0v}3R}}vU{V!@{1KJ|o@uFy%r*nudZVqz##J!qNVy^$AsiT{C zALemC-c)^O59AhtL%$P$gYK?>Z+^0NLV%@QLbmn+aAlY&*h>upp(UGT={x~?&)D0+ z`DhFtO3Wc5?0Kmyq5jGjTn$?MkGn!@UqSm=W5fF48gQIYxb`eb0fnA5y6~2U3JrLT zI*()jft;Y`;`$)wQrvl7KwX#&cODP$ExXa9BynfMK(Zsq#``A0^XOx!vYuC6yPF6R zFI*5Rd`p2OHiMLI|xW@XG8H zU7AH0;xKzh)6xq1aSh)l&wm5PO^s>e2HXQLwbgd;>4f29YRb|XCBW%QsHbr&7_!jg ztMk|S(Te3NZ?obA#B-;eNf=^48oA8_ep&cDu6=_`@aG`-7XRl>S&z@#91)~059ks4 zQ+NHnS_cr*4^8}z?t!8s=ZoJ;W3KO4gCmR{_3*Idbennt0UB}EF`yuuhxdifov&|B zLMDCL$@n8g=)KIkc6Ko-G96SfVXq&D3v*}GfX2pbz=(Hau zvap~^&PBq(AHi_?kN)G=8+-6}aZ%{dj}Wa;^=U;l;d}4;$E#WD)F?mKsB-iw3%d64 z$8e<+jL~zt#k5`M{`?-UqkKps zdTr=HF${h0A2n@ht$|0JnAVwq+n_3t6;gupkE+`Y)>f~G&@gM~mty8Jco_b;KY)xK zDI`_L83a+FsPf;-(_G{5HH_P%cd!S>s$xIY>)?C!al!MKC*t7H$B0=Z`%Kc zIdfkD$90`W9x{9{xnXmZU4;`3EG8!T-yesPz)+PgNlx@@m3u^ya~4iIMZYf-;6P_% z^+eL-Sdk@b*x>Cb0<=yWs}|F|4kR}s?@c?(AoWFpT~5rCKEaT)uW@u1lD3rJsD?;XlR(A21_E=@NFwEGjhGBOF&&x&^MxGRe!T zn=rVS!)o!Yf@Q=j2P0Az>9F=B^`l8Zd^WJ1l(d>J8z+Y3gIh_v` zci$~v3Bz8+yH@NUu?OiX=t?E(;T+e+ox~K}-+U4p*>T8I4Xoi8Bn9k}L3Fd?pH0eX zR9W)3k$ou&`V9k?R*BLe_O;Ql?@JkUjV;?zEjAH8JX0bN2=NAAyRSzUvaz?IR*K;O z=Q2_r-YaNvUxj)T&Dh$}GLU7qI+tu83nE*7&fIEC5RvHUWh5~HH2ht*{M8%a9!J4R zb^JRB2dWmPd*WO`9c5^LPghMu{uMRJQ@N0p(%l)&EI4PhQy3LC2&Il@ZrIVq$lMS>J zw=pMF=gjFd_J@#Sd`;;s=AiFM|5D13pMkqQq<<^%+@gj4mh{Mt{j~Wfzy5IQ5P!E@XtiNAt6-0vKzG2CGe_{G%674MR8+jdk$euf00qV@*`{!)J zK>q8DA>s58NJJ1tli9>T*Su`3%kM4t$nd*oYLx(qM6WfBq@=)BzC78TdhGRhqQ>W& z(~jR?^;@*XJ9v)nT*}d$0t|cA3(cP%gThiuNd*f7n%Cp1^u(M8GpCqd$GRDqruR^& zt{uevY4LfDLv|!#e3L}n4*O3H#%LlH4dB6>kkJd_0zg_*v)qs8`q6ZbG7Ax#ptoxG zu%vka)`c2sWE05{)t$A{>X(d2;mND1mr-fhC-G4$osAS-Z^*8kXOlsXf09;4JYz&T zOXIzAmiT0BcV)|ZIu{DtXraxN61w22?`y4eod2VDe!=FS83V(ksarP!_|QQ%UuW8*TDYd}c9eZh0BI$3 zrLM}x!1c)N?$;<6icaykDjMSFm!R)Q9UlDNGt;FeuC9W#6_)Ydmv>=^Y=?!&mJscj zU43*b#tkl&++;G~;y@>!edcj3BtV+Q#QFLxqR7B^=_zAkrYL{y#dnxsbZSalIYs2h1ax-(Qs8_(bjLb%~C@`S(kxWR*H5=3T)%T6&#$8D z9ko5c#T9paUmNHA+x!LjehZ*ash`p)28N(Hb}S|^F%R-z`ro0zz0#u#e~&hcGofvQ zzd7mxzuL=lc32ui(bH-u*z0G|)K0k??Qn z9}F`~bG+&G1;uIk!1>-hcp5~>m+)jB=QfB}6dSO=?}U@Ju4g!83yS|&RY`!Zjx&-1 z_MoQUymGht*cf~iTk#{pd!BO_$;Myae1v%tM^NWx%16SF8KA3q?qBZcB5Vdb z8p<}d0QdO^O*BvDVCKb+Gkj-6-OZbwBxOfX>d_^mW$FP4wGDhn=PHc;+q%|nEZzbu zQK!|vrA0!!1L28Beg)uqEPl@qa~1Xe^QPKWrAF)>j#0;mJ_03Tdy&B>iHyCS#4YRF z;2F!Ct(|cW^e^{(z@@F}4t}(V5%iiGk zjbmXa-{nJ~;>Y8+qG%9dQKkIy76Ez~l3SQ*A%G+f{_Q9*a-;LKE77&jH{tJF)#%h5 zDzu+-!nI^)5~ibK|{mcE2-QkTCa+jn`mUIrR;>;qYe$#NzKf*N4A{tTomW zS>N-)wf@acm}U_C;QLAFuJI0@Iyu}(IhF-Qb0tZN1@n+?e6E00W*#V(#uaux_JMuz zvQh^HIeHttZ>FF83xw*-hWmS@QBIhkzf;N zvGU*}5Q4caNqb|RI2RYVrf27cJ@N%t>zE`73DDm0W`nWo*jK-Aqc|)x2jLrSH{K=o zgDMx@uV*VXXtuJvO7vUD|JwV`fGC!2-GL!WkPHeah>0NPh_Xt>jEIT}1E?sVBoP%< z5Cz460Wph+U_wbMNK&c^qJSbu4w5AblH&lcdZs;l-}CM{=e~R2pZCt5A2!ZZS9h&i zwbr-3s#*n0T2(4n<_n-7N2_lwvy(yBW{cqz4?StibtD^tVCIMA%NI;(gZ4dw&u`3-Mha$Uii47d;EDIUIiFsafrIz- zJ&(64pzTt7c8+Qu0PRj^gR;+K(K&P@v`MHKHa9&K&Kva#!Y2;z4G*sb50QJ}Q4^|Q z!>$U>m1VjRA(`>fX>mE|msKuUR(cm2zS(Q{7K@;mu+-ffN&d(d?K!Rv6Xj8zr;MrL zGk)~lRyo#iK@nuBuWhvU!kWfw$vHINv+891wNd^2Rh$6z(MVEu&od#m0=ji6f7;jhHaMCPFtJ>k zVBaMf^}R+Pp+Pi8 zr1m5~($R@d7Qd4Q(fg9~?%f=XoHFy*Q40i6yL>cBXCjDn&hqW_CvmX-gD0uo=MTcN z#cMqxM)d%?6rtF-q7Xjb@H=^bLMJrjqk9@BFsNu|khw5&ZuJP`a}w(ofNlN7wnLX% z;H9xzu7SS-YBO1aoV4VSdUX%w`(yxw-=D;jHjYFkb860hgwvotIQQcVz1y&}a@-dk zf{UN+i1E)5?1mi`R-R8&<h=CTx;@~Deb%6bFq-F2G-g2?$H zO@aQ?3xC2ahp=ZXa(nclHAtpD{nIjPbK}#)%b5(x8NRRu@UgW&Vu>5`2%5@}K|6_|3dN%z2;AeYlo8Rt0MMAqNrl9)wSoH0=l^4Xm7JK$$zTU zS;*37p;=Aa8s1$qh5g2xB`%Z=Ll(y>$ygwSZcV3P^ zKy~id*@Jx$;G6h-S(F|K?$ip=&nEdBhxk=5UmK53X`4SOyHb%W z-_%gQk3h9@Q39~qraaiYHUP$rIWKeXcs4lMS6mML+5;1>Zcf>_a2;J)6{WAcV1Z-a|x%N~-) zWOE2PwXjpl(d8j5iC!}01ZOoUS&_4Q^IypoMIFr`c%2tuQ`IYDLmIZZyLRyz( z@ewF`>G;+5ckFCy|vdn#OXn{aia!C}I$8%7M0d8GpR ze9tU$ezu+Or;!HaoX)g!FE81Y%|#woH}VcrpCGg)+H~WH@8B?XwvqoHlILuLM%=UQ z+DOXdxK2(%8{EC2ZyHVZDMbez$zO1qje<|NJ@H;T3l)o8zcjDyDR?j1GEnwb5t-b% zZE7gQk0h>ct+44G0x!+ozpx}Z_xV78hR+)rB;vH@*_eqcNV~+n(0FVxI7~V6WIb6w zRJBFhyeXmJg+NK2EzMNZqkeM5#6<|9EC(MQp`gfA`{fXmp7pjXP z`?;zqi{|FT%)_|c5$ZrDw4-*tgcZ){gPt1l=;=vf$SqUsYwd@ z`IXFw$6!uAXp>jTR?-?LK!f8)Bvl`G}MA6I4`IU%7Tz5ycJ3<*zkrg79iV zU$&tRI^}4aDf_Y-d^J2EGA0%_$^QrlAp6PQobV{i|2ZB#+?MgKRk_!jFgSUSiCHWms)d%(nnn<9d*L8xMEw91mgKzgv z@s>xsKHIQ0sypCISBI^EN+H<&y0~#mX8;Kezkb8B~rApI)yjrE)o5Ps;jtHNFetzHwcLi4U1s`!|> z%s$VTtSjAhvGr341P#4%+3LZ8^7oDlUDrsXkig3>Uk>@fxyLpc8FNOUyuy6_m(3Bd z*;#e@k%}K+HX~8&Veuq%rG1fn^X-24*fpydHSwc_tZuc9auTTJ@{N`@trGB<)V}@K z+H!b*^Rz5GI|)v=3ErtPCi|FAM$LY(z8j9rcJ+%O>vsJQpWg4aZ2~%(zv75yLqAxn z@a4Cp)&pMpOj>73JN#UDK5i@FHv=q+*G>DOfwUfPYLZRsgmYJX)%21_Al+tm>u`Gw z$hNgzt~LmVH>JLlx2s=*V@}ir(L8yS5S{6^pB({ZiHic0OUSwCk583^e^*26rmr|) z?@Z1E@|ty2KcfLO5?-iPr^6aZrQiPHG$BmVjIb@#Yz|hZ_MI(`sYRc}R>?6Q- zRDO;}jz;U&w}kK=R6)HK-{PZ|9VF*^k8ttSKMrqGEmT}`9>Yg`JI8k*$%7m-bE zIHdy`B3}7?V@n~0=CD!U1_nvqPzkw5AM0Uime($mxc9&b5l#;%R7LZZdawe?OLVt# za%SJJVX$&`Pke7*2AM;j4hpJQ!}#w3HdvB{dKxbXj(t@O)CaMkr~Pw~z?` zj@Ah4B56;V{BiB^fTSbN8=W2isOuV6P*M+~J2}lIqhwH7iGf4Y8h)gZDU?+sHUO(W zCbRC?kn=aT_Z~P?qlS9ALQPZRK7)10e)*SV|IYNFF-7r z#C@~m!sK#uDnQh+wZr4YbI6dADxKv$42J~I-cPvQ4d&51KhCWaMKcfBCkh`u1G7Ku zSRE|;4IC>@6#L8?fU}p4=S+w_3T{4zC-~w6Nj|umr&(vT5i0Q$d#0s|)+@*H-(0;8 z2x7Yo_erw{C4A_{VZ~$e{-yBDSK51e zNHg>tj?YXZc~%}#_XgtYo55;EH>dAS0W3G$;Zs7+L$K%Am`=H+f#j~An|*XdIdFnU z-BHw)K<#Zt`?_j0QFgV7oI6>cBGRv?qtLEM@>4`_7hc3dVVgQ#K60*u0B5Heo6LW{ z?fmFr`Jx0qP8eIEKa=oBSp`x)Z0@mMX(XweBxbdY zt5lQL-GJu2yGuHg;ZoNhl}Z_!xaDNCqok-LaQEZo%$;++;Y&8W{=T~RM)EKSsD|t2>4d=Rv>*d^*>O<5F!1^GOj#u8YI65Re+ZRj}JCwnAI@uK!}dE^@FUEZV-arzPNcRLkL|Z`&^Y~+CbUtk;WA%rEuJ0 zSx4W+Jh+fGywN_O8}3XsHW#dT1^%g4IjiKt;B=Gl%H*S?(I{ghiP1MXFw*k7iT0o} zx)5AyuL^GPDPs`pTZ$ns&YUa31P1yzsjIQONZA6 zzobyRi$K$4=Nt%jthc{w_7t|4SE|ZB`USfWYZ!&juLE~?oxaJAy)aVE{lgvsHT0%D zb*E*)NthMTWMEbj1ZBB~&7Z#6K}eBTjKf2ce==gt$*VE>upd^e#CMaBzsD0--FCLIPw0m>4#my=&amwPJIf=cM?2j!pCrO?!l7nmYqqta3@RH zrNJQqtS-8Ua&#i##wfm=j~1^XRn^+9J}v;(IUYMkozOxWUSfMTX3HaA$vUOjg+gfa zW))W<^==q-eY@1#`>tR*W6p*pN)_!wq8;^#-poz#rLb9!etOJ|(`qhq^8z!Uq%HIQJ6B6NLh(+f03{j*v zlH;J~D2+B|H&=ZjdXLyry(XN@DI@3$?7}(#DGhGu~ z3%P3rT0UrNpht6#Rb86)5>9pGD{9)zKtuS-x%s#SM4s2mj*y;?T6NR=8&;CMlFxte zS6+PtJNKnJU;11IK95Jw6ik;#u6z9SHj;TSh4r~FH;5#GRE7A0_w!_s_%bT;;hGY7 zDW{Tir;g+|*e}|&%&-z{Rbg?8pD5aR(B-RZ*DCt-W_aKLF)}9W=d`43tD7`B%5G z?>oZvz%f%UjwZPI*68CC%;v+V1p2pA38c5a$U$vnJ@7J-^(tEgkl8tV zJGTo3u=b|jsu`S8vTm(khC}iY`pdlX{Gug+)+`;rf2;sGN4R4D%KOuEV6S>)nZ8FU z2pcyqx%N;7MXyPp+8cj^Syh*fW_)3z)kSC0-dWay$%$QS zByT6e{Dd%gy#D`6ev~8(d5D^x)-A5h?YjS)e+idi=Up1*Fuj-0Q6)fEL9pTC&8C z%zxzzyFqRXm_I-Fv(79L+H+@@{gmZHjdFMRwPZ3qLY4lRrs?0Vmrp|R z{uZox5o&0Yam78s#V;U#0^hFT_p(T1oKD@vh_9eCd}YX!V@)vF4XrLe4z*vjqJ)d8FYh^y!=YQwK9O*;TT0y~V#nOq2o)9h3K9+BvDanf! zcR0U!A~`Q~-aEkqHLyv~;{B(Yb>Q<syuZMve;KS^gqjrIRYN0_oYv?l zWa(S$7&dVpDI?MDFA_Spnt<9PxiXaGkKNuoPJL600&*$zjddMA6E%;XJuY$t;r()c zJUyl%P39>!q3X+`NUMJ1iJ3pXgXgWsCf)mN(aWGrOmM^QC6n*{eF(`hMe3L6_KUz-{y;KS1&R=JCUmc0+w@u}2D|G>(9mlUHZV!gGBGu0lE5ktG&Xu85%|tj* zXM3~r4Os`IE_re|T^*fmtS!2iRs!>rSKmI>x&hR`>>jQ<%|Z`^L^d3^oD0J0%JDZ+ zM9`?K!bb1(NPHKyHQb)~tG0L{`N0u`@cu=cw(}wtWcyS2Y0t55;PbAnI)ltR&zr8# z-m9yIMkUCy-%(_}g}eIn@Z@F?@XkK+t27gyA7dSvn;Zxt>`R=}k5tjCOJ_!O>!ib` zl#mAF8j3JmD6}-wOA7ZKZiQDhG!lyRZ zT`$T0r$x^mOCPi=0Dkiiu`yfQ;r3piROPc||9Q*#zSU%ZY1n$VT|xDH$Vel+K8UOv zy7b62%W`KX{BW#Ua5bKdj4t>m1Q<)BbCJ?r`hjU+KXP1DTI4=h6L*D8I3h55289w%(Aet7(*pX}>M;094;Pd)N7S_-M~{zB^2sjgyZo}+JH#0w|*?98{% zFJ>ZIXEQf{8p*S|eEdf30KF#IWR$x`c~2{x$c(F=N%Fs>RvlNh$gYO)dsjxpk9`6< zdE>PN3gpn*%i~wU&PX^U-egxL+77;NJ7V@NEPzXQv-E1C$Ud?w9}>Rmyn;(g%X(wT z{FwJ^J=Nq7*)SvHzJD!C9Yu*hwKZ|bgQCu~@Vj%_$SF1Glpf(FzUW?+i(^;99d~)N z*-yG5EmB@QiR|k_GGFcNY{zsnOChDEq-fnw04ff7;3tudWL9|`y?ug1UXyT3(YqNnozz?#{?cUG} zy9})Ry>nlIrqE!hg2{EbvgOsJ=9iCPEBo5{py$I7=NeKp!MO&i^Aw$qCH?}(c@tNf z%MO6*#KMhkn>3N$i_A%dF}1MWSmmpt3O|CmiaVW8G?R0}FPrDfizBc1ZJJBw%Agbz zDaT+-0rd2|Owqzy{cu)G(;Ks@fSstiZU60fFf3~1+blf;6-w=^x;`)p4fZ&O*A$8) z-)aG|l$RoCX}oQ~aL0Er58l2q$3q_3RJODA$-G8&$`JqKh3_Fr)nd-lhz{6n^~uFv zS02gN`Rpzu=hN7>C0V;p7eMj)Us5f}I=;YHW0fbV^n&$drD?kje4x0l^TJoMeqTFE zuIyP)2HYHVT2zeW5uVbzdx!Tpl4qp(aIdvr2<3p`C~-Xf z18DK*WOO#LP{DJZMFmd^;F^Hs(LS|DAd{DMC)Q2@eGs=h}9@+Cui#uUotE`0P>WV`bdpPvTNYdw6_!>;$roBwcmZXP-gnTw!o#aat=BT@w-C zHC_Zge9Lj4r(Xf?SBj-y`;dGuc4zc0(&NFvFlO-7EppE6WTVWMC1gK__fG}I2c3{S z^LFnZ{zzDwbh>?Og(oNvxqcHImkO~B)UftVEu@vwo_zXX16)y$`!d6yAGv*)t{+17 ztMi>H*nc@V7A84x_I0|;BFPno>$+@p(Ds@IB{g>PNPOw)N86lopde6mYW^h+37c2zYVTA)VnPBBo%VbKg(EEEtnb%h<6CFPm-n;5^*|uiDwPG>%$GMN$9)1D zJ@I!OvQPZp_@)eNQNmMfa}k*0egZ-TMJmv_aVYZRO0_YeKj3z3pVkf?S@bfvY)9vM zlE+~D%xKAUx9-eZ}CYk=ZCl83PDy<>8;C{nd_m$zwt3^rF(Hb0vYNY1?q zahQ>%hBUeq2jUlSU{m0flx$l;^mMJaW%+a^wBxd>nVWkn>=k%D%{Qt5OfEfLwWe1L zWhhQ%S?`rZSAL$+xLio~zg4NkTT(D6h95b& z_bM%jkVQVZ-W?`-;V?x!Va82U!VjLj+~w;18icAkH^^#9qUSboUa!Wrl04}Tj+%UK zfsRwD;_=z!+(=*TXw92RV3)3%kr2&+=!YqzEnS8|E`N=?$`dkf7A$xnMdk+=KRc!Q z{pd)Pk?VJ2B)=-kJn%GK=^B~uw;g-&NV92eJ-VL}Q^_IoVgE=sHfVy8+B}%U^6T zJr3u;xXyHMv;!}L$COfy5c>LY^2qzf0;t}2=R<9*hW2Jmz5XUh8hs2twtauNBwA4% zT6_Fh4{S2dayqf831oWpW4xxYP>lRFyBO*x>~i*=={|;nNwOB-+~%!^DbYEr4kTBD z!7bB#)eJTCc3`W*1Y>!$TIPARr28}2s;%zy`om|)cJ)*0dOidndS_n@O00%WO9tbG z1{-0a&X`Yep}k-a`x^yZ2ci7TNk@6IuGljt#JSO10;%5)IvMRCjCStdZ}&A!8r7Gl zpE7MMCV9)-zuSang7!LtA9G{AgZImQ6Krm>_x-`Fva`?O!H`Kx;&NG}kd_=_5!weM=f-?#$!vq6aV?uh z{2;h$xlhviC6Z`Nx`x<}q)Pq7UB-*N%oia4v~^a;ngo%#sW1Pq2Fbrx-{&!q)&oax zTIHV{9RZhqHY?Wd3j#ao%`5? z!_C=I;LgdPp`UvO?ys8AF)36D^%wiP+|ZOnV?*5<&Msx6&i0t~lcb7a-N}>c6a9MO zmC9gGsA3+dAJ?r_=q2kS)VuRc)=Q$Ij61nS=}B1>w zAPep-(c7r-lFT34$z88})&aZp122@Wl}6ItE>BmJcE1}_GJF3+k_TPdBD!8Y8Eob} z9$|4<5b;l&CvH8<9jM3p@+IVa?;?eX6@}!y0NEEYZA^)O2#5dh{8N@Vaa;(WyP3c}M~MTK|c1BY78h>-*Z+ zrqw~pi-tV!+KI`2ouHR?$jvai0UWm$ z6-;hwg~q@U?ut((kWq1RQC#aYur85kZ=IP5k0x*1#V_;*vb;Z!S6ng#VFozhsz2Fp z-0;+@1qYS3L`s z>gR)df!~yW)%S`8dXsa$-@QXCyVbI)rtIj5ouM|l->+=j$C z@Am)vG61jq1;@N2^Mb1vSHAizRso)4SO47J7fa4FGWl_BOfW?H9n8qP&H>b~5*OnBrS$uYzpnpQ68Km8!5Yca50QT>sr=R0-xAnpw9bH!#n1ZP|CBKA z7e1zd+6YEJ#`3=SZAYllyzhUPt7rZ%qRRXJcm4k^S1Fbhx2fig9L$-9i?dd8|Kekb zvE+!95AU^haG2uc;;@fbU=$x8_fGn5o-BDi@msFk|1q62f?Gz6SB@#b$Kv$}AE}4_ zsB!=O&YnaU|C`i7gf9L1t=T;!X)W_yqDaG_8_j{&VmN*M> z|Kwu{aoc0TH058lgR53dJH$v0zvZ=3iT4yG{@+iS{QHmp(v_#be1Fs5R*8R4{rfKo z>z@?5cbER8L2SfTv4NN@czR>QYRxCPaNSw{!WN%GaxPNg$Fr`bFgsu^yLeUw=*WbR zYa@AX#(7FD5m6`Sigq8`Jyx+6B&~AX=SYxq^@?Yal8w;6<`%Z-Yl7DIJ!L1z`L4B7 zw+&tY@e5jvzf0ydx03aJSNtpL+n^>%U-xHqJCvXJMM`!6_x9pW$ZMtxc0txtKHJe* z-H>7SnlmAz2U3;xdQVU7g~V)Gl|_kt@cv@T%a!l?A!g|jJ(K7Gctc8&q7W99Z+b9v z5Q6Qz8jq4V0M&^yM@CVU+rx$mg%0{*u6768K93e@Wmk3H<*k z0dbZZ7w7S@1X(``nmS@${rczkq`&+PcK-%PSu8cP z0RAPv=@oI7G520tPI5#t7S^`ptyrvoh<_Pe{=44)aAgD`PVWCRt`;Zt9=6)e4H5pg z_xlI+snIV%K7Yg;BCLr-61#1zE$#MMuxNZuKbx+P_YNYg<%xbO2juKXPrxHEBN40GSV z;xSf^<>7v&YUZxLF8?kPSh;L5cVKR18vNT%O#VAQ;^=OhBm2mR{jKLK|Azwlt*_Jq zp8lCL_5CppCI1xnGd7fz`B&qFTN|UylBE0}_5IIzgps5^nvdYhfDy#s^9Y@c0sMXa z@AC-P)OeB!P-H~Iz5HQ6{`))v-N(P>KW!fGDcAmHxF`SlasTq~zvmI=jp5bzFK_&- zz<(kE5$eq)ahKR%!qh&+QSFZ9!jw|bgo8R?g{chP88tr=geliJ{hbfPgsExE*W_>Y z7pAJSx2%)7B23-dY4It;RhU}Y;IR0ttuQsj7W{^M1IDd(y06wAbfDed@A*KQ98QDw{XMAtV7QP;jzo*7XhL@nLbGLW1uM0Gdx zlNyDn=SPHF=DZN1w)4qZw%!$@BrmH~1YZ!M5|yTG+v_4k9ezCjn~Jp%HIe&*LR3-w zhLo!-g{Vs_%oeShCq(Jz9DK_^S%_-eML$`H3TpHuRSHp?kNT)j?GdCz`Tg(J*9uba zF29fs%on8WMn!vXPZgxppCk*)zZIl%r)9ZiJ`tqOy({hUx+zG_=Qdc7`kB*3-cXS8 zH{;(MX(33hZ;~vvH4&r)jwx@NWFSb9hh|pH6r`-L%vy0zLy%G#y_ni4D@bKNSvy~X zEl8c7Zu&a4U4WYPe!sSRl>k+@l5U9rbvO5vYDb~~Wylqv05#lnXXO4z0@SNxPtK3^ z5uhyCulb7H1t`U<3CFKH2vBLGGdk9o3s5JY7T5?H3s6((ZUX_T>U}F|u>f^r)nLK& zu>#ZzTFjCHRKK}G`r{!s74mZ&5jC4K<8}y}k`Y)qJNpZpBEk#1_?}I1n-R*Uw4Ut_ z81!RPr88*Buqp0iPqL{ctG&duY}iz1p08*1b~eQ=wuViaHisPDtjDHkts1G#rm#S& zRoZAa<;d+|HZ@+Q+;m|-KUMIoiAa#2qO~Qwh@V=-Eyz!`u9hY_;`ph+eASqe=ls;B zJzCRm-r=W2h!z-~=cnRamTHJN^Ha8h#(s&G{FIu{4*3&X_$i_UMAH1!S+2tHQ}bq> zaep?EpK8Qc`pgyhsRwKBJB}9Or;ND|=A-CdyZnQXifW<0FVEwntd4)#%=*Ab=a(blF~XXvx-9Ant3K0JhJ=~!ra$j%|f1}Nc{UDxeZzaIDZV*49tJ59C+~FxPh%KYu6mM(hU>*<1!CW;D;ov(1 zLlLhpaqyrFZD=@{t1hcK_|sxqK{=SV5^ka#%oTh60Pgj=Ni5d@CPr;t!LtFJ{PrU$ zIe_WW`hNcazWk$a!nEZBxPwDiIDogx>5Nbi9KZ?M%Q)w2`mqMrK=tGErpGGmg8FgG zAzHEf@x}|mDJFaRaZErGsj(lAA=c!)axa$S4v1dN9aizZxGYPAh^7}C z)T?(&9q+|l_1xBrM=F{WcF*g@PP(?~)=Is&Xc=v}dN6Ps+=CxG(Qnv;M|fvnpM9$b z+j9+K56+EalOf-O7jOqs4}RD%o0!}lOgdw&Q%5&GpkxJg-@5VFskG(l#Q5f1=x+bYBjPObItv)E_^eGHl$scs|KN6*ql26yYPomwB_o; z^eA6#*oCjr=102=cbR=WIZdn!Z>PoF*oi567^in)dbC{#?!=d9v7GP3+~Hu=iHYzu zt5$U4c)A&rIx(&FpM*N`Iqtyiz)eK^LO*n1<9&E0}F zOj}{)(QWvVA#J%@u`t)*w_+RagIn=8(rb0MTk%|C4NZ@=Vqye|B`I#camLWRy-B(~MQP4f=^|?Azz|-T#Rrh<7hH{fSS~ zW^~j~Y(PfKi^3)>#dY*exO5xs7@F{7;>C8zH(`h9^+%TEHsXa`!__!@;n(BITnAB) zTkBsE%TiW%6L8!E6G*ML^wdU}{zR$$tj^-ZY2tVzVYq?O}q+zu

hm5=>jChS?>!kZ#7C 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�-Kq7cZzKXb@!SYs4wHobE4x1%yn~MhLYlX6| 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

IZ-ENc{aEj+PU4>E(9|x3^8^AgFf4Yrw8z6(D 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

cJINUTuiJk@&+N+e8wNeN4$ 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 diff --git a/docs/docs/tutorials/tutorial2_nanoparticles.ipynb b/docs/docs/tutorials/tutorial2_nanoparticles.ipynb index a763567c..8f4312a1 100644 --- a/docs/docs/tutorials/tutorial2_nanoparticles.ipynb +++ b/docs/docs/tutorials/tutorial2_nanoparticles.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "bca91d3c", "metadata": {}, "outputs": [], @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "4fbb90da", "metadata": {}, "outputs": [], diff --git a/pixi.lock b/pixi.lock index fe533b93..11627bd0 100644 --- a/pixi.lock +++ b/pixi.lock @@ -84,11 +84,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda @@ -106,7 +106,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -132,7 +132,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -161,7 +161,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -172,15 +172,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -192,7 +192,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -222,16 +222,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -248,7 +248,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -256,8 +256,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -271,7 +271,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/fe/ad0ecbe2393cb690a4b3100a8fea47ecfdb49f6e06f40cf2f626635adc0c/scipp-26.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -286,7 +286,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -364,11 +364,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda @@ -384,7 +384,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -412,7 +412,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -441,7 +441,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl @@ -452,15 +452,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -472,7 +472,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl @@ -502,16 +502,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -528,7 +528,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -536,8 +536,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -551,7 +551,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -566,7 +566,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -635,10 +635,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda @@ -652,7 +652,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -677,7 +677,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -712,7 +712,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl @@ -723,14 +723,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -742,7 +742,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl @@ -772,16 +772,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -798,7 +798,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -806,8 +806,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -821,7 +821,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1f/28/3f8aa247d29d010547d52207395cb057ebd0a40b88f64bc1dbac9e17a729/scipp-26.3.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -836,7 +836,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -926,11 +926,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda @@ -949,7 +949,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -975,7 +975,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1004,7 +1004,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1015,15 +1015,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/59/a32a241d861cf180853a11c8e5a67641cb1b2af13c3a5ccce83ec07e2c9f/chardet-7.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1035,7 +1035,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -1065,16 +1065,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1091,7 +1091,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1099,8 +1099,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/a3/09d929a40e6727274b0b500ad06e1b3f35d4f4665ae1c8ba65acbb17e9b5/pydantic_core-2.46.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1114,7 +1114,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1129,7 +1129,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1207,10 +1207,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda @@ -1226,7 +1226,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -1254,7 +1254,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1283,7 +1283,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl @@ -1294,15 +1294,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9c/2f/4c5af01fd1a7506a1d5375403d68925eac70289229492db5aa68b58103d8/chardet-7.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1314,7 +1314,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl @@ -1344,16 +1344,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1370,7 +1370,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1378,8 +1378,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/61/bcffaa52894489ff89e5e1cdde67429914bf083c0db7296bef153020f786/pydantic_core-2.46.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1393,7 +1393,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1408,7 +1408,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1477,9 +1477,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda @@ -1493,7 +1493,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -1518,7 +1518,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1553,7 +1553,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl @@ -1564,14 +1564,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/32/60/fca69c534602a7ced04280c952a246ad1edde2a6ca3a164f65d32ac41fe7/chardet-7.4.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1583,7 +1583,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl @@ -1613,16 +1613,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1639,7 +1639,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1647,8 +1647,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/22/05/8a1fcf8181be4c7a9cfc34e5fbf2d9c3866edc9dfd3c48d5401806e0a523/pydantic_core-2.46.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1662,7 +1662,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1677,7 +1677,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1767,7 +1767,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda @@ -1789,7 +1789,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -1815,7 +1815,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1844,7 +1844,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1855,15 +1855,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1875,7 +1875,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -1905,16 +1905,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1939,8 +1939,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1969,7 +1969,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -2047,7 +2047,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda @@ -2067,7 +2067,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -2095,7 +2095,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -2124,7 +2124,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl @@ -2135,15 +2135,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -2155,7 +2155,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl @@ -2185,16 +2185,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -2219,8 +2219,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -2249,7 +2249,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -2318,7 +2318,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda @@ -2335,7 +2335,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -2360,7 +2360,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -2395,7 +2395,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl @@ -2406,14 +2406,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -2425,7 +2425,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl @@ -2455,16 +2455,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -2489,8 +2489,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -2519,7 +2519,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -3119,25 +3119,26 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 335782 timestamp: 1764018443683 -- pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl name: build - version: 1.4.2 - sha256: 7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 + version: 1.4.3 + sha256: 1bc22b19b383303de8f2c8554c9a32894a58d3f185fe3756b0b20d255bee9a38 requires_dist: - packaging>=24.0 - pyproject-hooks - colorama ; os_name == 'nt' - importlib-metadata>=4.6 ; python_full_version < '3.10.2' - tomli>=1.1.0 ; python_full_version < '3.11' + - keyring ; extra == 'keyring' - uv>=0.1.18 ; extra == 'uv' - virtualenv>=20.11 ; python_full_version < '3.10' and extra == 'virtualenv' - virtualenv>=20.17 ; python_full_version >= '3.10' and python_full_version < '3.14' and extra == 'virtualenv' - virtualenv>=20.31 ; python_full_version >= '3.14' and extra == 'virtualenv' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl name: bumps - version: 1.0.3 - sha256: 4f503c814b9ddd2cda760b2e35aaa6285651434fc2e64ccac55b1a666bca17f6 + version: 1.0.4 + sha256: 78b8cfaf9fbcbf2fd77f6d4a2f8c906b0e03a794804ba6caf64d56d6f6cce4d4 requires_dist: - numpy - scipy @@ -3151,7 +3152,7 @@ packages: - plotly - mpld3 - msgpack - - graphlib-backport ; python_full_version < '3.9' + - uncertainties - build ; extra == 'dev' - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' @@ -3161,7 +3162,7 @@ packages: - setuptools ; extra == 'dev' - sphinx ; extra == 'dev' - versioningit ; extra == 'dev' - requires_python: '>=3.9' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -3263,7 +3264,7 @@ packages: - python >=3.10 license: ISC purls: - - pkg:pypi/certifi?source=hash-mapping + - pkg:pypi/certifi?source=compressed-mapping size: 151445 timestamp: 1772001170301 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda @@ -3367,35 +3368,35 @@ packages: version: 3.5.0 sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/32/60/fca69c534602a7ced04280c952a246ad1edde2a6ca3a164f65d32ac41fe7/chardet-7.4.3-cp312-cp312-win_amd64.whl name: chardet - version: 7.4.1 - sha256: b726b0b2684d29cd08f602bb4266334386c58741ff34c9e2f6cdf97ad604e235 + version: 7.4.3 + sha256: 4b2799bd58e7245cfa8d4ab2e8ad1d76a5c3a5b1f32318eb6acca4c69a3e7101 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl name: chardet - version: 7.4.1 - sha256: 277ce1174ea054415a3c2ad5f51aa089a96dda16999de56e4ac1bc366d0d535e + version: 7.4.3 + sha256: acc46d1b8b7d5783216afe15db56d1c179b9a40e5a1558bc13164c4fd20674c4 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/9c/2f/4c5af01fd1a7506a1d5375403d68925eac70289229492db5aa68b58103d8/chardet-7.4.3-cp312-cp312-macosx_11_0_arm64.whl name: chardet - version: 7.4.1 - sha256: 5d86402a506631af2fb36e3d1c72021477b228fb0dcdb44400b9b681f14b14c0 + version: 7.4.3 + sha256: 29af5999f654e8729d251f1724a62b538b1262d9292cccaefddf8a02aae1ef6a requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl name: chardet - version: 7.4.1 - sha256: fcaed03cefa53f62346091ef92da7a6f44bae6830a6f4c6b097a70cdc31b1199 + version: 7.4.3 + sha256: b95c934b9ad59e2ba8abb9be49df70d3ad1b0d95d864b9fdb7588d4fa8bd921c requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.1 - sha256: 3d66d2949754ad924865a47e81857a0792dc8edc651094285116b6df2e218445 + version: 7.4.3 + sha256: 6e3bd9f936e04bae89c254262af08d9e5b98f805175ba1e29d454e6cba3107b7 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/e5/59/a32a241d861cf180853a11c8e5a67641cb1b2af13c3a5ccce83ec07e2c9f/chardet-7.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.1 - sha256: be39708b300a80a9f78ef8f81018e2e9c6274a71c0823a4d6e493c72f7b3d2a2 + version: 7.4.3 + sha256: 9a4904dd5f071b7a7d7f50b4a67a86db3c902d243bf31708f1d5cde2f68239cb requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 @@ -3598,30 +3599,10 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - name: copier - version: 9.14.1 - sha256: cec88ca48b653fc251660e7787bca893ede719d265f3e50281f4d54badb404b5 - requires_dist: - - colorama>=0.4.6 - - dunamai>=1.7.0 - - funcy>=1.17 - - jinja2-ansible-filters>=1.3.1 - - jinja2>=3.1.5 - - packaging>=23.0 - - pathspec>=0.9.0 - - platformdirs>=4.3.6 - - plumbum>=1.6.9 - - pydantic>=2.4.2 - - pygments>=2.7.1 - - pyyaml>=5.3.1 - - questionary>=1.8.1 - - typing-extensions>=4.0.0,<5.0.0 ; python_full_version < '3.11' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl name: copier - version: 9.14.2 - sha256: f27e65944b33cf5ab62ca0da5bd76c450754dbd5269db567c501c29c6417f6a6 + version: 9.14.3 + sha256: b237bb8a7fba91fbe0580ee54292e7a4c915028f08389f1ee99332fb70d2cab1 requires_dist: - colorama>=0.4.6 - dunamai>=1.7.0 @@ -3888,8 +3869,8 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+devdirty8 - sha256: 23d0790d25938acbe8e96780e087d1b29916963a0f6b4d04b906012d906c5cfb + version: 0.4.0+devdirty20 + sha256: 03e3e912335d4cddf2e70179da113fb35cb4cad133450b3a9e8583aaf5927e6e requires_dist: - darkdetect - easyscience @@ -3997,10 +3978,10 @@ packages: - pkg:pypi/executing?source=hash-mapping size: 30753 timestamp: 1756729456476 -- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl name: filelock - version: 3.25.2 - sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 + version: 3.28.0 + sha256: de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: fonttools @@ -5464,42 +5445,42 @@ packages: purls: [] size: 603262 timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb - md5: c7c83eecbb72d88b940c249af56c8b17 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 113207 - timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e - md5: 009f0d956d7bfb00de86901d16e486c7 + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 depends: - __osx >=11.0 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 92242 - timestamp: 1768752982486 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 + md5: 8f83619ab1588b98dd99c90b0bfc5c6d depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 106169 - timestamp: 1768752763559 + size: 106486 + timestamp: 1775825663227 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -5607,18 +5588,6 @@ packages: purls: [] size: 276860 timestamp: 1772479407566 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 - md5: fd893f6a3002a635b5e50ceb9dd2c0f4 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 951405 - timestamp: 1772818874251 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda sha256: ec37c79f737933bbac965f5dc0f08ef2790247129a84bb3114fad4900adce401 md5: 810d83373448da85c3f673fbcb7ad3a3 @@ -5631,17 +5600,6 @@ packages: purls: [] size: 958864 timestamp: 1775753750179 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c - md5: f6233a3fddc35a2ec9f617f79d6f3d71 - depends: - - __osx >=11.0 - - icu >=78.2,<79.0a0 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 918420 - timestamp: 1772819478684 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda sha256: 1a9d1e3e18dbb0b87cff3b40c3e42703730d7ac7ee9b9322c2682196a81ba0c3 md5: 8423c008105df35485e184066cad4566 @@ -5652,17 +5610,6 @@ packages: purls: [] size: 920039 timestamp: 1775754485962 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 - md5: 8830689d537fda55f990620680934bb1 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: blessing - purls: [] - size: 1297302 - timestamp: 1772818899033 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 md5: 4152b5a8d2513fd7ae9fb9f221a5595d @@ -6106,13 +6053,13 @@ packages: version: 1.3.4 sha256: 70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307 requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl name: mike - version: 2.1.4 - sha256: 39933e992e155dd70f2297e749a0ed78d8fd7942bc33a3666195d177758a280e + version: 2.2.0 + sha256: e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040 requires_dist: - jinja2>=2.7 - - mkdocs>=1.0 + - mkdocs~=1.0 - pyparsing>=3.0 - pyyaml>=5.1 - pyyaml-env-tag @@ -6195,10 +6142,10 @@ packages: - platformdirs>=2.2.0 - pyyaml>=5.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl name: mkdocs-jupyter - version: 0.26.1 - sha256: 527242c2c8f1d30970764bbab752de41243e5703f458d8bc05336ec53828192e + version: 0.26.2 + sha256: 5c12f59b14d5cfb79e779c6134b9bb8476ec0544b22097ae2ad31a9ebfc1a693 requires_dist: - ipykernel>6.0.0,<8 - jupytext>1.13.8,<2 @@ -6251,10 +6198,10 @@ packages: requires_dist: - mkdocs requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl name: mkdocstrings - version: 1.0.3 - sha256: 0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046 + version: 1.0.4 + sha256: 63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b requires_dist: - jinja2>=3.1 - markdown>=3.6 @@ -6365,7 +6312,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/msgspec?source=compressed-mapping + - pkg:pypi/msgspec?source=hash-mapping size: 212340 timestamp: 1775697034631 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py314h6c2aa35_0.conda @@ -6755,18 +6702,17 @@ packages: - pkg:pypi/overrides?source=hash-mapping size: 30139 timestamp: 1734587755455 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 - md5: b76541e68fea4d511b1ac46a28dcd2c6 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + sha256: 171d977bc977fd80f2a05de3d4b7d571c4ec3cdea436ed364e5cd50547c50881 + md5: b8ae38639d323d808da535fb71e31be8 depends: - python >=3.8 - python license: Apache-2.0 - license_family: APACHE purls: - - pkg:pypi/packaging?source=hash-mapping - size: 72010 - timestamp: 1769093650580 + - pkg:pypi/packaging?source=compressed-mapping + size: 89360 + timestamp: 1776209387231 - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl name: paginate version: 0.5.7 @@ -7612,46 +7558,6 @@ packages: - xarray>=2024.5.0 ; extra == 'test' - anywidget>=0.9.0 ; extra == 'test' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - name: plotly - version: 6.6.0 - sha256: 8d6daf0f87412e0c0bfe72e809d615217ab57cc715899a1e5145135a7800d1d0 - requires_dist: - - narwhals>=1.15.1 - - packaging - - numpy ; extra == 'express' - - kaleido>=1.1.0 ; extra == 'kaleido' - - pytest ; extra == 'dev-core' - - requests ; extra == 'dev-core' - - ruff==0.11.12 ; extra == 'dev-core' - - plotly[dev-core] ; extra == 'dev-build' - - build ; extra == 'dev-build' - - jupyter ; extra == 'dev-build' - - plotly[dev-build] ; extra == 'dev-optional' - - plotly[kaleido] ; extra == 'dev-optional' - - anywidget ; extra == 'dev-optional' - - colorcet ; extra == 'dev-optional' - - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' - - geopandas ; extra == 'dev-optional' - - inflect ; extra == 'dev-optional' - - numpy ; extra == 'dev-optional' - - orjson ; extra == 'dev-optional' - - pandas ; extra == 'dev-optional' - - pdfrw ; extra == 'dev-optional' - - pillow ; extra == 'dev-optional' - - plotly-geo ; extra == 'dev-optional' - - polars[timezone] ; extra == 'dev-optional' - - pyarrow ; extra == 'dev-optional' - - pyshp ; extra == 'dev-optional' - - pytz ; extra == 'dev-optional' - - scikit-image ; extra == 'dev-optional' - - scipy ; extra == 'dev-optional' - - shapely ; extra == 'dev-optional' - - statsmodels ; extra == 'dev-optional' - - vaex ; python_full_version < '3.10' and extra == 'dev-optional' - - xarray ; extra == 'dev-optional' - - plotly[dev-optional] ; extra == 'dev' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl name: plotly version: 6.7.0 @@ -7952,57 +7858,57 @@ packages: - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 -- pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl name: pydantic - version: 2.12.5 - sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d + version: 2.13.1 + sha256: 9557ecc2806faaf6037f85b1fbd963d01e30511c48085f0d573650fdeaad378a requires_dist: - annotated-types>=0.6.0 - - pydantic-core==2.41.5 + - pydantic-core==2.46.1 - typing-extensions>=4.14.1 - typing-inspection>=0.4.2 - email-validator>=2.0.0 ; extra == 'email' - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/22/05/8a1fcf8181be4c7a9cfc34e5fbf2d9c3866edc9dfd3c48d5401806e0a523/pydantic_core-2.46.1-cp312-cp312-win_amd64.whl name: pydantic-core - version: 2.41.5 - sha256: eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c + version: 2.46.1 + sha256: aea4e22ed4c53f2774221435e39969a54d2e783f4aee902cdd6c8011415de893 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.41.5 - sha256: 8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf + version: 2.46.1 + sha256: b83ce9fede4bc4fb649281d9857f06d30198b8f70168f18b987518d713111572 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl name: pydantic-core - version: 2.41.5 - sha256: 22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 + version: 2.46.1 + sha256: 1706d270309ac7d071ffe393988c471363705feb3d009186e55d17786ada9622 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/a1/a3/09d929a40e6727274b0b500ad06e1b3f35d4f4665ae1c8ba65acbb17e9b5/pydantic_core-2.46.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.41.5 - sha256: 1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 + version: 2.46.1 + sha256: a641cb1e74b44c418adaf9f5f450670dbec53511f030d8cde8d8accb66edc363 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl name: pydantic-core - version: 2.41.5 - sha256: 1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 + version: 2.46.1 + sha256: 0e749679ca9f8a9d0bff95fb7f6b57bb53f2207fa42ffcc1ec86de7e0029ab89 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/fa/61/bcffaa52894489ff89e5e1cdde67429914bf083c0db7296bef153020f786/pydantic_core-2.46.1-cp312-cp312-macosx_11_0_arm64.whl name: pydantic-core - version: 2.41.5 - sha256: 070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 + version: 2.46.1 + sha256: daba6f5f5b986aa0682623a1a4f8d1ecb0ec00ce09cfa9ca71a3b742bc383e3a requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' @@ -8755,19 +8661,18 @@ packages: - pkg:pypi/requests?source=compressed-mapping size: 63712 timestamp: 1774894783063 -- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - sha256: 619962bf637f5cadf967adcec2c5ad1d408418b56830a701aec19e876e5197d0 - md5: bec7ce42bd4cc803e21c43e9b7fb8860 +- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + sha256: 3b45efeae771f1a20307b36ecdb3a8911a89c05382836b50c62b0a99d8d3dfd8 + md5: da94ff04d97ec5efc42cbe5da3c43a84 depends: - - python >=3.10 + - python >=3.11 - typing_extensions >=4.0,<5.0 - python license: BSD-2-Clause - license_family: BSD purls: - pkg:pypi/returns?source=hash-mapping - size: 100610 - timestamp: 1753812221549 + size: 100559 + timestamp: 1776176903101 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 md5: 36de09a8d3e5d5e6f4ee63af49e59706 @@ -8898,21 +8803,6 @@ packages: - pkg:pypi/rpds-py?source=hash-mapping size: 235780 timestamp: 1764543046065 -- pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - name: ruff - version: 0.15.9 - sha256: 45a70921b80e1c10cf0b734ef09421f71b5aa11d27404edc89d7e8a69505e43d - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - name: ruff - version: 0.15.9 - sha256: eaf05aad70ca5b5a0a4b0e080df3a6b699803916d88f006efd1f5b46302daab8 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ruff - version: 0.15.9 - sha256: 2b0c7c341f68adb01c488c3b7d4b49aa8ea97409eae6462d860a79cf55f431b6 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl name: ruff version: 0.15.10 @@ -9865,30 +9755,17 @@ packages: - mypy ; extra == 'test' - pretend ; extra == 'test' - pytest ; extra == 'test' -- pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - name: virtualenv - version: 21.2.0 - sha256: 1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f - requires_dist: - - distlib>=0.3.7,<1 - - filelock>=3.24.2,<4 ; python_full_version >= '3.10' - - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' - - importlib-metadata>=6.6 ; python_full_version < '3.8' - - platformdirs>=3.9.1,<5 - - python-discovery>=1 - - typing-extensions>=4.13.2 ; python_full_version < '3.11' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl name: virtualenv - version: 21.2.1 - sha256: bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 + version: 21.2.4 + sha256: 29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac requires_dist: - distlib>=0.3.7,<1 - filelock>=3.24.2,<4 ; python_full_version >= '3.10' - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' - importlib-metadata>=6.6 ; python_full_version < '3.8' - platformdirs>=3.9.1,<5 - - python-discovery>=1 + - python-discovery>=1.2.2 - typing-extensions>=4.13.2 ; python_full_version < '3.11' requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl @@ -10124,18 +10001,18 @@ packages: purls: [] size: 265665 timestamp: 1772476832995 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae - md5: 30cd29cb87d819caead4d55184c1d115 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca + md5: e1c36c6121a7c9c76f2f148f1e83b983 depends: - python >=3.10 - python license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=hash-mapping - size: 24194 - timestamp: 1764460141901 + - pkg:pypi/zipp?source=compressed-mapping + size: 24461 + timestamp: 1776131454755 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/pyproject.toml b/pyproject.toml index befd67f4..36950e9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -202,11 +202,11 @@ select = [ #'FURB', # https://docs.astral.sh/ruff/rules/#refurb-furb 'I', # https://docs.astral.sh/ruff/rules/#isort-i #'N', # https://docs.astral.sh/ruff/rules/#pep8-naming-n - #'NPY', # https://docs.astral.sh/ruff/rules/#numpy-specific-rules-npy + 'NPY', # https://docs.astral.sh/ruff/rules/#numpy-specific-rules-npy #'PGH', # https://docs.astral.sh/ruff/rules/#pygrep-hooks-pgh - #'PERF', # https://docs.astral.sh/ruff/rules/#perflint-perf - #'RUF', # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf - #'TRY', # https://docs.astral.sh/ruff/rules/#tryceratops-try + 'PERF', # https://docs.astral.sh/ruff/rules/#perflint-perf + 'RUF', # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf + #'TRY', # https://docs.astral.sh/ruff/rules/#tryceratops-try # overly restrictive 'UP', # https://docs.astral.sh/ruff/rules/#pyupgrade-up # pycodestyle (E, W) rules 'E', # https://docs.astral.sh/ruff/rules/#error-e @@ -215,40 +215,40 @@ select = [ #'PLC', # https://docs.astral.sh/ruff/rules/#convention-plc #'PLE', # https://docs.astral.sh/ruff/rules/#error-ple #'PLR', # https://docs.astral.sh/ruff/rules/#refactor-plr - #'PLW', # https://docs.astral.sh/ruff/rules/#warning-plw + #'PLW', # https://docs.astral.sh/ruff/rules/#warning-plw # Good to enable # flake8 rules - 'A', # https://docs.astral.sh/ruff/rules/#flake8-builtins-a - 'ANN', # https://docs.astral.sh/ruff/rules/#flake8-annotations-ann - 'ARG', # https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg - #'ASYNC', # https://docs.astral.sh/ruff/rules/#flake8-async-async - 'B', # https://docs.astral.sh/ruff/rules/#flake8-bugbear-b - #'BLE', # https://docs.astral.sh/ruff/rules/#flake8-blind-except-ble + 'A', # https://docs.astral.sh/ruff/rules/#flake8-builtins-a + 'ANN', # https://docs.astral.sh/ruff/rules/#flake8-annotations-ann + 'ARG', # https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg + 'ASYNC', # https://docs.astral.sh/ruff/rules/#flake8-async-async + 'B', # https://docs.astral.sh/ruff/rules/#flake8-bugbear-b + #'BLE', # https://docs.astral.sh/ruff/rules/#flake8-blind-except-ble # enable when base classes have been merged in 'C4', # https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4 'COM', # https://docs.astral.sh/ruff/rules/#flake8-commas-com - #'DTZ', # https://docs.astral.sh/ruff/rules/#flake8-datetimez-dtz - #'EM', # https://docs.astral.sh/ruff/rules/#flake8-errmsg-em + 'DTZ', # https://docs.astral.sh/ruff/rules/#flake8-datetimez-dtz + #'EM', # https://docs.astral.sh/ruff/rules/#flake8-errmsg-em # Unsure if I want it - requires all error messages to be rewritten 'FA', # https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa - #'FBT', # https://docs.astral.sh/ruff/rules/#flake8-boolean-trap-fbt - #'FIX', # https://docs.astral.sh/ruff/rules/#flake8-fixme-fix - #'G', # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g - #'ICN', # https://docs.astral.sh/ruff/rules/#flake8-import-conventions-icn - #'INP', # https://docs.astral.sh/ruff/rules/#flake8-no-pep420-inp - #'ISC', # https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc - #'LOG', # https://docs.astral.sh/ruff/rules/#flake8-logging-log - #'PIE', # https://docs.astral.sh/ruff/rules/#flake8-pie-pie - #'PT', # https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt - 'PTH', # https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth - #'PYI', # https://docs.astral.sh/ruff/rules/#flake8-pyi-pyi - 'RET', # https://docs.astral.sh/ruff/rules/#flake8-return-ret - #'RSE', # https://docs.astral.sh/ruff/rules/#flake8-raise-rse - 'S', # https://docs.astral.sh/ruff/rules/#flake8-bandit-s - 'SIM', # https://docs.astral.sh/ruff/rules/#flake8-simplify-sim - #'SLF', # https://docs.astral.sh/ruff/rules/#flake8-self-slf - #'SLOT', # https://docs.astral.sh/ruff/rules/#flake8-slots-slot - #'T20', # https://docs.astral.sh/ruff/rules/#flake8-print-t20 - 'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc - #'TD', # https://docs.astral.sh/ruff/rules/#flake8-todos-td - 'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid + #'FBT', # https://docs.astral.sh/ruff/rules/#flake8-boolean-trap-fbt # should eventually be enabled, but may break serialization + 'FIX', # https://docs.astral.sh/ruff/rules/#flake8-fixme-fix + 'G', # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g + 'ICN', # https://docs.astral.sh/ruff/rules/#flake8-import-conventions-icn + 'INP', # https://docs.astral.sh/ruff/rules/#flake8-no-pep420-inp + 'ISC', # https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc + 'LOG', # https://docs.astral.sh/ruff/rules/#flake8-logging-log + 'PIE', # https://docs.astral.sh/ruff/rules/#flake8-pie-pie + #'PT', # https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt # Should eventually be enabled, but quite a few errors to fix + 'PTH', # https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth + 'PYI', # https://docs.astral.sh/ruff/rules/#flake8-pyi-pyi + 'RET', # https://docs.astral.sh/ruff/rules/#flake8-return-ret + 'RSE', # https://docs.astral.sh/ruff/rules/#flake8-raise-rse + 'S', # https://docs.astral.sh/ruff/rules/#flake8-bandit-s + 'SIM', # https://docs.astral.sh/ruff/rules/#flake8-simplify-sim + 'SLF', # https://docs.astral.sh/ruff/rules/#flake8-self-slf + 'SLOT', # https://docs.astral.sh/ruff/rules/#flake8-slots-slot + 'T20', # https://docs.astral.sh/ruff/rules/#flake8-print-t20 + 'TC', # https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc + 'TD', # https://docs.astral.sh/ruff/rules/#flake8-todos-td + 'TID', # https://docs.astral.sh/ruff/rules/#flake8-tidy-imports-tid ] # Exceptions to the linting rules @@ -272,6 +272,7 @@ ignore = [ 'DOC', # https://docs.astral.sh/ruff/rules/#pydoclint-doc 'INP001', # https://docs.astral.sh/ruff/rules/implicit-namespace-package/ 'S101', # https://docs.astral.sh/ruff/rules/assert/ + 'SLF', # https://docs.astral.sh/ruff/rules/#flake8-self-slf # may want to eventually enable it, but accessing private methods is quite useful in tests ] 'docs/**' = [ 'INP001', # https://docs.astral.sh/ruff/rules/implicit-namespace-package/ diff --git a/src/easydynamics/analysis/analysis.py b/src/easydynamics/analysis/analysis.py index bb937e34..666edfd1 100644 --- a/src/easydynamics/analysis/analysis.py +++ b/src/easydynamics/analysis/analysis.py @@ -567,14 +567,18 @@ def _fit_all_Q_simultaneously(self) -> FitResults: ys = [] ws = [] - for analysis in self.analysis_list: - x, y, weight, _ = self.experiment._extract_x_y_weights_only_finite(analysis.Q_index) + for analysis1d in self.analysis_list: + x, y, weight, _ = self.experiment._extract_x_y_weights_only_finite( # noqa: SLF001 + analysis1d.Q_index + ) xs.append(x) ys.append(y) ws.append(weight) # Make sure the convolver is up to date for this Q index - analysis._convolver = analysis._create_convolver(energy=x) + analysis1d._convolver = analysis1d._create_convolver( # noqa: SLF001 + energy=x + ) mf = MultiFitter( fit_objects=self.analysis_list, @@ -655,10 +659,10 @@ def _create_components_dataset( energy = self.energy datasets = [ - analysis._create_components_dataset_single_Q( + analysis1d._create_components_dataset_single_Q( # noqa: SLF001 add_background=add_background, energy=energy ) - for analysis in self.analysis_list + for analysis1d in self.analysis_list ] return sc.concat(datasets, dim='Q') diff --git a/src/easydynamics/analysis/analysis1d.py b/src/easydynamics/analysis/analysis1d.py index 5c75c844..7a52c3d8 100644 --- a/src/easydynamics/analysis/analysis1d.py +++ b/src/easydynamics/analysis/analysis1d.py @@ -195,7 +195,7 @@ def fit(self) -> FitResults: fit_function=self.as_fit_function(), ) - x, y, weights, _ = self.experiment._extract_x_y_weights_only_finite( + x, y, weights, _ = self.experiment._extract_x_y_weights_only_finite( # noqa: SLF001 Q_index=self._require_Q_index() ) fit_result = fitter.fit(x=x, y=y, weights=weights) @@ -667,7 +667,6 @@ def _create_convolver( if resolution_components.is_empty: return None - # TODO: allow convolution options to be set. return Convolution( sample_components=sample_components, resolution_components=resolution_components, diff --git a/src/easydynamics/base_classes/__init__.py b/src/easydynamics/base_classes/__init__.py index cb15f1dd..96d2e045 100644 --- a/src/easydynamics/base_classes/__init__.py +++ b/src/easydynamics/base_classes/__init__.py @@ -5,6 +5,6 @@ from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase __all__ = [ - 'EasyDynamicsModelBase', 'EasyDynamicsBase', + 'EasyDynamicsModelBase', ] diff --git a/src/easydynamics/base_classes/easydynamics_modelbase.py b/src/easydynamics/base_classes/easydynamics_modelbase.py index abc167c9..bf266086 100644 --- a/src/easydynamics/base_classes/easydynamics_modelbase.py +++ b/src/easydynamics/base_classes/easydynamics_modelbase.py @@ -74,7 +74,7 @@ def unit(self, _unit_str: str) -> None: raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) @property def name(self) -> str | None: diff --git a/src/easydynamics/convolution/analytical_convolution.py b/src/easydynamics/convolution/analytical_convolution.py index 1162381e..ce4933b2 100644 --- a/src/easydynamics/convolution/analytical_convolution.py +++ b/src/easydynamics/convolution/analytical_convolution.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause +from typing import ClassVar + import numpy as np import scipp as sc from easyscience.variable import Parameter @@ -26,7 +28,7 @@ class AnalyticalConvolution(ConvolutionBase): # Mapping of supported component type pairs to convolution methods. # Delta functions are handled separately. - _CONVOLUTIONS = { + _CONVOLUTIONS: ClassVar[dict[str, object]] = { ('Gaussian', 'Gaussian'): '_convolute_gaussian_gaussian', ('Gaussian', 'Lorentzian'): '_convolute_gaussian_lorentzian', ('Gaussian', 'Voigt'): '_convolute_gaussian_voigt', diff --git a/src/easydynamics/convolution/convolution.py b/src/easydynamics/convolution/convolution.py index 449be1a3..0c49be4d 100644 --- a/src/easydynamics/convolution/convolution.py +++ b/src/easydynamics/convolution/convolution.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause +from typing import ClassVar + import numpy as np import scipp as sc from easyscience.variable import Parameter @@ -33,7 +35,7 @@ class Convolution(NumericalConvolutionBase): # When these attributes are changed, the convolution plan # needs to be rebuilt - _invalidate_plan_on_change = { + _invalidate_plan_on_change: ClassVar[dict[str, object]] = { 'energy', '_energy', '_energy_grid', @@ -239,11 +241,10 @@ def _build_convolution_plan(self) -> None: # If temperature is not set, check if all # resolution components can be convolved analytically with # this sample component - pair_is_analytic = [] - for resolution_component in self._resolution_components.components: - pair_is_analytic.append( - self._check_if_pair_is_analytic(sample_component, resolution_component) - ) + pair_is_analytic = [ + self._check_if_pair_is_analytic(sample_component, resolution_component) + for resolution_component in self._resolution_components.components + ] # If all resolution components can be convolved analytically # with this sample component, add it to analytical # sample model. If not, it goes to numerical sample model. diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index d6bdc1ca..818579ac 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -66,13 +66,13 @@ def __init__( The factor by which to extend the input data range before convolution. temperature : Parameter | Numeric | None, default=None The temperature to use for detailed balance correction. - temperature_unit : str | sc.Unit, default='K' + temperature_unit : str | sc.Unit, default="K" The unit of the temperature parameter. - unit : str | sc.Unit, default='meV' + unit : str | sc.Unit, default="meV" The unit of the energy. normalize_detailed_balance : bool, default=True Whether to normalize the detailed balance correction. - display_name : str | None, default='MyConvolution' + display_name : str | None, default="MyConvolution" Display name of the model. unique_name : str | None, default=None Unique name of the model. If None, a unique name will be generated. @@ -440,8 +440,8 @@ def __repr__(self) -> str: return ( f'{self.__class__.__name__}(' f'energy=array of shape {self.energy.values.shape},\n ' - f'sample_components={repr(self.sample_components)}, \n' - f'resolution_components={repr(self.resolution_components)},\n ' + f'sample_components={self.sample_components!r}, \n' + f'resolution_components={self.resolution_components!r},\n ' f'unit={self.unit}, ' f'upsample_factor={self.upsample_factor}, ' f'extension_factor={self.extension_factor}, ' diff --git a/src/easydynamics/sample_model/__init__.py b/src/easydynamics/sample_model/__init__.py index f52c44bd..6f75bafd 100644 --- a/src/easydynamics/sample_model/__init__.py +++ b/src/easydynamics/sample_model/__init__.py @@ -21,18 +21,18 @@ from easydynamics.sample_model.sample_model import SampleModel __all__ = [ + 'BackgroundModel', + 'BrownianTranslationalDiffusion', 'ComponentCollection', + 'DampedHarmonicOscillator', + 'DeltaFunction', + 'Exponential', + 'ExpressionComponent', 'Gaussian', + 'InstrumentModel', 'Lorentzian', - 'Voigt', - 'DeltaFunction', - 'DampedHarmonicOscillator', 'Polynomial', - 'Exponential', - 'BrownianTranslationalDiffusion', - 'SampleModel', 'ResolutionModel', - 'BackgroundModel', - 'InstrumentModel', - 'ExpressionComponent', + 'SampleModel', + 'Voigt', ] diff --git a/src/easydynamics/sample_model/component_collection.py b/src/easydynamics/sample_model/component_collection.py index fd5b5ebd..f5f1a45a 100644 --- a/src/easydynamics/sample_model/component_collection.py +++ b/src/easydynamics/sample_model/component_collection.py @@ -173,7 +173,7 @@ def unit(self, _unit_str: str) -> None: raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) def convert_unit(self, unit: str | sc.Unit) -> None: """ diff --git a/src/easydynamics/sample_model/components/__init__.py b/src/easydynamics/sample_model/components/__init__.py index 747dc594..940f41a7 100644 --- a/src/easydynamics/sample_model/components/__init__.py +++ b/src/easydynamics/sample_model/components/__init__.py @@ -13,12 +13,12 @@ from easydynamics.sample_model.components.voigt import Voigt __all__ = [ - 'Gaussian', - 'Lorentzian', - 'Voigt', - 'DeltaFunction', 'DampedHarmonicOscillator', - 'Polynomial', + 'DeltaFunction', 'Exponential', 'ExpressionComponent', + 'Gaussian', + 'Lorentzian', + 'Polynomial', + 'Voigt', ] diff --git a/src/easydynamics/sample_model/components/expression_component.py b/src/easydynamics/sample_model/components/expression_component.py index d87c0e07..79ce73ef 100644 --- a/src/easydynamics/sample_model/components/expression_component.py +++ b/src/easydynamics/sample_model/components/expression_component.py @@ -4,6 +4,7 @@ from __future__ import annotations from typing import TYPE_CHECKING +from typing import ClassVar import sympy as sp from easyscience.variable import Parameter @@ -29,7 +30,7 @@ class ExpressionComponent(ModelComponent): # ------------------------- # Allowed symbolic functions # ------------------------- - _ALLOWED_FUNCS = { + _ALLOWED_FUNCS: ClassVar[dict[str, object]] = { # Exponentials & logs 'exp': sp.exp, 'log': sp.log, @@ -62,12 +63,12 @@ class ExpressionComponent(ModelComponent): # ------------------------- # Allowed constants # ------------------------- - _ALLOWED_CONSTANTS = { + _ALLOWED_CONSTANTS: ClassVar[dict[str, object]] = { 'pi': sp.pi, 'E': sp.E, } - _RESERVED_NAMES = {'x'} + _RESERVED_NAMES: ClassVar[dict[str, object]] = {'x'} def __init__( self, diff --git a/src/easydynamics/sample_model/components/model_component.py b/src/easydynamics/sample_model/components/model_component.py index 33235025..6d0f9a0e 100644 --- a/src/easydynamics/sample_model/components/model_component.py +++ b/src/easydynamics/sample_model/components/model_component.py @@ -28,7 +28,7 @@ def __init__( Parameters ---------- - unit : str | sc.Unit, default="meV" + unit : str | sc.Unit, default='meV' The unit of the model component. display_name : str | None, default=None A human-readable name for the component. @@ -71,7 +71,7 @@ def unit(self, _unit_str: str) -> None: raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) def fix_all_parameters(self) -> None: """Fix all parameters in the model component.""" @@ -122,7 +122,7 @@ def _prepare_x_for_evaluate( f'Found {ncoords} coordinates: {coord_names}.' ) # get the coordinate, it's a sc.Variable - coord_name, coord_obj = next(iter(coords.items())) + _, coord_obj = next(iter(coords.items())) x = coord_obj if isinstance(x, sc.Variable): # Need to check if the units are consistent, @@ -214,7 +214,6 @@ def evaluate(self, x: Numeric | list | np.ndarray | sc.Variable | sc.DataArray) np.ndarray Evaluated function values. """ - pass def __repr__(self) -> str: """ diff --git a/src/easydynamics/sample_model/instrument_model.py b/src/easydynamics/sample_model/instrument_model.py index 00cf2544..6468cd3b 100644 --- a/src/easydynamics/sample_model/instrument_model.py +++ b/src/easydynamics/sample_model/instrument_model.py @@ -259,7 +259,7 @@ def unit(self, _unit_str: str) -> None: raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) @property def energy_offset(self) -> Parameter: diff --git a/src/easydynamics/sample_model/model_base.py b/src/easydynamics/sample_model/model_base.py index 7949f217..e76d4370 100644 --- a/src/easydynamics/sample_model/model_base.py +++ b/src/easydynamics/sample_model/model_base.py @@ -172,7 +172,7 @@ def unit(self, _unit_str: str) -> None: raise AttributeError( f'Unit is read-only. Use convert_unit to change the unit between allowed types ' f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) @property def components(self) -> list[ModelComponent]: diff --git a/src/easydynamics/sample_model/sample_model.py b/src/easydynamics/sample_model/sample_model.py index e1ec6b05..b89829ad 100644 --- a/src/easydynamics/sample_model/sample_model.py +++ b/src/easydynamics/sample_model/sample_model.py @@ -302,7 +302,7 @@ def temperature_unit(self, _value: str | sc.Unit) -> None: raise AttributeError( f'Temperature_unit is read-only. Use convert_temperature_unit to change the unit between allowed types ' # noqa: E501 f'or create a new {self.__class__.__name__} with the desired unit.' - ) # noqa: E501 + ) def convert_temperature_unit(self, unit: str | sc.Unit) -> None: """ @@ -439,8 +439,6 @@ def _generate_component_collections(self) -> None: Generate ComponentCollections from the DiffusionModels for each Q and add the components from self._components. """ - # TODO regenerate automatically if Q, diffusion models - # or components have changed super()._generate_component_collections() if self._Q is None: diff --git a/src/easydynamics/utils/detailed_balance.py b/src/easydynamics/utils/detailed_balance.py index 796afaff..6ee9e19f 100644 --- a/src/easydynamics/utils/detailed_balance.py +++ b/src/easydynamics/utils/detailed_balance.py @@ -23,8 +23,8 @@ def detailed_balance_factor( - energy: int | float | list | np.ndarray | sc.Variable, - temperature: int | float | sc.Variable | Parameter, + energy: float | list | np.ndarray | sc.Variable, + temperature: float | sc.Variable | Parameter, energy_unit: str | sc.Unit = 'meV', temperature_unit: str | sc.Unit = 'K', divide_by_temperature: bool = True, @@ -37,9 +37,9 @@ def detailed_balance_factor( Parameters ---------- - energy : int | float | list | np.ndarray | sc.Variable + energy : float | list | np.ndarray | sc.Variable The energy transfer. If number, assumed to be in meV unless energy_unit is set. - temperature : int | float | sc.Variable | Parameter + temperature : float | sc.Variable | Parameter The temperature. If number, assumed to be in K unless temperature_unit is set. energy_unit : str | sc.Unit, default='meV' Unit for energy if energy is given as a number or list. @@ -179,7 +179,7 @@ def detailed_balance_factor( def _convert_to_scipp_variable( - value: int | float | list | np.ndarray | Parameter | sc.Variable, + value: float | list | np.ndarray | Parameter | sc.Variable, name: str, unit: str | None = None, ) -> sc.Variable: @@ -188,7 +188,7 @@ def _convert_to_scipp_variable( Parameters ---------- - value : int | float | list | np.ndarray | Parameter | sc.Variable + value : float | list | np.ndarray | Parameter | sc.Variable The value to convert. Can be a number, list, numpy array, Parameter, or scipp Variable. If a number or list, the unit must be specified in the unit argument. name : str diff --git a/tests/unit/easydynamics/analysis/test_analysis.py b/tests/unit/easydynamics/analysis/test_analysis.py index 25274a55..67e93aab 100644 --- a/tests/unit/easydynamics/analysis/test_analysis.py +++ b/tests/unit/easydynamics/analysis/test_analysis.py @@ -177,7 +177,7 @@ def test_fit_with_invalid_fit_method(self, analysis): # WHEN / THEN / EXPECT with pytest.raises( ValueError, - match="Invalid fit method. Choose 'independent' or 'simultaneous'.", + match=r"Invalid fit method. Choose 'independent' or 'simultaneous'.", ): analysis.fit(fit_method='invalid_fit_method') @@ -646,7 +646,7 @@ def test_fit_all_Q_simultaneously(self, analysis): expected_fit_objects = analysis.analysis_list expected_fit_functions = analysis.get_fit_functions() mock_fitter.assert_called_once() - args, kwargs = mock_fitter.call_args + _, kwargs = mock_fitter.call_args assert kwargs['fit_objects'] == expected_fit_objects assert kwargs['fit_functions'] == expected_fit_functions @@ -663,7 +663,7 @@ def test_fit_all_Q_simultaneously(self, analysis): expected_ws.append(1.0 / np.sqrt(data.variances)) fake_fitter_instance.fit.assert_called_once() - args, kwargs = fake_fitter_instance.fit.call_args + _, kwargs = fake_fitter_instance.fit.call_args np.testing.assert_array_equal(kwargs['x'], expected_xs) np.testing.assert_array_equal(kwargs['y'], expected_ys) np.testing.assert_array_equal(kwargs['weights'], expected_ws) diff --git a/tests/unit/easydynamics/analysis/test_analysis1d.py b/tests/unit/easydynamics/analysis/test_analysis1d.py index aab85e03..5f956c1a 100644 --- a/tests/unit/easydynamics/analysis/test_analysis1d.py +++ b/tests/unit/easydynamics/analysis/test_analysis1d.py @@ -265,7 +265,7 @@ def test_plot_calls_plopp_with_correct_arguments(self, analysis1d): mock_plot.assert_called_once() # Inspect arguments - args, kwargs = mock_plot.call_args + args, _ = mock_plot.call_args dataset_passed = args[0] @@ -347,7 +347,7 @@ def test_verify_energy_raises(self, analysis1d): energy = np.array([10.0, 20.0]) # THEN / EXPECT - with pytest.raises(TypeError, match='Energy must be a sc.Variable or None'): + with pytest.raises(TypeError, match=r'Energy must be a sc.Variable or None'): analysis1d._verify_energy(energy) def test_calculate_energy_with_offset(self, analysis1d): @@ -402,7 +402,7 @@ def test_evaluate_components_no_components(self, analysis1d): # EXPECT assert isinstance(result, np.ndarray) assert result.shape == (len(analysis1d.experiment.energy),) - assert np.all(result == 0.0) + assert np.all(result == pytest.approx(0.0)) def test_evaluate_components_no_convolution(self, analysis1d): # WHEN @@ -611,7 +611,7 @@ def test_create_convolver(self, analysis1d): assert kwargs['resolution_components'] is resolution_components assert sc.identical(kwargs['energy'], analysis1d.energy) assert kwargs['temperature'] is analysis1d.temperature - assert kwargs['energy_offset'] == 123.0 + assert kwargs['energy_offset'] == pytest.approx(123.0) assert result == MockConvolution.return_value diff --git a/tests/unit/easydynamics/analysis/test_analysis_base.py b/tests/unit/easydynamics/analysis/test_analysis_base.py index 4b47c59e..59b0ff90 100644 --- a/tests/unit/easydynamics/analysis/test_analysis_base.py +++ b/tests/unit/easydynamics/analysis/test_analysis_base.py @@ -163,7 +163,7 @@ def test_Q_property(self, analysis_base): def test_Q_setter_raises(self, analysis_base): with pytest.raises( AttributeError, - match='Q is a read-only property derived from the Experiment.', + match=r'Q is a read-only property derived from the Experiment.', ): analysis_base.Q = [1, 2, 3] @@ -183,7 +183,7 @@ def test_energy_property(self, analysis_base): def test_energy_setter_raises(self, analysis_base): with pytest.raises( AttributeError, - match='energy is a read-only property derived from the Experiment.', + match=r'energy is a read-only property derived from the Experiment.', ): analysis_base.energy = [10, 20, 30] diff --git a/tests/unit/easydynamics/base_classes/test_easydynamics_base.py b/tests/unit/easydynamics/base_classes/test_easydynamics_base.py index a020fa97..90d62c1a 100644 --- a/tests/unit/easydynamics/base_classes/test_easydynamics_base.py +++ b/tests/unit/easydynamics/base_classes/test_easydynamics_base.py @@ -26,7 +26,7 @@ def test_initialization(self, easy_dynamics_base): def test_init_raises_type_error_for_invalid_name(self): """Test that initializing with an invalid name raises a TypeError.""" # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Name must be a string or None.'): + with pytest.raises(TypeError, match=r'Name must be a string or None.'): EasyDynamicsBase(name=123) # Not a string def test_init_name_can_be_none(self): @@ -66,5 +66,5 @@ def test_name_setter_and_getter(self, easy_dynamics_base): def test_name_setter_invalid_type(self, easy_dynamics_base, invalid_name): """Test that setting the name to an invalid type raises a TypeError.""" # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Name must be a string or None.'): + with pytest.raises(TypeError, match=r'Name must be a string or None.'): easy_dynamics_base.name = invalid_name diff --git a/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py b/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py index 8d7612e6..c2d30f71 100644 --- a/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py +++ b/tests/unit/easydynamics/base_classes/test_easydynamics_modelbase.py @@ -26,7 +26,7 @@ def test_initialization(self, easy_dynamics_modelbase): def test_init_raises_type_error_for_invalid_name(self): """Test that initializing with an invalid name raises a TypeError.""" # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Name must be a string or None.'): + with pytest.raises(TypeError, match=r'Name must be a string or None.'): EasyDynamicsModelBase(name=123) # Not a string def test_init_name_can_be_none(self): @@ -66,7 +66,7 @@ def test_name_setter_and_getter(self, easy_dynamics_modelbase): def test_name_setter_invalid_type(self, easy_dynamics_modelbase, invalid_name): """Test that setting the name to an invalid type raises a TypeError.""" # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Name must be a string or None.'): + with pytest.raises(TypeError, match=r'Name must be a string or None.'): easy_dynamics_modelbase.name = invalid_name def test_unit_property(self, easy_dynamics_modelbase): diff --git a/tests/unit/easydynamics/convolution/test_analytical_convolution.py b/tests/unit/easydynamics/convolution/test_analytical_convolution.py index 162a920b..c9d3f46e 100644 --- a/tests/unit/easydynamics/convolution/test_analytical_convolution.py +++ b/tests/unit/easydynamics/convolution/test_analytical_convolution.py @@ -126,7 +126,7 @@ def mock_convolute_analytic_pair(sample_component, resolution_component): # noq # EXPECT # 2 sample components x 2 resolution components - assert np.all(result == 4.0) + assert np.all(result == pytest.approx(4.0)) assert mocked_pair.call_count == 4 # Gather the actual calls to verify correct pairs @@ -178,7 +178,7 @@ def mock_convolute_analytic_pair(sample_component, resolution_component): # noq # EXPECT # 1 sample component x 1 resolution component - assert np.all(result == 1.0) + assert np.all(result == pytest.approx(1.0)) assert mocked_pair.call_count == 1 # Gather the actual calls to verify correct pairs diff --git a/tests/unit/easydynamics/convolution/test_convolution.py b/tests/unit/easydynamics/convolution/test_convolution.py index ad70ad5a..f7f1187f 100644 --- a/tests/unit/easydynamics/convolution/test_convolution.py +++ b/tests/unit/easydynamics/convolution/test_convolution.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause from contextlib import nullcontext +from typing import ClassVar from unittest.mock import patch import numpy as np @@ -74,7 +75,7 @@ def test_init(self, default_convolution): assert isinstance(default_convolution._sample_components, ComponentCollection) assert isinstance(default_convolution._resolution_components, ComponentCollection) assert default_convolution.upsample_factor == 5 - assert default_convolution.extension_factor == 0.2 + assert default_convolution.extension_factor == pytest.approx(0.2) assert default_convolution.temperature is None assert default_convolution.unit == 'meV' assert default_convolution.normalize_detailed_balance is True @@ -108,7 +109,7 @@ def test_init_components(self, convolution_with_components): assert isinstance(convolution_with_components._sample_components, ComponentCollection) assert isinstance(convolution_with_components._resolution_components, ComponentCollection) assert convolution_with_components.upsample_factor == 5 - assert convolution_with_components.extension_factor == 0.2 + assert convolution_with_components.extension_factor == pytest.approx(0.2) assert convolution_with_components.temperature is None assert convolution_with_components.unit == 'meV' assert convolution_with_components.normalize_detailed_balance is True @@ -317,7 +318,7 @@ def test_convolve_delta_functions(self, default_convolution): assert np.allclose(result, expected_values) # List of analytic functions - analytic_functions = [ + analytic_functions: ClassVar[list[object]] = [ Gaussian(display_name='G', area=1.0, center=0.0, width=0.1), Lorentzian(display_name='L', area=1.0, center=0.0, width=0.1), Voigt( @@ -330,14 +331,19 @@ def test_convolve_delta_functions(self, default_convolution): ] # List of non-analytic functions - non_analytic_functions = [ + non_analytic_functions: ClassVar[list[object]] = [ DampedHarmonicOscillator(display_name='DHO', area=1.0, center=1.0, width=0.1), Polynomial(display_name='P', coefficients=[1.0, 0.0, 0.0]), ] - all_functions_except_delta = analytic_functions + non_analytic_functions - all_functions = all_functions_except_delta + [ - DeltaFunction(display_name='Delta', area=1.0, center=0.0) + all_functions_except_delta: ClassVar[list[object]] = [ + *analytic_functions, + *non_analytic_functions, + ] + + all_functions: ClassVar[list[object]] = [ + *all_functions_except_delta, + DeltaFunction(display_name='Delta', area=1.0, center=0.0), ] @pytest.mark.parametrize('function1', all_functions, ids=lambda f: f.__class__.__name__) diff --git a/tests/unit/easydynamics/convolution/test_convolution_base.py b/tests/unit/easydynamics/convolution/test_convolution_base.py index 393c4af3..eceb8d7d 100644 --- a/tests/unit/easydynamics/convolution/test_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_convolution_base.py @@ -169,7 +169,7 @@ def test_energy_setter_invalid_type_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( TypeError, - match='Energy must be a Number, a numpy ndarray or a scipp Variable.', + match=r'Energy must be a Number, a numpy ndarray or a scipp Variable.', ): convolution_base.energy = 'invalid' @@ -181,7 +181,7 @@ def test_unit_setter_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( AttributeError, - match='Use convert_unit to change the unit between allowed types ', + match=r'Use convert_unit to change the unit between allowed types ', ): convolution_base.unit = 'K' @@ -198,7 +198,7 @@ def test_convert_unit_invalid_type_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( TypeError, - match='Energy unit must be a string or scipp unit.', + match=r'Energy unit must be a string or scipp unit.', ): convolution_base.convert_unit(123) @@ -206,7 +206,7 @@ def test_convert_unit_invalid_unit_rollback(self, convolution_base): # WHEN THEN with pytest.raises( UnitError, - match='Conversion from `meV` to `s` is not valid.', + match=r'Conversion from `meV` to `s` is not valid.', ): convolution_base.convert_unit('s') @@ -221,7 +221,7 @@ def test_convert_unit_invalid_offset_unit_rollback(self, convolution_base): # THEN with pytest.raises( UnitError, - match='Conversion from `s` to `meV` is not valid.', + match=r'Conversion from `s` to `meV` is not valid.', ): convolution_base.convert_unit('meV') @@ -246,7 +246,7 @@ def test_energy_offset_setter_invalid_type_raises(self, convolution_base): # WHEN THEN EXPECT with pytest.raises( TypeError, - match='Energy_offset must be a number or a Parameter.', + match=r'Energy_offset must be a number or a Parameter.', ): convolution_base.energy_offset = 'invalid' @@ -277,8 +277,8 @@ def test_sample_components_setter_invalid_type_raises(self, convolution_base): with pytest.raises( TypeError, match=( - '`sample_components` is an instance of str, ' - 'but must be a ComponentCollection or ModelComponent.' + r'`sample_components` is an instance of str, ' + r'but must be a ComponentCollection or ModelComponent.' ), ): convolution_base.sample_components = 'invalid' @@ -301,8 +301,8 @@ def test_resolution_components_setter_invalid_type_raises(self, convolution_base with pytest.raises( TypeError, match=( - '`resolution_components` is an instance of str, ' - 'but must be a ComponentCollection or ModelComponent.' + r'`resolution_components` is an instance of str, ' + r'but must be a ComponentCollection or ModelComponent.' ), ): convolution_base.resolution_components = 'invalid' diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution.py b/tests/unit/easydynamics/convolution/test_numerical_convolution.py index de28a2bc..a8ad6fb7 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution.py @@ -46,7 +46,7 @@ def test_init(self, default_numerical_convolution): default_numerical_convolution._resolution_components, ComponentCollection ) assert default_numerical_convolution.upsample_factor == 5 - assert default_numerical_convolution.extension_factor == 0.2 + assert default_numerical_convolution.extension_factor == pytest.approx(0.2) assert default_numerical_convolution.temperature is None assert default_numerical_convolution.unit == 'meV' assert default_numerical_convolution.normalize_detailed_balance is True diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py index 1c462608..76f212a2 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py @@ -44,7 +44,7 @@ def test_init(self, default_numerical_convolution_base): ComponentCollection, ) assert default_numerical_convolution_base.upsample_factor == 5 - assert default_numerical_convolution_base.extension_factor == 0.2 + assert default_numerical_convolution_base.extension_factor == pytest.approx(0.2) assert default_numerical_convolution_base.temperature is None assert default_numerical_convolution_base.unit == 'meV' assert default_numerical_convolution_base.normalize_detailed_balance is True @@ -100,7 +100,7 @@ def test_init_raises_type_error_for_invalid_temperature(self): invalid_temperature = 'invalid_temperature' # THEN EXPECT - with pytest.raises(TypeError, match='Temperature must be None, a number or a Parameter.'): + with pytest.raises(TypeError, match=r'Temperature must be None, a number or a Parameter.'): NumericalConvolutionBase( energy=energy, sample_components=sample_components, @@ -120,7 +120,7 @@ def test_init_raises_type_error_for_invalid_temperature_unit(self): invalid_temperature_unit = 123 # Not a string or sc.Unit # THEN EXPECT - with pytest.raises(TypeError, match='Temperature_unit must be a string or sc.Unit.'): + with pytest.raises(TypeError, match=r'Temperature_unit must be a string or sc.Unit.'): NumericalConvolutionBase( energy=energy, sample_components=sample_components, @@ -287,7 +287,7 @@ def test_temperature_setter_does_not_replace_parameter( # EXPECT assert default_numerical_convolution_base.temperature is temp_param - assert default_numerical_convolution_base.temperature.value == 350.0 + assert default_numerical_convolution_base.temperature.value == pytest.approx(350.0) def test_temperature_setter_raises(self, default_numerical_convolution_base): """ diff --git a/tests/unit/easydynamics/experiment/test_experiment.py b/tests/unit/easydynamics/experiment/test_experiment.py index 8430d13f..7ffc83c8 100644 --- a/tests/unit/easydynamics/experiment/test_experiment.py +++ b/tests/unit/easydynamics/experiment/test_experiment.py @@ -305,7 +305,7 @@ def test_get_masked_energy(self, experiment_with_data): # EXPECT assert len(masked_energy) == 1 - assert masked_energy.values == 30.0 + assert masked_energy.values == pytest.approx(30.0) def test_get_masked_energy_no_data_returns_None(self): "Test getting masked energy returns zero when no data is present" @@ -526,7 +526,9 @@ def test_extract_x_y_weights_only_finite(self, experiment_with_data): assert np.isfinite(x).all() assert np.isfinite(y).all() assert np.isfinite(weights).all() - assert weights[0] == 1.0 / (experiment_with_data.data.variances[Q_index][2] ** 0.5) + assert weights[0] == pytest.approx( + 1.0 / (experiment_with_data.data.variances[Q_index][2] ** 0.5) + ) assert len(x) == len(y) == len(weights) == 1 # 2 values should be removed # Mask should indicate which values were removed assert np.array_equal(mask, [False, False, True]) diff --git a/tests/unit/easydynamics/sample_model/components/test_damped_harmonic_oscillator.py b/tests/unit/easydynamics/sample_model/components/test_damped_harmonic_oscillator.py index 702c0bfc..79e1913f 100644 --- a/tests/unit/easydynamics/sample_model/components/test_damped_harmonic_oscillator.py +++ b/tests/unit/easydynamics/sample_model/components/test_damped_harmonic_oscillator.py @@ -24,17 +24,17 @@ def test_init_no_inputs(self): # EXPECT assert dho.display_name == 'DampedHarmonicOscillator' - assert dho.area.value == 1.0 - assert dho.center.value == 1.0 - assert dho.width.value == 1.0 + assert dho.area.value == pytest.approx(1.0) + assert dho.center.value == pytest.approx(1.0) + assert dho.width.value == pytest.approx(1.0) assert dho.unit == 'meV' def test_initialization(self, dho: DampedHarmonicOscillator): # WHEN THEN EXPECT assert dho.display_name == 'TestDHO' - assert dho.area.value == 2.0 - assert dho.center.value == 1.5 - assert dho.width.value == 0.3 + assert dho.area.value == pytest.approx(2.0) + assert dho.center.value == pytest.approx(1.5) + assert dho.width.value == pytest.approx(0.3) assert dho.unit == 'meV' def test_init_with_parameters(self): @@ -88,7 +88,7 @@ def test_negative_width_raises(self): # WHEN THEN EXPECT with pytest.raises( ValueError, - match='The width of a DampedHarmonicOscillator must be greater than zero.', + match=r'The width of a DampedHarmonicOscillator must be greater than zero.', ): DampedHarmonicOscillator( display_name='TestDampedHarmonicOscillator', @@ -190,9 +190,9 @@ def test_convert_unit(self, dho: DampedHarmonicOscillator): # EXPECT assert dho.unit == 'microeV' - assert dho.area.value == 2 * 1e3 - assert dho.center.value == 1.5 * 1e3 - assert dho.width.value == 0.3 * 1e3 + assert dho.area.value == pytest.approx(2 * 1e3) + assert dho.center.value == pytest.approx(1.5 * 1e3) + assert dho.width.value == pytest.approx(0.3 * 1e3) def test_copy(self, dho: DampedHarmonicOscillator): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/components/test_delta_function.py b/tests/unit/easydynamics/sample_model/components/test_delta_function.py index b5c4bc11..be1e33a0 100644 --- a/tests/unit/easydynamics/sample_model/components/test_delta_function.py +++ b/tests/unit/easydynamics/sample_model/components/test_delta_function.py @@ -23,16 +23,16 @@ def test_init_no_inputs(self): # EXPECT assert delta_function.display_name == 'DeltaFunction' - assert delta_function.area.value == 1.0 - assert delta_function.center.value == 0.0 + assert delta_function.area.value == pytest.approx(1.0) + assert delta_function.center.value == pytest.approx(0.0) assert delta_function.unit == 'meV' assert delta_function.center.fixed is True def test_initialization(self, delta_function: DeltaFunction): # WHEN THEN EXPECT assert delta_function.display_name == 'TestDeltaFunction' - assert delta_function.area.value == 2.0 - assert delta_function.center.value == 0.5 + assert delta_function.area.value == pytest.approx(2.0) + assert delta_function.center.value == pytest.approx(0.5) assert delta_function.unit == 'meV' @pytest.mark.parametrize( @@ -167,7 +167,7 @@ def test_center_is_fixed_if_set_to_None(self, delta_function: DeltaFunction): delta_function.center = None # EXPECT - assert delta_function.center.value == 0.0 + assert delta_function.center.value == pytest.approx(0.0) assert delta_function.center.fixed is True def test_get_all_parameters(self, delta_function: DeltaFunction): @@ -190,8 +190,8 @@ def test_convert_unit(self, delta_function: DeltaFunction): # EXPECT assert delta_function.unit == 'microeV' - assert delta_function.area.value == 2 * 1e3 - assert delta_function.center.value == 0.5 * 1e3 + assert delta_function.area.value == pytest.approx(2 * 1e3) + assert delta_function.center.value == pytest.approx(0.5 * 1e3) def test_copy(self, delta_function: DeltaFunction): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/components/test_exponential.py b/tests/unit/easydynamics/sample_model/components/test_exponential.py index d61be76e..2a824532 100644 --- a/tests/unit/easydynamics/sample_model/components/test_exponential.py +++ b/tests/unit/easydynamics/sample_model/components/test_exponential.py @@ -28,17 +28,17 @@ def test_init_no_inputs(self): # THEN EXPECT assert exponential.display_name == 'Exponential' - assert exponential.amplitude.value == 1.0 - assert exponential.center.value == 0.0 - assert exponential.rate.value == 1.0 + assert exponential.amplitude.value == pytest.approx(1.0) + assert exponential.center.value == pytest.approx(0.0) + assert exponential.rate.value == pytest.approx(1.0) assert exponential.unit == 'meV' def test_initialization(self, exponential: Exponential): # WHEN THEN EXPECT assert exponential.display_name == 'TestExponential' - assert exponential.amplitude.value == 2.0 - assert exponential.center.value == 0.5 - assert exponential.rate.value == 1.2 + assert exponential.amplitude.value == pytest.approx(2.0) + assert exponential.center.value == pytest.approx(0.5) + assert exponential.rate.value == pytest.approx(1.2) assert exponential.unit == 'meV' def test_init_with_parameters(self): @@ -133,7 +133,7 @@ def test_center_is_fixed_if_set_to_None(self, exponential: Exponential): exponential.center = None # EXPECT - assert exponential.center.value == 0.0 + assert exponential.center.value == pytest.approx(0.0) assert exponential.center.fixed is True def test_evaluate(self, exponential: Exponential): @@ -172,33 +172,33 @@ def test_convert_unit(self, exponential: Exponential): # THEN EXPECT assert exponential.unit == 'microeV' - assert exponential.amplitude.value == 2.0 * 1e3 - assert exponential.center.value == 0.5 * 1e3 + assert exponential.amplitude.value == pytest.approx(2.0 * 1e3) + assert exponential.center.value == pytest.approx(0.5 * 1e3) # rate should scale inversely - assert exponential.rate.value == 1.2 / 1e3 + assert exponential.rate.value == pytest.approx(1.2 / 1e3) assert str(exponential.rate.unit) == '1/ueV' def test_convert_unit_incorrect_unit_raises(self, exponential: Exponential): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='unit must be a string or sc.Unit'): + with pytest.raises(TypeError, match=r'unit must be a string or sc.Unit'): exponential.convert_unit(123) def test_convert_unit_rollback(self, exponential: Exponential): # WHEN with pytest.raises( UnitError, - match='Failed to convert unit: Conversion from `meV` to `m` is not valid.', + match=r'Failed to convert unit: Conversion from `meV` to `m` is not valid.', ): exponential.convert_unit('m') # THEN EXPECT - values should be unchanged assert exponential.unit == 'meV' - assert exponential.amplitude.value == 2.0 + assert exponential.amplitude.value == pytest.approx(2.0) assert exponential.amplitude.unit == 'meV' - assert exponential.center.value == 0.5 + assert exponential.center.value == pytest.approx(0.5) assert exponential.center.unit == 'meV' - assert exponential.rate.value == 1.2 + assert exponential.rate.value == pytest.approx(1.2) assert exponential.rate.unit == '1/meV' def test_copy(self, exponential: Exponential): diff --git a/tests/unit/easydynamics/sample_model/components/test_expression_component.py b/tests/unit/easydynamics/sample_model/components/test_expression_component.py index 4a7a43fd..27399844 100644 --- a/tests/unit/easydynamics/sample_model/components/test_expression_component.py +++ b/tests/unit/easydynamics/sample_model/components/test_expression_component.py @@ -23,16 +23,16 @@ def test_init_valid(self, expr: ExpressionComponent): assert expr.display_name == 'TestExpression' assert expr.unit == 'meV' - assert expr.A.value == 2.0 - assert expr.x0.value == 0.5 - assert expr.sigma.value == 0.6 + assert expr.A.value == pytest.approx(2.0) + assert expr.x0.value == pytest.approx(0.5) + assert expr.sigma.value == pytest.approx(0.6) def test_init_without_parameters(self): # WHEN THEN expr = ExpressionComponent('A * x', parameters=None) # EXPECT - assert expr.A.value == 1.0 # default + assert expr.A.value == pytest.approx(1.0) # default def test_invalid_expression_raises(self): # WHEN THEN EXPECT @@ -88,7 +88,7 @@ def test_parameter_setter(self, expr: ExpressionComponent): expr.A = 3.0 # EXPECT - assert expr.A.value == 3.0 + assert expr.A.value == pytest.approx(3.0) assert isinstance(expr.A, Parameter) def test_parameter_getter_invalid_name(self, expr: ExpressionComponent): @@ -131,8 +131,8 @@ def test_missing_parameter_defaults(self): expr = ExpressionComponent('A * x + B', parameters={'A': 2.0}) # EXPECT - assert expr.A.value == 2.0 - assert expr.B.value == 1.0 # default + assert expr.A.value == pytest.approx(2.0) + assert expr.B.value == pytest.approx(1.0) # default def test_dir_includes_parameters(self, expr: ExpressionComponent): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/components/test_gaussian.py b/tests/unit/easydynamics/sample_model/components/test_gaussian.py index b1ad6f92..7119852a 100644 --- a/tests/unit/easydynamics/sample_model/components/test_gaussian.py +++ b/tests/unit/easydynamics/sample_model/components/test_gaussian.py @@ -22,18 +22,18 @@ def test_init_no_inputs(self): # EXPECT assert gaussian.display_name == 'Gaussian' - assert gaussian.area.value == 1.0 - assert gaussian.center.value == 0.0 - assert gaussian.width.value == 1.0 + assert gaussian.area.value == pytest.approx(1.0) + assert gaussian.center.value == pytest.approx(0.0) + assert gaussian.width.value == pytest.approx(1.0) assert gaussian.unit == 'meV' assert gaussian.center.fixed is True def test_initialization(self, gaussian: Gaussian): # WHEN THEN EXPECT assert gaussian.display_name == 'TestGaussian' - assert gaussian.area.value == 2.0 - assert gaussian.center.value == 0.5 - assert gaussian.width.value == 0.6 + assert gaussian.area.value == pytest.approx(2.0) + assert gaussian.center.value == pytest.approx(0.5) + assert gaussian.width.value == pytest.approx(0.6) assert gaussian.unit == 'meV' def test_init_with_parameters(self): @@ -85,7 +85,9 @@ def test_input_type_validation_raises(self, kwargs, expected_message): def test_negative_width_raises(self): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='The width of a Gaussian must be greater than zero.'): + with pytest.raises( + ValueError, match=r'The width of a Gaussian must be greater than zero.' + ): Gaussian( display_name='TestGaussian', area=2.0, @@ -150,7 +152,7 @@ def test_center_is_fixed_if_set_to_None(self, gaussian: Gaussian): gaussian.center = None # EXPECT - assert gaussian.center.value == 0.0 + assert gaussian.center.value == pytest.approx(0.0) assert gaussian.center.fixed is True def test_get_all_parameters(self, gaussian: Gaussian): @@ -190,9 +192,9 @@ def test_convert_unit(self, gaussian: Gaussian): # EXPECT assert gaussian.unit == 'microeV' - assert gaussian.area.value == 2 * 1e3 - assert gaussian.center.value == 0.5 * 1e3 - assert gaussian.width.value == 0.6 * 1e3 + assert gaussian.area.value == pytest.approx(2 * 1e3) + assert gaussian.center.value == pytest.approx(0.5 * 1e3) + assert gaussian.width.value == pytest.approx(0.6 * 1e3) def test_copy(self, gaussian: Gaussian): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/components/test_lorentzian.py b/tests/unit/easydynamics/sample_model/components/test_lorentzian.py index 5f87032d..4ce1e1db 100644 --- a/tests/unit/easydynamics/sample_model/components/test_lorentzian.py +++ b/tests/unit/easydynamics/sample_model/components/test_lorentzian.py @@ -24,18 +24,18 @@ def test_init_no_inputs(self): # EXPECT assert lorentzian.display_name == 'Lorentzian' - assert lorentzian.area.value == 1.0 - assert lorentzian.center.value == 0.0 - assert lorentzian.width.value == 1.0 + assert lorentzian.area.value == pytest.approx(1.0) + assert lorentzian.center.value == pytest.approx(0.0) + assert lorentzian.width.value == pytest.approx(1.0) assert lorentzian.unit == 'meV' assert lorentzian.center.fixed is True def test_initialization(self, lorentzian: Lorentzian): # WHEN THEN EXPECT assert lorentzian.display_name == 'TestLorentzian' - assert lorentzian.area.value == 2.0 - assert lorentzian.center.value == 0.5 - assert lorentzian.width.value == 0.6 + assert lorentzian.area.value == pytest.approx(2.0) + assert lorentzian.center.value == pytest.approx(0.5) + assert lorentzian.width.value == pytest.approx(0.6) assert lorentzian.unit == 'meV' def test_init_with_parameters(self): @@ -88,7 +88,7 @@ def test_input_type_validation_raises(self, kwargs, expected_message): def test_negative_width_raises(self): # WHEN THEN EXPECT with pytest.raises( - ValueError, match='The width of a Lorentzian must be greater than zero.' + ValueError, match=r'The width of a Lorentzian must be greater than zero.' ): Lorentzian( display_name='TestLorentzian', @@ -152,7 +152,7 @@ def test_center_is_fixed_if_set_to_None(self, lorentzian: Lorentzian): lorentzian.center = None # EXPECT - assert lorentzian.center.value == 0.0 + assert lorentzian.center.value == pytest.approx(0.0) assert lorentzian.center.fixed is True def test_get_all_parameters(self, lorentzian: Lorentzian): @@ -189,9 +189,9 @@ def test_convert_unit(self, lorentzian: Lorentzian): # EXPECT assert lorentzian.unit == 'microeV' - assert lorentzian.area.value == 2 * 1e3 - assert lorentzian.center.value == 0.5 * 1e3 - assert lorentzian.width.value == 0.6 * 1e3 + assert lorentzian.area.value == pytest.approx(2 * 1e3) + assert lorentzian.center.value == pytest.approx(0.5 * 1e3) + assert lorentzian.width.value == pytest.approx(0.6 * 1e3) def test_copy(self, lorentzian: Lorentzian): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/components/test_mixins.py b/tests/unit/easydynamics/sample_model/components/test_mixins.py index 7c5160ae..4989f76e 100644 --- a/tests/unit/easydynamics/sample_model/components/test_mixins.py +++ b/tests/unit/easydynamics/sample_model/components/test_mixins.py @@ -23,10 +23,10 @@ def test_create_area_parameter_from_numeric(self, dummy_model, area_input, unit) # EXPECT assert isinstance(area_param, Parameter) assert area_param.name == 'TestModel area' - assert area_param.value == float(area_input) + assert area_param.value == pytest.approx(area_input) assert area_param.unit == unit assert not area_param.fixed - assert area_param.min == 0.0 + assert area_param.min == pytest.approx(0.0) def test_create_area_parameter_from_parameter(self, dummy_model): # WHEN @@ -37,7 +37,7 @@ def test_create_area_parameter_from_parameter(self, dummy_model): # EXPECT assert area_param is area_input # Should be the same object - assert area_param.min == 0.0 + assert area_param.min == pytest.approx(0.0) def test_create_area_parameter_invalid_type_raises(self, dummy_model): # WHEN THEN EXPECT @@ -75,7 +75,7 @@ def test_create_center_parameter_from_numeric(self, dummy_model, center_input, u # EXPECT assert isinstance(center_param, Parameter) assert center_param.name == 'TestModel center' - assert center_param.value == float(center_input) + assert center_param.value == pytest.approx(center_input) assert center_param.unit == unit assert not center_param.fixed @@ -88,7 +88,7 @@ def test_create_center_parameter_from_None(self, dummy_model, fix_if_none): # EXPECT assert isinstance(center_param, Parameter) assert center_param.name == 'TestModel center' - assert center_param.value == 0.0 + assert center_param.value == pytest.approx(0.0) assert center_param.unit == 'meV' assert center_param.fixed == fix_if_none @@ -134,7 +134,7 @@ def test_create_width_parameter_from_numeric(self, dummy_model, width_input, uni # EXPECT assert isinstance(width_param, Parameter) assert width_param.name == 'TestModel width' - assert width_param.value == float(width_input) + assert width_param.value == pytest.approx(width_input) assert width_param.unit == unit assert not width_param.fixed diff --git a/tests/unit/easydynamics/sample_model/components/test_model_component.py b/tests/unit/easydynamics/sample_model/components/test_model_component.py index 24f3ac57..514ced73 100644 --- a/tests/unit/easydynamics/sample_model/components/test_model_component.py +++ b/tests/unit/easydynamics/sample_model/components/test_model_component.py @@ -40,13 +40,13 @@ def test_convert_unit(self, dummy: DummyComponent): # EXPECT assert dummy.unit == 'microeV' - assert dummy.area.value == 1 * 1e3 - assert dummy.center.value == 2 * 1e3 - assert dummy.width.value == 3 * 1e3 + assert dummy.area.value == pytest.approx(1 * 1e3) + assert dummy.center.value == pytest.approx(2 * 1e3) + assert dummy.width.value == pytest.approx(3 * 1e3) def test_convert_unit_incorrect_unit_raises(self, dummy: DummyComponent): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Unit must be a string or sc.Unit'): + with pytest.raises(TypeError, match=r'Unit must be a string or sc.Unit'): dummy.convert_unit(123) def test_free_and_fix_all_parameters(self, dummy): @@ -148,7 +148,7 @@ def test_prepare_x_for_evaluate_with_different_unit_warns(self, dummy): # THEN EXPECT with pytest.warns( UserWarning, - match='Input x has unit µeV, but DummyComponent component ', + match='Input x has unit [µμ]eV, but DummyComponent component ', ): x_prepared = dummy._prepare_x_for_evaluate(x) @@ -156,7 +156,7 @@ def test_prepare_x_for_evaluate_with_different_unit_warns(self, dummy): assert isinstance(x_prepared, np.ndarray) assert x_prepared.shape == (3,) np.testing.assert_array_equal(x_prepared, [1.0, 2.0, 3.0]) - assert dummy.unit == 'µeV' - assert dummy.area.value == 1.0 * 1e3 - assert dummy.center.value == 2.0 * 1e3 - assert dummy.width.value == 3.0 * 1e3 + assert dummy.unit == 'µeV' # noqa: RUF001 + assert dummy.area.value == pytest.approx(1.0 * 1e3) + assert dummy.center.value == pytest.approx(2.0 * 1e3) + assert dummy.width.value == pytest.approx(3.0 * 1e3) diff --git a/tests/unit/easydynamics/sample_model/components/test_polynomial.py b/tests/unit/easydynamics/sample_model/components/test_polynomial.py index aa7790d2..5e42e677 100644 --- a/tests/unit/easydynamics/sample_model/components/test_polynomial.py +++ b/tests/unit/easydynamics/sample_model/components/test_polynomial.py @@ -22,15 +22,15 @@ def test_init_no_inputs(self): # EXPECT assert polynomial.display_name == 'Polynomial' - assert polynomial.coefficients[0].value == 0.0 + assert polynomial.coefficients[0].value == pytest.approx(0.0) assert polynomial.unit == 'meV' def test_initialization(self, polynomial: Polynomial): # WHEN THEN EXPECT assert polynomial.display_name == 'TestPolynomial' - assert polynomial.coefficients[0].value == 1.0 - assert polynomial.coefficients[1].value == -2.0 - assert polynomial.coefficients[2].value == 3.0 + assert polynomial.coefficients[0].value == pytest.approx(1.0) + assert polynomial.coefficients[1].value == pytest.approx(-2.0) + assert polynomial.coefficients[2].value == pytest.approx(3.0) @pytest.mark.parametrize( 'kwargs, expected_message', @@ -60,7 +60,7 @@ def test_input_type_validation_raises(self, kwargs, expected_message): def test_init_no_coefficients_raises(self): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='At least one coefficient must be provided.'): + with pytest.raises(ValueError, match=r'At least one coefficient must be provided.'): Polynomial(display_name='TestPolynomial', coefficients=[]) def test_negative_value_warns_in_evaluate(self): diff --git a/tests/unit/easydynamics/sample_model/components/test_voigt.py b/tests/unit/easydynamics/sample_model/components/test_voigt.py index f4ea949d..5bf866d8 100644 --- a/tests/unit/easydynamics/sample_model/components/test_voigt.py +++ b/tests/unit/easydynamics/sample_model/components/test_voigt.py @@ -30,20 +30,20 @@ def test_init_no_inputs(self): # EXPECT assert voigt.display_name == 'Voigt' - assert voigt.area.value == 1.0 - assert voigt.center.value == 0.0 - assert voigt.gaussian_width.value == 1.0 - assert voigt.lorentzian_width.value == 1.0 + assert voigt.area.value == pytest.approx(1.0) + assert voigt.center.value == pytest.approx(0.0) + assert voigt.gaussian_width.value == pytest.approx(1.0) + assert voigt.lorentzian_width.value == pytest.approx(1.0) assert voigt.unit == 'meV' assert voigt.center.fixed is True def test_initialization(self, voigt: Voigt): # WHEN THEN EXPECT assert voigt.display_name == 'TestVoigt' - assert voigt.area.value == 2.0 - assert voigt.center.value == 0.5 - assert voigt.gaussian_width.value == 0.6 - assert voigt.lorentzian_width.value == 0.7 + assert voigt.area.value == pytest.approx(2.0) + assert voigt.center.value == pytest.approx(0.5) + assert voigt.gaussian_width.value == pytest.approx(0.6) + assert voigt.lorentzian_width.value == pytest.approx(0.7) assert voigt.unit == 'meV' def test_init_with_parameters(self): @@ -133,7 +133,7 @@ def test_input_type_validation_raises(self, kwargs, expected_message): def test_negative_gaussian_width_raises(self): # WHEN THEN EXPECT with pytest.raises( - ValueError, match='The gaussian_width of a Voigt must be greater than.' + ValueError, match=r'The gaussian_width of a Voigt must be greater than.' ): Voigt( display_name='TestVoigt', @@ -148,7 +148,7 @@ def test_negative_lorentzian_width_raises(self): # WHEN THEN EXPECT with pytest.raises( ValueError, - match='The lorentzian_width of a Voigt must be greater than zero.', + match=r'The lorentzian_width of a Voigt must be greater than zero.', ): Voigt( display_name='TestVoigt', @@ -217,7 +217,7 @@ def test_center_is_fixed_if_set_to_None(self, voigt: Voigt): voigt.center = None # EXPECT - assert voigt.center.value == 0.0 + assert voigt.center.value == pytest.approx(0.0) assert voigt.center.fixed is True def test_evaluate(self, voigt: Voigt): @@ -243,7 +243,7 @@ def test_center_is_fixed_if_init_to_None(self): ) # EXPECT - assert test_voigt.center.value == 0.0 + assert test_voigt.center.value == pytest.approx(0.0) assert test_voigt.center.fixed is True def test_convert_unit(self, voigt: Voigt): @@ -252,10 +252,10 @@ def test_convert_unit(self, voigt: Voigt): # EXPECT assert voigt.unit == 'microeV' - assert voigt.area.value == 2 * 1e3 - assert voigt.center.value == 0.5 * 1e3 - assert voigt.gaussian_width.value == 0.6 * 1e3 - assert voigt.lorentzian_width.value == 0.7 * 1e3 + assert voigt.area.value == pytest.approx(2 * 1e3) + assert voigt.center.value == pytest.approx(0.5 * 1e3) + assert voigt.gaussian_width.value == pytest.approx(0.6 * 1e3) + assert voigt.lorentzian_width.value == pytest.approx(0.7 * 1e3) def test_get_all_parameters(self, voigt: Voigt): # WHEN THEN diff --git a/tests/unit/easydynamics/sample_model/diffusion_model/test_brownian_translational_diffusion.py b/tests/unit/easydynamics/sample_model/diffusion_model/test_brownian_translational_diffusion.py index 80ec766f..be25890e 100644 --- a/tests/unit/easydynamics/sample_model/diffusion_model/test_brownian_translational_diffusion.py +++ b/tests/unit/easydynamics/sample_model/diffusion_model/test_brownian_translational_diffusion.py @@ -26,8 +26,8 @@ def test_init_default(self, brownian_diffusion_model): # WHEN THEN EXPECT assert brownian_diffusion_model.display_name == 'BrownianTranslationalDiffusion' assert brownian_diffusion_model.unit == 'meV' - assert brownian_diffusion_model.scale.value == 1.0 - assert brownian_diffusion_model.diffusion_coefficient.value == 1.0 + assert brownian_diffusion_model.scale.value == pytest.approx(1.0) + assert brownian_diffusion_model.diffusion_coefficient.value == pytest.approx(1.0) @pytest.mark.parametrize( 'kwargs,expected_exception, expected_message', @@ -70,16 +70,16 @@ def test_diffusion_coefficient_setter(self, brownian_diffusion_model): brownian_diffusion_model.diffusion_coefficient = 3.0 # THEN EXPECT - assert brownian_diffusion_model.diffusion_coefficient.value == 3.0 + assert brownian_diffusion_model.diffusion_coefficient.value == pytest.approx(3.0) def test_diffusion_coefficient_setter_raises(self, brownian_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='diffusion_coefficient must be a number.'): + with pytest.raises(TypeError, match=r'diffusion_coefficient must be a number.'): brownian_diffusion_model.diffusion_coefficient = 'invalid' # Invalid type def test_diffusion_coefficient_setter_negative_raises(self, brownian_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='diffusion_coefficient must be non-negative.'): + with pytest.raises(ValueError, match=r'diffusion_coefficient must be non-negative.'): brownian_diffusion_model.diffusion_coefficient = -1.0 # Invalid negative value def test_calculate_width_type_error(self, brownian_diffusion_model): @@ -170,7 +170,7 @@ def test_create_component_collections_component_name_must_be_string( self, brownian_diffusion_model ): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='component_name must be a string.'): + with pytest.raises(TypeError, match=r'component_name must be a string.'): brownian_diffusion_model.create_component_collections( Q=np.array([0.1, 0.2, 0.3]), component_display_name=123 ) @@ -182,7 +182,7 @@ def test_create_component_collections_Q_type_error(self, brownian_diffusion_mode def test_create_component_collections_Q_1dimensional_error(self, brownian_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='Q must be a 1-dimensional array.'): + with pytest.raises(ValueError, match=r'Q must be a 1-dimensional array.'): brownian_diffusion_model.create_component_collections( Q=np.array([[0.1, 0.2], [0.3, 0.4]]) ) # Invalid shape diff --git a/tests/unit/easydynamics/sample_model/diffusion_model/test_diffusion_model.py b/tests/unit/easydynamics/sample_model/diffusion_model/test_diffusion_model.py index 67f654b2..c46dc561 100644 --- a/tests/unit/easydynamics/sample_model/diffusion_model/test_diffusion_model.py +++ b/tests/unit/easydynamics/sample_model/diffusion_model/test_diffusion_model.py @@ -20,7 +20,7 @@ def test_unit_setter_raises(self, diffusion_model): # WHEN THEN EXPECT with pytest.raises( AttributeError, - match='Unit is read-only. Use convert_unit to change the unit between allowed types', + match=r'Unit is read-only. Use convert_unit to change the unit between allowed types', ): diffusion_model.unit = 'eV' @@ -29,16 +29,16 @@ def test_scale_setter(self, diffusion_model): diffusion_model.scale = 2.0 # THEN EXPECT - assert diffusion_model.scale.value == 2.0 + assert diffusion_model.scale.value == pytest.approx(2.0) def test_scale_setter_negative_raises(self, diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='scale must be non-negative.'): + with pytest.raises(ValueError, match=r'scale must be non-negative.'): diffusion_model.scale = -1.0 # Invalid negative value def test_scale_setter_raises(self, diffusion_model): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='scale must be a number.'): + with pytest.raises(TypeError, match=r'scale must be a number.'): diffusion_model.scale = 'invalid' # Invalid type def test_repr(self, diffusion_model): diff --git a/tests/unit/easydynamics/sample_model/diffusion_model/test_jump_translational_diffusion.py b/tests/unit/easydynamics/sample_model/diffusion_model/test_jump_translational_diffusion.py index 756d422f..9388a2db 100644 --- a/tests/unit/easydynamics/sample_model/diffusion_model/test_jump_translational_diffusion.py +++ b/tests/unit/easydynamics/sample_model/diffusion_model/test_jump_translational_diffusion.py @@ -26,9 +26,9 @@ def test_init_default(self, jump_diffusion_model): # WHEN THEN EXPECT assert jump_diffusion_model.display_name == 'JumpTranslationalDiffusion' assert jump_diffusion_model.unit == 'meV' - assert jump_diffusion_model.scale.value == 1.0 - assert jump_diffusion_model.diffusion_coefficient.value == 1.0 - assert jump_diffusion_model.relaxation_time.value == 1.0 + assert jump_diffusion_model.scale.value == pytest.approx(1.0) + assert jump_diffusion_model.diffusion_coefficient.value == pytest.approx(1.0) + assert jump_diffusion_model.relaxation_time.value == pytest.approx(1.0) @pytest.mark.parametrize( 'kwargs,expected_exception, expected_message', @@ -84,16 +84,16 @@ def test_diffusion_coefficient_setter(self, jump_diffusion_model): jump_diffusion_model.diffusion_coefficient = 3.0 # THEN EXPECT - assert jump_diffusion_model.diffusion_coefficient.value == 3.0 + assert jump_diffusion_model.diffusion_coefficient.value == pytest.approx(3.0) def test_diffusion_coefficient_setter_raises(self, jump_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='diffusion_coefficient must be a number.'): + with pytest.raises(TypeError, match=r'diffusion_coefficient must be a number.'): jump_diffusion_model.diffusion_coefficient = 'invalid' # Invalid type def test_diffusion_coefficient_setter_negative_raises(self, jump_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='diffusion_coefficient must be non-negative.'): + with pytest.raises(ValueError, match=r'diffusion_coefficient must be non-negative.'): jump_diffusion_model.diffusion_coefficient = -1.0 # Invalid negative value def test_relaxation_time_setter(self, jump_diffusion_model): @@ -101,16 +101,16 @@ def test_relaxation_time_setter(self, jump_diffusion_model): jump_diffusion_model.relaxation_time = 2.5 # THEN EXPECT - assert jump_diffusion_model.relaxation_time.value == 2.5 + assert jump_diffusion_model.relaxation_time.value == pytest.approx(2.5) def test_relaxation_time_setter_raises(self, jump_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='relaxation_time must be a number.'): + with pytest.raises(TypeError, match=r'relaxation_time must be a number.'): jump_diffusion_model.relaxation_time = 'invalid' # Invalid type def test_relaxation_time_setter_negative_raises(self, jump_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='relaxation_time must be non-negative.'): + with pytest.raises(ValueError, match=r'relaxation_time must be non-negative.'): jump_diffusion_model.relaxation_time = -1.0 # Invalid negative value def test_calculate_width_type_error(self, jump_diffusion_model): @@ -208,7 +208,7 @@ def test_create_component_collections_component_name_must_be_string( self, jump_diffusion_model ): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='component_name must be a string.'): + with pytest.raises(TypeError, match=r'component_name must be a string.'): jump_diffusion_model.create_component_collections( Q=np.array([0.1, 0.2, 0.3]), component_display_name=123 ) @@ -220,7 +220,7 @@ def test_create_component_collections_Q_type_error(self, jump_diffusion_model): def test_create_component_collections_Q_1dimensional_error(self, jump_diffusion_model): # WHEN THEN EXPECT - with pytest.raises(ValueError, match='Q must be a 1-dimensional array.'): + with pytest.raises(ValueError, match=r'Q must be a 1-dimensional array.'): jump_diffusion_model.create_component_collections( Q=np.array([[0.1, 0.2], [0.3, 0.4]]) ) # Invalid shape diff --git a/tests/unit/easydynamics/sample_model/test_component_collection.py b/tests/unit/easydynamics/sample_model/test_component_collection.py index 15ea38ba..c7d41aa1 100644 --- a/tests/unit/easydynamics/sample_model/test_component_collection.py +++ b/tests/unit/easydynamics/sample_model/test_component_collection.py @@ -66,7 +66,7 @@ def test_init_with_components(self): def test_init_with_invalid_components_raises(self): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Component must be.'): + with pytest.raises(TypeError, match='Component must be'): ComponentCollection(components=['NotAComponent']) def test_init_with_invalid_list_of_components_raises(self): @@ -152,7 +152,7 @@ def test_component_setter(self, component_collection): def test_component_setter_invalid_raises(self, component_collection): # WHEN THEN EXPECT - with pytest.raises(TypeError, match=' must be instances of ModelComponent.'): + with pytest.raises(TypeError, match=r' must be instances of ModelComponent.'): component_collection.components = ['NotAComponent'] with pytest.raises(TypeError, match='components must be a list of'): @@ -174,7 +174,7 @@ def test_is_empty(self): def test_is_empty_setter(self, component_collection): # WHEN THEN EXPECT - with pytest.raises(AttributeError, match='is_empty is a read-only property.'): + with pytest.raises(AttributeError, match=r'is_empty is a read-only property.'): component_collection.is_empty = True def test_component_setter_empty_list(self, component_collection): @@ -204,7 +204,7 @@ def test_convert_unit(self, component_collection): def test_convert_unit_incorrect_unit_raises(self, component_collection): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Unit must be a string or sc.Unit'): + with pytest.raises(TypeError, match=r'Unit must be a string or sc.Unit'): component_collection.convert_unit(123) def test_convert_unit_failure_rolls_back(self, component_collection): @@ -224,7 +224,7 @@ def convert_unit(self, _unit: str) -> None: } # EXPECT - with pytest.raises(RuntimeError, match='Conversion failed.'): + with pytest.raises(RuntimeError, match=r'Conversion failed.'): component_collection.convert_unit('eV') # Check that all components have their original units @@ -235,7 +235,7 @@ def test_set_unit(self, component_collection): # WHEN THEN EXPECT with pytest.raises( AttributeError, - match='Unit is read-only. Use convert_unit to change the unit', + match=r'Unit is read-only. Use convert_unit to change the unit', ): component_collection.unit = 'eV' @@ -255,7 +255,7 @@ def test_evaluate_no_components_returns_zero(self): x = np.linspace(-5, 5, 100) # EXPECT result = component_collection.evaluate(x) - assert np.all(result == 0.0) + assert np.all(result == pytest.approx(0.0)) assert result.shape == x.shape def test_evaluate_component(self, component_collection): @@ -283,7 +283,7 @@ def test_evaluate_component_no_components_raises(self): component_collection = ComponentCollection(display_name='EmptyModel') x = np.linspace(-5, 5, 100) # EXPECT - with pytest.raises(ValueError, match='No components in the model to evaluate.'): + with pytest.raises(ValueError, match=r'No components in the model to evaluate.'): component_collection.evaluate_component(x, 'AnyComponent') def test_evaluate_component_invalid_name_type_raises(self, component_collection): @@ -293,7 +293,7 @@ def test_evaluate_component_invalid_name_type_raises(self, component_collection) # THEN EXPECT with pytest.raises( TypeError, - match="Component unique name must be a string, got instead.", + match=r"Component unique name must be a string, got instead.", ): component_collection.evaluate_component(x, 123) @@ -312,7 +312,7 @@ def test_normalize_area_no_components_raises(self): # WHEN THEN component_collection = ComponentCollection(display_name='EmptyModel') # EXPECT - with pytest.raises(ValueError, match='No components in the model to normalize.'): + with pytest.raises(ValueError, match=r'No components in the model to normalize.'): component_collection.normalize_area() @pytest.mark.parametrize( @@ -326,7 +326,7 @@ def test_normalize_area_not_finite_area_raises(self, component_collection, area_ component_collection.components[1].area = area_value # EXPECT - with pytest.raises(ValueError, match='cannot normalize.'): + with pytest.raises(ValueError, match=r'cannot normalize'): component_collection.normalize_area() def test_normalize_area_non_area_component_warns(self, component_collection): diff --git a/tests/unit/easydynamics/sample_model/test_instrument_model.py b/tests/unit/easydynamics/sample_model/test_instrument_model.py index dad4ae9f..e8983b0d 100644 --- a/tests/unit/easydynamics/sample_model/test_instrument_model.py +++ b/tests/unit/easydynamics/sample_model/test_instrument_model.py @@ -172,7 +172,7 @@ def test_unit_setter_raises(self, instrument_model): # WHEN / THEN / EXPECT with pytest.raises( AttributeError, - match='Unit is read-only. Use convert_unit to change the unit between allowed types ', + match=r'Unit is read-only. Use convert_unit to change the unit between allowed types ', ): instrument_model.unit = 'meV' @@ -184,7 +184,7 @@ def test_energy_offset_setter(self, instrument_model): instrument_model.energy_offset = 1.0 # EXPECT - assert instrument_model.energy_offset.value == 1.0 + assert instrument_model.energy_offset.value == pytest.approx(1.0) instrument_model._on_energy_offset_change.assert_called_once() def test_energy_offset_setter_raises(self, instrument_model): diff --git a/tests/unit/easydynamics/sample_model/test_model_base.py b/tests/unit/easydynamics/sample_model/test_model_base.py index 41f1cf59..5ad066a2 100644 --- a/tests/unit/easydynamics/sample_model/test_model_base.py +++ b/tests/unit/easydynamics/sample_model/test_model_base.py @@ -268,7 +268,7 @@ def test_convert_unit_invalid_raises(self, model_base): def test_convert_unit_incorrect_unit_raises(self, model_base): # WHEN THEN EXPECT - with pytest.raises(TypeError, match='Unit must be a string or sc.Unit'): + with pytest.raises(TypeError, match=r'Unit must be a string or sc.Unit'): model_base.convert_unit(123) def test_components_setter(self, model_base): diff --git a/tests/unit/easydynamics/sample_model/test_sample_model.py b/tests/unit/easydynamics/sample_model/test_sample_model.py index 6c20f0b0..a093b1c1 100644 --- a/tests/unit/easydynamics/sample_model/test_sample_model.py +++ b/tests/unit/easydynamics/sample_model/test_sample_model.py @@ -65,7 +65,7 @@ def test_init(self, sample_model): assert isinstance(model.diffusion_models, list) assert len(model.diffusion_models) == 1 assert isinstance(model.diffusion_models[0], BrownianTranslationalDiffusion) - assert model.temperature.value == 10.0 + assert model.temperature.value == pytest.approx(10.0) assert model.divide_by_temperature is True np.testing.assert_array_equal(model.Q, np.array([1.0, 2.0, 3.0])) @@ -205,7 +205,7 @@ def test_temperature_setter(self, sample_model): model.temperature = 20.0 # EXPECT - assert model.temperature.value == 20.0 + assert model.temperature.value == pytest.approx(20.0) # THEN model.temperature = None @@ -217,7 +217,7 @@ def test_temperature_setter(self, sample_model): model.temperature = 0.0 # EXPECT - assert model.temperature.value == 0.0 + assert model.temperature.value == pytest.approx(0.0) @pytest.mark.parametrize( 'invalid_value', @@ -233,7 +233,7 @@ def test_temperature_setter_raises_with_invalid_type(self, invalid_value, sample # WHEN / THEN / EXPECT with pytest.raises( (TypeError, ValueError), - match='temperature must be a number or None|temperature must be non-negative', + match=r'temperature must be a number or None|temperature must be non-negative', ): sample_model.temperature = invalid_value @@ -347,9 +347,9 @@ def test_generate_component_collections(self, sample_model): assert isinstance(collection, ComponentCollection) assert len(collection.components) == 3 # 3 components assert collection.components[0].display_name == 'TestGaussian1' - assert collection.components[0].area.value == 1.0 + assert collection.components[0].area.value == pytest.approx(1.0) assert collection.components[1].display_name == 'TestLorentzian1' - assert collection.components[1].area.value == 2.0 + assert collection.components[1].area.value == pytest.approx(2.0) assert collection.components[2].display_name == 'Brownian diffusion' assert isinstance(collection.components[2], Lorentzian) diff --git a/tests/unit/easydynamics/utils/test_detailed_balance.py b/tests/unit/easydynamics/utils/test_detailed_balance.py index 7662dff3..bebf5407 100644 --- a/tests/unit/easydynamics/utils/test_detailed_balance.py +++ b/tests/unit/easydynamics/utils/test_detailed_balance.py @@ -21,7 +21,7 @@ def test_energy_unit_not_string_error(self): T = 100 energy_unit = 5 # Then Expect - with pytest.raises(TypeError, match='energy_unit must be a string.'): + with pytest.raises(TypeError, match=r'energy_unit must be a string.'): detailed_balance_factor(energy, T, energy_unit=energy_unit) @pytest.mark.parametrize('temperature_unit', [5, 5.0, {}, []]) @@ -30,7 +30,7 @@ def test_temperature_unit_not_string_error(self, temperature_unit): energy = 2.0 T = 100 # Then Expect - with pytest.raises(TypeError, match='temperature_unit must be a string.'): + with pytest.raises(TypeError, match=r'temperature_unit must be a string.'): detailed_balance_factor(energy, T, temperature_unit=temperature_unit) def test_divide_by_temperature_not_bool_error(self): @@ -39,7 +39,7 @@ def test_divide_by_temperature_not_bool_error(self): T = 100 divide_by_temperature = 'yes' # Then Expect - with pytest.raises(TypeError, match='divide_by_temperature must be True or False.'): + with pytest.raises(TypeError, match=r'divide_by_temperature must be True or False.'): detailed_balance_factor(energy, T, divide_by_temperature=divide_by_temperature) @pytest.mark.parametrize( @@ -219,7 +219,7 @@ def test_energy_unit_warning(self): # Then with pytest.warns( UserWarning, - match='Input energy has unit µeV, but energy_unit was set to meV. Using µeV.', + match='Input energy has unit [µμ]eV, but energy_unit was set to meV. Using [µμ]eV.', ): result = detailed_balance_factor( energy=energy, From 113b4d97d3ba60b77e5da0e8db430217a4042756 Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Mon, 20 Apr 2026 13:28:00 +0200 Subject: [PATCH 08/10] Fix bug when plotting data with a single Q value (#158) * Fix bug when there is only one Q index * PR comment --- pixi.lock | 645 +++++++++++------- src/easydynamics/analysis/analysis.py | 34 +- .../convolution/numerical_convolution_base.py | 6 +- .../easydynamics/analysis/test_analysis.py | 49 ++ 4 files changed, 458 insertions(+), 276 deletions(-) diff --git a/pixi.lock b/pixi.lock index 11627bd0..0d2efa1f 100644 --- a/pixi.lock +++ b/pixi.lock @@ -84,11 +84,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda @@ -106,7 +106,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -132,7 +132,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -161,7 +161,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -172,15 +172,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -192,7 +192,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -222,16 +222,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -248,7 +248,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -256,8 +256,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -271,7 +271,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/fe/ad0ecbe2393cb690a4b3100a8fea47ecfdb49f6e06f40cf2f626635adc0c/scipp-26.3.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -286,7 +286,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -364,11 +364,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py314h6e9b3f0_1.conda @@ -384,7 +384,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -412,7 +412,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -441,7 +441,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl @@ -452,15 +452,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -472,7 +472,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl @@ -502,16 +502,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -528,7 +528,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -536,8 +536,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -551,7 +551,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -566,7 +566,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -635,10 +635,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda @@ -652,7 +652,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -677,7 +677,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -712,7 +712,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl @@ -723,14 +723,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -742,7 +742,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl @@ -772,16 +772,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -798,7 +798,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -806,8 +806,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -821,7 +821,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1f/28/3f8aa247d29d010547d52207395cb057ebd0a40b88f64bc1dbac9e17a729/scipp-26.3.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -836,7 +836,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -926,11 +926,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda @@ -949,7 +949,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -975,7 +975,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1004,7 +1004,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1015,15 +1015,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e5/59/a32a241d861cf180853a11c8e5a67641cb1b2af13c3a5ccce83ec07e2c9f/chardet-7.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1035,7 +1035,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -1065,16 +1065,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1091,7 +1091,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1099,8 +1099,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/a3/09d929a40e6727274b0b500ad06e1b3f35d4f4665ae1c8ba65acbb17e9b5/pydantic_core-2.46.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1114,7 +1114,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1e/e7/cd78635d0ece7e4d3393f2c1d2ebabf6ff4bd615da142891b1d42ad58abf/scipp-26.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1129,7 +1129,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1207,10 +1207,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py312h04c11ed_1.conda @@ -1226,7 +1226,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -1254,7 +1254,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1283,7 +1283,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl @@ -1294,15 +1294,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9c/2f/4c5af01fd1a7506a1d5375403d68925eac70289229492db5aa68b58103d8/chardet-7.4.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1314,7 +1314,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl @@ -1344,16 +1344,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1370,7 +1370,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1378,8 +1378,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/61/bcffaa52894489ff89e5e1cdde67429914bf083c0db7296bef153020f786/pydantic_core-2.46.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1393,7 +1393,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/44/7b/537a61906eac58d94131273084d21d4eb219f5453f0ed30de3aca580a2b4/scipp-26.3.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1408,7 +1408,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1477,9 +1477,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda @@ -1493,7 +1493,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -1518,7 +1518,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1553,7 +1553,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl @@ -1564,14 +1564,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/60/fca69c534602a7ced04280c952a246ad1edde2a6ca3a164f65d32ac41fe7/chardet-7.4.3-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1583,7 +1583,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl @@ -1613,16 +1613,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1639,7 +1639,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/31/8b/9e8baf7dacac8d0c174925c38ff43c6d94bc9abb35503f67762caccb6869/plopp-26.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl @@ -1647,8 +1647,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/22/05/8a1fcf8181be4c7a9cfc34e5fbf2d9c3866edc9dfd3c48d5401806e0a523/pydantic_core-2.46.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1662,7 +1662,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/1a/1f/86b4d15221096cb5500bcd73bf350745749e3ba056cdd7a7f75f126f154e/scipp-26.3.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.0-py3-none-any.whl @@ -1677,7 +1677,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -1767,7 +1767,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda @@ -1789,7 +1789,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -1815,7 +1815,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -1844,7 +1844,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1855,15 +1855,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -1875,7 +1875,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl @@ -1905,16 +1905,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -1939,8 +1939,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -1969,7 +1969,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -2047,7 +2047,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda @@ -2067,7 +2067,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -2095,7 +2095,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -2124,7 +2124,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl @@ -2135,15 +2135,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -2155,7 +2155,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl @@ -2185,16 +2185,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -2219,8 +2219,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -2249,7 +2249,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -2318,7 +2318,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda @@ -2335,7 +2335,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda @@ -2360,7 +2360,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda @@ -2395,7 +2395,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl @@ -2406,14 +2406,14 @@ environments: - pypi: https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl @@ -2425,7 +2425,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/f2/9d779717fd4ff4136d009a8023704f7eb37f2231fbfbe49eb9b430315bcc/easyscience-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl @@ -2455,16 +2455,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl @@ -2489,8 +2489,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl @@ -2519,7 +2519,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl @@ -3119,26 +3119,25 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 335782 timestamp: 1764018443683 -- pypi: https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/4a/57/3b7d4dd193ade4641c865bc2b93aeeb71162e81fc348b8dad020215601ed/build-1.4.2-py3-none-any.whl name: build - version: 1.4.3 - sha256: 1bc22b19b383303de8f2c8554c9a32894a58d3f185fe3756b0b20d255bee9a38 + version: 1.4.2 + sha256: 7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 requires_dist: - packaging>=24.0 - pyproject-hooks - colorama ; os_name == 'nt' - importlib-metadata>=4.6 ; python_full_version < '3.10.2' - tomli>=1.1.0 ; python_full_version < '3.11' - - keyring ; extra == 'keyring' - uv>=0.1.18 ; extra == 'uv' - virtualenv>=20.11 ; python_full_version < '3.10' and extra == 'virtualenv' - virtualenv>=20.17 ; python_full_version >= '3.10' and python_full_version < '3.14' and extra == 'virtualenv' - virtualenv>=20.31 ; python_full_version >= '3.14' and extra == 'virtualenv' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/43/8e/278ea79cf8ee0c395a5ad74625b3465c2fc234bb277f171dd59dd203820d/bumps-1.0.3-py3-none-any.whl name: bumps - version: 1.0.4 - sha256: 78b8cfaf9fbcbf2fd77f6d4a2f8c906b0e03a794804ba6caf64d56d6f6cce4d4 + version: 1.0.3 + sha256: 4f503c814b9ddd2cda760b2e35aaa6285651434fc2e64ccac55b1a666bca17f6 requires_dist: - numpy - scipy @@ -3152,7 +3151,7 @@ packages: - plotly - mpld3 - msgpack - - uncertainties + - graphlib-backport ; python_full_version < '3.9' - build ; extra == 'dev' - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' @@ -3162,7 +3161,7 @@ packages: - setuptools ; extra == 'dev' - sphinx ; extra == 'dev' - versioningit ; extra == 'dev' - requires_python: '>=3.10' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -3264,7 +3263,7 @@ packages: - python >=3.10 license: ISC purls: - - pkg:pypi/certifi?source=compressed-mapping + - pkg:pypi/certifi?source=hash-mapping size: 151445 timestamp: 1772001170301 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda @@ -3368,35 +3367,35 @@ packages: version: 3.5.0 sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/32/60/fca69c534602a7ced04280c952a246ad1edde2a6ca3a164f65d32ac41fe7/chardet-7.4.3-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/53/b1/320ee3b3d8b1b95f48d02a081f28e23caf9bd044ff11e6c1597ffe65fa2f/chardet-7.4.1-cp312-cp312-macosx_11_0_arm64.whl name: chardet - version: 7.4.3 - sha256: 4b2799bd58e7245cfa8d4ab2e8ad1d76a5c3a5b1f32318eb6acca4c69a3e7101 + version: 7.4.1 + sha256: b726b0b2684d29cd08f602bb4266334386c58741ff34c9e2f6cdf97ad604e235 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/5a/ea/119e9b64e74762ec279f4c742c353e35602437f29ae3ddc2b0cb43071dba/chardet-7.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.3 - sha256: acc46d1b8b7d5783216afe15db56d1c179b9a40e5a1558bc13164c4fd20674c4 + version: 7.4.1 + sha256: 277ce1174ea054415a3c2ad5f51aa089a96dda16999de56e4ac1bc366d0d535e requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9c/2f/4c5af01fd1a7506a1d5375403d68925eac70289229492db5aa68b58103d8/chardet-7.4.3-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/61/52/38714d4cb9d0a7d864aaf405ea7c26bcdb0fce7035a4fbc7a34c548afb2e/chardet-7.4.1-cp314-cp314-win_amd64.whl name: chardet - version: 7.4.3 - sha256: 29af5999f654e8729d251f1724a62b538b1262d9292cccaefddf8a02aae1ef6a + version: 7.4.1 + sha256: 5d86402a506631af2fb36e3d1c72021477b228fb0dcdb44400b9b681f14b14c0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/6e/4c/dc7359553bcb0ff0511ef84bf997ad6308bc1bd0ca268bbcebb2866cebf5/chardet-7.4.1-cp312-cp312-win_amd64.whl name: chardet - version: 7.4.3 - sha256: b95c934b9ad59e2ba8abb9be49df70d3ad1b0d95d864b9fdb7588d4fa8bd921c + version: 7.4.1 + sha256: fcaed03cefa53f62346091ef92da7a6f44bae6830a6f4c6b097a70cdc31b1199 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e3/30/1af6666f34e3ced9a2dd2993743c1f70af7b52d5db4c4eba22c42a265eae/chardet-7.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: chardet - version: 7.4.3 - sha256: 6e3bd9f936e04bae89c254262af08d9e5b98f805175ba1e29d454e6cba3107b7 + version: 7.4.1 + sha256: 3d66d2949754ad924865a47e81857a0792dc8edc651094285116b6df2e218445 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e5/59/a32a241d861cf180853a11c8e5a67641cb1b2af13c3a5ccce83ec07e2c9f/chardet-7.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f1/ac/f2661976d435f2e16ed31b2e61cbdf6afcd2289220cf5f35fc981bae828b/chardet-7.4.1-cp314-cp314-macosx_11_0_arm64.whl name: chardet - version: 7.4.3 - sha256: 9a4904dd5f071b7a7d7f50b4a67a86db3c902d243bf31708f1d5cde2f68239cb + version: 7.4.1 + sha256: be39708b300a80a9f78ef8f81018e2e9c6274a71c0823a4d6e493c72f7b3d2a2 requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 @@ -3599,10 +3598,30 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/75/3f/aa2458b3b88e59b0be1a06685f237c944375186f4652eb9b5d43bb5ebe21/copier-9.14.3-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/ca/cc/b1ce2de93f097468d394a71821671f34de34d16d841476c11496edd226b1/copier-9.14.1-py3-none-any.whl + name: copier + version: 9.14.1 + sha256: cec88ca48b653fc251660e7787bca893ede719d265f3e50281f4d54badb404b5 + requires_dist: + - colorama>=0.4.6 + - dunamai>=1.7.0 + - funcy>=1.17 + - jinja2-ansible-filters>=1.3.1 + - jinja2>=3.1.5 + - packaging>=23.0 + - pathspec>=0.9.0 + - platformdirs>=4.3.6 + - plumbum>=1.6.9 + - pydantic>=2.4.2 + - pygments>=2.7.1 + - pyyaml>=5.3.1 + - questionary>=1.8.1 + - typing-extensions>=4.0.0,<5.0.0 ; python_full_version < '3.11' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a9/fe/bce5ec796db178879c286332dbb285cadf9e94f1989df4647afa8c1867ae/copier-9.14.2-py3-none-any.whl name: copier - version: 9.14.3 - sha256: b237bb8a7fba91fbe0580ee54292e7a4c915028f08389f1ee99332fb70d2cab1 + version: 9.14.2 + sha256: f27e65944b33cf5ab62ca0da5bd76c450754dbd5269db567c501c29c6417f6a6 requires_dist: - colorama>=0.4.6 - dunamai>=1.7.0 @@ -3869,7 +3888,7 @@ packages: requires_python: '>=3.5' - pypi: ./ name: easydynamics - version: 0.4.0+devdirty20 + version: 0.4.0+devdirty10 sha256: 03e3e912335d4cddf2e70179da113fb35cb4cad133450b3a9e8583aaf5927e6e requires_dist: - darkdetect @@ -3978,10 +3997,10 @@ packages: - pkg:pypi/executing?source=hash-mapping size: 30753 timestamp: 1756729456476 -- pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl name: filelock - version: 3.28.0 - sha256: de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db + version: 3.25.2 + sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: fonttools @@ -5445,42 +5464,42 @@ packages: purls: [] size: 603262 timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d - md5: b88d90cad08e6bc8ad540cb310a761fb +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: c7c83eecbb72d88b940c249af56c8b17 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - xz 5.8.3.* + - xz 5.8.2.* license: 0BSD purls: [] - size: 113478 - timestamp: 1775825492909 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda - sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e - md5: b1fd823b5ae54fbec272cea0811bd8a9 + size: 113207 + timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e + md5: 009f0d956d7bfb00de86901d16e486c7 depends: - __osx >=11.0 constrains: - - xz 5.8.3.* + - xz 5.8.2.* license: 0BSD purls: [] - size: 92472 - timestamp: 1775825802659 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 - md5: 8f83619ab1588b98dd99c90b0bfc5c6d + size: 92242 + timestamp: 1768752982486 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c + md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - xz 5.8.3.* + - xz 5.8.2.* license: 0BSD purls: [] - size: 106486 - timestamp: 1775825663227 + size: 106169 + timestamp: 1768752763559 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -5588,6 +5607,18 @@ packages: purls: [] size: 276860 timestamp: 1772479407566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 + md5: fd893f6a3002a635b5e50ceb9dd2c0f4 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 951405 + timestamp: 1772818874251 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.0-hf4e2dac_0.conda sha256: ec37c79f737933bbac965f5dc0f08ef2790247129a84bb3114fad4900adce401 md5: 810d83373448da85c3f673fbcb7ad3a3 @@ -5600,6 +5631,17 @@ packages: purls: [] size: 958864 timestamp: 1775753750179 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c + md5: f6233a3fddc35a2ec9f617f79d6f3d71 + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 918420 + timestamp: 1772819478684 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.0-h1b79a29_0.conda sha256: 1a9d1e3e18dbb0b87cff3b40c3e42703730d7ac7ee9b9322c2682196a81ba0c3 md5: 8423c008105df35485e184066cad4566 @@ -5610,6 +5652,17 @@ packages: purls: [] size: 920039 timestamp: 1775754485962 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 + md5: 8830689d537fda55f990620680934bb1 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + purls: [] + size: 1297302 + timestamp: 1772818899033 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.0-hf5d6505_0.conda sha256: 7a6256ea136936df4c4f3b227ba1e273b7d61152f9811b52157af497f07640b0 md5: 4152b5a8d2513fd7ae9fb9f221a5595d @@ -6053,13 +6106,13 @@ packages: version: 1.3.4 sha256: 70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307 requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl name: mike - version: 2.2.0 - sha256: e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040 + version: 2.1.4 + sha256: 39933e992e155dd70f2297e749a0ed78d8fd7942bc33a3666195d177758a280e requires_dist: - jinja2>=2.7 - - mkdocs~=1.0 + - mkdocs>=1.0 - pyparsing>=3.0 - pyyaml>=5.1 - pyyaml-env-tag @@ -6142,10 +6195,10 @@ packages: - platformdirs>=2.2.0 - pyyaml>=5.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/81/e8/9fbd3b72fd5dc11a806f174eedc96d303d5806d155307272c0d71c08c48b/mkdocs_jupyter-0.26.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/93/89/eb601278b12c471235860992f5973cf3c55ca3f77d1d6127389eb045a021/mkdocs_jupyter-0.26.1-py3-none-any.whl name: mkdocs-jupyter - version: 0.26.2 - sha256: 5c12f59b14d5cfb79e779c6134b9bb8476ec0544b22097ae2ad31a9ebfc1a693 + version: 0.26.1 + sha256: 527242c2c8f1d30970764bbab752de41243e5703f458d8bc05336ec53828192e requires_dist: - ipykernel>6.0.0,<8 - jupytext>1.13.8,<2 @@ -6198,10 +6251,10 @@ packages: requires_dist: - mkdocs requires_python: '>=3.5' -- pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl name: mkdocstrings - version: 1.0.4 - sha256: 63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b + version: 1.0.3 + sha256: 0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046 requires_dist: - jinja2>=3.1 - markdown>=3.6 @@ -6312,7 +6365,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/msgspec?source=hash-mapping + - pkg:pypi/msgspec?source=compressed-mapping size: 212340 timestamp: 1775697034631 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.0-py314h6c2aa35_0.conda @@ -6702,17 +6755,18 @@ packages: - pkg:pypi/overrides?source=hash-mapping size: 30139 timestamp: 1734587755455 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.1-pyhc364b38_0.conda - sha256: 171d977bc977fd80f2a05de3d4b7d571c4ec3cdea436ed364e5cd50547c50881 - md5: b8ae38639d323d808da535fb71e31be8 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 depends: - python >=3.8 - python license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/packaging?source=compressed-mapping - size: 89360 - timestamp: 1776209387231 + - pkg:pypi/packaging?source=hash-mapping + size: 72010 + timestamp: 1769093650580 - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl name: paginate version: 0.5.7 @@ -7558,6 +7612,46 @@ packages: - xarray>=2024.5.0 ; extra == 'test' - anywidget>=0.9.0 ; extra == 'test' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/52/d2/c6e44dba74f17c6216ce1b56044a9b93a929f1c2d5bdaff892512b260f5e/plotly-6.6.0-py3-none-any.whl + name: plotly + version: 6.6.0 + sha256: 8d6daf0f87412e0c0bfe72e809d615217ab57cc715899a1e5145135a7800d1d0 + requires_dist: + - narwhals>=1.15.1 + - packaging + - numpy ; extra == 'express' + - kaleido>=1.1.0 ; extra == 'kaleido' + - pytest ; extra == 'dev-core' + - requests ; extra == 'dev-core' + - ruff==0.11.12 ; extra == 'dev-core' + - plotly[dev-core] ; extra == 'dev-build' + - build ; extra == 'dev-build' + - jupyter ; extra == 'dev-build' + - plotly[dev-build] ; extra == 'dev-optional' + - plotly[kaleido] ; extra == 'dev-optional' + - anywidget ; extra == 'dev-optional' + - colorcet ; extra == 'dev-optional' + - fiona<=1.9.6 ; python_full_version < '3.9' and extra == 'dev-optional' + - geopandas ; extra == 'dev-optional' + - inflect ; extra == 'dev-optional' + - numpy ; extra == 'dev-optional' + - orjson ; extra == 'dev-optional' + - pandas ; extra == 'dev-optional' + - pdfrw ; extra == 'dev-optional' + - pillow ; extra == 'dev-optional' + - plotly-geo ; extra == 'dev-optional' + - polars[timezone] ; extra == 'dev-optional' + - pyarrow ; extra == 'dev-optional' + - pyshp ; extra == 'dev-optional' + - pytz ; extra == 'dev-optional' + - scikit-image ; extra == 'dev-optional' + - scipy ; extra == 'dev-optional' + - shapely ; extra == 'dev-optional' + - statsmodels ; extra == 'dev-optional' + - vaex ; python_full_version < '3.10' and extra == 'dev-optional' + - xarray ; extra == 'dev-optional' + - plotly[dev-optional] ; extra == 'dev' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl name: plotly version: 6.7.0 @@ -7858,57 +7952,57 @@ packages: - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 -- pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl name: pydantic - version: 2.13.1 - sha256: 9557ecc2806faaf6037f85b1fbd963d01e30511c48085f0d573650fdeaad378a + version: 2.12.5 + sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d requires_dist: - annotated-types>=0.6.0 - - pydantic-core==2.46.1 + - pydantic-core==2.41.5 - typing-extensions>=4.14.1 - typing-inspection>=0.4.2 - email-validator>=2.0.0 ; extra == 'email' - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/22/05/8a1fcf8181be4c7a9cfc34e5fbf2d9c3866edc9dfd3c48d5401806e0a523/pydantic_core-2.46.1-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.46.1 - sha256: aea4e22ed4c53f2774221435e39969a54d2e783f4aee902cdd6c8011415de893 + version: 2.41.5 + sha256: eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl name: pydantic-core - version: 2.46.1 - sha256: b83ce9fede4bc4fb649281d9857f06d30198b8f70168f18b987518d713111572 + version: 2.41.5 + sha256: 8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7b/4b/4cd19d2437acfc18ca166db5a2067040334991eb862c4ecf2db098c91fbf/pydantic_core-2.46.1-cp314-cp314-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core - version: 2.46.1 - sha256: 1706d270309ac7d071ffe393988c471363705feb3d009186e55d17786ada9622 + version: 2.41.5 + sha256: 22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a1/a3/09d929a40e6727274b0b500ad06e1b3f35d4f4665ae1c8ba65acbb17e9b5/pydantic_core-2.46.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl name: pydantic-core - version: 2.46.1 - sha256: a641cb1e74b44c418adaf9f5f450670dbec53511f030d8cde8d8accb66edc363 + version: 2.41.5 + sha256: 1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl name: pydantic-core - version: 2.46.1 - sha256: 0e749679ca9f8a9d0bff95fb7f6b57bb53f2207fa42ffcc1ec86de7e0029ab89 + version: 2.41.5 + sha256: 1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fa/61/bcffaa52894489ff89e5e1cdde67429914bf083c0db7296bef153020f786/pydantic_core-2.46.1-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl name: pydantic-core - version: 2.46.1 - sha256: daba6f5f5b986aa0682623a1a4f8d1ecb0ec00ce09cfa9ca71a3b742bc383e3a + version: 2.41.5 + sha256: 070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 requires_dist: - typing-extensions>=4.14.1 requires_python: '>=3.9' @@ -8661,18 +8755,19 @@ packages: - pkg:pypi/requests?source=compressed-mapping size: 63712 timestamp: 1774894783063 -- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.27.0-pyhc364b38_0.conda - sha256: 3b45efeae771f1a20307b36ecdb3a8911a89c05382836b50c62b0a99d8d3dfd8 - md5: da94ff04d97ec5efc42cbe5da3c43a84 +- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda + sha256: 619962bf637f5cadf967adcec2c5ad1d408418b56830a701aec19e876e5197d0 + md5: bec7ce42bd4cc803e21c43e9b7fb8860 depends: - - python >=3.11 + - python >=3.10 - typing_extensions >=4.0,<5.0 - python license: BSD-2-Clause + license_family: BSD purls: - pkg:pypi/returns?source=hash-mapping - size: 100559 - timestamp: 1776176903101 + size: 100610 + timestamp: 1753812221549 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5 md5: 36de09a8d3e5d5e6f4ee63af49e59706 @@ -8803,6 +8898,21 @@ packages: - pkg:pypi/rpds-py?source=hash-mapping size: 235780 timestamp: 1764543046065 +- pypi: https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl + name: ruff + version: 0.15.9 + sha256: 45a70921b80e1c10cf0b734ef09421f71b5aa11d27404edc89d7e8a69505e43d + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.15.9 + sha256: eaf05aad70ca5b5a0a4b0e080df3a6b699803916d88f006efd1f5b46302daab8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.15.9 + sha256: 2b0c7c341f68adb01c488c3b7d4b49aa8ea97409eae6462d860a79cf55f431b6 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl name: ruff version: 0.15.10 @@ -9755,17 +9865,30 @@ packages: - mypy ; extra == 'test' - pretend ; extra == 'test' - pytest ; extra == 'test' -- pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + name: virtualenv + version: 21.2.0 + sha256: 1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs>=3.9.1,<5 + - python-discovery>=1 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl name: virtualenv - version: 21.2.4 - sha256: 29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac + version: 21.2.1 + sha256: bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2 requires_dist: - distlib>=0.3.7,<1 - filelock>=3.24.2,<4 ; python_full_version >= '3.10' - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' - importlib-metadata>=6.6 ; python_full_version < '3.8' - platformdirs>=3.9.1,<5 - - python-discovery>=1.2.2 + - python-discovery>=1 - typing-extensions>=4.13.2 ; python_full_version < '3.11' requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl @@ -10001,18 +10124,18 @@ packages: purls: [] size: 265665 timestamp: 1772476832995 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca - md5: e1c36c6121a7c9c76f2f148f1e83b983 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 depends: - python >=3.10 - python license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=compressed-mapping - size: 24461 - timestamp: 1776131454755 + - pkg:pypi/zipp?source=hash-mapping + size: 24194 + timestamp: 1764460141901 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/src/easydynamics/analysis/analysis.py b/src/easydynamics/analysis/analysis.py index 666edfd1..fe238166 100644 --- a/src/easydynamics/analysis/analysis.py +++ b/src/easydynamics/analysis/analysis.py @@ -71,17 +71,8 @@ def __init__( self._analysis_list = [] if self.Q is not None: - for Q_index in range(len(self.Q)): - analysis = Analysis1d( - display_name=f'{self.display_name}_Q{Q_index}', - unique_name=(f'{self.unique_name}_Q{Q_index}'), - experiment=self.experiment, - sample_model=self.sample_model, - instrument_model=self.instrument_model, - extra_parameters=self._extra_parameters, - Q_index=Q_index, - ) - self._analysis_list.append(analysis) + self._create_analysis_list() + # Now we can allow updates to trigger recalculations self._call_updaters = True @@ -519,6 +510,24 @@ def _on_instrument_model_changed(self) -> None: for analysis in self.analysis_list: analysis.instrument_model = self.instrument_model + def _create_analysis_list(self) -> None: + """ + Create the list of Analysis1d objects, one for each Q index, based on the current + experiment, sample model, and instrument model. + """ + self._analysis_list = [] + for Q_index in range(len(self.Q)): + analysis = Analysis1d( + display_name=f'{self.display_name}_Q{Q_index}', + unique_name=(f'{self.unique_name}_Q{Q_index}'), + experiment=self.experiment, + sample_model=self.sample_model, + instrument_model=self.instrument_model, + extra_parameters=self._extra_parameters, + Q_index=Q_index, + ) + self._analysis_list.append(analysis) + ############# # Private methods ############# @@ -665,7 +674,8 @@ def _create_components_dataset( for analysis1d in self.analysis_list ] - return sc.concat(datasets, dim='Q') + ds = sc.concat(datasets, dim='Q') + return ds.assign_coords(Q=self.Q) ############# # Dunder methods diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index 818579ac..c49245c7 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -66,13 +66,13 @@ def __init__( The factor by which to extend the input data range before convolution. temperature : Parameter | Numeric | None, default=None The temperature to use for detailed balance correction. - temperature_unit : str | sc.Unit, default="K" + temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. - unit : str | sc.Unit, default="meV" + unit : str | sc.Unit, default='meV' The unit of the energy. normalize_detailed_balance : bool, default=True Whether to normalize the detailed balance correction. - display_name : str | None, default="MyConvolution" + display_name : str | None, default='MyConvolution' Display name of the model. unique_name : str | None, default=None Unique name of the model. If None, a unique name will be generated. diff --git a/tests/unit/easydynamics/analysis/test_analysis.py b/tests/unit/easydynamics/analysis/test_analysis.py index 67e93aab..712b1cbc 100644 --- a/tests/unit/easydynamics/analysis/test_analysis.py +++ b/tests/unit/easydynamics/analysis/test_analysis.py @@ -41,6 +41,31 @@ def analysis(self): extra_parameters=None, ) + @pytest.fixture + def analysis_single_Q(self): + Q = sc.array(dims=['Q'], values=[1, 2, 3], unit='1/Angstrom') + energy = sc.array(dims=['energy'], values=[10.0, 20.0, 30.0], unit='meV') + data = sc.array( + dims=['Q', 'energy'], + values=[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]], + variances=[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]], + ) + + data_array = sc.DataArray(data=data, coords={'Q': Q, 'energy': energy}) + + experiment = Experiment(data=data_array) + experiment.rebin({'Q': 1}) + sample_model = SampleModel(components=Gaussian(), display_name='Gaussian') + instrument_model = InstrumentModel() + + return Analysis( + display_name='TestAnalysis', + experiment=experiment, + sample_model=sample_model, + instrument_model=instrument_model, + extra_parameters=None, + ) + def test_init(self, analysis): # WHEN THEN @@ -729,3 +754,27 @@ def test_create_components_dataset(self, analysis): assert component_name in components_dataset assert 'Q' in components_dataset[component_name].dims assert 'energy' in components_dataset[component_name].dims + assert components_dataset.sizes['Q'] == analysis.Q.sizes['Q'] + + def test_create_components_dataset_single_Q(self, analysis_single_Q): + # WHEN + + # Add another component so that there are two components + analysis_single_Q.sample_model.append_component( + Gaussian(display_name='Gaussian2', area=0.5) + ) + + # THEN + components_dataset = analysis_single_Q._create_components_dataset(add_background=True) + + # THEN EXPECT + assert isinstance(components_dataset, sc.Dataset) + component_names = [comp.display_name for comp in analysis_single_Q.sample_model.components] + for component_name in component_names: + assert component_name in components_dataset + assert 'Q' in components_dataset[component_name].dims + assert 'energy' in components_dataset[component_name].dims + + assert components_dataset.coords['Q'].dims == ('Q',) + assert components_dataset.sizes['Q'] == 1 + assert components_dataset.coords['Q'].ndim == 1 From 5b06f1ee1173269f987c0b23cd5d26cd5fe5a940 Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Mon, 20 Apr 2026 14:50:34 +0200 Subject: [PATCH 09/10] Allow adjusting convolution settings for accuracy (#159) * implement ConvolutionSettings * All unit tests pass * implement in analysis part 1 * Update docs, linting * test convolution settings * update convolution tests * More tests * Remove normalize_detailed_balance from convolution_settings * PR comments * pixi fix * PR comments * Final tests? --- docs/docs/tutorials/convolution.ipynb | 15 +- docs/docs/tutorials/tutorial1_brownian.ipynb | 19 +- src/easydynamics/__init__.py | 2 + src/easydynamics/analysis/analysis.py | 15 ++ src/easydynamics/analysis/analysis1d.py | 19 +- src/easydynamics/analysis/analysis_base.py | 51 +++- src/easydynamics/convolution/__init__.py | 3 +- src/easydynamics/convolution/convolution.py | 39 +-- .../convolution/convolution_settings.py | 200 +++++++++++++++ .../convolution/numerical_convolution.py | 21 +- .../convolution/numerical_convolution_base.py | 108 +++++--- .../easydynamics/analysis/test_analysis.py | 13 + .../analysis/test_analysis_base.py | 54 ++++ .../convolution/test_convolution.py | 55 +++- .../convolution/test_convolution_settings.py | 237 ++++++++++++++++++ .../test_numerical_convolution_base.py | 155 +++++++++--- 16 files changed, 874 insertions(+), 132 deletions(-) create mode 100644 src/easydynamics/convolution/convolution_settings.py create mode 100644 tests/unit/easydynamics/convolution/test_convolution_settings.py diff --git a/docs/docs/tutorials/convolution.ipynb b/docs/docs/tutorials/convolution.ipynb index 8b106ebd..04f15cc9 100644 --- a/docs/docs/tutorials/convolution.ipynb +++ b/docs/docs/tutorials/convolution.ipynb @@ -120,11 +120,12 @@ " sample_components=sample_components,\n", " resolution_components=resolution_components,\n", " energy=energy - energy_offset,\n", - " upsample_factor=upsample_factor,\n", - " extension_factor=extension_factor,\n", " temperature=temperature,\n", - " normalize_detailed_balance=True,\n", ")\n", + "convolver.upsample_factor = upsample_factor\n", + "convolver.extension_factor = extension_factor\n", + "convolver.normalize_detailed_balance = True\n", + "\n", "y = convolver.convolution()\n", "\n", "\n", @@ -185,11 +186,11 @@ " sample_components=sample_components,\n", " resolution_components=resolution_components,\n", " energy=energy,\n", - " upsample_factor=upsample_factor,\n", - " extension_factor=extension_factor,\n", " energy_offset=energy_offset,\n", " temperature=temperature,\n", ")\n", + "convolver.upsample_factor = upsample_factor\n", + "convolver.extension_factor = extension_factor\n", "y = convolver.convolution()\n", "\n", "\n", @@ -213,7 +214,7 @@ ], "metadata": { "kernelspec": { - "display_name": "easydynamics_newbase", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -227,7 +228,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.12" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/docs/docs/tutorials/tutorial1_brownian.ipynb b/docs/docs/tutorials/tutorial1_brownian.ipynb index 73f2c26c..413ce036 100644 --- a/docs/docs/tutorials/tutorial1_brownian.ipynb +++ b/docs/docs/tutorials/tutorial1_brownian.ipynb @@ -398,7 +398,24 @@ "id": "b72a710b", "metadata": {}, "source": [ - "We don't want to fit our resolution anymore, so we fix all the parameters in it." + "We don't want to fit our resolution anymore, so we fix all the parameters in it.\n", + "\n", + "`Analysis` handles the convolution of the `sample_model` with the `resolution_model`. The calculation is analytical when possible, and otherwise numerical. For numerical convolution, it will give warnings if the result might be inaccurate due to various numerical errors. In that case, two settings can be varied to improve the result.\n", + "`upsample_factor` improves accuracy for narrow signals. The default is 5.\n", + "`extension_factor` improves accuracy for broad signals. Here, the default is 0.2.\n", + "It is furthermore possible to toggle whether detailed balance correction is normalized or not (see next tutorial)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0fb0c648", + "metadata": {}, + "outputs": [], + "source": [ + "diffusion_analysis.convolution_settings.upsample_factor = 6\n", + "diffusion_analysis.convolution_settings.extension_factor = 0.2\n", + "diffusion_analysis.convolution_settings.normalize_detailed_balance = True" ] }, { diff --git a/src/easydynamics/__init__.py b/src/easydynamics/__init__.py index b46f3856..c83d92cb 100644 --- a/src/easydynamics/__init__.py +++ b/src/easydynamics/__init__.py @@ -3,9 +3,11 @@ """EasyDynamics library.""" from easydynamics.analysis import Analysis +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment __all__ = [ 'Analysis', + 'ConvolutionSettings', 'Experiment', ] diff --git a/src/easydynamics/analysis/analysis.py b/src/easydynamics/analysis/analysis.py index fe238166..9b0966fd 100644 --- a/src/easydynamics/analysis/analysis.py +++ b/src/easydynamics/analysis/analysis.py @@ -13,6 +13,7 @@ from easydynamics.analysis.analysis1d import Analysis1d from easydynamics.analysis.analysis_base import AnalysisBase +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import SampleModel from easydynamics.sample_model.instrument_model import InstrumentModel @@ -33,6 +34,7 @@ def __init__( experiment: Experiment | None = None, sample_model: SampleModel | None = None, instrument_model: InstrumentModel | None = None, + convolution_settings: ConvolutionSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -52,6 +54,8 @@ def __init__( instrument_model : InstrumentModel | None, default=None The InstrumentModel associated with this Analysis. If None, a default InstrumentModel is created. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -66,6 +70,7 @@ def __init__( experiment=experiment, sample_model=sample_model, instrument_model=instrument_model, + convolution_settings=convolution_settings, extra_parameters=extra_parameters, ) @@ -510,6 +515,16 @@ def _on_instrument_model_changed(self) -> None: for analysis in self.analysis_list: analysis.instrument_model = self.instrument_model + def _on_convolution_settings_changed(self) -> None: + """ + Update the convolution settings in all Analysis1d objects when the convolution settings + change. + """ + if self._call_updaters: + super()._on_convolution_settings_changed() + for analysis1d in self.analysis_list: + analysis1d.convolution_settings = self.convolution_settings + def _create_analysis_list(self) -> None: """ Create the list of Analysis1d objects, one for each Q index, based on the current diff --git a/src/easydynamics/analysis/analysis1d.py b/src/easydynamics/analysis/analysis1d.py index 7a52c3d8..df698446 100644 --- a/src/easydynamics/analysis/analysis1d.py +++ b/src/easydynamics/analysis/analysis1d.py @@ -13,6 +13,7 @@ from easydynamics.analysis.analysis_base import AnalysisBase from easydynamics.convolution.convolution import Convolution +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel @@ -35,6 +36,7 @@ def __init__( sample_model: SampleModel | None = None, instrument_model: InstrumentModel | None = None, Q_index: int | None = None, + convolution_settings: ConvolutionSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -45,11 +47,9 @@ def __init__( display_name : str | None, default='MyAnalysis' Display name of the analysis. unique_name : str | None, default=None - Unique name of the analysis. If None, a unique name is automatically generated. By - default, None. + Unique name of the analysis. If None, a unique name is automatically generated. experiment : Experiment | None, default=None The Experiment associated with this Analysis. If None, a default Experiment is created. - sample_model : SampleModel | None, default=None The SampleModel associated with this Analysis. If None, a default SampleModel is created. @@ -59,6 +59,8 @@ def __init__( Q_index : int | None, default=None The Q index to analyze. If None, the analysis will not be able to calculate or fit until a Q index is set. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -69,6 +71,7 @@ def __init__( experiment=experiment, sample_model=sample_model, instrument_model=instrument_model, + convolution_settings=convolution_settings, extra_parameters=extra_parameters, ) @@ -513,11 +516,12 @@ def _evaluate_components( return components.evaluate(energy_with_offset) conv = Convolution( + energy=energy, sample_components=components, resolution_components=resolution, - energy=energy, - temperature=self.temperature, energy_offset=energy_offset, + convolution_settings=self.convolution_settings, + temperature=self.temperature, ) return conv.convolution() @@ -668,11 +672,12 @@ def _create_convolver( return None return Convolution( + energy=energy, sample_components=sample_components, resolution_components=resolution_components, - energy=energy, - temperature=self.temperature, energy_offset=self.instrument_model.get_energy_offset(Q_index), + convolution_settings=self.convolution_settings, + temperature=self.temperature, ) ############# diff --git a/src/easydynamics/analysis/analysis_base.py b/src/easydynamics/analysis/analysis_base.py index cc351bb1..0bd78cd7 100644 --- a/src/easydynamics/analysis/analysis_base.py +++ b/src/easydynamics/analysis/analysis_base.py @@ -6,6 +6,7 @@ from easyscience.base_classes.model_base import ModelBase as EasyScienceModelBase from easyscience.variable import Parameter +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel @@ -29,6 +30,7 @@ def __init__( experiment: Experiment | None = None, sample_model: SampleModel | None = None, instrument_model: InstrumentModel | None = None, + convolution_settings: ConvolutionSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -43,13 +45,14 @@ def __init__( default, None. experiment : Experiment | None, default=None The Experiment associated with this Analysis. If None, a default Experiment is created. - sample_model : SampleModel | None, default=None The SampleModel associated with this Analysis. If None, a default SampleModel is created. instrument_model : InstrumentModel | None, default=None The InstrumentModel associated with this Analysis. If None, a default InstrumentModel is created. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -85,6 +88,15 @@ def __init__( else: raise TypeError('instrument_model must be an instance of InstrumentModel or None.') + if convolution_settings is None: + self.convolution_settings = ConvolutionSettings() + elif isinstance(convolution_settings, ConvolutionSettings): + self.convolution_settings = convolution_settings + else: + raise TypeError( + 'convolution_settings must be an instance of ConvolutionSettings or None.' + ) + if extra_parameters is not None: if isinstance(extra_parameters, Parameter): self._extra_parameters = [extra_parameters] @@ -294,6 +306,38 @@ def temperature(self, _value: np.ndarray | Parameter) -> None: raise AttributeError('temperature is a read-only property derived from the SampleModel.') + @property + def convolution_settings(self) -> ConvolutionSettings: + """ + Get the convolution settings for this Analysis. + + Returns + ------- + ConvolutionSettings + The convolution settings for this Analysis. + """ + return self._convolution_settings + + @convolution_settings.setter + def convolution_settings(self, value: ConvolutionSettings) -> None: + """ + Set the convolution settings for this Analysis. + + Parameters + ---------- + value : ConvolutionSettings + The convolution settings to set for this Analysis. + + Raises + ------ + TypeError + If value is not an instance of ConvolutionSettings. + """ + if not isinstance(value, ConvolutionSettings): + raise TypeError('convolution_settings must be an instance of ConvolutionSettings.') + self._convolution_settings = value + self._on_convolution_settings_changed() + @property def extra_parameters(self) -> list[Parameter]: """ @@ -365,6 +409,11 @@ def _on_instrument_model_changed(self) -> None: """ self.instrument_model.Q = self.Q + def _on_convolution_settings_changed(self) -> None: + """ + For subclasses that implement convolution, this method can be overridden + """ + def _verify_Q_index(self, Q_index: int | None) -> int | None: """ Verify that the Q index is valid. diff --git a/src/easydynamics/convolution/__init__.py b/src/easydynamics/convolution/__init__.py index 2cbfdcf5..fd5fe9ab 100644 --- a/src/easydynamics/convolution/__init__.py +++ b/src/easydynamics/convolution/__init__.py @@ -2,5 +2,6 @@ # SPDX-License-Identifier: BSD-3-Clause from easydynamics.convolution.convolution import Convolution +from easydynamics.convolution.convolution_settings import ConvolutionSettings -__all__ = ['Convolution'] +__all__ = ['Convolution', 'ConvolutionSettings'] diff --git a/src/easydynamics/convolution/convolution.py b/src/easydynamics/convolution/convolution.py index 0c49be4d..77805e61 100644 --- a/src/easydynamics/convolution/convolution.py +++ b/src/easydynamics/convolution/convolution.py @@ -8,6 +8,7 @@ from easyscience.variable import Parameter from easydynamics.convolution.analytical_convolution import AnalyticalConvolution +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.numerical_convolution import NumericalConvolution from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model import ComponentCollection @@ -42,8 +43,6 @@ class Convolution(NumericalConvolutionBase): '_sample_components', '_resolution_components', '_temperature', - '_upsample_factor', - '_extension_factor', '_energy_unit', '_normalize_detailed_balance', } @@ -54,12 +53,10 @@ def __init__( sample_components: ComponentCollection | ModelComponent, resolution_components: ComponentCollection | ModelComponent, energy_offset: Numeric | Parameter = 0.0, - upsample_factor: Numeric | None = 5, - extension_factor: Numeric | None = 0.2, + convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', unit: str | sc.Unit = 'meV', - normalize_detailed_balance: bool = True, display_name: str | None = 'MyConvolution', unique_name: str | None = None, ) -> None: @@ -76,37 +73,30 @@ def __init__( The resolution components to convolve with. energy_offset : Numeric | Parameter, default=0.0 An energy offset to apply to the energy values before convolution. - upsample_factor : Numeric | None, default=5 - The factor by which to upsample the input data before convolution. Default is 5. - extension_factor : Numeric | None, default=0.2 - The factor by which to extend the input data range before convolution. Default is 0.2. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. If None, default settings will be used. temperature : Parameter | Numeric | None, default=None The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. unit : str | sc.Unit, default='meV' The unit of the energy. - normalize_detailed_balance : bool, default=True - Whether to normalize the detailed balance correction. Default is True. display_name : str | None, default='MyConvolution' Display name of the model. unique_name : str | None, default=None Unique name of the model. If None, a unique name will be generated. """ - self._convolution_plan_is_valid = False self._reactions_enabled = False super().__init__( energy=energy, sample_components=sample_components, resolution_components=resolution_components, energy_offset=energy_offset, - upsample_factor=upsample_factor, - extension_factor=extension_factor, + convolution_settings=convolution_settings, temperature=temperature, temperature_unit=temperature_unit, unit=unit, - normalize_detailed_balance=normalize_detailed_balance, display_name=display_name, unique_name=unique_name, ) @@ -114,8 +104,8 @@ def __init__( self._reactions_enabled = True # Separate sample model components into pairs that can be # handled analytically, delta functions, and the rest - # Also initialize analytical and numerical convolvers based on s - # ample model component + # Also initialize analytical and numerical convolvers based on + # sample model component self._build_convolution_plan() def convolution( @@ -130,7 +120,7 @@ def convolution( np.ndarray The convolved values evaluated at energy. """ - if not self._convolution_plan_is_valid: + if not self.convolution_settings.convolution_plan_is_valid: self._build_convolution_plan() total = np.zeros_like(self.energy.values, dtype=float) @@ -256,10 +246,10 @@ def _build_convolution_plan(self) -> None: self._analytical_sample_components = analytical_sample_components self._delta_sample_components = delta_sample_components self._numerical_sample_components = numerical_sample_components - self._convolution_plan_is_valid = True # Update convolvers self._set_convolvers() + self.convolution_settings.convolution_plan_is_valid = True def _set_convolvers(self) -> None: """ @@ -285,11 +275,9 @@ def _set_convolvers(self) -> None: energy_offset=self.energy_offset, sample_components=self._numerical_sample_components, resolution_components=self._resolution_components, - upsample_factor=self.upsample_factor, - extension_factor=self.extension_factor, + convolution_settings=self.convolution_settings, temperature=self.temperature, temperature_unit=self._temperature_unit, - normalize_detailed_balance=self.normalize_detailed_balance, ) else: self._numerical_convolver = None @@ -312,8 +300,7 @@ def __setattr__(self, name: str, value: any) -> None: """ super().__setattr__(name, value) - if name in self._invalidate_plan_on_change: - self._convolution_plan_is_valid = False - + # Only rebuild the convolution plan if reactions are enabled, to + # avoid issues during __init__ if getattr(self, '_reactions_enabled', False) and name in self._invalidate_plan_on_change: - self._build_convolution_plan() + self.convolution_settings.convolution_plan_is_valid = False diff --git a/src/easydynamics/convolution/convolution_settings.py b/src/easydynamics/convolution/convolution_settings.py new file mode 100644 index 00000000..a845fc91 --- /dev/null +++ b/src/easydynamics/convolution/convolution_settings.py @@ -0,0 +1,200 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + + +from easydynamics.base_classes.easydynamics_base import EasyDynamicsBase +from easydynamics.utils.utils import Numeric + + +class ConvolutionSettings(EasyDynamicsBase): + """ + Settings for numerical convolutions. + """ + + def __init__( + self, + upsample_factor: Numeric | None = 5, + extension_factor: Numeric | None = 0.2, + display_name: str | None = 'MyConvolutionSettings', + unique_name: str | None = None, + ) -> None: + """ + Initialize the ConvolutionSettings. + + Parameters + ---------- + upsample_factor : Numeric | None, default=5 + The factor by which to upsample the input data before convolution. + extension_factor : Numeric | None, default=0.2 + The factor by which to extend the input data range before convolution. + display_name : str | None, default='MyConvolutionSettings' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + + Raises + ------ + TypeError + If upsample_factor is not a number or None. If extension_factor is not a number or + None. + ValueError + If upsample_factor is not greater than 1. If extension_factor is negative. + """ + super().__init__( + display_name=display_name, + unique_name=unique_name, + ) + + if extension_factor is not None: + if not isinstance(extension_factor, Numeric): + raise TypeError('Extension factor must be a number.') + extension_factor = float(extension_factor) + if extension_factor < 0.0: + raise ValueError('Extension factor must be non-negative.') + self._extension_factor = extension_factor + + if upsample_factor is not None: + if not isinstance(upsample_factor, Numeric): + raise TypeError('Upsample factor must be a numerical value or None.') + upsample_factor = float(upsample_factor) + if upsample_factor <= 1.0: + raise ValueError('Upsample factor must be greater than 1.') + self._upsample_factor = upsample_factor + + self._convolution_plan_is_valid = False + + @property + def upsample_factor(self) -> Numeric | None: + """ + Get the upsample factor. + + Returns + ------- + Numeric | None + The upsample factor. + """ + + return self._upsample_factor + + @upsample_factor.setter + def upsample_factor(self, factor: Numeric | None) -> None: + """ + Set the upsample factor and recreate the dense grid. + + Parameters + ---------- + factor : Numeric | None + The new upsample factor. + + Raises + ------ + TypeError + If factor is not a number or None. + ValueError + If factor is not greater than 1. + """ + if factor is None: + self._upsample_factor = factor + self.convolution_plan_is_valid = False + return + + if not isinstance(factor, Numeric): + raise TypeError('Upsample factor must be a numerical value or None.') + factor = float(factor) + if factor <= 1.0: + raise ValueError('Upsample factor must be greater than 1.') + + self._upsample_factor = factor + + self.convolution_plan_is_valid = False + + @property + def extension_factor(self) -> float: + """ + Get the extension factor. + + The extension factor determines how much the energy range is extended on both sides before + convolution. 0.2 means extending by 20% of the original energy span on each side + + Returns + ------- + float + The extension factor. + """ + + return self._extension_factor + + @extension_factor.setter + def extension_factor(self, factor: Numeric) -> None: + """ + Set the extension factor and recreate the dense grid. + + The extension factor determines how much the energy range is extended on both sides before + convolution. 0.2 means extending by 20% of the original energy span on each side. + + Parameters + ---------- + factor : Numeric + The new extension factor. + + Raises + ------ + TypeError + If factor is not a number. + ValueError + If factor is negative. + """ + + if not isinstance(factor, Numeric): + raise TypeError('Extension factor must be a number.') + if factor < 0.0: + raise ValueError('Extension factor must be non-negative.') + + self._extension_factor = float(factor) + self.convolution_plan_is_valid = False + + @property + def convolution_plan_is_valid(self) -> bool: + """ + Get whether the convolution plan is valid. + + Returns + ------- + bool + Whether the convolution plan is valid. + """ + return self._convolution_plan_is_valid + + @convolution_plan_is_valid.setter + def convolution_plan_is_valid(self, is_valid: bool) -> None: + """ + Set whether the convolution plan is valid. + + Parameters + ---------- + is_valid : bool + Whether the convolution plan is valid. + + Raises + ------ + TypeError + If is_valid is not a bool. + """ + if not isinstance(is_valid, bool): + raise TypeError('convolution_plan_is_valid must be True or False.') + self._convolution_plan_is_valid = is_valid + + def __repr__(self) -> str: + """ + Return a string representation of the ConvolutionSettings. + + Returns + ------- + str + A string representation of the ConvolutionSettings. + """ + return ( + f'{self.__class__.__name__}(' + f'upsample_factor={self.upsample_factor}, ' + f'extension_factor={self.extension_factor})' + ) diff --git a/src/easydynamics/convolution/numerical_convolution.py b/src/easydynamics/convolution/numerical_convolution.py index 17fc3904..434b6dd3 100644 --- a/src/easydynamics/convolution/numerical_convolution.py +++ b/src/easydynamics/convolution/numerical_convolution.py @@ -6,6 +6,7 @@ from easyscience.variable import Parameter from scipy.signal import fftconvolve +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent @@ -28,12 +29,10 @@ def __init__( sample_components: ComponentCollection | ModelComponent, resolution_components: ComponentCollection | ModelComponent, energy_offset: Numeric | Parameter = 0.0, - upsample_factor: Numeric | None = 5, - extension_factor: Numeric | None = 0.2, + convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', unit: str | sc.Unit = 'meV', - normalize_detailed_balance: bool = True, display_name: str | None = 'MyConvolution', unique_name: str | None = None, ) -> None: @@ -50,18 +49,14 @@ def __init__( The resolution model to convolve with. energy_offset : Numeric | Parameter, default=0.0 An energy offset to apply to the energy values before convolution. - upsample_factor : Numeric | None, default=5 - The factor by which to upsample the input data before convolution. - extension_factor : Numeric | None, default=0.2 - The factor by which to extend the input data range before convolution. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. temperature : Parameter | Numeric | None, default=None The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. unit : str | sc.Unit, default='meV' The unit of the energy. - normalize_detailed_balance : bool, default=True - Whether to normalize the detailed balance correction. Default is True. display_name : str | None, default='MyConvolution' Display name of the model. unique_name : str | None, default=None @@ -72,12 +67,10 @@ def __init__( sample_components=sample_components, resolution_components=resolution_components, energy_offset=energy_offset, - upsample_factor=upsample_factor, - extension_factor=extension_factor, + convolution_settings=convolution_settings, temperature=temperature, temperature_unit=temperature_unit, unit=unit, - normalize_detailed_balance=normalize_detailed_balance, display_name=display_name, unique_name=unique_name, ) @@ -94,6 +87,10 @@ def convolution( np.ndarray The convolved values evaluated at energy. """ + # Make sure the convolver is updated with the latest convolution + # settings before convolution. + if not self.convolution_settings.convolution_plan_is_valid: + self._energy_grid = self._create_energy_grid() # Give warnings if peaks are very wide or very narrow self._check_width_thresholds( diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index c49245c7..5ba2a51b 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -3,12 +3,12 @@ import warnings -# from dataclasses import dataclass import numpy as np import scipp as sc from easyscience.variable import Parameter from easydynamics.convolution.convolution_base import ConvolutionBase +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.energy_grid import EnergyGrid from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent @@ -38,12 +38,11 @@ def __init__( sample_components: ComponentCollection | ModelComponent, resolution_components: ComponentCollection | ModelComponent, energy_offset: Numeric | Parameter = 0.0, - upsample_factor: Numeric | None = 5, - extension_factor: Numeric | None = 0.2, + convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', - unit: str | sc.Unit = 'meV', normalize_detailed_balance: bool = True, + unit: str | sc.Unit = 'meV', display_name: str | None = 'MyConvolution', unique_name: str | None = None, ) -> None: @@ -60,18 +59,16 @@ def __init__( The resolution components to convolve with. energy_offset : Numeric | Parameter, default=0.0 An energy offset to apply to the energy values before convolution. - upsample_factor : Numeric | None, default=5 - The factor by which to upsample the input data before convolution. - extension_factor : Numeric | None, default=0.2 - The factor by which to extend the input data range before convolution. + convolution_settings : ConvolutionSettings | None, default=None + The settings for the convolution. If None, default settings will be used. temperature : Parameter | Numeric | None, default=None The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. + normalize_detailed_balance : bool, default=True + Whether to normalize the detailed balance factor by temperature. unit : str | sc.Unit, default='meV' The unit of the energy. - normalize_detailed_balance : bool, default=True - Whether to normalize the detailed balance correction. display_name : str | None, default='MyConvolution' Display name of the model. unique_name : str | None, default=None @@ -81,8 +78,7 @@ def __init__( ------ TypeError If temperature is not None, a number, or a Parameter, or if temperature_unit is not a - string or sc.Unit, or if upsample_factor is not a number or None, or if - extension_factor is not a number, or if normalize_detailed_balance is not a bool. + string or sc.Unit. """ super().__init__( energy=energy, @@ -103,16 +99,50 @@ def __init__( self._temperature = None self.temperature = temperature - self._normalize_detailed_balance = normalize_detailed_balance + if convolution_settings is None: + convolution_settings = ConvolutionSettings() + self._convolution_settings = convolution_settings - self._upsample_factor = upsample_factor - self._extension_factor = extension_factor + self._normalize_detailed_balance = normalize_detailed_balance # Create a dense grid to improve accuracy. # When upsample_factor>1, we evaluate on this grid and # interpolate back to the original values at the end self._energy_grid = self._create_energy_grid() + @property + def convolution_settings(self) -> ConvolutionSettings: + """ + Get the convolution settings. + + Returns + ------- + ConvolutionSettings + The convolution settings. + """ + + return self._convolution_settings + + @convolution_settings.setter + def convolution_settings(self, settings: ConvolutionSettings) -> None: + """ + Set the convolution settings and recreate the dense grid. + + Parameters + ---------- + settings : ConvolutionSettings + The new convolution settings. + + Raises + ------ + TypeError + If settings is not a ConvolutionSettings instance. + """ + if not isinstance(settings, ConvolutionSettings): + raise TypeError('settings must be a ConvolutionSettings instance.') + self._convolution_settings = settings + self._convolution_settings.convolution_plan_is_valid = False + @ConvolutionBase.energy.setter def energy(self, energy: np.ndarray) -> None: """ @@ -124,8 +154,7 @@ def energy(self, energy: np.ndarray) -> None: The new energy array. """ ConvolutionBase.energy.fset(self, energy) - # Recreate dense grid when energy is updated - self._energy_grid = self._create_energy_grid() + self.convolution_settings.convolution_plan_is_valid = False @property def upsample_factor(self) -> Numeric | None: @@ -138,7 +167,7 @@ def upsample_factor(self) -> Numeric | None: The upsample factor. """ - return self._upsample_factor + return self.convolution_settings.upsample_factor @upsample_factor.setter def upsample_factor(self, factor: Numeric | None) -> None: @@ -158,8 +187,7 @@ def upsample_factor(self, factor: Numeric | None) -> None: If factor is not greater than 1. """ if factor is None: - self._upsample_factor = factor - self._energy_grid = self._create_energy_grid() + self.convolution_settings.upsample_factor = factor return if not isinstance(factor, Numeric): @@ -168,10 +196,7 @@ def upsample_factor(self, factor: Numeric | None) -> None: if factor <= 1.0: raise ValueError('Upsample factor must be greater than 1.') - self._upsample_factor = factor - - # Recreate dense grid when upsample factor is updated - self._energy_grid = self._create_energy_grid() + self.convolution_settings.upsample_factor = factor @property def extension_factor(self) -> float: @@ -187,7 +212,7 @@ def extension_factor(self) -> float: The extension factor. """ - return self._extension_factor + return self.convolution_settings.extension_factor @extension_factor.setter def extension_factor(self, factor: Numeric) -> None: @@ -215,9 +240,7 @@ def extension_factor(self, factor: Numeric) -> None: if factor < 0.0: raise ValueError('Extension factor must be non-negative.') - self._extension_factor = float(factor) - # Recreate dense grid when extension factor is updated - self._energy_grid = self._create_energy_grid() + self.convolution_settings.extension_factor = float(factor) @property def temperature(self) -> Parameter | None: @@ -374,13 +397,16 @@ def _create_energy_grid( else: energy_dense_centered = energy_dense - return EnergyGrid( + energy_grid = EnergyGrid( energy_dense=energy_dense, energy_dense_centered=energy_dense_centered, energy_dense_step=energy_dense_step, energy_span_dense=energy_span_dense, energy_even_length_offset=energy_even_length_offset, ) + self._energy_grid = energy_grid + self.convolution_settings.convolution_plan_is_valid = True + return energy_grid def _check_width_thresholds( self, @@ -409,21 +435,25 @@ def _check_width_thresholds( if hasattr(comp, 'width'): if comp.width.value > LARGE_WIDTH_THRESHOLD * self._energy_grid.energy_span_dense: warnings.warn( - f"The width of the {model_name} component '{comp.unique_name}' \ - ({comp.width.value}) is large compared to the span of the input " - f'array ({self._energy_grid.energy_span_dense}). \ - This may lead to inaccuracies in the convolution. \ - Increase extension_factor to improve accuracy.', + ( + f"The width of the {model_name} component '{comp.unique_name}' " + f'({comp.width.value}) is large compared to the span of the input ' + f'array ({self._energy_grid.energy_span_dense}). ' + f'This may lead to inaccuracies in the convolution. ' + f'Increase extension_factor to improve accuracy.' + ), UserWarning, stacklevel=3, ) if comp.width.value < SMALL_WIDTH_THRESHOLD * self._energy_grid.energy_dense_step: warnings.warn( - f"The width of the {model_name} component '{comp.unique_name}' \ - ({comp.width.value}) is small compared to the spacing of the input " - f'array ({self._energy_grid.energy_dense_step}). \ - This may lead to inaccuracies in the convolution. \ - Increase upsample_factor to improve accuracy.', + ( + f"The width of the {model_name} component '{comp.unique_name}' " + f'({comp.width.value}) is small compared to the spacing of the input ' + f'array ({self._energy_grid.energy_dense_step}). ' + f'This may lead to inaccuracies in the convolution. ' + f'Increase upsample_factor to improve accuracy.' + ), UserWarning, stacklevel=3, ) diff --git a/tests/unit/easydynamics/analysis/test_analysis.py b/tests/unit/easydynamics/analysis/test_analysis.py index 712b1cbc..56985b6c 100644 --- a/tests/unit/easydynamics/analysis/test_analysis.py +++ b/tests/unit/easydynamics/analysis/test_analysis.py @@ -10,6 +10,7 @@ import scipp as sc from easydynamics.analysis.analysis import Analysis +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel @@ -614,6 +615,18 @@ def test_on_instrument_model_changed(self, analysis): for analysis1d in analysis.analysis_list: assert analysis1d.instrument_model is new_instrument_model + def test_on_convolution_settings_changed(self, analysis): + # WHEN + new_convolution_settings = ConvolutionSettings() + + # THEN (this calls _on_convolution_settings_changed internally) + analysis.convolution_settings = new_convolution_settings + + # EXPECT + assert analysis.convolution_settings is new_convolution_settings + for analysis1d in analysis.analysis_list: + assert analysis1d.convolution_settings is new_convolution_settings + def test_fit_single_Q_valid(self, analysis): # WHEN analysis.analysis_list[1].fit = MagicMock(return_value='fit_result_Q1') diff --git a/tests/unit/easydynamics/analysis/test_analysis_base.py b/tests/unit/easydynamics/analysis/test_analysis_base.py index 59b0ff90..33e019f2 100644 --- a/tests/unit/easydynamics/analysis/test_analysis_base.py +++ b/tests/unit/easydynamics/analysis/test_analysis_base.py @@ -9,6 +9,7 @@ from easyscience.variable import Parameter from easydynamics.analysis.analysis_base import AnalysisBase +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel @@ -37,6 +38,16 @@ def test_init(self, analysis_base): assert isinstance(analysis_base.instrument_model, InstrumentModel) assert analysis_base._extra_parameters == [] + def test_init_convolution_settings(self): + # WHEN + convolution_settings = ConvolutionSettings(upsample_factor=2, extension_factor=0.5) + + # THEN + analysis = AnalysisBase(convolution_settings=convolution_settings) + + # EXPECT + assert analysis.convolution_settings is convolution_settings + def test_init_extra_parameter(self): extra_parameter = Parameter(name='param1', value=1.0) analysis = AnalysisBase(extra_parameters=extra_parameter) @@ -73,6 +84,11 @@ def test_init_calls_on_experiment_changed(self): TypeError, 'instrument_model must be an instance of InstrumentModel', ), + ( + {'convolution_settings': 'not convolution settings'}, + TypeError, + 'convolution_settings must be an instance of ConvolutionSettings', + ), ( {'extra_parameters': 123}, TypeError, @@ -88,6 +104,7 @@ def test_init_calls_on_experiment_changed(self): 'invalid experiment', 'invalid sample_model', 'invalid instrument_model', + 'invalid convolution_settings', 'invalid extra_parameters', 'invalid extra_parameters list', ], @@ -218,6 +235,43 @@ def test_temperature_setter_raises(self, analysis_base): ): analysis_base.temperature = 300 + def test_convolution_settings_property(self, analysis_base): + # WHEN + convolution_settings = ConvolutionSettings( + upsample_factor=2, + extension_factor=0.5, + ) + + # THEN + analysis_base.convolution_settings = convolution_settings + + # EXPECT + assert analysis_base.convolution_settings is convolution_settings + + def test_convolution_settings_setter_invalid_type(self, analysis_base): + + # WHEN THEN EXPECT + with pytest.raises( + TypeError, + match='convolution_settings must be an instance of ConvolutionSettings', + ): + analysis_base.convolution_settings = 'not convolution settings' + + def test_convolution_settings_calls_on_convolution_settings_changed(self, analysis_base): + # WHEN + convolution_settings = ConvolutionSettings( + upsample_factor=2, + extension_factor=0.5, + ) + with patch.object( + analysis_base, '_on_convolution_settings_changed' + ) as mock_on_convolution_settings_changed: + # THEN + analysis_base.convolution_settings = convolution_settings + + # EXPECT + mock_on_convolution_settings_changed.assert_called_once() + @pytest.mark.parametrize( 'extra_parameters', [ diff --git a/tests/unit/easydynamics/convolution/test_convolution.py b/tests/unit/easydynamics/convolution/test_convolution.py index f7f1187f..a34da86c 100644 --- a/tests/unit/easydynamics/convolution/test_convolution.py +++ b/tests/unit/easydynamics/convolution/test_convolution.py @@ -97,7 +97,7 @@ def test_init(self, default_convolution): default_convolution._delta_sample_components.components[0] is default_convolution.sample_components.components[2] ) - assert default_convolution._convolution_plan_is_valid is True + assert default_convolution.convolution_settings.convolution_plan_is_valid is True assert default_convolution._reactions_enabled is True def test_init_components(self, convolution_with_components): @@ -133,7 +133,7 @@ def test_init_components(self, convolution_with_components): convolution_with_components._delta_sample_components, ComponentCollection ) assert convolution_with_components._delta_sample_components.is_empty - assert convolution_with_components._convolution_plan_is_valid is True + assert convolution_with_components.convolution_settings.convolution_plan_is_valid is True assert convolution_with_components._reactions_enabled is True def test_convolution_plan_is_built_when_invalid(self, default_convolution): @@ -142,7 +142,7 @@ def test_convolution_plan_is_built_when_invalid(self, default_convolution): """ # WHEN conv = default_convolution - conv._convolution_plan_is_valid = False + conv.convolution_settings.convolution_plan_is_valid = False # THEN EXPECT with patch.object(conv, '_build_convolution_plan') as build_plan: @@ -244,6 +244,7 @@ def test_convolution_calls_correct_methods( ) conv.sample_components = sample_components # This updates the internal sample models + conv._build_convolution_plan() # Ensure the plan is built with the new components # THEN # Mock the methods to be tested. Use nullcontext if the @@ -276,7 +277,7 @@ def test_convolution_calls_correct_methods( patch_numerical as mock_numerical_method, patch_delta as mock_delta_method, ): - conv._convolution_plan_is_valid = True + conv.convolution_settings._convolution_plan_is_valid = True conv.convolution() if analytical_component: @@ -480,8 +481,6 @@ def test_build_convolution_plan( conv.sample_components = sample_components # This updates the internal sample models if temperature is not None: conv.temperature = temperature - # It is already called by sample_components setter, but we now - # call it explicitly conv._build_convolution_plan() # EXPECT @@ -520,7 +519,7 @@ def test_build_convolution_plan( expected_numerical_count += 1 assert len(conv._numerical_sample_components.components) == expected_numerical_count - assert conv._convolution_plan_is_valid is True + assert conv.convolution_settings.convolution_plan_is_valid is True @pytest.mark.parametrize( 'analytical_component', @@ -563,9 +562,10 @@ def test_set_convolvers( ) # THEN - conv.sample_components = sample_components # This updates the internal sample models - # Should already have been called by sample_components setter, + conv.sample_components = sample_components + # Should already have been called by _build_convolution_plan, # but we now call it explicitly + conv._build_convolution_plan() # Ensure the plan is built with the new components conv._set_convolvers() # EXPECT @@ -578,3 +578,40 @@ def test_set_convolvers( assert isinstance(conv._numerical_convolver, NumericalConvolution) else: assert conv._numerical_convolver is None + + def test_setattr_does_not_invalidate_plan_for_non_tracked_attribute( + self, + default_convolution, + ): + # WHEN + conv = default_convolution + conv.convolution_settings.convolution_plan_is_valid = True + + # Capture current identity of internal state to ensure no rebuild + old_plan_id = id(conv._analytical_sample_components) + old_numerical_id = id(conv._numerical_sample_components) + old_delta_id = id(conv._delta_sample_components) + + # THEN (NOT in _invalidate_plan_on_change) + conv.display_name = 'new_name' + + # EXPECT + assert conv.convolution_settings.convolution_plan_is_valid is True + assert id(conv._analytical_sample_components) == old_plan_id + assert id(conv._numerical_sample_components) == old_numerical_id + assert id(conv._delta_sample_components) == old_delta_id + assert conv.display_name == 'new_name' + + def test_setattr_invalidates_plan_for_tracked_attribute( + self, + default_convolution, + ): + # WHEN + conv = default_convolution + conv.convolution_settings.convolution_plan_is_valid = True + + # THEN + conv.upsample_factor = 10 + + # EXPECT + assert conv.convolution_settings.convolution_plan_is_valid is False diff --git a/tests/unit/easydynamics/convolution/test_convolution_settings.py b/tests/unit/easydynamics/convolution/test_convolution_settings.py new file mode 100644 index 00000000..fa2f2a8b --- /dev/null +++ b/tests/unit/easydynamics/convolution/test_convolution_settings.py @@ -0,0 +1,237 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +import pytest + +from easydynamics.convolution.convolution_settings import ConvolutionSettings + + +class TestConvolutionSettings: + @pytest.fixture + def default_convolution_settings(self): + return ConvolutionSettings() + + def test_init(self, default_convolution_settings): + """ + Test initialization of ConvolutionSettings with default + parameters. + """ + # WHEN THEN EXPECT + assert isinstance(default_convolution_settings, ConvolutionSettings) + assert default_convolution_settings.upsample_factor == 5 + assert default_convolution_settings.extension_factor == pytest.approx(0.2) + assert default_convolution_settings.convolution_plan_is_valid is False + + def test_init_with_custom_parameters(self): + """ + Test initialization of ConvolutionSettings with custom + parameters. + """ + # WHEN + convolution_settings = ConvolutionSettings( + upsample_factor=10, + extension_factor=0.5, + ) + + # THEN EXPECT + assert convolution_settings.upsample_factor == 10 + assert convolution_settings.extension_factor == pytest.approx(0.5) + assert convolution_settings.convolution_plan_is_valid is False + + def test_init_with_None(self): + """ + Test initialization of ConvolutionSettings with custom + parameters. + """ + # WHEN + convolution_settings = ConvolutionSettings( + upsample_factor=None, + extension_factor=None, + ) + + # THEN EXPECT + assert convolution_settings.upsample_factor is None + assert convolution_settings.extension_factor is None + assert convolution_settings.convolution_plan_is_valid is False + + @pytest.mark.parametrize( + 'invalid_input, expected_exception, match', + [ + ({'extension_factor': '0.2'}, TypeError, 'must be a number'), + ({'extension_factor': -0.1}, ValueError, 'must be non-negative'), + ({'upsample_factor': '5'}, TypeError, 'must be a numerical value or None'), + ({'upsample_factor': 1.0}, ValueError, 'must be greater than 1'), + ({'upsample_factor': 0.5}, ValueError, 'must be greater than 1'), + ], + ids=[ + 'extension_factor_not_numeric', + 'extension_factor_negative', + 'upsample_factor_not_numeric', + 'upsample_factor_equal_1', + 'upsample_factor_less_than_1', + ], + ) + def test_init_raises_for_invalid_input(self, invalid_input, expected_exception, match): + """ + Test that initialization raises appropriate exceptions for + invalid input parameters. + """ + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + ConvolutionSettings(**invalid_input) + + @pytest.mark.parametrize( + 'value', + [2, 5.0, None], + ids=[ + 'integer_valid', + 'float_valid', + 'none_valid', + ], + ) + def test_upsample_factor_setter_valid(self, default_convolution_settings, value): + settings = default_convolution_settings + + # WHEN + # Ensure it's True first so we can test the reset + settings.convolution_plan_is_valid = True + + # THEN + settings.upsample_factor = value + + # EXPECT + expected = pytest.approx(float(value)) if value is not None else None + assert settings.upsample_factor == expected + assert settings.convolution_plan_is_valid is False + + @pytest.mark.parametrize( + 'value, expected_exception, match', + [ + ('5', TypeError, 'must be a numerical value or None'), + (1.0, ValueError, 'must be greater than 1'), + (0.5, ValueError, 'must be greater than 1'), + ], + ids=[ + 'not_numeric', + 'equal_1', + 'less_than_1', + ], + ) + def test_upsample_factor_setter_invalid( + self, + default_convolution_settings, + value, + expected_exception, + match, + ): + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + default_convolution_settings.upsample_factor = value + + @pytest.mark.parametrize( + 'value', + [0.0, 0.2, 1, 5.5], + ids=[ + 'zero', + 'typical_fraction', + 'integer', + 'float', + ], + ) + def test_extension_factor_setter_valid(self, default_convolution_settings, value): + + # WHEN + default_convolution_settings.convolution_plan_is_valid = True + + # THEN + default_convolution_settings.extension_factor = value + + # EXPECT + assert default_convolution_settings.extension_factor == pytest.approx(float(value)) + assert default_convolution_settings.convolution_plan_is_valid is False + + @pytest.mark.parametrize( + 'value, expected_exception, match', + [ + ('0.2', TypeError, 'must be a number'), + (-0.1, ValueError, 'must be non-negative'), + ], + ids=[ + 'not_numeric', + 'negative', + ], + ) + def test_extension_factor_setter_invalid( + self, + default_convolution_settings, + value, + expected_exception, + match, + ): + + # WHEN / THEN / EXPECT + with pytest.raises(expected_exception, match=match): + default_convolution_settings.extension_factor = value + + @pytest.mark.parametrize( + 'value', + [True, False], + ids=[ + 'true', + 'false', + ], + ) + def test_convolution_plan_is_valid_setter_valid( + self, + default_convolution_settings, + value, + ): + # WHEN + default_convolution_settings.convolution_plan_is_valid = not value + + # THEN + default_convolution_settings.convolution_plan_is_valid = value + + # EXPECT + assert default_convolution_settings.convolution_plan_is_valid is value + + @pytest.mark.parametrize( + 'value, expected_exception, match', + [ + ('True', TypeError, 'must be True or False'), + (1, TypeError, 'must be True or False'), + (None, TypeError, 'must be True or False'), + ], + ids=[ + 'string', + 'int', + 'none', + ], + ) + def test_convolution_plan_is_valid_setter_invalid( + self, + default_convolution_settings, + value, + expected_exception, + match, + ): + # WHEN / THEN / EXPECT + with pytest.raises(expected_exception, match=match): + default_convolution_settings.convolution_plan_is_valid = value + + def test_repr_default(self, default_convolution_settings): + # WHEN + repr_str = repr(default_convolution_settings) + + # EXPECT + assert repr_str == ('ConvolutionSettings(upsample_factor=5.0, extension_factor=0.2)') + + def test_repr_reflects_updated_values(self, default_convolution_settings): + # WHEN + default_convolution_settings.upsample_factor = 3 + default_convolution_settings.extension_factor = 0.5 + + repr_str = repr(default_convolution_settings) + + # EXPECT + assert repr_str == ('ConvolutionSettings(upsample_factor=3.0, extension_factor=0.5)') diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py index 76f212a2..074b2c41 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py @@ -6,6 +6,7 @@ import scipp as sc from easyscience.variable import Parameter +from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.energy_grid import EnergyGrid from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model import Gaussian @@ -59,33 +60,31 @@ def test_init_with_custom_parameters(self): energy = np.linspace(-5, 5, 50) sample_components = ComponentCollection(display_name='ComponentCollection') resolution_components = ComponentCollection(display_name='ResolutionModel') - upsample_factor = 10 - extension_factor = 0.5 + resolution_settings = ConvolutionSettings(upsample_factor=10, extension_factor=0.5) temperature = 300.0 temperature_unit = 'K' - unit = 'meV' normalize_detailed_balance = False + unit = 'meV' # THEN numerical_convolution_base = NumericalConvolutionBase( energy=energy, sample_components=sample_components, resolution_components=resolution_components, - upsample_factor=upsample_factor, - extension_factor=extension_factor, + convolution_settings=resolution_settings, + normalize_detailed_balance=normalize_detailed_balance, temperature=temperature, temperature_unit=temperature_unit, unit=unit, - normalize_detailed_balance=normalize_detailed_balance, ) # EXPECT - assert numerical_convolution_base.upsample_factor == upsample_factor - assert numerical_convolution_base.extension_factor == extension_factor + assert numerical_convolution_base.upsample_factor == 10 + assert numerical_convolution_base.extension_factor == pytest.approx(0.5) assert numerical_convolution_base.temperature.value == temperature assert numerical_convolution_base.temperature.unit == temperature_unit assert numerical_convolution_base.unit == unit - assert numerical_convolution_base.normalize_detailed_balance == normalize_detailed_balance + assert numerical_convolution_base.normalize_detailed_balance is False assert isinstance(numerical_convolution_base._energy_grid, EnergyGrid) def test_init_raises_type_error_for_invalid_temperature(self): @@ -128,6 +127,10 @@ def test_init_raises_type_error_for_invalid_temperature_unit(self): temperature_unit=invalid_temperature_unit, ) + #################### + # Test properties + ################### + def test_energy_setter(self, default_numerical_convolution_base): """ Test setting a new energy array updates the energy grid @@ -135,41 +138,64 @@ def test_energy_setter(self, default_numerical_convolution_base): """ # WHEN new_energy = np.linspace(-20, 20, 201) + + # THEN default_numerical_convolution_base.energy = new_energy - # THEN EXPECT + # EXPECT assert isinstance(default_numerical_convolution_base.energy, sc.Variable) assert np.allclose(default_numerical_convolution_base.energy.values, new_energy) + + # EXPECT: plan invalidated + assert ( + default_numerical_convolution_base.convolution_settings.convolution_plan_is_valid + is False + ) + + # THEN + # Force regeneration of energy grid + default_numerical_convolution_base._create_energy_grid() + + # EXPECT assert default_numerical_convolution_base._energy_grid.energy_dense.shape[0] == round( 201 * default_numerical_convolution_base.upsample_factor ) - def test_upsample_factor_setter(self, default_numerical_convolution_base): + @pytest.mark.parametrize( + 'new_upsample_factor, expected_size', + [ + (10, (101 * 10)), + (None, 101), + ], + ids=['upsample_10', 'no_upsampling'], + ) + def test_upsample_factor_setter( + self, + default_numerical_convolution_base, + new_upsample_factor, + expected_size, + ): """ - Test setting a new upsample factor updates the energy grid - accordingly. + Test setting upsample factor updates the energy grid correctly, + including disabling upsampling when set to None. """ # WHEN - new_upsample_factor = 10 default_numerical_convolution_base.upsample_factor = new_upsample_factor - # THEN EXPECT - assert default_numerical_convolution_base.upsample_factor == new_upsample_factor - assert default_numerical_convolution_base._energy_grid.energy_dense.shape[0] == round( - 101 * new_upsample_factor + # EXPECT: plan invalidated + assert ( + default_numerical_convolution_base.convolution_settings.convolution_plan_is_valid + is False ) - def test_upsample_factor_setter_none(self, default_numerical_convolution_base): - """ - Test setting upsample factor to None disables upsampling. - """ - # WHEN - new_upsample_factor = None - default_numerical_convolution_base.upsample_factor = new_upsample_factor + # Force regeneration of energy grid + default_numerical_convolution_base._create_energy_grid() - # THEN EXPECT + # EXPECT: correct factor + grid size assert default_numerical_convolution_base.upsample_factor == new_upsample_factor - assert default_numerical_convolution_base._energy_grid.energy_dense.shape[0] == 101 + assert ( + default_numerical_convolution_base._energy_grid.energy_dense.shape[0] == expected_size + ) @pytest.mark.parametrize( 'invalid_upsample_factor, expected_exception', @@ -204,9 +230,21 @@ def test_extension_factor_setter(self, default_numerical_convolution_base): """ # WHEN new_extension_factor = 0.5 + + # THEN default_numerical_convolution_base.extension_factor = new_extension_factor - # THEN EXPECT + # EXPECT: plan invalidated + assert ( + default_numerical_convolution_base.convolution_settings.convolution_plan_is_valid + is False + ) + + # THEN + # Force regeneration of energy grid + default_numerical_convolution_base._create_energy_grid() + + # EXPECT assert default_numerical_convolution_base.extension_factor == new_extension_factor expected_span = 20 + (0.5 * 20) # original span + extension assert np.isclose( @@ -316,6 +354,64 @@ def test_normalize_detailed_balance_setter_raises(self, default_numerical_convol with pytest.raises(TypeError, match='normalize_detailed_balance must be'): default_numerical_convolution_base.normalize_detailed_balance = 'invalid' + def test_convolution_settings_setter_valid( + self, + default_numerical_convolution_base, + ): + new_settings = ConvolutionSettings() + + # WHEN + new_settings.convolution_plan_is_valid = True + + # THEN + default_numerical_convolution_base.convolution_settings = new_settings + + # EXPECT + assert default_numerical_convolution_base.convolution_settings is new_settings + assert new_settings.convolution_plan_is_valid is False + + @pytest.mark.parametrize( + 'value, expected_exception, match', + [ + (None, TypeError, 'must be a ConvolutionSettings instance'), + ('settings', TypeError, 'must be a ConvolutionSettings instance'), + (123, TypeError, 'must be a ConvolutionSettings instance'), + ], + ids=[ + 'none', + 'string', + 'int', + ], + ) + def test_convolution_settings_setter_invalid( + self, + default_numerical_convolution_base, + value, + expected_exception, + match, + ): + # WHEN / THEN / EXPECT + with pytest.raises(expected_exception, match=match): + default_numerical_convolution_base.convolution_settings = value + + def test_convolution_settings_overwrites_existing( + self, + default_numerical_convolution_base, + ): + first = ConvolutionSettings() + second = ConvolutionSettings() + + # WHEN + default_numerical_convolution_base.convolution_settings = first + default_numerical_convolution_base.convolution_settings = second + + # EXPECT + assert default_numerical_convolution_base.convolution_settings is second + + #################### + # Other tests + ################### + def test_create_energy_grid_upsample_none(self, default_numerical_convolution_base): """ Test creating energy grid with upsample_factor set to None (no @@ -347,11 +443,12 @@ def test_create_energy_grid_upsample_none_non_uniform_raises( """ # WHEN default_numerical_convolution_base.energy = np.array([0, 1, 3, 6, 10]) + default_numerical_convolution_base.upsample_factor = None with pytest.raises( ValueError, match='Input array `energy` must be uniformly spaced if upsample_factor is not given', ): - default_numerical_convolution_base.upsample_factor = None + default_numerical_convolution_base._create_energy_grid() @pytest.mark.parametrize('num_points', [100, 101], ids=['even', 'odd']) def test_create_energy_grid_upsample_and_extension( From e0e2aea59a4a62c82784158675ddb4087279815b Mon Sep 17 00:00:00 2001 From: Henrik Jacobsen Date: Wed, 22 Apr 2026 10:38:45 +0200 Subject: [PATCH 10/10] Implement detailed balance settings (#162) * Implement detailed balance settings * Minor fixes * typo * Move settings to settings folder * test detailed balance. move convolution settings test * a bunch of tests * more tests --- docs/docs/tutorials/sample_model.ipynb | 4 +- docs/docs/tutorials/tutorial0_basics.ipynb | 2 +- src/easydynamics/__init__.py | 2 +- src/easydynamics/analysis/analysis.py | 9 +- src/easydynamics/analysis/analysis1d.py | 58 +++-- src/easydynamics/analysis/analysis_base.py | 56 ++++- src/easydynamics/convolution/__init__.py | 3 +- src/easydynamics/convolution/convolution.py | 15 +- .../convolution/numerical_convolution.py | 11 +- .../convolution/numerical_convolution_base.py | 54 ++--- src/easydynamics/sample_model/sample_model.py | 123 ++++++++--- src/easydynamics/settings/__init__.py | 10 + .../convolution_settings.py | 0 .../settings/detailed_balance_settings.py | 134 ++++++++++++ .../easydynamics/analysis/test_analysis.py | 2 +- .../easydynamics/analysis/test_analysis1d.py | 36 ++++ .../analysis/test_analysis_base.py | 42 +++- .../convolution/test_convolution.py | 7 +- .../convolution/test_numerical_convolution.py | 5 +- .../test_numerical_convolution_base.py | 110 +++++++--- .../sample_model/test_sample_model.py | 204 ++++++++++++++---- .../test_convolution_settings.py | 2 +- .../test_detailed_balance_settings.py | 131 +++++++++++ 23 files changed, 852 insertions(+), 168 deletions(-) create mode 100644 src/easydynamics/settings/__init__.py rename src/easydynamics/{convolution => settings}/convolution_settings.py (100%) create mode 100644 src/easydynamics/settings/detailed_balance_settings.py rename tests/unit/easydynamics/{convolution => settings}/test_convolution_settings.py (98%) create mode 100644 tests/unit/easydynamics/settings/test_detailed_balance_settings.py diff --git a/docs/docs/tutorials/sample_model.ipynb b/docs/docs/tutorials/sample_model.ipynb index 5371f7df..882048ce 100644 --- a/docs/docs/tutorials/sample_model.ipynb +++ b/docs/docs/tutorials/sample_model.ipynb @@ -134,7 +134,7 @@ ], "metadata": { "kernelspec": { - "display_name": "easydynamics_newbase", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -148,7 +148,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.12" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/docs/docs/tutorials/tutorial0_basics.ipynb b/docs/docs/tutorials/tutorial0_basics.ipynb index 227fd5c2..44442036 100644 --- a/docs/docs/tutorials/tutorial0_basics.ipynb +++ b/docs/docs/tutorials/tutorial0_basics.ipynb @@ -48,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "7121f9c8", "metadata": {}, "outputs": [], diff --git a/src/easydynamics/__init__.py b/src/easydynamics/__init__.py index c83d92cb..54557144 100644 --- a/src/easydynamics/__init__.py +++ b/src/easydynamics/__init__.py @@ -3,8 +3,8 @@ """EasyDynamics library.""" from easydynamics.analysis import Analysis -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment +from easydynamics.settings.convolution_settings import ConvolutionSettings __all__ = [ 'Analysis', diff --git a/src/easydynamics/analysis/analysis.py b/src/easydynamics/analysis/analysis.py index 9b0966fd..b8493ec9 100644 --- a/src/easydynamics/analysis/analysis.py +++ b/src/easydynamics/analysis/analysis.py @@ -13,10 +13,11 @@ from easydynamics.analysis.analysis1d import Analysis1d from easydynamics.analysis.analysis_base import AnalysisBase -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import SampleModel from easydynamics.sample_model.instrument_model import InstrumentModel +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings from easydynamics.utils.utils import _in_notebook @@ -35,6 +36,7 @@ def __init__( sample_model: SampleModel | None = None, instrument_model: InstrumentModel | None = None, convolution_settings: ConvolutionSettings | None = None, + detailed_balance_settings: DetailedBalanceSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -56,6 +58,8 @@ def __init__( is created. convolution_settings : ConvolutionSettings | None, default=None The settings for the convolution. If None, default settings will be used. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -71,6 +75,7 @@ def __init__( sample_model=sample_model, instrument_model=instrument_model, convolution_settings=convolution_settings, + detailed_balance_settings=detailed_balance_settings, extra_parameters=extra_parameters, ) @@ -538,6 +543,8 @@ def _create_analysis_list(self) -> None: experiment=self.experiment, sample_model=self.sample_model, instrument_model=self.instrument_model, + convolution_settings=self.convolution_settings, + detailed_balance_settings=self.detailed_balance_settings, extra_parameters=self._extra_parameters, Q_index=Q_index, ) diff --git a/src/easydynamics/analysis/analysis1d.py b/src/easydynamics/analysis/analysis1d.py index df698446..489f4381 100644 --- a/src/easydynamics/analysis/analysis1d.py +++ b/src/easydynamics/analysis/analysis1d.py @@ -13,12 +13,14 @@ from easydynamics.analysis.analysis_base import AnalysisBase from easydynamics.convolution.convolution import Convolution -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings +from easydynamics.utils.detailed_balance import detailed_balance_factor class Analysis1d(AnalysisBase): @@ -37,6 +39,7 @@ def __init__( instrument_model: InstrumentModel | None = None, Q_index: int | None = None, convolution_settings: ConvolutionSettings | None = None, + detailed_balance_settings: DetailedBalanceSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -61,6 +64,8 @@ def __init__( until a Q index is set. convolution_settings : ConvolutionSettings | None, default=None The settings for the convolution. If None, default settings will be used. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -72,6 +77,7 @@ def __init__( sample_model=sample_model, instrument_model=instrument_model, convolution_settings=convolution_settings, + detailed_balance_settings=detailed_balance_settings, extra_parameters=extra_parameters, ) @@ -452,6 +458,7 @@ def _evaluate_components( convolver: Convolution | None = None, convolve: bool = True, energy: sc.Variable | None = None, + apply_detailed_balance: bool = False, ) -> np.ndarray: """ Calculate the contribution of a set of components, optionally convolving with the @@ -475,6 +482,9 @@ def _evaluate_components( energy : sc.Variable | None, default=None Optional energy grid to use for evaluation. If None, the energy grid from the experiment is used. + apply_detailed_balance : bool, default=False + Whether to apply detailed balance correction. + Returns ------- @@ -496,24 +506,42 @@ def _evaluate_components( if isinstance(components, ComponentCollection) and components.is_empty: return np.zeros_like(energy.values) - # No convolution - if not convolve: - return components.evaluate(energy_with_offset) - - # If a convolver is provided, use it. This allows reusing the + # If a convolver is provided, we use it. This allows reusing the # same convolver for multiple evaluations during fitting for # performance reasons. if convolver is not None: return convolver.convolution() - # If no convolver is provided, create a new one. This is for - # evaluating individual components for plotting, where - # performance is not important. + # No convolution can happen for multiple reasons: + # Case 1: convolve=False, used for evaluating background components, where we don't want + # to convolve with the resolution. In this case, apply_detailed_balance is False, + # and we evaluate the components without DBF regardles of the settings + # Case 2: convolve=True but there is no resolution_model. In this case, + # apply_detailed_balance is True. We apply DBF if temperature is provided and + # the settings say to use detailed balance. - # We don't create a convolver if the resolution is empty. resolution = self.instrument_model.resolution_model.get_component_collection(Q_index) - if resolution.is_empty: - return components.evaluate(energy_with_offset) + if not convolve or resolution.is_empty: + result_no_convolution = components.evaluate(energy_with_offset) + if ( + apply_detailed_balance + and self.temperature is not None + and self.detailed_balance_settings.use_detailed_balance + ): + DBF = detailed_balance_factor( + energy=energy_with_offset, + temperature=self.temperature, + divide_by_temperature=self.detailed_balance_settings.normalize_detailed_balance, + energy_unit=self.unit, + ) + result_no_convolution *= DBF + return result_no_convolution + + # If no convolver is provided, we create a new one. This is for + # evaluating individual components for plotting, where + # performance is not important. We already handled the case of + # background components above, so we know that this is for sample components, + # where detailed balance settings should be applied. conv = Convolution( energy=energy, @@ -522,6 +550,7 @@ def _evaluate_components( energy_offset=energy_offset, convolution_settings=self.convolution_settings, temperature=self.temperature, + detailed_balance_settings=self.detailed_balance_settings, ) return conv.convolution() @@ -552,6 +581,7 @@ def _evaluate_sample( convolver=self._convolver, convolve=True, energy=energy, + apply_detailed_balance=True, ) def _evaluate_sample_component( @@ -580,6 +610,7 @@ def _evaluate_sample_component( convolver=None, convolve=True, energy=energy, + apply_detailed_balance=True, ) def _evaluate_background(self, energy: sc.Variable | None = None) -> np.ndarray: @@ -606,6 +637,7 @@ def _evaluate_background(self, energy: sc.Variable | None = None) -> np.ndarray: convolver=None, convolve=False, energy=energy, + apply_detailed_balance=False, ) def _evaluate_background_component( @@ -635,6 +667,7 @@ def _evaluate_background_component( convolver=None, convolve=False, energy=energy, + apply_detailed_balance=False, ) def _create_convolver( @@ -678,6 +711,7 @@ def _create_convolver( energy_offset=self.instrument_model.get_energy_offset(Q_index), convolution_settings=self.convolution_settings, temperature=self.temperature, + detailed_balance_settings=self.detailed_balance_settings, ) ############# diff --git a/src/easydynamics/analysis/analysis_base.py b/src/easydynamics/analysis/analysis_base.py index 0bd78cd7..01f0a20f 100644 --- a/src/easydynamics/analysis/analysis_base.py +++ b/src/easydynamics/analysis/analysis_base.py @@ -3,16 +3,17 @@ import numpy as np import scipp as sc -from easyscience.base_classes.model_base import ModelBase as EasyScienceModelBase from easyscience.variable import Parameter -from easydynamics.convolution.convolution_settings import ConvolutionSettings +from easydynamics.base_classes.easydynamics_modelbase import EasyDynamicsModelBase from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings -class AnalysisBase(EasyScienceModelBase): +class AnalysisBase(EasyDynamicsModelBase): """ Base class for analysis in EasyDynamics. @@ -31,6 +32,7 @@ def __init__( sample_model: SampleModel | None = None, instrument_model: InstrumentModel | None = None, convolution_settings: ConvolutionSettings | None = None, + detailed_balance_settings: DetailedBalanceSettings | None = None, extra_parameters: Parameter | list[Parameter] | None = None, ) -> None: """ @@ -53,6 +55,8 @@ def __init__( is created. convolution_settings : ConvolutionSettings | None, default=None The settings for the convolution. If None, default settings will be used. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. extra_parameters : Parameter | list[Parameter] | None, default=None Extra parameters to be included in the analysis for advanced users. If None, no extra parameters are added. @@ -61,8 +65,10 @@ def __init__( ------ TypeError If experiment is not an Experiment or None or if sample_model is not a SampleModel or - None or if instrument_model is not an InstrumentModel or None or if extra_parameters is - not a Parameter, a list of Parameters, or None. + None or if instrument_model is not an InstrumentModel or None or if + convolution_settings is not a ConvolutionSettings or None or if + detailed_balance_settings is not a DetailedBalanceSettings or None or if + extra_parameters is not a Parameter, a list of Parameters, or None. """ super().__init__(display_name=display_name, unique_name=unique_name) @@ -109,6 +115,15 @@ def __init__( else: self._extra_parameters = [] + if detailed_balance_settings is None: + self._detailed_balance_settings = DetailedBalanceSettings() + elif isinstance(detailed_balance_settings, DetailedBalanceSettings): + self._detailed_balance_settings = detailed_balance_settings + else: + raise TypeError( + 'detailed_balance_settings must be an instance of DetailedBalanceSettings or None.' + ) + self._on_experiment_changed() ############# @@ -338,6 +353,37 @@ def convolution_settings(self, value: ConvolutionSettings) -> None: self._convolution_settings = value self._on_convolution_settings_changed() + @property + def detailed_balance_settings(self) -> DetailedBalanceSettings: + """ + Get the DetailedBalanceSettings of the SampleModel. + + Returns + ------- + DetailedBalanceSettings + The DetailedBalanceSettings of the SampleModel. + """ + return self._detailed_balance_settings + + @detailed_balance_settings.setter + def detailed_balance_settings(self, value: DetailedBalanceSettings) -> None: + """ + Set the DetailedBalanceSettings of the SampleModel. + + Parameters + ---------- + value : DetailedBalanceSettings + The DetailedBalanceSettings to set. + + Raises + ------ + TypeError + If value is not a DetailedBalanceSettings. + """ + if not isinstance(value, DetailedBalanceSettings): + raise TypeError('detailed_balance_settings must be a DetailedBalanceSettings') + self._detailed_balance_settings = value + @property def extra_parameters(self) -> list[Parameter]: """ diff --git a/src/easydynamics/convolution/__init__.py b/src/easydynamics/convolution/__init__.py index fd5fe9ab..2cbfdcf5 100644 --- a/src/easydynamics/convolution/__init__.py +++ b/src/easydynamics/convolution/__init__.py @@ -2,6 +2,5 @@ # SPDX-License-Identifier: BSD-3-Clause from easydynamics.convolution.convolution import Convolution -from easydynamics.convolution.convolution_settings import ConvolutionSettings -__all__ = ['Convolution', 'ConvolutionSettings'] +__all__ = ['Convolution'] diff --git a/src/easydynamics/convolution/convolution.py b/src/easydynamics/convolution/convolution.py index 77805e61..63bd66c6 100644 --- a/src/easydynamics/convolution/convolution.py +++ b/src/easydynamics/convolution/convolution.py @@ -8,7 +8,6 @@ from easyscience.variable import Parameter from easydynamics.convolution.analytical_convolution import AnalyticalConvolution -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.numerical_convolution import NumericalConvolution from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model import ComponentCollection @@ -17,6 +16,8 @@ from easydynamics.sample_model import Lorentzian from easydynamics.sample_model import Voigt from easydynamics.sample_model.components.model_component import ModelComponent +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings from easydynamics.utils.utils import Numeric @@ -45,6 +46,7 @@ class Convolution(NumericalConvolutionBase): '_temperature', '_energy_unit', '_normalize_detailed_balance', + '_detailed_balance_settings', } def __init__( @@ -56,6 +58,7 @@ def __init__( convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', + detailed_balance_settings: DetailedBalanceSettings | None = None, unit: str | sc.Unit = 'meV', display_name: str | None = 'MyConvolution', unique_name: str | None = None, @@ -79,6 +82,8 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. unit : str | sc.Unit, default='meV' The unit of the energy. display_name : str | None, default='MyConvolution' @@ -96,6 +101,7 @@ def __init__( convolution_settings=convolution_settings, temperature=temperature, temperature_unit=temperature_unit, + detailed_balance_settings=detailed_balance_settings, unit=unit, display_name=display_name, unique_name=unique_name, @@ -224,7 +230,10 @@ def _build_convolution_plan(self) -> None: # If temperature is set, all other components go to # numerical sample model - if self.temperature is not None: + if ( + self.temperature is not None + and self.detailed_balance_settings.use_detailed_balance + ): numerical_sample_components.append_component(sample_component) continue @@ -278,6 +287,8 @@ def _set_convolvers(self) -> None: convolution_settings=self.convolution_settings, temperature=self.temperature, temperature_unit=self._temperature_unit, + detailed_balance_settings=self.detailed_balance_settings, + unit=self.unit, ) else: self._numerical_convolver = None diff --git a/src/easydynamics/convolution/numerical_convolution.py b/src/easydynamics/convolution/numerical_convolution.py index 434b6dd3..7a990d37 100644 --- a/src/easydynamics/convolution/numerical_convolution.py +++ b/src/easydynamics/convolution/numerical_convolution.py @@ -6,10 +6,11 @@ from easyscience.variable import Parameter from scipy.signal import fftconvolve -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings from easydynamics.utils.detailed_balance import detailed_balance_factor from easydynamics.utils.utils import Numeric @@ -32,6 +33,7 @@ def __init__( convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', + detailed_balance_settings: DetailedBalanceSettings | None = None, unit: str | sc.Unit = 'meV', display_name: str | None = 'MyConvolution', unique_name: str | None = None, @@ -55,6 +57,8 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. unit : str | sc.Unit, default='meV' The unit of the energy. display_name : str | None, default='MyConvolution' @@ -70,6 +74,7 @@ def __init__( convolution_settings=convolution_settings, temperature=temperature, temperature_unit=temperature_unit, + detailed_balance_settings=detailed_balance_settings, unit=unit, display_name=display_name, unique_name=unique_name, @@ -111,12 +116,12 @@ def convolution( ) # Detailed balance correction - if self.temperature is not None: + if self.temperature is not None and self.detailed_balance_settings.use_detailed_balance: detailed_balance_factor_correction = detailed_balance_factor( energy=self._energy_grid.energy_dense - self.energy_offset.value, temperature=self.temperature, energy_unit=self.energy.unit, - divide_by_temperature=self.normalize_detailed_balance, + divide_by_temperature=self.detailed_balance_settings.normalize_detailed_balance, ) sample_vals *= detailed_balance_factor_correction diff --git a/src/easydynamics/convolution/numerical_convolution_base.py b/src/easydynamics/convolution/numerical_convolution_base.py index 5ba2a51b..7001e32b 100644 --- a/src/easydynamics/convolution/numerical_convolution_base.py +++ b/src/easydynamics/convolution/numerical_convolution_base.py @@ -8,10 +8,11 @@ from easyscience.variable import Parameter from easydynamics.convolution.convolution_base import ConvolutionBase -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.energy_grid import EnergyGrid from easydynamics.sample_model.component_collection import ComponentCollection from easydynamics.sample_model.components.model_component import ModelComponent +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings from easydynamics.utils.utils import Numeric # The thresholds are illustrated in @@ -41,7 +42,7 @@ def __init__( convolution_settings: ConvolutionSettings | None = None, temperature: Parameter | Numeric | None = None, temperature_unit: str | sc.Unit = 'K', - normalize_detailed_balance: bool = True, + detailed_balance_settings: DetailedBalanceSettings | None = None, unit: str | sc.Unit = 'meV', display_name: str | None = 'MyConvolution', unique_name: str | None = None, @@ -65,8 +66,8 @@ def __init__( The temperature to use for detailed balance correction. temperature_unit : str | sc.Unit, default='K' The unit of the temperature parameter. - normalize_detailed_balance : bool, default=True - Whether to normalize the detailed balance factor by temperature. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + The settings for detailed balance. If None, default settings will be used. unit : str | sc.Unit, default='meV' The unit of the energy. display_name : str | None, default='MyConvolution' @@ -103,7 +104,13 @@ def __init__( convolution_settings = ConvolutionSettings() self._convolution_settings = convolution_settings - self._normalize_detailed_balance = normalize_detailed_balance + if detailed_balance_settings is None: + detailed_balance_settings = DetailedBalanceSettings() + if not isinstance(detailed_balance_settings, DetailedBalanceSettings): + raise TypeError( + 'detailed_balance_settings must be a DetailedBalanceSettings instance.' + ) + self._detailed_balance_settings = detailed_balance_settings # Create a dense grid to improve accuracy. # When upsample_factor>1, we evaluate on this grid and @@ -292,42 +299,35 @@ def temperature(self, temp: Parameter | Numeric | None) -> None: raise TypeError('Temperature must be None, a float or a Parameter.') @property - def normalize_detailed_balance(self) -> bool: + def detailed_balance_settings(self) -> DetailedBalanceSettings: """ - Get whether to normalize the detailed balance factor. - - If True, the detailed balance factor is divided by temperature. + Get the DetailedBalanceSettings of the Convolution. Returns ------- - bool - Whether to normalize the detailed balance factor. + DetailedBalanceSettings + The DetailedBalanceSettings of the Convolution. """ + return self._detailed_balance_settings - return self._normalize_detailed_balance - - @normalize_detailed_balance.setter - def normalize_detailed_balance(self, normalize: bool) -> None: + @detailed_balance_settings.setter + def detailed_balance_settings(self, value: DetailedBalanceSettings) -> None: """ - Set whether to normalize the detailed balance factor. - - If True, the detailed balance factor is divided by temperature. + Set the DetailedBalanceSettings of the Convolution. Parameters ---------- - normalize : bool - Whether to normalize the detailed balance factor. + value : DetailedBalanceSettings + The DetailedBalanceSettings to set. Raises ------ TypeError - If normalize is not a bool. + If value is not a DetailedBalanceSettings. """ - - if not isinstance(normalize, bool): - raise TypeError('normalize_detailed_balance must be True or False.') - - self._normalize_detailed_balance = normalize + if not isinstance(value, DetailedBalanceSettings): + raise TypeError('detailed_balance_settings must be a DetailedBalanceSettings') + self._detailed_balance_settings = value def _create_energy_grid( self, @@ -476,5 +476,5 @@ def __repr__(self) -> str: f'upsample_factor={self.upsample_factor}, ' f'extension_factor={self.extension_factor}, ' f'temperature={self.temperature}, ' - f'normalize_detailed_balance={self.normalize_detailed_balance})' + f'detailed_balance={self.detailed_balance_settings!r})' ) diff --git a/src/easydynamics/sample_model/sample_model.py b/src/easydynamics/sample_model/sample_model.py index b89829ad..fdf8eb09 100644 --- a/src/easydynamics/sample_model/sample_model.py +++ b/src/easydynamics/sample_model/sample_model.py @@ -11,6 +11,7 @@ from easydynamics.sample_model.components.model_component import ModelComponent from easydynamics.sample_model.diffusion_model.diffusion_model_base import DiffusionModelBase from easydynamics.sample_model.model_base import ModelBase +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings from easydynamics.utils import detailed_balance_factor from easydynamics.utils.utils import Numeric from easydynamics.utils.utils import Q_type @@ -35,7 +36,7 @@ def __init__( diffusion_models: DiffusionModelBase | list[DiffusionModelBase] | None = None, temperature: float | None = None, temperature_unit: str | sc.Unit = 'K', - divide_by_temperature: bool = True, + detailed_balance_settings: DetailedBalanceSettings | None = None, ) -> None: """ Initialize the SampleModel. @@ -60,14 +61,15 @@ def __init__( default, None. temperature_unit : str | sc.Unit, default='K' Unit of the temperature. - divide_by_temperature : bool, default=True - Whether to divide the detailed balance factor by temperature. + detailed_balance_settings : DetailedBalanceSettings | None, default=None + Settings for detailed balancing. Raises ------ TypeError If diffusion_models is not a DiffusionModelBase, a list of DiffusionModelBase, or None, - or if temperature is not a number or None, or if divide_by_temperature is not a bool. + or if temperature is not a number or None, or if detailed_balance_settings is not a + DetailedBalanceSettings instance. ValueError If temperature is negative. """ @@ -110,9 +112,12 @@ def __init__( ) self._temperature_unit = temperature_unit - if not isinstance(divide_by_temperature, bool): - raise TypeError('divide_by_temperature must be True or False') - self._divide_by_temperature = divide_by_temperature + if detailed_balance_settings is None: + self._detailed_balance_settings = DetailedBalanceSettings() + elif isinstance(detailed_balance_settings, DetailedBalanceSettings): + self._detailed_balance_settings = detailed_balance_settings + else: + raise TypeError('detailed_balance_settings must be a DetailedBalanceSettings or None') # ------------------------------------------------------------------ # Component management @@ -321,22 +326,22 @@ def convert_temperature_unit(self, unit: str | sc.Unit) -> None: If the provided unit is invalid or cannot be converted. """ - if self._temperature is None: + if self.temperature is None: raise ValueError('Temperature is not set, cannot convert unit.') - old_unit = self._temperature.unit + old_unit = self.temperature.unit try: - self._temperature.convert_unit(unit) + self.temperature.convert_unit(unit) self._temperature_unit = unit except Exception: # Attempt to rollback on failure with suppress(Exception): - self._temperature.convert_unit(old_unit) + self.temperature.convert_unit(old_unit) raise @property - def divide_by_temperature(self) -> bool: + def normalize_detailed_balance(self) -> bool: """ Get whether to divide the detailed balance factor by temperature. @@ -345,10 +350,10 @@ def divide_by_temperature(self) -> bool: bool True if the detailed balance factor is divided by temperature, False otherwise. """ - return self._divide_by_temperature + return self.detailed_balance_settings.normalize_detailed_balance - @divide_by_temperature.setter - def divide_by_temperature(self, value: bool) -> None: + @normalize_detailed_balance.setter + def normalize_detailed_balance(self, value: bool) -> None: """ Set whether to divide the detailed balance factor by temperature. @@ -363,8 +368,70 @@ def divide_by_temperature(self, value: bool) -> None: If value is not a bool. """ if not isinstance(value, bool): - raise TypeError('divide_by_temperature must be True or False') - self._divide_by_temperature = value + raise TypeError('normalize_detailed_balance must be True or False') + self.detailed_balance_settings.normalize_detailed_balance = value + + @property + def use_detailed_balance(self) -> bool: + """ + Get whether to apply detailed balance to the model. + + Returns + ------- + bool + True if detailed balance is applied, False otherwise. + """ + return self.detailed_balance_settings.use_detailed_balance + + @use_detailed_balance.setter + def use_detailed_balance(self, value: bool) -> None: + """ + Set whether to apply detailed balance to the model. + + Parameters + ---------- + value : bool + True to apply detailed balance, False otherwise. + + Raises + ------ + TypeError + If value is not a bool. + """ + if not isinstance(value, bool): + raise TypeError('use_detailed_balance must be True or False') + self.detailed_balance_settings.use_detailed_balance = value + + @property + def detailed_balance_settings(self) -> DetailedBalanceSettings: + """ + Get the DetailedBalanceSettings of the SampleModel. + + Returns + ------- + DetailedBalanceSettings + The DetailedBalanceSettings of the SampleModel. + """ + return self._detailed_balance_settings + + @detailed_balance_settings.setter + def detailed_balance_settings(self, value: DetailedBalanceSettings) -> None: + """ + Set the DetailedBalanceSettings of the SampleModel. + + Parameters + ---------- + value : DetailedBalanceSettings + The DetailedBalanceSettings to set. + + Raises + ------ + TypeError + If value is not a DetailedBalanceSettings. + """ + if not isinstance(value, DetailedBalanceSettings): + raise TypeError('detailed_balance_settings must be a DetailedBalanceSettings') + self._detailed_balance_settings = value # ------------------------------------------------------------------ # Other methods @@ -390,12 +457,12 @@ def evaluate( y = super().evaluate(x) - if self._temperature is not None: + if self.temperature is not None and self.detailed_balance_settings.use_detailed_balance: DBF = detailed_balance_factor( energy=x, - temperature=self._temperature, - divide_by_temperature=self._divide_by_temperature, - energy_unit=self._unit, + temperature=self.temperature, + divide_by_temperature=self.detailed_balance_settings.normalize_detailed_balance, + energy_unit=self.unit, ) y = [yi * DBF for yi in y] @@ -422,8 +489,8 @@ def get_all_variables(self, Q_index: int | None = None) -> list[Parameter]: """ all_vars = super().get_all_variables(Q_index=Q_index) - if self._temperature is not None: - all_vars.append(self._temperature) + if self.temperature is not None: + all_vars.append(self.temperature) for diffusion_model in self._diffusion_models: all_vars.extend(diffusion_model.get_all_variables()) @@ -472,9 +539,9 @@ def __repr__(self) -> str: """ return ( - f'{self.__class__.__name__}(unique_name={self.unique_name}, unit={self._unit}), ' - f'Q = {self._Q}, ' - f'components = {self._components}, diffusion_models = {self._diffusion_models}, ' - f'temperature = {self._temperature}, ' - f'divide_by_temperature = {self._divide_by_temperature}' + f'{self.__class__.__name__}(unique_name={self.unique_name}, unit={self.unit}), ' + f'Q = {self.Q}, ' + f'components = {self.components}, diffusion_models = {self.diffusion_models}, ' + f'temperature = {self.temperature}, ' + f'detailed_balance_settings = {self.detailed_balance_settings}' ) diff --git a/src/easydynamics/settings/__init__.py b/src/easydynamics/settings/__init__.py new file mode 100644 index 00000000..c401fbce --- /dev/null +++ b/src/easydynamics/settings/__init__.py @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2025 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings + +__all__ = [ + 'ConvolutionSettings', + 'DetailedBalanceSettings', +] diff --git a/src/easydynamics/convolution/convolution_settings.py b/src/easydynamics/settings/convolution_settings.py similarity index 100% rename from src/easydynamics/convolution/convolution_settings.py rename to src/easydynamics/settings/convolution_settings.py diff --git a/src/easydynamics/settings/detailed_balance_settings.py b/src/easydynamics/settings/detailed_balance_settings.py new file mode 100644 index 00000000..75cfce1f --- /dev/null +++ b/src/easydynamics/settings/detailed_balance_settings.py @@ -0,0 +1,134 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + + +from easydynamics.base_classes.easydynamics_base import EasyDynamicsBase + + +class DetailedBalanceSettings(EasyDynamicsBase): + """ + Class to manage detailed balance settings for a SampleModel or Analysis. + """ + + def __init__( + self, + use_detailed_balance: bool = True, + normalize_detailed_balance: bool = True, + display_name: str = 'DetailedBalanceSettings', + unique_name: str | None = None, + ) -> None: + """ + Initialize the DetailedBalanceSettings. + + Parameters + ---------- + use_detailed_balance : bool, default=True + Whether to apply detailed balance to the model. If False, no detailed balance is + applied. + normalize_detailed_balance : bool, default=True + Whether to normalize the detailed balance factor by dividing with temperature. + display_name : str, default='DetailedBalanceSettings' + Display name of the model. + unique_name : str | None, default=None + Unique name of the model. If None, a unique name will be generated. + + + Raises + ------ + TypeError + If use_detailed_balance or normalize_detailed_balance is not a bool. + """ + if not isinstance(use_detailed_balance, bool): + raise TypeError('use_detailed_balance must be True or False') + self._use_detailed_balance = use_detailed_balance + + if not isinstance(normalize_detailed_balance, bool): + raise TypeError('normalize_detailed_balance must be True or False') + self._normalize_detailed_balance = normalize_detailed_balance + + super().__init__( + display_name=display_name, + unique_name=unique_name, + ) + + # ------------------------------------------------------------------ + # Properties + # ------------------------------------------------------------------ + + @property + def use_detailed_balance(self) -> bool: + """ + Get whether to apply detailed balance to the model. + + Returns + ------- + bool + True if detailed balance is applied, False otherwise. + """ + return self._use_detailed_balance + + @use_detailed_balance.setter + def use_detailed_balance(self, value: bool) -> None: + """ + Set whether to apply detailed balance to the model. + + Parameters + ---------- + value : bool + True to apply detailed balance, False otherwise. + + Raises + ------ + TypeError + If value is not a bool. + """ + if not isinstance(value, bool): + raise TypeError('use_detailed_balance must be True or False') + self._use_detailed_balance = value + + @property + def normalize_detailed_balance(self) -> bool: + """ + Get whether to divide the detailed balance factor by temperature. + + Returns + ------- + bool + True if the detailed balance factor should be normalized by dividing with temperature, + False otherwise. + """ + return self._normalize_detailed_balance + + @normalize_detailed_balance.setter + def normalize_detailed_balance(self, value: bool) -> None: + """ + Set whether to normalize the detailed balance factor by dividing with temperature. + + Parameters + ---------- + value : bool + True to normalize the detailed balance factor by dividing with temperature, False + otherwise. + + Raises + ------ + TypeError + If value is not a bool. + """ + if not isinstance(value, bool): + raise TypeError('normalize_detailed_balance must be True or False') + self._normalize_detailed_balance = value + + def __repr__(self) -> str: + """ + Return a string representation of the DetailedBalanceSettings. + + Returns + ------- + str + A string representation of the DetailedBalanceSettings. + """ + return ( + f'DetailedBalanceSettings(use_detailed_balance={self.use_detailed_balance}, ' + f'normalize_detailed_balance={self.normalize_detailed_balance})' + ) diff --git a/tests/unit/easydynamics/analysis/test_analysis.py b/tests/unit/easydynamics/analysis/test_analysis.py index 56985b6c..91e8f795 100644 --- a/tests/unit/easydynamics/analysis/test_analysis.py +++ b/tests/unit/easydynamics/analysis/test_analysis.py @@ -10,11 +10,11 @@ import scipp as sc from easydynamics.analysis.analysis import Analysis -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel from easydynamics.sample_model.components.gaussian import Gaussian +from easydynamics.settings.convolution_settings import ConvolutionSettings class TestAnalysis: diff --git a/tests/unit/easydynamics/analysis/test_analysis1d.py b/tests/unit/easydynamics/analysis/test_analysis1d.py index 5f956c1a..234e166c 100644 --- a/tests/unit/easydynamics/analysis/test_analysis1d.py +++ b/tests/unit/easydynamics/analysis/test_analysis1d.py @@ -446,6 +446,38 @@ def test_evaluate_components_empty_resolution(self, analysis1d): components.evaluate.assert_called_once() assert np.array_equal(result, np.array([1.0, 2.0, 3.0])) + def test_evaluate_components_empty_resolution_DBF(self, analysis1d): + # WHEN + components = MagicMock() + components.evaluate = MagicMock(return_value=np.array([1.0, 2.0, 3.0])) + + # Set temperature so DBF will be applied + analysis1d.sample_model.temperature = 10 + mock_dbf = np.array([10.0, 10.0, 10.0]) + + # The default analysis1d has no resolution model components, so + # no convolution should be applied even if convolve=True + + with patch( + 'easydynamics.analysis.analysis1d.detailed_balance_factor', + return_value=mock_dbf, + ) as dbf_mock: + # WHEN + result = analysis1d._evaluate_components( + components=components, + convolver=None, + convolve=True, + apply_detailed_balance=True, + ) + + # EXPECT + components.evaluate.assert_called_once() + dbf_mock.assert_called_once() + + # EXPECT multiplication applied + expected = np.array([1.0, 2.0, 3.0]) * mock_dbf + assert np.array_equal(result, expected) + def test_evaluate_with_resolution(self, analysis1d): # WHEN (set up the resolution model and create a component to # evaluate) @@ -511,6 +543,7 @@ def test_evaluate_sample(self, analysis1d): convolver=analysis1d._convolver, convolve=True, energy=None, + apply_detailed_balance=True, ) def test_evaluate_sample_component(self, analysis1d): @@ -530,6 +563,7 @@ def test_evaluate_sample_component(self, analysis1d): convolver=None, convolve=True, energy=None, + apply_detailed_balance=True, ) def test_evaluate_background(self, analysis1d): @@ -555,6 +589,7 @@ def test_evaluate_background(self, analysis1d): convolver=None, convolve=False, energy=None, + apply_detailed_balance=False, ) def test_evaluate_background_component(self, analysis1d): @@ -574,6 +609,7 @@ def test_evaluate_background_component(self, analysis1d): convolver=None, convolve=False, energy=None, + apply_detailed_balance=False, ) def test_create_convolver(self, analysis1d): diff --git a/tests/unit/easydynamics/analysis/test_analysis_base.py b/tests/unit/easydynamics/analysis/test_analysis_base.py index 33e019f2..a7241831 100644 --- a/tests/unit/easydynamics/analysis/test_analysis_base.py +++ b/tests/unit/easydynamics/analysis/test_analysis_base.py @@ -9,10 +9,11 @@ from easyscience.variable import Parameter from easydynamics.analysis.analysis_base import AnalysisBase -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.experiment import Experiment from easydynamics.sample_model import InstrumentModel from easydynamics.sample_model import SampleModel +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings class TestAnalysisBase: @@ -48,6 +49,19 @@ def test_init_convolution_settings(self): # EXPECT assert analysis.convolution_settings is convolution_settings + def test_init_detailed_balance_settings(self): + # WHEN + detailed_balance_settings = DetailedBalanceSettings( + use_detailed_balance=False, + normalize_detailed_balance=False, + ) + + # THEN + analysis = AnalysisBase(detailed_balance_settings=detailed_balance_settings) + + # EXPECT + assert analysis.detailed_balance_settings is detailed_balance_settings + def test_init_extra_parameter(self): extra_parameter = Parameter(name='param1', value=1.0) analysis = AnalysisBase(extra_parameters=extra_parameter) @@ -89,6 +103,11 @@ def test_init_calls_on_experiment_changed(self): TypeError, 'convolution_settings must be an instance of ConvolutionSettings', ), + ( + {'detailed_balance_settings': 'not detailed balance settings'}, + TypeError, + 'detailed_balance_settings must be an instance of DetailedBalanceSettings', + ), ( {'extra_parameters': 123}, TypeError, @@ -105,6 +124,7 @@ def test_init_calls_on_experiment_changed(self): 'invalid sample_model', 'invalid instrument_model', 'invalid convolution_settings', + 'invalid detailed_balance_settings', 'invalid extra_parameters', 'invalid extra_parameters list', ], @@ -272,6 +292,26 @@ def test_convolution_settings_calls_on_convolution_settings_changed(self, analys # EXPECT mock_on_convolution_settings_changed.assert_called_once() + def test_detailed_balance_settings_property(self, analysis_base): + # WHEN + new_settings = DetailedBalanceSettings( + use_detailed_balance=False, normalize_detailed_balance=False + ) + + # THEN + analysis_base.detailed_balance_settings = new_settings + + # EXPECT + assert analysis_base.detailed_balance_settings is new_settings + + def test_detailed_balance_settings_setter_invalid(self, analysis_base): + # WHEN / THEN / EXPECT + with pytest.raises( + TypeError, + match='detailed_balance_settings must be a DetailedBalanceSettings', + ): + analysis_base.detailed_balance_settings = 'invalid_settings' + @pytest.mark.parametrize( 'extra_parameters', [ diff --git a/tests/unit/easydynamics/convolution/test_convolution.py b/tests/unit/easydynamics/convolution/test_convolution.py index a34da86c..f3aff801 100644 --- a/tests/unit/easydynamics/convolution/test_convolution.py +++ b/tests/unit/easydynamics/convolution/test_convolution.py @@ -78,7 +78,7 @@ def test_init(self, default_convolution): assert default_convolution.extension_factor == pytest.approx(0.2) assert default_convolution.temperature is None assert default_convolution.unit == 'meV' - assert default_convolution.normalize_detailed_balance is True + assert default_convolution.detailed_balance_settings.normalize_detailed_balance is True assert isinstance(default_convolution._energy_grid, EnergyGrid) assert isinstance(default_convolution._analytical_sample_components, ComponentCollection) @@ -112,7 +112,10 @@ def test_init_components(self, convolution_with_components): assert convolution_with_components.extension_factor == pytest.approx(0.2) assert convolution_with_components.temperature is None assert convolution_with_components.unit == 'meV' - assert convolution_with_components.normalize_detailed_balance is True + assert ( + convolution_with_components.detailed_balance_settings.normalize_detailed_balance + is True + ) assert isinstance(convolution_with_components._energy_grid, EnergyGrid) assert isinstance( diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution.py b/tests/unit/easydynamics/convolution/test_numerical_convolution.py index a8ad6fb7..8b015355 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution.py @@ -49,7 +49,10 @@ def test_init(self, default_numerical_convolution): assert default_numerical_convolution.extension_factor == pytest.approx(0.2) assert default_numerical_convolution.temperature is None assert default_numerical_convolution.unit == 'meV' - assert default_numerical_convolution.normalize_detailed_balance is True + assert ( + default_numerical_convolution.detailed_balance_settings.normalize_detailed_balance + is True + ) assert isinstance(default_numerical_convolution._energy_grid, EnergyGrid) @pytest.mark.parametrize('upsample_factor', [None, 5]) diff --git a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py index 074b2c41..d349d591 100644 --- a/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py +++ b/tests/unit/easydynamics/convolution/test_numerical_convolution_base.py @@ -6,11 +6,12 @@ import scipp as sc from easyscience.variable import Parameter -from easydynamics.convolution.convolution_settings import ConvolutionSettings from easydynamics.convolution.energy_grid import EnergyGrid from easydynamics.convolution.numerical_convolution_base import NumericalConvolutionBase from easydynamics.sample_model import Gaussian from easydynamics.sample_model.component_collection import ComponentCollection +from easydynamics.settings.convolution_settings import ConvolutionSettings +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings class TestNumericalConvolutionBase: @@ -48,7 +49,10 @@ def test_init(self, default_numerical_convolution_base): assert default_numerical_convolution_base.extension_factor == pytest.approx(0.2) assert default_numerical_convolution_base.temperature is None assert default_numerical_convolution_base.unit == 'meV' - assert default_numerical_convolution_base.normalize_detailed_balance is True + assert ( + default_numerical_convolution_base.detailed_balance_settings.normalize_detailed_balance + is True + ) assert isinstance(default_numerical_convolution_base._energy_grid, EnergyGrid) def test_init_with_custom_parameters(self): @@ -63,7 +67,7 @@ def test_init_with_custom_parameters(self): resolution_settings = ConvolutionSettings(upsample_factor=10, extension_factor=0.5) temperature = 300.0 temperature_unit = 'K' - normalize_detailed_balance = False + detailed_balance_settings = DetailedBalanceSettings(normalize_detailed_balance=False) unit = 'meV' # THEN @@ -72,7 +76,7 @@ def test_init_with_custom_parameters(self): sample_components=sample_components, resolution_components=resolution_components, convolution_settings=resolution_settings, - normalize_detailed_balance=normalize_detailed_balance, + detailed_balance_settings=detailed_balance_settings, temperature=temperature, temperature_unit=temperature_unit, unit=unit, @@ -84,47 +88,58 @@ def test_init_with_custom_parameters(self): assert numerical_convolution_base.temperature.value == temperature assert numerical_convolution_base.temperature.unit == temperature_unit assert numerical_convolution_base.unit == unit - assert numerical_convolution_base.normalize_detailed_balance is False + assert ( + numerical_convolution_base.detailed_balance_settings.normalize_detailed_balance + is False + ) + assert numerical_convolution_base.detailed_balance_settings is detailed_balance_settings assert isinstance(numerical_convolution_base._energy_grid, EnergyGrid) - def test_init_raises_type_error_for_invalid_temperature(self): - """ - Test that initialization raises TypeError for invalid - temperature. - """ - # WHEN - energy = np.linspace(-5, 5, 50) - sample_components = ComponentCollection(display_name='ComponentCollection') - resolution_components = ComponentCollection(display_name='ResolutionModel') - invalid_temperature = 'invalid_temperature' - - # THEN EXPECT - with pytest.raises(TypeError, match=r'Temperature must be None, a number or a Parameter.'): - NumericalConvolutionBase( - energy=energy, - sample_components=sample_components, - resolution_components=resolution_components, - temperature=invalid_temperature, - ) - - def test_init_raises_type_error_for_invalid_temperature_unit(self): + @pytest.mark.parametrize( + 'invalid_input, expected_exception, match', + [ + # temperature + ( + {'temperature': 'invalid_temperature'}, + TypeError, + r'Temperature must be None, a number or a Parameter.', + ), + # temperature_unit + ( + {'temperature_unit': 123}, + TypeError, + r'Temperature_unit must be a string or sc.Unit.', + ), + # detailed_balance_settings + ( + {'detailed_balance_settings': 'invalid_settings'}, + TypeError, + r'detailed_balance_settings must be a DetailedBalanceSettings instance.', + ), + ], + ids=[ + 'temperature_invalid_type', + 'temperature_unit_invalid_type', + 'detailed_balance_settings_invalid_type', + ], + ) + def test_init_raises_for_invalid_input(self, invalid_input, expected_exception, match): """ - Test that initialization raises TypeError for invalid - temperature_unit. + Test that initialization raises appropriate exceptions for + invalid input parameters. """ # WHEN energy = np.linspace(-5, 5, 50) sample_components = ComponentCollection(display_name='ComponentCollection') resolution_components = ComponentCollection(display_name='ResolutionModel') - invalid_temperature_unit = 123 # Not a string or sc.Unit # THEN EXPECT - with pytest.raises(TypeError, match=r'Temperature_unit must be a string or sc.Unit.'): + with pytest.raises(expected_exception, match=match): NumericalConvolutionBase( energy=energy, sample_components=sample_components, resolution_components=resolution_components, - temperature_unit=invalid_temperature_unit, + **invalid_input, ) #################### @@ -340,10 +355,15 @@ def test_normalize_detailed_balance_setter(self, default_numerical_convolution_b Test setting normalize_detailed_balance to False. """ # WHEN - default_numerical_convolution_base.normalize_detailed_balance = False + default_numerical_convolution_base.detailed_balance_settings.normalize_detailed_balance = ( + False + ) # THEN EXPECT - assert default_numerical_convolution_base.normalize_detailed_balance is False + assert ( + default_numerical_convolution_base.detailed_balance_settings.normalize_detailed_balance + is False + ) def test_normalize_detailed_balance_setter_raises(self, default_numerical_convolution_base): """ @@ -352,7 +372,29 @@ def test_normalize_detailed_balance_setter_raises(self, default_numerical_convol """ # WHEN THEN EXPECT with pytest.raises(TypeError, match='normalize_detailed_balance must be'): - default_numerical_convolution_base.normalize_detailed_balance = 'invalid' + default_numerical_convolution_base.detailed_balance_settings.normalize_detailed_balance = ( # noqa: E501 + 'invalid' + ) + + def test_detailed_balance_settings_property(self, default_numerical_convolution_base): + # WHEN + new_settings = DetailedBalanceSettings( + use_detailed_balance=False, normalize_detailed_balance=False + ) + + # THEN + default_numerical_convolution_base.detailed_balance_settings = new_settings + + # EXPECT + assert default_numerical_convolution_base.detailed_balance_settings is new_settings + + def test_detailed_balance_settings_setter_invalid(self, default_numerical_convolution_base): + # WHEN / THEN / EXPECT + with pytest.raises( + TypeError, + match='detailed_balance_settings must be a DetailedBalanceSettings', + ): + default_numerical_convolution_base.detailed_balance_settings = 'invalid_settings' def test_convolution_settings_setter_valid( self, diff --git a/tests/unit/easydynamics/sample_model/test_sample_model.py b/tests/unit/easydynamics/sample_model/test_sample_model.py index a093b1c1..712dfa8b 100644 --- a/tests/unit/easydynamics/sample_model/test_sample_model.py +++ b/tests/unit/easydynamics/sample_model/test_sample_model.py @@ -15,6 +15,7 @@ BrownianTranslationalDiffusion, ) from easydynamics.sample_model.sample_model import SampleModel +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings class TestSampleModel: @@ -66,51 +67,75 @@ def test_init(self, sample_model): assert len(model.diffusion_models) == 1 assert isinstance(model.diffusion_models[0], BrownianTranslationalDiffusion) assert model.temperature.value == pytest.approx(10.0) - assert model.divide_by_temperature is True + assert model.normalize_detailed_balance is True + assert model.use_detailed_balance is True + assert isinstance(model.detailed_balance_settings, DetailedBalanceSettings) np.testing.assert_array_equal(model.Q, np.array([1.0, 2.0, 3.0])) - def test_init_list_of_diffusion_model(self): + def test_init_custom_input(self): # WHEN THEN diffusion_model1 = BrownianTranslationalDiffusion() diffusion_model2 = BrownianTranslationalDiffusion() - sample_model = SampleModel(diffusion_models=[diffusion_model1, diffusion_model2]) + + detailed_balance_settings = DetailedBalanceSettings( + use_detailed_balance=False, + normalize_detailed_balance=False, + ) + sample_model = SampleModel( + diffusion_models=[diffusion_model1, diffusion_model2], + detailed_balance_settings=detailed_balance_settings, + ) # EXPECT assert len(sample_model.diffusion_models) == 2 assert sample_model.diffusion_models[0] is diffusion_model1 assert sample_model.diffusion_models[1] is diffusion_model2 + assert sample_model.use_detailed_balance is False + assert sample_model.normalize_detailed_balance is False + assert sample_model.detailed_balance_settings is detailed_balance_settings - def test_init_raises_with_invalid_diffusion_model(self): - # WHEN / THEN / EXPECT - with pytest.raises( - TypeError, - match='diffusion_models must be ', - ): - SampleModel(diffusion_models='invalid_diffusion_model') - - def test_init_raises_with_invalid_temperature(self): - # WHEN / THEN / EXPECT - with pytest.raises( - TypeError, - match='temperature must be a number or None', - ): - SampleModel(temperature='invalid_temperature') - - def test_init_raises_with_negative_temperature(self): - # WHEN / THEN / EXPECT - with pytest.raises( - ValueError, - match='temperature must be non-negative', - ): - SampleModel(temperature=-5.0) - - def test_init_raises_with_invalid_divide_by_temperature(self): - # WHEN / THEN / EXPECT - with pytest.raises( - TypeError, - match='divide_by_temperature must be True or False', - ): - SampleModel(divide_by_temperature='invalid_value') + @pytest.mark.parametrize( + 'invalid_input, expected_exception, match', + [ + # diffusion_models + ( + {'diffusion_models': 'invalid_diffusion_model'}, + TypeError, + 'diffusion_models must be a DiffusionModelBase', + ), + # temperature + ( + {'temperature': 'invalid_temperature'}, + TypeError, + 'temperature must be a number or None', + ), + ( + {'temperature': -5.0}, + ValueError, + 'temperature must be non-negative', + ), + # detailed_balance_settings + ( + {'detailed_balance_settings': 'invalid_settings'}, + TypeError, + 'detailed_balance_settings must be a DetailedBalanceSettings or None', + ), + ], + ids=[ + 'diffusion_models_invalid_type', + 'temperature_not_numeric', + 'temperature_negative', + 'detailed_balance_settings_invalid_type', + ], + ) + def test_init_raises_for_invalid_input(self, invalid_input, expected_exception, match): + """ + Test that initialization raises appropriate exceptions for + invalid input parameters. + """ + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + SampleModel(**invalid_input) def test_append_and_remove_and_clear_diffusion_model(self, sample_model): # WHEN @@ -279,29 +304,75 @@ def test_convert_temperature_unit_raises_with_invalid_unit(self, sample_model): ): model.convert_temperature_unit('invalid_unit') - def test_divide_by_temperature_setter(self, sample_model): + def test_normalize_detailed_balance_setter(self, sample_model): # WHEN model = sample_model # THEN - model.divide_by_temperature = False + model.normalize_detailed_balance = False # EXPECT - assert model.divide_by_temperature is False + assert model.normalize_detailed_balance is False # THEN - model.divide_by_temperature = True + model.normalize_detailed_balance = True # EXPECT - assert model.divide_by_temperature is True + assert model.normalize_detailed_balance is True - def test_divide_by_temperature_setter_raises_with_invalid_type(self, sample_model): + def test_normalize_detailed_balance_setter_raises_with_invalid_type(self, sample_model): # WHEN / THEN / EXPECT with pytest.raises( TypeError, - match='divide_by_temperature must be True or False', + match='normalize_detailed_balance must be True or False', ): - sample_model.divide_by_temperature = 'invalid_value' + sample_model.normalize_detailed_balance = 'invalid_value' + + def test_use_detailed_balance_setter(self, sample_model): + # WHEN + model = sample_model + + # THEN + model.use_detailed_balance = False + + # EXPECT + assert model.use_detailed_balance is False + + # THEN + model.use_detailed_balance = True + + # EXPECT + assert model.use_detailed_balance is True + + def test_use_detailed_balance_setter_raises_with_invalid_type(self, sample_model): + # WHEN / THEN / EXPECT + with pytest.raises( + TypeError, + match='use_detailed_balance must be True or False', + ): + sample_model.use_detailed_balance = 'invalid_value' + + def test_detailed_balance_settings_property(self, sample_model): + # WHEN + new_settings = DetailedBalanceSettings( + use_detailed_balance=False, normalize_detailed_balance=False + ) + + # THEN + sample_model.detailed_balance_settings = new_settings + + # EXPECT + assert sample_model.detailed_balance_settings is new_settings + assert sample_model.use_detailed_balance is False + assert sample_model.normalize_detailed_balance is False + + def test_detailed_balance_settings_setter_invalid(self, sample_model): + # WHEN / THEN / EXPECT + with pytest.raises( + TypeError, + match='detailed_balance_settings must be a DetailedBalanceSettings', + ): + sample_model.detailed_balance_settings = 'invalid_settings' def test_evaluate_calls_dbf(self, sample_model): # WHEN @@ -325,7 +396,7 @@ def test_evaluate_calls_dbf(self, sample_model): mock_dbf.assert_called_once_with( energy=x, temperature=sample_model.temperature, - divide_by_temperature=sample_model.divide_by_temperature, + divide_by_temperature=sample_model.normalize_detailed_balance, energy_unit=sample_model.unit, ) @@ -337,6 +408,51 @@ def test_evaluate_calls_dbf(self, sample_model): np.testing.assert_allclose(result[0], np.array([1.0, 2.0, 3.0]) * 10.0) np.testing.assert_allclose(result[1], np.array([4.0, 5.0, 6.0]) * 10.0) + @pytest.mark.parametrize( + 'temperature, use_detailed_balance', + [ + (None, True), # DB disabled because temperature is None + (300.0, False), # DB disabled explicitly + ], + ids=[ + 'temperature_none', + 'use_detailed_balance_false', + ], + ) + def test_evaluate_doesnt_call_dbf_when_disabled( + self, sample_model, temperature, use_detailed_balance + ): + # WHEN + x = np.array([0.0, 1.0, 2.0]) + + collection1 = Mock() + collection2 = Mock() + + collection1.evaluate.return_value = np.array([1.0, 2.0, 3.0]) + collection2.evaluate.return_value = np.array([4.0, 5.0, 6.0]) + + sample_model._component_collections = [collection1, collection2] + + sample_model.temperature = temperature + sample_model.use_detailed_balance = use_detailed_balance + + with patch('easydynamics.sample_model.sample_model.detailed_balance_factor') as mock_dbf: + mock_dbf.return_value = np.array([10.0, 10.0, 10.0]) # simplified DBF + # THEN + result = sample_model.evaluate(x) + + # EXPECT + # Check that DBF was not called since detailed balance is disabled + mock_dbf.assert_not_called() + + # Check that evaluate was called on each component + collection1.evaluate.assert_called_once_with(x) + collection2.evaluate.assert_called_once_with(x) + + # Check that results were not modified by DBF + np.testing.assert_allclose(result[0], np.array([1.0, 2.0, 3.0])) + np.testing.assert_allclose(result[1], np.array([4.0, 5.0, 6.0])) + def test_generate_component_collections(self, sample_model): # WHEN THEN sample_model._generate_component_collections() @@ -389,4 +505,4 @@ def test_repr(self, sample_model): assert 'components' in repr_str assert 'diffusion_models' in repr_str assert 'temperature' in repr_str - assert 'divide_by_temperature' in repr_str + assert 'normalize_detailed_balance' in repr_str diff --git a/tests/unit/easydynamics/convolution/test_convolution_settings.py b/tests/unit/easydynamics/settings/test_convolution_settings.py similarity index 98% rename from tests/unit/easydynamics/convolution/test_convolution_settings.py rename to tests/unit/easydynamics/settings/test_convolution_settings.py index fa2f2a8b..60e70bdf 100644 --- a/tests/unit/easydynamics/convolution/test_convolution_settings.py +++ b/tests/unit/easydynamics/settings/test_convolution_settings.py @@ -3,7 +3,7 @@ import pytest -from easydynamics.convolution.convolution_settings import ConvolutionSettings +from easydynamics.settings.convolution_settings import ConvolutionSettings class TestConvolutionSettings: diff --git a/tests/unit/easydynamics/settings/test_detailed_balance_settings.py b/tests/unit/easydynamics/settings/test_detailed_balance_settings.py new file mode 100644 index 00000000..dba4d9d6 --- /dev/null +++ b/tests/unit/easydynamics/settings/test_detailed_balance_settings.py @@ -0,0 +1,131 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + +import pytest + +from easydynamics.settings.detailed_balance_settings import DetailedBalanceSettings + + +class TestDetailedBalanceSettings: + @pytest.fixture + def default_detailed_balance_settings(self): + return DetailedBalanceSettings() + + def test_init(self, default_detailed_balance_settings): + """ + Test initialization of DetailedBalanceSettings with default + parameters. + """ + # WHEN THEN EXPECT + assert isinstance(default_detailed_balance_settings, DetailedBalanceSettings) + assert default_detailed_balance_settings.use_detailed_balance is True + assert default_detailed_balance_settings.normalize_detailed_balance is True + assert default_detailed_balance_settings.display_name == 'DetailedBalanceSettings' + + def test_init_with_custom_parameters(self): + """ + Test initialization of DetailedBalanceSettings with custom + parameters. + """ + # WHEN + detailed_balance_settings = DetailedBalanceSettings( + use_detailed_balance=False, + normalize_detailed_balance=False, + ) + + # THEN EXPECT + assert detailed_balance_settings.use_detailed_balance is False + assert detailed_balance_settings.normalize_detailed_balance is False + assert detailed_balance_settings.display_name == 'DetailedBalanceSettings' + + @pytest.mark.parametrize( + 'invalid_input, expected_exception, match', + [ + ( + {'use_detailed_balance': 'not_a_boolean'}, + TypeError, + 'must be True or False', + ), + ( + {'normalize_detailed_balance': 'not_a_boolean'}, + TypeError, + 'must be True or False', + ), + ], + ids=[ + 'use_detailed_balance_not_boolean', + 'normalize_detailed_balance_not_boolean', + ], + ) + def test_init_raises_for_invalid_input(self, invalid_input, expected_exception, match): + """ + Test that initialization raises appropriate exceptions for + invalid input parameters. + """ + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + DetailedBalanceSettings(**invalid_input) + + def test_setters_valid(self, default_detailed_balance_settings): + + # WHEN + # Ensure it's True first so we can test the reset + assert default_detailed_balance_settings.use_detailed_balance is True + assert default_detailed_balance_settings.normalize_detailed_balance is True + + # THEN + default_detailed_balance_settings.use_detailed_balance = False + default_detailed_balance_settings.normalize_detailed_balance = False + + # EXPECT + assert default_detailed_balance_settings.use_detailed_balance is False + assert default_detailed_balance_settings.normalize_detailed_balance is False + + @pytest.mark.parametrize( + 'value, expected_exception, match', + [ + ('5', TypeError, 'must be True or False'), + (1, TypeError, 'must be True or False'), + (None, TypeError, 'must be True or False'), + ], + ids=[ + 'string', + 'integer', + 'none', + ], + ) + def test_setters_invalid( + self, + default_detailed_balance_settings, + value, + expected_exception, + match, + ): + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + default_detailed_balance_settings.use_detailed_balance = value + + # WHEN THEN EXPECT + with pytest.raises(expected_exception, match=match): + default_detailed_balance_settings.normalize_detailed_balance = value + + def test_repr_default(self, default_detailed_balance_settings): + # WHEN + repr_str = repr(default_detailed_balance_settings) + + # EXPECT + assert repr_str == ( + 'DetailedBalanceSettings(use_detailed_balance=True, normalize_detailed_balance=True)' + ) + + def test_repr_reflects_updated_values(self, default_detailed_balance_settings): + # WHEN + default_detailed_balance_settings.use_detailed_balance = False + default_detailed_balance_settings.normalize_detailed_balance = False + + repr_str = repr(default_detailed_balance_settings) + + # EXPECT + assert repr_str == ( + 'DetailedBalanceSettings(use_detailed_balance=False, normalize_detailed_balance=False)' + )

5JR0vyE+d|&$j4&lDtF{p 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