diff --git a/.codecov.yml b/.codecov.yml
index e17376e8..d001c41d 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -1,8 +1,26 @@
+# Codecov configuration
+# https://docs.codecov.com/docs/codecov-yaml
+
github_checks:
annotations: true
+
comment:
layout: 'reach, diff, flags, files'
behavior: default
- require_changes: false # if true: only post the comment if coverage changes
- require_base: no # [yes :: must have a base report to post]
- require_head: yes # [yes :: must have a head report to post]
+ require_changes: false
+ require_base: false
+ require_head: true
+
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ threshold: 1%
+ # Make project coverage informational (won't block PR)
+ informational: true
+ patch:
+ default:
+ target: auto
+ # Require patch coverage but with threshold
+ threshold: 1%
diff --git a/.copier-answers.yml b/.copier-answers.yml
index 335c340b..7bbfb882 100644
--- a/.copier-answers.yml
+++ b/.copier-answers.yml
@@ -1,11 +1,11 @@
# WARNING: Do not edit this file manually.
# Any changes will be overwritten by Copier.
-_commit: v0.10.0
+_commit: v0.13.1
_src_path: gh:easyscience/templates
lib_docs_url: https://easyscience.github.io/core
lib_doi: 10.5281/zenodo.18163581
lib_package_name: easyscience
-lib_python_max: '3.13'
+lib_python_max: '3.14'
lib_python_min: '3.11'
lib_repo_name: core
project_contact_email: support@easyscience.org
diff --git a/.github/actions/download-artifact/action.yml b/.github/actions/download-artifact/action.yml
index e4fd62f5..d1fff1a0 100644
--- a/.github/actions/download-artifact/action.yml
+++ b/.github/actions/download-artifact/action.yml
@@ -1,5 +1,5 @@
name: 'Download artifact'
-description: 'Generic wrapper for actions/download-artifact'
+description: 'Wrapper for actions/download-artifact'
inputs:
name:
description: 'Name of the artifact to download'
@@ -39,7 +39,7 @@ runs:
using: 'composite'
steps:
- name: Download artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v8
with:
name: ${{ inputs.name }}
path: ${{ inputs.path }}
diff --git a/.github/actions/github-script/action.yml b/.github/actions/github-script/action.yml
index ab32da56..50de89b7 100644
--- a/.github/actions/github-script/action.yml
+++ b/.github/actions/github-script/action.yml
@@ -13,7 +13,7 @@ inputs:
runs:
using: 'composite'
steps:
- - uses: actions/github-script@v8
+ - uses: actions/github-script@v9
with:
script: ${{ inputs.script }}
github-token: ${{ inputs.github-token }}
diff --git a/.github/actions/setup-easyscience-bot/action.yml b/.github/actions/setup-easyscience-bot/action.yml
index 4b28eaf8..e51eb01a 100644
--- a/.github/actions/setup-easyscience-bot/action.yml
+++ b/.github/actions/setup-easyscience-bot/action.yml
@@ -22,9 +22,9 @@ runs:
steps:
- name: Create GitHub App installation token
id: app-token
- uses: actions/create-github-app-token@v2
+ uses: actions/create-github-app-token@v3
with:
- app-id: ${{ inputs.app-id }}
+ client-id: ${{ inputs.app-id }}
private-key: ${{ inputs.private-key }}
repositories: ${{ inputs.repositories }}
diff --git a/.github/actions/setup-pixi/action.yml b/.github/actions/setup-pixi/action.yml
index 167ee623..dc3232c6 100644
--- a/.github/actions/setup-pixi/action.yml
+++ b/.github/actions/setup-pixi/action.yml
@@ -1,5 +1,5 @@
name: 'Setup Pixi Environment'
-description: 'Sets up pixi with common configuration'
+description: 'Wrapper for prefix-dev/setup-pixi'
inputs:
environments:
description: 'Pixi environments to setup'
@@ -33,7 +33,7 @@ inputs:
runs:
using: 'composite'
steps:
- - uses: prefix-dev/setup-pixi@v0.9.4
+ - uses: prefix-dev/setup-pixi@v0.9.5
with:
environments: ${{ inputs.environments }}
activate-environment: ${{ inputs.activate-environment }}
diff --git a/.github/actions/upload-artifact/action.yml b/.github/actions/upload-artifact/action.yml
index 825ac396..fe8e4680 100644
--- a/.github/actions/upload-artifact/action.yml
+++ b/.github/actions/upload-artifact/action.yml
@@ -1,5 +1,5 @@
name: 'Upload artifact'
-description: 'Generic wrapper for actions/upload-artifact'
+description: 'Wrapper for actions/upload-artifact'
inputs:
name:
description: 'Artifact name'
@@ -38,7 +38,7 @@ runs:
using: 'composite'
steps:
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: ${{ inputs.name }}
path: ${{ inputs.path }}
diff --git a/.github/actions/upload-codecov/action.yml b/.github/actions/upload-codecov/action.yml
index 37d6298a..0cb15d1f 100644
--- a/.github/actions/upload-codecov/action.yml
+++ b/.github/actions/upload-codecov/action.yml
@@ -1,5 +1,5 @@
name: 'Upload coverage to Codecov'
-description: 'Generic wrapper for codecov/codecov-action@v5'
+description: 'Wrapper for codecov/codecov-action'
inputs:
name:
@@ -32,7 +32,7 @@ inputs:
runs:
using: composite
steps:
- - uses: codecov/codecov-action@v5
+ - uses: codecov/codecov-action@v6
with:
name: ${{ inputs.name }}
flags: ${{ inputs.flags }}
diff --git a/.github/scripts/publish-dashboard.sh b/.github/scripts/publish-dashboard.sh
new file mode 100644
index 00000000..dcbd0b32
--- /dev/null
+++ b/.github/scripts/publish-dashboard.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+remote_repository="${DASHBOARD_REMOTE_REPOSITORY:?}"
+publish_branch="${DASHBOARD_PUBLISH_BRANCH:-master}"
+source_dir="${DASHBOARD_SOURCE_DIR:?}"
+token="${DASHBOARD_TOKEN:?}"
+git_user_name="${DASHBOARD_GIT_USER_NAME:-easyscience[bot]}"
+git_user_email="${DASHBOARD_GIT_USER_EMAIL:?}"
+commit_message="${DASHBOARD_COMMIT_MESSAGE:?}"
+max_attempts="${DASHBOARD_PUSH_ATTEMPTS:-3}"
+delay_seconds="${DASHBOARD_PUSH_DELAY_SECONDS:-15}"
+
+workspace_dir="$(mktemp -d)"
+repo_dir="${workspace_dir}/dashboard"
+remote_url="https://x-access-token:${token}@github.com/${remote_repository}.git"
+
+cleanup() {
+ rm -rf "${workspace_dir}"
+}
+
+prepare_worktree() {
+ if [[ ! -d "${repo_dir}/.git" ]]; then
+ git clone --branch "${publish_branch}" --depth 1 "${remote_url}" "${repo_dir}"
+ else
+ git -C "${repo_dir}" fetch origin "${publish_branch}"
+ git -C "${repo_dir}" checkout "${publish_branch}"
+ git -C "${repo_dir}" reset --hard "origin/${publish_branch}"
+ git -C "${repo_dir}" clean -fd
+ fi
+
+ git -C "${repo_dir}" config user.name "${git_user_name}"
+ git -C "${repo_dir}" config user.email "${git_user_email}"
+}
+
+sync_publish_dir() {
+ cp -R "${source_dir}/." "${repo_dir}/"
+ git -C "${repo_dir}" add .
+
+ if git -C "${repo_dir}" diff --cached --quiet; then
+ return 1
+ fi
+
+ git -C "${repo_dir}" commit -m "${commit_message}"
+}
+
+trap cleanup EXIT
+
+prepare_worktree
+
+if ! sync_publish_dir; then
+ echo "No dashboard changes to publish."
+ exit 0
+fi
+
+for ((attempt = 1; attempt <= max_attempts; attempt += 1)); do
+ if git -C "${repo_dir}" push origin "HEAD:${publish_branch}"; then
+ echo "Dashboard published on attempt ${attempt}."
+ exit 0
+ fi
+
+ if ((attempt == max_attempts)); then
+ echo "Dashboard publish failed after ${max_attempts} attempts." >&2
+ exit 1
+ fi
+
+ echo "Dashboard push attempt ${attempt} failed. Retrying in ${delay_seconds}s." >&2
+ sleep "${delay_seconds}"
+
+ prepare_worktree
+
+ if ! sync_publish_dir; then
+ echo "Dashboard changes already exist in the target repository."
+ exit 0
+ fi
+done
\ No newline at end of file
diff --git a/.github/workflows/backmerge.yml b/.github/workflows/backmerge.yml
index 47b3384a..36ce6f54 100644
--- a/.github/workflows/backmerge.yml
+++ b/.github/workflows/backmerge.yml
@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout repository (for local actions)
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup easyscience[bot]
id: bot
@@ -38,7 +38,7 @@ jobs:
repositories: ${{ github.event.repository.name }}
- name: Checkout repository (with bot token)
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.bot.outputs.token }}
diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml
index 7305679b..21c72b38 100644
--- a/.github/workflows/cleanup.yml
+++ b/.github/workflows/cleanup.yml
@@ -15,11 +15,11 @@ on:
days:
description: 'Number of days.'
required: true
- default: 30
+ default: '30'
minimum_runs:
description: 'The minimum runs to keep for each workflow.'
required: true
- default: 6
+ default: '6'
delete_workflow_pattern:
description:
'The name or filename of the workflow. if not set then it will target all
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index cd9ff1e0..5208a333 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -1,10 +1,10 @@
name: Coverage checks
on:
- # Trigger the workflow on push
+ # Trigger the workflow on push to develop
push:
- # Do not run on version tags (those are handled by other workflows)
- tags-ignore: ['v*']
+ branches:
+ - develop
# Trigger the workflow on pull request
pull_request:
# Allows you to run this workflow manually from the Actions tab
@@ -15,11 +15,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:
@@ -32,7 +32,7 @@ jobs:
steps:
- name: Check-out repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up pixi
uses: ./.github/actions/setup-pixi
@@ -46,7 +46,7 @@ jobs:
steps:
- name: Check-out repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up pixi
uses: ./.github/actions/setup-pixi
@@ -63,32 +63,8 @@ jobs:
files: ./coverage-unit.xml
token: ${{ secrets.CODECOV_TOKEN }}
- # Job 2: Run integration tests with coverage and upload to Codecov
- integration-tests-coverage:
- runs-on: ubuntu-latest
-
- steps:
- - name: Check-out repository
- uses: actions/checkout@v5
-
- - name: Set up pixi
- uses: ./.github/actions/setup-pixi
-
- - name: Run integration tests with coverage
- run:
- pixi run integration-tests-coverage --cov-report=xml:coverage-integration.xml
-
- - name: Upload integration tests coverage to Codecov
- if: ${{ !cancelled() }}
- uses: ./.github/actions/upload-codecov
- with:
- name: integration-tests-job
- flags: integration
- files: ./coverage-integration.xml
- token: ${{ secrets.CODECOV_TOKEN }}
-
# Job 4: Build and publish dashboard (reusable workflow)
run-reusable-workflows:
- needs: [docstring-coverage, unit-tests-coverage, integration-tests-coverage] # depend on the previous jobs
+ needs: [docstring-coverage, unit-tests-coverage] # depend on the previous jobs
uses: ./.github/workflows/dashboard.yml
secrets: inherit
diff --git a/.github/workflows/dashboard.yml b/.github/workflows/dashboard.yml
index 5159f71b..573e3086 100644
--- a/.github/workflows/dashboard.yml
+++ b/.github/workflows/dashboard.yml
@@ -7,6 +7,10 @@ on:
permissions:
contents: read
+concurrency:
+ group: dashboard-publish-${{ github.repository }}
+ cancel-in-progress: false
+
# Set the environment variables to be used in all jobs defined in this workflow
env:
CI_BRANCH: ${{ github.head_ref || github.ref_name }}
@@ -21,16 +25,20 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up pixi
uses: ./.github/actions/setup-pixi
+ # Install badgery into the active Pixi environment without modifying
+ # pixi.toml/pixi.lock. Using `pixi add` here re-solves the whole project
+ # and rebuilds the local editable package, which can cause intermittent
+ # Linux CI failures (`Text file busy`, os error 26).
- name: Install badgery
shell: bash
- run: pixi add --pypi --git https://github.com/enhantica/badgery badgery
+ run: pixi run python -m pip install git+https://github.com/enhantica/badgery
- name: Run docstring coverage and code complexity/maintainability checks
run: |
@@ -81,22 +89,25 @@ jobs:
${{ github.event.repository.name }}
dashboard
- # Publish to external dashboard repository with retry logic.
+ # Push to external dashboard repository with retry logic.
# Retry is needed to handle transient GitHub API/authentication issues
# that occasionally cause 403 errors when multiple workflows push concurrently.
# Uses personal_token (not github_token) as GITHUB_TOKEN cannot access external repos.
- - name: Publish to main branch of ${{ github.repository }}
- uses: Wandalen/wretry.action@v3.8.0
- with:
- attempt_limit: 3
- attempt_delay: 15000 # 15 seconds between retries
- action: peaceiris/actions-gh-pages@v4
- with: |
- publish_dir: ./_dashboard_publish
- keep_files: true
- external_repository: ${{ env.REPO_OWNER }}/dashboard
- publish_branch: master
- personal_token: ${{ steps.bot.outputs.token }}
+ - name:
+ Push to ${{ env.REPO_OWNER }}/dashboard/${{ env.REPO_NAME }}/${{ env.CI_BRANCH
+ }}
+ shell: bash
+ env:
+ DASHBOARD_COMMIT_MESSAGE: ${{ env.CI_BRANCH }}
+ DASHBOARD_GIT_USER_EMAIL:
+ ${{ vars.EASYSCIENCE_APP_ID }}+easyscience[bot]@users.noreply.github.com
+ DASHBOARD_PUSH_ATTEMPTS: '3'
+ DASHBOARD_PUSH_DELAY_SECONDS: '15'
+ DASHBOARD_PUBLISH_BRANCH: master
+ DASHBOARD_REMOTE_REPOSITORY: ${{ env.REPO_OWNER }}/dashboard
+ DASHBOARD_SOURCE_DIR: ./_dashboard_publish
+ DASHBOARD_TOKEN: ${{ steps.bot.outputs.token }}
+ run: bash ./.github/scripts/publish-dashboard.sh
- name: Add dashboard link to summary
run: |
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index c23c2c8c..f6d7eceb 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -27,12 +27,16 @@ on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
-# Allow only one concurrent deployment to gh-pages at a time.
-# All docs workflows share the same concurrency group to prevent race conditions
-# when multiple branches/tags trigger simultaneous deployments.
+# - Non-tagged pushes and pull requests all use `docs-dev` group, so
+# they cancel each other.
+# - Tagged pushes use their own group like docs-v1.2.3, so they do not
+# cancel non-tagged runs, and non-tagged runs do not cancel them.
concurrency:
- group: docs-gh-pages-deploy
- cancel-in-progress: false
+ group: >-
+ ${{ startsWith(github.ref, 'refs/tags/v')
+ && format('docs-{0}', github.ref_name)
+ || 'docs-dev' }}
+ cancel-in-progress: true
# Set the environment variables to be used in all jobs defined in this workflow
env:
@@ -83,7 +87,7 @@ jobs:
# Check out the repository source code.
# Note: The gh-pages branch is fetched separately later for mike deployment.
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
# Activate dark mode to create documentation with Plotly charts in dark mode
# Need a better solution to automatically switch the chart colour theme based on the mkdocs material switcher
@@ -119,11 +123,14 @@ jobs:
# Build the static files for the documentation site for local inspection
# Input: docs/ directory containing the Markdown files
- # Output: site/ directory containing the generated HTML files
+ # Output: docs/site/ directory containing the generated HTML files
+ # Also verifies that mkdocstrings generated docs/site/objects.inv.
- name: Build site for local check
- run: pixi run docs-build-local
+ run: |
+ pixi run docs-build-local
+ pixi run docs-inventory-check
- # Upload the static files from the site/ directory to be used for
+ # Upload the static files from the docs/site/ directory to be used for
# local check
- name: Upload built site as artifact
uses: ./.github/actions/upload-artifact
diff --git a/.github/workflows/issues-labels.yml b/.github/workflows/issues-labels.yml
index 3a60cdd7..4fbf4fab 100644
--- a/.github/workflows/issues-labels.yml
+++ b/.github/workflows/issues-labels.yml
@@ -1,6 +1,5 @@
-# Verifies if an issue has at least one of the `[scope]` and one of the
-# `[priority]` labels. If not, the bot adds labels with a warning emoji
-# to indicate that those labels need to be added.
+# Verifies if the current issue has at least one `[scope]` label and one
+# `[priority]` label. If either is missing, the workflow adds a reminder label.
name: Issue labels check
@@ -15,28 +14,27 @@ jobs:
check-labels:
runs-on: ubuntu-latest
- steps:
- - name: Setup easyscience[bot]
- id: bot
- uses: ./.github/actions/setup-easyscience-bot
- with:
- app-id: ${{ vars.EASYSCIENCE_APP_ID }}
- private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
+ concurrency:
+ group: issue-labels-${{ github.event.issue.number }}
+ cancel-in-progress: true
- - name: Check for required [scope] label
- uses: trstringer/require-label-prefix@v1
+ steps:
+ - name: Ensure [scope] label
+ uses: Rindrics/expect-label-prefix@v1.2.1
with:
- secret: ${{ steps.bot.outputs.token }}
- prefix: '[scope]'
- labelSeparator: ' '
- addLabel: true
- defaultLabel: '[scope] ⚠️ label needed'
+ repository_full_name: ${{ github.repository }}
+ token: ${{ github.token }}
+ label_prefix: '[scope]'
+ label_separator: ' '
+ add_label: 'true'
+ default_label: '[scope] ⚠️ label needed'
- - name: Check for required [priority] label
- uses: trstringer/require-label-prefix@v1
+ - name: Ensure [priority] label
+ uses: Rindrics/expect-label-prefix@v1.2.1
with:
- secret: ${{ steps.bot.outputs.token }}
- prefix: '[priority]'
- labelSeparator: ' '
- addLabel: true
- defaultLabel: '[priority] ⚠️ label needed'
+ repository_full_name: ${{ github.repository }}
+ token: ${{ github.token }}
+ label_prefix: '[priority]'
+ label_separator: ' '
+ add_label: 'true'
+ default_label: '[priority] ⚠️ label needed'
diff --git a/.github/workflows/lint-format.yml b/.github/workflows/lint-format.yml
index fc451d14..16dd95c9 100644
--- a/.github/workflows/lint-format.yml
+++ b/.github/workflows/lint-format.yml
@@ -1,9 +1,12 @@
-# The workflow is divided into several steps:
-# - Check the validity of pyproject.toml
-# - Check code linting
-# - Check code formatting
-# - Check formatting of docstrings in the code
-# - Check formatting of Markdown, YAML, TOML, etc. files
+# The workflow checks
+# - the validity of pyproject.toml,
+# - the presence and correctness of SPDX license headers,
+# - linting and formatting of Python code,
+# - linting and formatting of docstrings in Python code,
+# - formatting of non-Python files (like markdown and toml).
+# - linting of Python code in Jupyter notebooks (for library template).
+#
+# A summary of the checks is added to the GitHub Actions summary.
name: Lint and format checks
@@ -38,7 +41,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up pixi
uses: ./.github/actions/setup-pixi
@@ -46,56 +49,47 @@ jobs:
- name: Run post-install developer steps
run: pixi run post-install
- # Check the validity of pyproject.toml
- name: Check validity of pyproject.toml
- id: check_pyproject
+ id: pyproject
continue-on-error: true
shell: bash
run: pixi run pyproject-check
- # Check the presence and correctness of SPDX license headers in
- # the code files
- name: Check SPDX license headers
- id: check_spdx_headers
+ id: license_headers
continue-on-error: true
shell: bash
- run: pixi run spdx-check
+ run: pixi run license-check
- # Check code linting with Ruff in the project root
- - name: Check code linting
- id: check_code_linting
+ - name: Check linting of Python code
+ id: py_lint
continue-on-error: true
shell: bash
run: pixi run py-lint-check
- # Check code formatting with Ruff in the project root
- - name: Check code formatting
- id: check_code_formatting
+ - name: Check formatting of Python code
+ id: py_format
continue-on-error: true
shell: bash
run: pixi run py-format-check
- # Check formatting of docstrings in the code with docformatter
- - name: Check formatting of docstrings in the code
- id: check_docs_formatting
+ - name: Check linting of docstrings in Python code
+ id: docstring_lint
continue-on-error: true
shell: bash
- run: pixi run docs-format-check
+ run: pixi run docstring-lint-check
- # Check formatting of MD, YAML, TOML, etc. files with Prettier in
- # the project root
- - name: Check formatting of MD, YAML, TOML, etc. files
- id: check_others_formatting
+ - name: Check formatting of non-Python files (md, toml, etc.)
+ id: nonpy_format
continue-on-error: true
shell: bash
run: pixi run nonpy-format-check
- # Check formatting of Jupyter Notebooks in the tutorials folder
- - name: Prepare notebooks and check formatting
- id: check_notebooks_formatting
+ - name: Check linting of Python code in Jupyter notebooks (ipynb)
+ id: notebook_lint
continue-on-error: true
shell: bash
- run: pixi run notebook-format-check
+ run: pixi run notebook-lint-check
# Add summary
- name: Add quality checks summary
@@ -107,24 +101,24 @@ jobs:
echo ""
echo "| Check | Status |"
echo "|-------|--------|"
- echo "| pyproject.toml | ${{ steps.check_pyproject.outcome == 'success' && '✅' || '❌' }} |"
- echo "| SPDX headers | ${{ steps.check_spdx_headers.outcome == 'success' && '✅' || '❌' }} |"
- echo "| py lint | ${{ steps.check_code_linting.outcome == 'success' && '✅' || '❌' }} |"
- echo "| py format | ${{ steps.check_code_formatting.outcome == 'success' && '✅' || '❌' }} |"
- echo "| docstring format | ${{ steps.check_docs_formatting.outcome == 'success' && '✅' || '❌' }} |"
- echo "| nonpy format | ${{ steps.check_others_formatting.outcome == 'success' && '✅' || '❌' }} |"
- echo "| notebooks format | ${{ steps.check_notebooks_formatting.outcome == 'success' && '✅' || '❌' }} |"
+ echo "| pyproject.toml | ${{ steps.pyproject.outcome == 'success' && '✅' || '❌' }} |"
+ echo "| license headers | ${{ steps.license_headers.outcome == 'success' && '✅' || '❌' }} |"
+ 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 "| nonpy format | ${{ steps.nonpy_format.outcome == 'success' && '✅' || '❌' }} |"
+ echo "| notebooks lint | ${{ steps.notebook_lint.outcome == 'success' && '✅' || '❌' }} |"
} >> "$GITHUB_STEP_SUMMARY"
# Fail job if any check failed
- name: Fail job if any check failed
if: |
- steps.check_pyproject.outcome == 'failure'
- || steps.check_spdx_headers.outcome == 'failure'
- || steps.check_code_linting.outcome == 'failure'
- || steps.check_code_formatting.outcome == 'failure'
- || steps.check_docs_formatting.outcome == 'failure'
- || steps.check_others_formatting.outcome == 'failure'
- || steps.check_notebooks_formatting.outcome == 'failure'
+ steps.pyproject.outcome == 'failure'
+ || steps.license_headers.outcome == 'failure'
+ || steps.py_lint.outcome == 'failure'
+ || steps.py_format.outcome == 'failure'
+ || steps.docstring_lint.outcome == 'failure'
+ || steps.nonpy_format.outcome == 'failure'
+ || steps.notebook_lint.outcome == 'failure'
shell: bash
run: exit 1
diff --git a/.github/workflows/pr-labels.yml b/.github/workflows/pr-labels.yml
index 642cd318..fcb8a78c 100644
--- a/.github/workflows/pr-labels.yml
+++ b/.github/workflows/pr-labels.yml
@@ -1,14 +1,9 @@
# Verifies if a pull request has at least one label from a set of valid
# labels before it can be merged.
#
-# NOTE:
-# This workflow may be triggered twice in quick succession when a PR is
-# created:
-# 1) `opened` — when the pull request is initially created
-# 2) `labeled` — if labels are added immediately after creation
-# (e.g. by manual labeling, another workflow, or GitHub App).
-#
-# These are separate GitHub events, so two workflow runs can be started.
+# The label validation is delegated to `mheap/github-action-required-labels`,
+# which checks the current PR labels via the GitHub API and can add or update a
+# PR comment when the required label set is missing.
name: PR labels check
@@ -17,40 +12,34 @@ on:
types: [opened, labeled, unlabeled, synchronize]
permissions:
- pull-requests: read
+ issues: write
+ pull-requests: write
jobs:
check-labels:
runs-on: ubuntu-latest
steps:
- - name: Check for valid labels
- run: |
- PR_LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r '.[]')
-
- echo "Current PR labels: $PR_LABELS"
- VALID_LABELS=(
- "[bot] release"
- "[scope] bug"
- "[scope] documentation"
- "[scope] enhancement"
- "[scope] maintenance"
- "[scope] significant"
- )
-
- found=false
- for label in "${VALID_LABELS[@]}"; do
- if echo "$PR_LABELS" | grep -Fxq "$label"; then
- echo "✅ Found valid label: $label"
- found=true
- break
- fi
- done
-
- if [ "$found" = false ]; then
- echo "ERROR: PR must have at least one of the following labels:"
- for label in "${VALID_LABELS[@]}"; do
- echo " - $label"
- done
- exit 1
- fi
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
+ - name: Setup easyscience[bot]
+ id: bot
+ uses: ./.github/actions/setup-easyscience-bot
+ with:
+ app-id: ${{ vars.EASYSCIENCE_APP_ID }}
+ private-key: ${{ secrets.EASYSCIENCE_APP_KEY }}
+
+ - uses: mheap/github-action-required-labels@v5
+ with:
+ token: ${{ steps.bot.outputs.token }}
+ add_comment: true
+ mode: minimum
+ count: 1
+ labels: |
+ [bot] release
+ [scope] bug
+ [scope] documentation
+ [scope] enhancement
+ [scope] maintenance
+ [scope] significant
diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml
index 95a3b394..e256b0ae 100644
--- a/.github/workflows/pypi-publish.yml
+++ b/.github/workflows/pypi-publish.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Check-out repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0 # full history with tags to get the version number by versioningit
diff --git a/.github/workflows/pypi-test.yml b/.github/workflows/pypi-test.yml
index 6f4e582f..b8edabe4 100644
--- a/.github/workflows/pypi-test.yml
+++ b/.github/workflows/pypi-test.yml
@@ -32,7 +32,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up pixi
uses: ./.github/actions/setup-pixi
@@ -43,32 +43,36 @@ jobs:
frozen: false
- name: Init pixi project
- run: pixi init easyscience
+ run:
+ pixi init --platform linux-64 --platform osx-arm64 --platform win-64
+ easyscience
- - name: Add Python 3.13 from Conda
+ - name: Configure pixi platforms
working-directory: easyscience
- run: pixi add "python=3.13"
+ run: |
+ pixi workspace platform edit linux-64 --glibc 2.35 --no-install
+ pixi workspace platform edit osx-arm64 --macos 14.0 --no-install
- - name: Add other Conda dependencies
- working-directory: easyscience
- run: pixi add gsl
-
- - name: Add easyscience from PyPI
+ - name: Add Python 3.14 from Conda
working-directory: easyscience
- run: pixi add --pypi "easyscience"
+ run: pixi add "python=3.14"
- - name: Add dev dependencies from PyPI
+ - name: Add other Conda dependencies
working-directory: easyscience
- run: pixi add --pypi pytest pytest-xdist
+ run: pixi add gsl
- - name: Add Pixi task as a shortcut
+ - name: Add easyscience (with dev dependencies) from PyPI
working-directory: easyscience
- run: pixi task add easyscience "python -m easyscience"
+ run: pixi add --pypi "easyscience[dev]"
- name: Run unit tests to verify the installation
working-directory: easyscience
run: pixi run python -m pytest ../tests/unit/ --color=yes -v
+ - name: Run functional tests to verify the installation
+ working-directory: easyscience
+ run: pixi run python -m pytest ../tests/functional/ --color=yes -v
+
- name: Run integration tests to verify the installation
working-directory: easyscience
run: pixi run python -m pytest ../tests/integration/ --color=yes -n auto
diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml
index 4dd25dfa..af4caa2b 100644
--- a/.github/workflows/release-notes.yml
+++ b/.github/workflows/release-notes.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0 # full history with tags to get the version number
@@ -61,7 +61,7 @@ jobs:
GITHUB_TOKEN: ${{ steps.bot.outputs.token }}
- name: Create GitHub draft release
- uses: softprops/action-gh-release@v2
+ uses: softprops/action-gh-release@v3
with:
draft: true
tag_name: ${{ steps.draft.outputs.tag_name }}
diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml
index 7e6fda49..3fa073b9 100644
--- a/.github/workflows/release-pr.yml
+++ b/.github/workflows/release-pr.yml
@@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout ${{ env.SOURCE_BRANCH }} branch
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{ env.SOURCE_BRANCH }}
@@ -48,7 +48,7 @@ jobs:
gh pr create \
--base ${{ env.DEFAULT_BRANCH }} \
--head ${{ env.SOURCE_BRANCH }} \
- --title "Release: merge ${{ env.SOURCE_BRANCH }} into ${{ env.DEFAULT_BRANCH }}" \
+ --title "🎉 Release: merge ${{ env.SOURCE_BRANCH }} into ${{ env.DEFAULT_BRANCH }}" \
--label "[bot] release" \
--body "This PR is created automatically to trigger the release pipeline. It merges the accumulated changes from \`${{ env.SOURCE_BRANCH }}\` into \`${{ env.DEFAULT_BRANCH }}\`.
diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml
index 9b34cccf..0f43db35 100644
--- a/.github/workflows/security.yml
+++ b/.github/workflows/security.yml
@@ -61,13 +61,13 @@ jobs:
# focused on the active dev branch.
- name: Checkout repository (scheduled → develop)
if: ${{ github.event_name == 'schedule' }}
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: develop
- name: Checkout repository
if: ${{ github.event_name != 'schedule' }}
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
diff --git a/.github/workflows/test-trigger.yml b/.github/workflows/test-trigger.yml
index ecf6b40c..440bae3c 100644
--- a/.github/workflows/test-trigger.yml
+++ b/.github/workflows/test-trigger.yml
@@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout develop branch
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: develop
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 05998190..776ed94f 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.13'
- PIXI_ENVS: 'py-311-env py-313-env'
+ PY_VERSIONS: '3.11 3.14'
+ PIXI_ENVS: 'py-311-env py-314-env'
jobs:
# Job 1: Set up environment variables
@@ -74,13 +74,13 @@ jobs:
strategy:
fail-fast: false
matrix:
- os: [ubuntu-24.04, macos-14, windows-2022]
+ os: [ubuntu-24.04, macos-15, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Set up pixi
uses: ./.github/actions/setup-pixi
@@ -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 }}
@@ -163,13 +178,13 @@ jobs:
strategy:
fail-fast: false
matrix:
- os: [ubuntu-24.04, macos-14, windows-2022]
+ os: [ubuntu-24.04, macos-15, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Download package (incl. extras) from previous job
uses: ./.github/actions/download-artifact
@@ -196,18 +211,16 @@ jobs:
echo "🔹🔸🔹🔸🔹 Python: $py_ver 🔹🔸🔹🔸🔹"
echo "Initializing pixi project"
- pixi init easyscience_py$py_ver
+ pixi init --platform linux-64 --platform osx-arm64 --platform win-64 easyscience_py$py_ver
cd easyscience_py$py_ver
+ echo "Configure pixi platforms"
+ pixi workspace platform edit linux-64 --glibc 2.35 --no-install
+ pixi workspace platform edit osx-arm64 --macos 14.0 --no-install
+
echo "Adding Python $py_ver"
pixi add "python=$py_ver"
- echo "Adding Conda dependencies"
- pixi add gsl
-
- #echo "Adding PyPI dependencies"
- #pixi add --pypi pytest pytest-xdist
-
echo "Looking for wheel in ../dist/py$py_ver/"
ls -l "../dist/py$py_ver/"
@@ -217,10 +230,10 @@ jobs:
exit 1
fi
- whl_url="file://$(python -c 'import os,sys; print(os.path.abspath(sys.argv[1]))' "${whl_path[0]}")"
+ whl_abs_path="$(python -c 'import os,sys; print(os.path.abspath(sys.argv[1]))' "${whl_path[0]}")"
- echo "Adding easyscience from: $whl_url"
- pixi add --pypi "easyscience[dev] @ ${whl_url}"
+ echo "Adding easyscience from: $whl_abs_path"
+ pixi add --pypi "easyscience[dev] @ ${whl_abs_path}"
echo "Exiting pixi project directory"
cd ..
@@ -245,6 +258,25 @@ jobs:
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 easyscience_py$py_ver"
+ cd easyscience_py$py_ver
+
+ echo "Running tests"
+ pixi run python -m pytest ../tests/functional/ --color=yes -v
+
+ echo "Exiting pixi project directory"
+ cd ..
+ done
+
- name: Run integration tests ${{ needs.env-prepare.outputs.pytest-marks }}
shell: bash
run: |
diff --git a/.github/workflows/tutorial-tests-trigger.yml b/.github/workflows/tutorial-tests-trigger.yml
index 1bc27f4f..4b160d87 100644
--- a/.github/workflows/tutorial-tests-trigger.yml
+++ b/.github/workflows/tutorial-tests-trigger.yml
@@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout develop branch
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: develop
diff --git a/.github/workflows/tutorial-tests.yml b/.github/workflows/tutorial-tests.yml
index 4c9244d0..a4fc940c 100644
--- a/.github/workflows/tutorial-tests.yml
+++ b/.github/workflows/tutorial-tests.yml
@@ -40,15 +40,11 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- 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/.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 feb102db..9a3855f4 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -11,9 +11,9 @@ repos:
pass_filenames: false
stages: [manual]
- - id: spdx-headers-check
- name: pixi run spdx-check
- entry: pixi run spdx-check
+ - id: license-headers-check
+ name: pixi run license-check
+ entry: pixi run license-check
language: system
pass_filenames: false
stages: [manual]
@@ -32,23 +32,23 @@ repos:
pass_filenames: false
stages: [manual]
- - id: pixi-nonpy-format-check
- name: pixi run nonpy-format-check
- entry: pixi run nonpy-format-check
+ - id: pixi-docstring-lint-check
+ name: pixi run docstring-lint-check
+ entry: pixi run docstring-lint-check
language: system
pass_filenames: false
stages: [manual]
- - id: pixi-docs-format-check
- name: pixi run docs-format-check
- entry: pixi run docs-format-check
+ - id: pixi-nonpy-format-check
+ name: pixi run nonpy-format-check
+ entry: pixi run nonpy-format-check
language: system
pass_filenames: false
stages: [manual]
- - id: pixi-notebook-format-check
- name: pixi run notebook-format-check
- entry: pixi run notebook-format-check
+ - id: pixi-notebook-lint-check
+ name: pixi run notebook-lint-check
+ entry: pixi run notebook-lint-check
language: system
pass_filenames: false
stages: [manual]
diff --git a/.prettierignore b/.prettierignore
index 788ec8fa..ec19b5ef 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,6 @@
+# Git
+.git/
+
# Copier
.copier-answers*.yml
@@ -14,4 +17,19 @@ docs/docs/assets/
.pytest_cache/
# MyPy
-.mypy_cache
+.mypy_cache/
+
+# Ruff
+.ruff_cache/
+
+# Node
+node_modules
+
+# Tox
+.tox
+
+# Misc
+.benchmarks
+.cache
+deps/
+tmp/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fa245c37..64104f8c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
Thank you for your interest in contributing to **EasyScience**!
-This guide explains how to:
+This guide explains how you can:
- Report issues
- Contribute code
@@ -39,11 +39,10 @@ Please make sure you follow the EasyScience organization-wide
## How to Interact With This Project
-If you are not planning to modify the code, you may want to:
+If you are not planning to contribute code, you may want to:
- 🐞 Report a bug — see [Reporting Issues](#11-reporting-issues)
-- 🛡 Report a security issue — see
- [Security Issues](#12-security-issues)
+- 🛡 Report a security issue — see [Security Issues](#12-security-issues)
- 💬 Ask a question or start a discussion at
[Project Discussions](https://github.com/easyscience/core/discussions)
@@ -62,17 +61,18 @@ We use the following branches:
- `master` — stable releases only
- `develop` — active development branch
-- Short-lived branches — one branch per contribution
-
-All normal contributions must target the `develop` branch.
-
-This means:
-
-- Do **not** open Pull Requests against `master`
-- Always create your branch from `develop`
-- Always target `develop` when opening a Pull Request
-
-See ADR easyscience/.github#12 for full details on the branching
+- Short-lived branches — feature or fix branches created for a single
+ contribution and deleted after merge
+
+> [!IMPORTANT]
+>
+> All normal contributions must target the `develop` branch.
+>
+> - Do **not** open Pull Requests against `master`
+> - Always create your branch from `develop`
+> - Always target `develop` when opening a Pull Request
+
+See ADR easyscience/.github#12 for more details on the branching
strategy.
---
@@ -121,8 +121,8 @@ This ensures you are working on the latest version of the project.
### 2.2. If You Are a Core Team Member
-Core team members do not need to fork the repository. You can create a
-new branch directly from `develop`, but the rest of the workflow remains
+Core team members can create branches directly in this repository and
+therefore do not need to fork it, but the rest of the workflow remains
the same.
---
@@ -149,12 +149,13 @@ Set up the environment:
```bash
pixi install
-pixi run post-install
+pixi run post-install # Install additional tooling
```
After this step, your development environment is ready.
-See ADR easyscience/.github#63 for more details about this decision.
+See ADR easyscience/.github#63 for more details about using Pixi for
+development.
---
@@ -165,14 +166,16 @@ Never work directly on `develop`.
Create a new branch:
```bash
-git checkout -b my-change
+git checkout -b my-change develop
```
-Use a clear and descriptive name, for example:
-
-- `improve-solver-speed`
-- `fix-boundary-condition`
-- `add-tutorial-example`
+> [!IMPORTANT]
+>
+> Use a clear and descriptive name, for example:
+>
+> - `improve-solver-speed`
+> - `fix-boundary-condition`
+> - `add-tutorial-example`
Clear branch names make reviews and history easier to understand.
@@ -180,12 +183,7 @@ Clear branch names make reviews and history easier to understand.
## 5. Implementing Your Changes
-While developing:
-
-- Make small, logical commits
-- Write clear and descriptive commit messages
-- Follow the Google docstring convention
-- Add or update unit tests if behavior changes
+While developing, make small, logical commits with clear messages.
Example:
@@ -194,53 +192,67 @@ git add .
git commit -m "Improve performance of time integrator for large systems"
```
-Run tests locally:
-
-```bash
-pixi run unit-tests
-```
-
-Running tests frequently is strongly recommended.
-
---
## 6. Code Quality Checks
+> [!IMPORTANT]
+>
+> When adding new functionality or making changes, make sure to add or
+> update the following as needed:
+>
+> - 📘 docstrings
+> - 🧪 unit tests
+
Before opening a Pull Request, always run:
```bash
pixi run check
```
-This command runs:
+This command:
-- Formatting checks
-- Linting
-- Docstring validation
-- Notebook checks
-- Unit tests
-- Other project validations
+- Validates the pyproject.toml file
+- Checks for licence headers in code files
+- Identifies linting and formatting issues in Python code
+- Checks docstring linting and formatting issues in Python code
+- Detects formatting issues in non-Python files (MD, YAML, TOML etc.)
+- Checks linting issues in Jupyter notebooks (if applicable)
+- Runs unit tests
A successful run should look like this:
```bash
-pixi run pyproject-check...................................Passed
-pixi run py-lint-check.....................................Passed
-pixi run py-format-check...................................Passed
-pixi run nonpy-format-check................................Passed
-pixi run docs-format-check.................................Passed
-pixi run notebook-format-check.............................Passed
-pixi run unit-tests........................................Passed
+pixi run pyproject-check.......................Passed
+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 nonpy-format-check....................Passed
+pixi run notebook-lint-check...................Passed
+pixi run unit-tests............................Passed
```
If something fails, read the error message carefully and fix the issue.
-You can run individual checks, for example:
+You can run individual checks, for example, to run only unit tests:
+
+```bash
+pixi run unit-tests
+```
+
+or to run only Python linting checks:
```bash
pixi run py-lint-check
```
+To add missing license headers:
+
+```bash
+pixi run spdx-add
+```
+
Some formatting issues can be fixed automatically:
```bash
@@ -250,7 +262,7 @@ pixi run fix
If everything is correctly formatted, you will see:
```text
-✅ All code auto-formatting steps have been applied.
+✅ All auto-formatting steps completed successfully!
```
This indicates that the auto-formatting pipeline completed successfully.
@@ -263,7 +275,9 @@ If errors are reported, resolve them and re-run:
pixi run check
```
-All checks must pass before your Pull Request can be merged.
+> [!IMPORTANT]
+>
+> All checks must pass before your Pull Request can be merged.
If you are unsure how to fix an issue, ask for help in your Pull Request
discussion.
@@ -288,8 +302,10 @@ On GitHub:
### Pull Request Title
-The PR title appears in release notes and changelogs. It should be
-concise and informative.
+> [!IMPORTANT]
+>
+> The PR title appears in release notes and changelogs. It should be
+> concise and informative.
Good examples:
@@ -301,7 +317,12 @@ Good examples:
### Required `[scope]` Label
-Each Pull Request must include one `[scope]` label:
+> [!IMPORTANT]
+>
+> Each Pull Request must include a `[scope]` label, which is used for
+> automatically suggesting version bumps when preparing a new release.
+
+The available scopes are:
| Label | Description |
| ----------------------- | ----------------------------------------------------------------------- |
@@ -311,7 +332,8 @@ Each Pull Request must include one `[scope]` label:
| `[scope] maintenance` | Code/tooling cleanup without feature or bug fix (major.minor.**PATCH**) |
| `[scope] significant` | Breaking or major changes (**MAJOR**.minor.patch) |
-See ADR easyscience/.github#33 for full versioning rules.
+See ADR easyscience/.github#33 for more details on the standardized
+labeling scheme.
---
@@ -354,7 +376,19 @@ git push
## 10. Documentation Contributions
-If your change affects users, update the documentation.
+> [!IMPORTANT]
+>
+> If your change affects user-facing functionality, update the project
+> documentation accordingly — specifically the `nav:` (navigation)
+> structure in `mkdocs.yml` and the relevant documentation Markdown
+> files in `docs/docs/`.
+>
+> ```text
+> 📁 docs
+> ├── 📁 docs - Markdown files for documentation
+> │ └── ...
+> └── 📄 mkdocs.yml - Configuration file (navigation, theme, etc.)
+> ```
This may include:
@@ -375,31 +409,40 @@ Open the URL shown in the terminal to review your changes.
## 11. Reporting Issues
-If you find a bug but do not want to fix it:
+If you find a bug but cannot work on a fix, please consider opening an
+issue.
+
+When reporting an issue, it helps to:
-- Search existing issues first
-- Provide clear reproduction steps
-- Include logs and environment details
+- Search existing issues first.
+- Provide clear reproduction steps.
+- Include logs, screenshots, and environment details.
-Clear issue reports help maintainers significantly.
+Clear and detailed reports help maintainers investigate and resolve
+issues more effectively.
---
## 12. Security Issues
-Do **not** report security vulnerabilities publicly.
+> [!IMPORTANT]
+>
+> Please do **not** report security vulnerabilities publicly.
-If you discover a potential vulnerability, contact the maintainers
-privately.
+If you discover a potential vulnerability, please contact the
+maintainers privately so the issue can be investigated and addressed
+responsibly.
---
## 13. Releases
-Releases are created by merging `develop` into `master`.
+Once your contribution is merged into `develop`, it will eventually be
+included in the next stable release.
-Once your contribution is merged into `develop`, it will be included in
-the next stable release.
+When enough changes have accumulated in `develop`, core team members
+merge `develop` into `master` to prepare a new release. The release is
+then tagged and published on GitHub and PyPI.
---
diff --git a/codecov.yml b/codecov.yml
deleted file mode 100644
index f62b13ab..00000000
--- a/codecov.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# Codecov configuration
-# https://docs.codecov.com/docs/codecovyml-reference
-
-coverage:
- status:
- project:
- default:
- # Make project coverage informational (won't block PR)
- informational: true
- patch:
- default:
- # Require patch coverage but with threshold
- threshold: 1%
diff --git a/docs/docs/assets/javascripts/extra.js b/docs/docs/assets/javascripts/extra.js
index dd3fc356..9596ee07 100644
--- a/docs/docs/assets/javascripts/extra.js
+++ b/docs/docs/assets/javascripts/extra.js
@@ -1,6 +1,5 @@
-(function() {
-
- "use strict"
+;(function () {
+ 'use strict'
// Variables
const header = document.getElementsByTagName('header')[0]
@@ -10,20 +9,19 @@
// Hide-show header shadow
function toggleHeaderShadow() {
if (window.pageYOffset <= 0) {
- header.classList.remove("md-header--shadow")
+ header.classList.remove('md-header--shadow')
} else {
- header.classList.add("md-header--shadow")
+ header.classList.add('md-header--shadow')
}
}
// Onload
- window.onload = function() {
+ window.onload = function () {
toggleHeaderShadow()
}
// Onscroll
- window.onscroll = function() {
+ window.onscroll = function () {
toggleHeaderShadow()
}
-
})()
diff --git a/docs/docs/assets/javascripts/mathjax.js b/docs/docs/assets/javascripts/mathjax.js
index a92ce69a..333524ec 100644
--- a/docs/docs/assets/javascripts/mathjax.js
+++ b/docs/docs/assets/javascripts/mathjax.js
@@ -3,21 +3,27 @@ window.MathJax = {
//inlineMath: [['\\(', '\\)']],
//displayMath: [['\\[', '\\]']],
// Add support for $...$ and \(...\) delimiters
- inlineMath: [['$', '$'], ['\\(', '\\)']],
+ inlineMath: [
+ ['$', '$'],
+ ['\\(', '\\)'],
+ ],
// Add support for $$...$$ and \[...]\ delimiters
- displayMath: [['$$', '$$'], ['\\[', '\\]']],
+ displayMath: [
+ ['$$', '$$'],
+ ['\\[', '\\]'],
+ ],
processEscapes: true,
- processEnvironments: true
+ processEnvironments: true,
},
options: {
//ignoreHtmlClass: ".*|",
//processHtmlClass: "arithmatex"
// Skip code blocks only
- skipHtmlTags: ['script','noscript','style','textarea','pre','code'],
+ skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
// Only ignore explicit opt-out
ignoreHtmlClass: 'no-mathjax|tex2jax_ignore',
- }
-};
+ },
+}
document$.subscribe(() => {
MathJax.startup.output.clearCache()
diff --git a/docs/docs/assets/stylesheets/extra.css b/docs/docs/assets/stylesheets/extra.css
index a625be80..5bc1db12 100644
--- a/docs/docs/assets/stylesheets/extra.css
+++ b/docs/docs/assets/stylesheets/extra.css
@@ -200,7 +200,14 @@ label.md-nav__title[for="__drawer"] {
/* Change the overall width of the page */
.md-grid {
- max-width: 1280px;
+ max-width: 116em;
+}
+
+/* Keep prose line length stable when sidebars are hidden at narrower widths */
+.md-main .md-content > .md-content__inner {
+ width: min(100%, 40.5em);
+ margin-left: auto !important;
+ margin-right: auto !important;
}
/* Needed for mkdocs-jupyter to show download and other buttons on top of the notebook */
diff --git a/docs/docs/installation-and-setup/index.md b/docs/docs/installation-and-setup/index.md
index 64064d08..83b7b2da 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
**EasyScience** is a cross-platform Python library compatible with
-**Python 3.11** through **3.13**.
+**Python 3.11** through **3.14**.
To install and set up EasyScience, 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 EasyScience using
pixi init easyscience
cd easyscience
```
-- Set the Python version for the Pixi environment (e.g., 3.13):
+- Set the Python version for the Pixi environment (e.g., 3.14):
```txt
- pixi add python=3.13
+ pixi add python=3.14
```
- Add EasyScience to the Pixi environment from PyPI:
```txt
@@ -230,16 +230,14 @@ once using the command line, as shown below.
- Navigate to your existing Pixi project, created as described in the
[Installing with Pixi](#installing-with-pixi) section.
-- Add JupyterLab and the Pixi kernel for Jupyter:
+- Add JupyterLab, Interactive Python shell and the Pixi kernel for
+ Jupyter:
```txt
- pixi add --pypi jupyterlab pixi-kernel
+ pixi add --pypi jupyterlab ipython pixi-kernel
```
-- Download all the EasyScience tutorials to the `tutorials/` directory:
- ```txt
- pixi run easyscience download-all-tutorials
- ```
-- Start JupyterLab in the `tutorials/` directory to access the
- notebooks:
+- Download all the EasyScience tutorials to the `tutorials/` directory.
+- Start the JupyterLab server in the `tutorials/` directory to access
+ the notebooks:
```txt
pixi run jupyter lab tutorials/
```
@@ -248,25 +246,24 @@ once using the command line, as shown below.
### Classical Run Tutorials Locally
-- Install Jupyter Notebook and IPython kernel:
+- Install Jupyter Notebook, Interactive Python shell and the IPython
+ kernel:
```txt
- pip install notebook ipykernel
+ pip install notebook ipython ipykernel
```
- Add the virtual environment as a Jupyter kernel:
```txt
python -m ipykernel install --user --name=venv --display-name "EasyScience Python kernel"
```
-- Download all the EasyScience tutorials to the `tutorials/` directory:
- ```txt
- python -m easyscience download-all-tutorials
- ```
-- Launch the Jupyter Notebook server (opens browser automatically at
- `http://localhost:8888/`):
+- Download all the EasyScience tutorials to the `tutorials/` directory.
+- Start the Jupyter Notebook server in the `tutorials/` directory to
+ access the notebooks:
```txt
jupyter notebook tutorials/
```
-- Open one of the `*.ipynb` files and select the
- `EasyScience Python kernel` to get started.
+- Your web browser should open automatically. Click on one of the
+ `*.ipynb` files and select the `EasyScience Python kernel` to get
+ started.
### Run Tutorials via Google Colab
diff --git a/docs/docs/tutorials/fitting-bayesian.ipynb b/docs/docs/tutorials/fitting-bayesian.ipynb
new file mode 100644
index 00000000..77e8b884
--- /dev/null
+++ b/docs/docs/tutorials/fitting-bayesian.ipynb
@@ -0,0 +1,518 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib widget"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1",
+ "metadata": {},
+ "source": [
+ "# Bayesian analysis\n",
+ "\n",
+ "The previous tutorials demonstrate how to obtain *maximum-likelihood* estimates of the parameters of a model by minimising $\\chi^2$.\n",
+ "An alternative, and often more informative, view of the same problem is provided by a **Bayesian** analysis, in which the goal is to characterise the full *posterior distribution* over the parameters given the data.\n",
+ "\n",
+ "Recall Bayes' theorem,\n",
+ "\n",
+ "$$\n",
+ "p(\\theta \\mid d) \\propto p(d \\mid \\theta)\\, p(\\theta),\n",
+ "$$ (bayes)\n",
+ "\n",
+ "where $\\theta$ are the model parameters, $d$ is the observed data, $p(d \\mid \\theta)$ is the likelihood, and $p(\\theta)$ is the prior. In `easyscience`, the `min`/`max` bounds of a `Parameter` are interpreted as a **uniform prior**, and a Gaussian likelihood is constructed from the data and supplied weights.\n",
+ "\n",
+ "`easyscience` exposes a Bayesian Markov-chain Monte Carlo (MCMC) sampler through the `Fitter.mcmc_sample` method. Under the hood this uses BUMPS' DREAM sampler, so the underlying minimizer must be switched to BUMPS.\n",
+ "\n",
+ "```{note}\n",
+ "This tutorial focuses on Bayesian analysis with a simple QENS model for illustration. For dedicated QENS fitting with more sophisticated models, consider using [`EasyDynamics`](https://github.com/easyscience/easydynamics).\n",
+ "```\n",
+ "\n",
+ "### When should you use a Bayesian analysis?\n",
+ "\n",
+ "A maximum-likelihood estimate (MLE) gives you a single best-fit value with a symmetric uncertainty, which is fast and often sufficient. A Bayesian analysis becomes valuable when:\n",
+ "\n",
+ "- **Your uncertainties are asymmetric** — MLE error bars assume the parameter distribution is Gaussian, which is not always true. The posterior samples capture skew naturally.\n",
+ "- **You have prior knowledge** — if you know from physics that a parameter *must* lie in a certain range, encoding that as a prior ($p(\\theta)$) is more principled than simply clamping bounds after the fit.\n",
+ "- **You care about parameter correlations** — the joint posterior (shown in the corner plot below) reveals trade-offs between parameters that a single covariance matrix can miss.\n",
+ "- **You want to propagate uncertainty to predictions** — with the posterior in hand, you can compute credible bands on any function of the parameters (see the posterior-predictive band section) without linearised error propagation.\n",
+ "\n",
+ "The trade-off is computational cost: MCMC requires thousands of model evaluations, whereas an MLE fit may converge in dozens. For the simple 4-parameter model used here the difference is negligible, but for expensive models it is worth starting with MLE and only switching to MCMC when you need the richer output.\n",
+ "\n",
+ "In this tutorial we re-use the QENS dataset and the Lorentzian-with-resolution model from the [Fitting QENS](fitting-qens.ipynb) tutorial, but instead of returning a single best-fit value with a symmetric error bar we will draw thousands of samples from the posterior.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2",
+ "metadata": {},
+ "source": [
+ "## Load the data\n",
+ "\n",
+ "We load the same simulated QENS dataset that was used in the previous tutorial."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def fetch_data(name: str, known_hash: str) -> str:\n",
+ " \"\"\"\n",
+ " Fetch pre-prepared data from a remote source and return the path to the file.\n",
+ " \"\"\"\n",
+ " import pooch\n",
+ "\n",
+ " return pooch.retrieve(\n",
+ " url=f'https://public.esss.dk/groups/scipp/dmsc-summer-school/2025/{name}',\n",
+ " known_hash=known_hash,\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "filename = fetch_data(\n",
+ " '4-reduction/energy_transfer_QENS_unknown_quasi_elastic_many_neutrons.dat',\n",
+ " known_hash='sha256:e49fa9a1d2ef5eeb714524903e8ffa9de6616e5a299a799cbb0b2f3ee8fd459a',\n",
+ ")\n",
+ "\n",
+ "\n",
+ "def load(filename: str):\n",
+ " \"\"\"Load three-column text data (x, y, error) and filter NaN values.\n",
+ "\n",
+ " The file is expected to be a space-separated three-column text file\n",
+ " (commonly ``.dat`` or ``.txt``) with columns: x, y, error (1σ).\n",
+ " \"\"\"\n",
+ " x, y, error = np.loadtxt(filename, unpack=True)\n",
+ " selection = np.isfinite(y)\n",
+ " return x[selection], y[selection], error[selection]\n",
+ "\n",
+ "\n",
+ "omega, intensity_obs, intensity_error = load(filename)\n",
+ "\n",
+ "# Restrict to the region of interest, as in the QENS tutorial.\n",
+ "selection = (omega > -0.06) & (omega < 0.06)\n",
+ "omega, intensity_obs, intensity_error = (\n",
+ " omega[selection],\n",
+ " intensity_obs[selection],\n",
+ " intensity_error[selection],\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.errorbar(omega, intensity_obs, intensity_error, fmt='.')\n",
+ "ax.set(xlabel='$\\\\omega$/meV', ylabel='$I(\\\\omega)$')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9",
+ "metadata": {},
+ "source": [
+ "## Defining parameters with priors\n",
+ "\n",
+ "Create four `Parameter` objects, for the area $A$, $\\gamma$, $\\omega_0$ and $\\sigma$. The `min` and `max` arguments define a **uniform prior** on each parameter — the sampler will only consider values inside this range and will treat every value inside the range as equally plausible *a priori*.\n",
+ "\n",
+ "| Parameter | Initial Value | Min | Max |\n",
+ "| --- | --- | --- | --- |\n",
+ "| $A$ (area) | 10 | 1 | 100 |\n",
+ "| $\\gamma$ | 8.0 × 10-3 | 1.0 × 10-4 | 1.0 × 10-2 |\n",
+ "| $\\omega_0$ | 1.0 × 10-3 | 0 | 2.0 × 10-3 |\n",
+ "| $\\sigma$ | 1.0 × 10-3 | 1.0 × 10-5 | 1.0 × 10-1 |\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "10",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from easyscience import Parameter\n",
+ "\n",
+ "area = Parameter(name='area', value=10, fixed=False, min=1, max=100)\n",
+ "gamma = Parameter(name='gamma', value=8e-3, fixed=False, min=1e-4, max=1e-2)\n",
+ "omega_0 = Parameter(name='omega_0', value=1e-3, fixed=False, min=0, max=2e-3)\n",
+ "sigma = Parameter(name='sigma', value=1e-3, fixed=False, min=1e-5, max=1e-1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77ce3f63",
+ "metadata": {},
+ "source": [
+ "## The model\n",
+ "\n",
+ "We re-use the convolution of a Lorentzian with a Gaussian resolution function from the QENS tutorial:\n",
+ "\n",
+ "$$\n",
+ "I(\\omega) = \\frac{A\\gamma}{\\pi\\big[(\\omega - \\omega_0)^2 + \\gamma^2\\big]} \\;\\ast\\; \\mathcal{N}(0, \\sigma),\n",
+ "$$ (model)\n",
+ "\n",
+ "where $A$ is a scale factor (area), $\\gamma$ is the Lorentzian half-width at half-maximum, $\\omega_0$ is the centre offset and $\\sigma$ is the width of the Gaussian resolution kernel.\n",
+ "\n",
+ "You might want to look at other QENS models, as implemented in the [EasyDynamics](https://github.com/easyscience/dynamics-lib) library.\n",
+ "\n",
+ "```{note}\n",
+ "The convolution below uses `np.convolve(..., 'same')` for simplicity. In `'same'` mode, `numpy` pads the signal edges with zeros, which can introduce small artefacts at the boundaries. Because our Gaussian kernel ($\\sigma \\approx 10^{-3}$) is much narrower than the data range ($\\pm 0.06$ meV), these edge effects are negligible here. For production work with broader kernels, consider `scipy.signal.convolve` with an explicit boundary mode such as `'reflect'` or `'nearest'`.\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "36a0c4f4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from scipy.stats import norm\n",
+ "\n",
+ "\n",
+ "def lorentzian(x: np.ndarray) -> np.ndarray:\n",
+ " return area.value / np.pi * gamma.value / ((x - omega_0.value) ** 2 + gamma.value**2)\n",
+ "\n",
+ "\n",
+ "def intensity_model(x: np.ndarray) -> np.ndarray:\n",
+ " gauss = norm(0, sigma.value).pdf(x)\n",
+ " gauss /= gauss.sum()\n",
+ " return np.convolve(lorentzian(x), gauss, 'same')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "11",
+ "metadata": {},
+ "source": [
+ "## Maximum-likelihood fit (for reference)\n",
+ "\n",
+ "Before running MCMC, perform a quick maximum-likelihood fit. The result will give us a good starting point and lets us compare the central tendency of the posterior with the classical best-fit values.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "12",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from easyscience import Fitter\n",
+ "from easyscience import ObjBase\n",
+ "\n",
+ "parameter_container = ObjBase(name='params', A=area, gamma=gamma, omega_0=omega_0, sigma=sigma)\n",
+ "\n",
+ "mle_fitter = Fitter(parameter_container, intensity_model)\n",
+ "mle_result = mle_fitter.fit(x=omega, y=intensity_obs, weights=1 / intensity_error)\n",
+ "\n",
+ "print(f'A = {area.value:.4g}')\n",
+ "print(f'gamma = {gamma.value:.4g}')\n",
+ "print(f'omega_0 = {omega_0.value:.4g}')\n",
+ "print(f'sigma = {sigma.value:.4g}')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "13",
+ "metadata": {},
+ "source": [
+ "## Drawing posterior samples with DREAM\n",
+ "\n",
+ "We now draw samples from the posterior distribution $p(\\theta \\mid d)$ using the BUMPS DREAM (DiffeRential Evolution Adaptive Metropolis) algorithm. DREAM is an ensemble MCMC method that runs multiple chains in parallel and automatically tunes the proposal distribution.\n",
+ "\n",
+ "DREAM only works with the BUMPS minimizer. We reuse the ``mle_fitter`` created above, switch it to BUMPS, and call `Fitter.mcmc_sample`, which returns a dictionary with the following keys:\n",
+ "\n",
+ "- `draws`: a `(n_samples, n_parameters)` array of posterior samples: each **row** is one complete draw from the joint posterior (one value for every parameter simultaneously), and each **column** holds all sampled values for a single parameter;\n",
+ "- `param_names`: the unique names of the parameters, in the same column order as `draws`;\n",
+ "- `internal_bumps_object`: the underlying BUMPS `MCMCDraw` object, useful for advanced diagnostics;\n",
+ "- `logp`: the log-posterior of each retained sample.\n",
+ "\n",
+ "The key sampling parameters are:\n",
+ "\n",
+ "- `samples` (4000): the total number of posterior draws to generate across all chains;\n",
+ "- `burn` (500): the number of initial *burn-in* iterations to discard — the sampler needs time to find the typical set of the posterior, and early samples are not representative;\n",
+ "- `thin` (2): the *thinning* interval — only every second sample is kept, which reduces autocorrelation between consecutive draws;\n",
+ "\n",
+ "First, we switch to the BUMPS minimizer:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "14",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from easyscience import AvailableMinimizers\n",
+ "\n",
+ "mle_fitter.switch_minimizer(AvailableMinimizers.Bumps)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5a219fcd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "result = mle_fitter.mcmc_sample(\n",
+ " x=omega,\n",
+ " y=intensity_obs,\n",
+ " weights=1 / intensity_error,\n",
+ " samples=10000,\n",
+ " burn=500,\n",
+ " thin=2,\n",
+ ")\n",
+ "\n",
+ "print(f'Drew {result[\"draws\"].shape[0]} samples for {result[\"draws\"].shape[1]} parameters.')\n",
+ "print('parameters:', result['param_names'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8766b170",
+ "metadata": {},
+ "source": [
+ "## Convergence diagnostics\n",
+ "\n",
+ "Before we trust the posterior samples, we should check that the MCMC chains have **converged** — that is, the sampler has found the typical set of the posterior and is no longer drifting. Two simple visual checks are:\n",
+ "\n",
+ "1. **Trace plot** — plot the sampled parameter values against the sample index. A well-converged chain looks like a \"hairy caterpillar\": it fluctuates around a stable mean with no long-term trends.\n",
+ "2. **Log-posterior plot** — the log-posterior $\\log p(\\theta \\mid d)$ should also stabilise after burn-in. If it is still climbing at the end of the run, the sampler has not yet converged.\n",
+ "\n",
+ "The `logp` array returned by `sample` contains the log-posterior for every *retained* sample (i.e. *after* burn-in and thinning). This means a flat `logp` trace is exactly what we want to see.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3c49ab6f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "draws = result['draws']\n",
+ "logp = result['logp']\n",
+ "if callable(logp):\n",
+ " _, logp = logp()\n",
+ " logp = logp.flatten()\n",
+ "name_to_col = {name: idx for idx, name in enumerate(result['param_names'])}\n",
+ "\n",
+ "\n",
+ "def column_for(parameter):\n",
+ " return draws[:, name_to_col[parameter.unique_name]]\n",
+ "\n",
+ "\n",
+ "fig, axes = plt.subplots(5, 1, figsize=(10, 12), sharex=True)\n",
+ "\n",
+ "# Trace plots for each parameter\n",
+ "for ax, (label, par) in zip(\n",
+ " axes[:4],\n",
+ " (('area', area), ('gamma', gamma), ('omega_0', omega_0), ('sigma', sigma)),\n",
+ "):\n",
+ " ax.plot(column_for(par), lw=0.5)\n",
+ " ax.set_ylabel(label)\n",
+ " ax.set_xlim(0, len(draws) - 1)\n",
+ "\n",
+ "# Log-posterior trace\n",
+ "axes[4].plot(logp, lw=0.5, color='C4')\n",
+ "axes[4].set_ylabel('log-posterior')\n",
+ "axes[4].set_xlabel('sample index')\n",
+ "\n",
+ "fig.suptitle('MCMC trace plots — check for \"hairy caterpillar\" behaviour')\n",
+ "fig.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15",
+ "metadata": {},
+ "source": [
+ "## Posterior summaries\n",
+ "\n",
+ "Summarise each marginal posterior by its **median** and the 16th/84th percentiles, which together give an asymmetric 68% credible interval. Compare these with the MLE values you obtained above.\n",
+ "\n",
+ "\n",
+ "**Why might the Bayesian median differ from the MLE?**\n",
+ "The MLE finds the single point that maximises the likelihood, while the Bayesian median is the central value of the *posterior* — which also accounts for the prior $p(\\theta)$. If a parameter's posterior is skewed (asymmetric), the median and the mode (which approximates the MLE) will not coincide. The table below shows both so you can spot any such differences.\n",
+ "\n",
+ "\n",
+ "Note that the columns of `result['draws']` are ordered by `result['param_names']` (which use the parameters' `unique_name`), so it is worth building a small helper to look up a column by friendly name.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ce3e38a8",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "16",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "summary_rows = []\n",
+ "for label, par in (\n",
+ " ('area', area),\n",
+ " ('gamma', gamma),\n",
+ " ('omega_0', omega_0),\n",
+ " ('sigma', sigma),\n",
+ "):\n",
+ " col = column_for(par)\n",
+ " lo, med, hi = np.percentile(col, [16, 50, 84])\n",
+ " summary_rows.append((label, med, med - lo, hi - med, par.value))\n",
+ "\n",
+ "print(f'{\"param\":<8s} {\"median\":>12s} {\"16th\":>12s} {\"84th\":>12s} {\"MLE\":>12s}')\n",
+ "for label, med, low, high, mle in summary_rows:\n",
+ " print(f'{label:<8s} {med:12.4g} {low:12.4g} {high:12.4g} {mle:12.4g}')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "17",
+ "metadata": {},
+ "source": [
+ "## Visualise the joint posterior\n",
+ "\n",
+ "Marginal summaries hide correlations between parameters. A *corner plot* (a triangular grid of pairwise scatter plots and 1-D histograms) is the standard way to display them. Below we build one with plain `matplotlib`. To produce a publication-quality version, use plotting packages such as [`corner`](https://corner.readthedocs.io/) which can generate corner plots with a single function call.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "18",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "labels = ['area', 'gamma', 'omega_0', 'sigma']\n",
+ "cols = np.column_stack([column_for(p) for p in (area, gamma, omega_0, sigma)])\n",
+ "n = len(labels)\n",
+ "\n",
+ "fig, axes = plt.subplots(n, n, figsize=(8, 8))\n",
+ "for i in range(n):\n",
+ " for j in range(n):\n",
+ " ax = axes[i, j]\n",
+ " if j > i:\n",
+ " ax.set_visible(False)\n",
+ " continue\n",
+ " if i == j:\n",
+ " ax.hist(cols[:, i], bins=40, color='C0', histtype='stepfilled', alpha=0.7)\n",
+ " ax.set_yticks([])\n",
+ " else:\n",
+ " ax.hexbin(cols[:, j], cols[:, i], gridsize=30, cmap='Blues', mincnt=1)\n",
+ " if i == n - 1:\n",
+ " ax.set_xlabel(labels[j])\n",
+ " else:\n",
+ " ax.set_xticklabels([])\n",
+ " if j == 0:\n",
+ " ax.set_ylabel(labels[i])\n",
+ " else:\n",
+ " ax.set_yticklabels([])\n",
+ "fig.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "19",
+ "metadata": {},
+ "source": [
+ "## Posterior-predictive band\n",
+ "\n",
+ "With the full posterior in hand we can propagate uncertainty through the model without assuming Gaussianity. Unlike error propagation from an MLE fit — which assumes parameters are normally distributed and independent — the posterior draws naturally capture any skew, heavy tails, and correlations between parameters. Below we pick a few hundred random draws, evaluate the model at each, and plot the resulting 95% credible band alongside the data.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "20",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "rng = np.random.default_rng(seed=0)\n",
+ "n_draws = 300\n",
+ "indices = rng.choice(draws.shape[0], size=n_draws, replace=False)\n",
+ "\n",
+ "predictions = np.empty((n_draws, omega.size))\n",
+ "saved = {p.unique_name: p.value for p in (area, gamma, omega_0, sigma)}\n",
+ "try:\n",
+ " for k, idx in enumerate(indices):\n",
+ " area.value = draws[idx, name_to_col[area.unique_name]]\n",
+ " gamma.value = draws[idx, name_to_col[gamma.unique_name]]\n",
+ " omega_0.value = draws[idx, name_to_col[omega_0.unique_name]]\n",
+ " sigma.value = draws[idx, name_to_col[sigma.unique_name]]\n",
+ " predictions[k] = intensity_model(omega)\n",
+ "finally:\n",
+ " for p in (area, gamma, omega_0, sigma):\n",
+ " p.value = saved[p.unique_name]\n",
+ "\n",
+ "lo = np.percentile(predictions, 2.5, axis=0)\n",
+ "hi = np.percentile(predictions, 97.5, axis=0)\n",
+ "mid = np.percentile(predictions, 50, axis=0)\n",
+ "\n",
+ "fig, ax = plt.subplots()\n",
+ "ax.errorbar(omega, intensity_obs, intensity_error, fmt='.', label='data')\n",
+ "ax.fill_between(omega, lo, hi, color='C1', alpha=0.3, label='95% posterior band')\n",
+ "ax.plot(omega, mid, '-', color='C1', label='posterior median')\n",
+ "ax.set(xlabel='$\\\\omega$/meV', ylabel='$I(\\\\omega)$')\n",
+ "ax.legend()\n",
+ "plt.show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "p312",
+ "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.12.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/docs/tutorials/index.md b/docs/docs/tutorials/index.md
index 4a73fb8c..588cfe81 100644
--- a/docs/docs/tutorials/index.md
+++ b/docs/docs/tutorials/index.md
@@ -23,6 +23,9 @@ The tutorials are organized into the following categories:
- [Fitting SANS](fitting-sans.ipynb) – A tutorial demonstrating how to
fit a small-angle neutron scattering (SANS) data using EasyScience
framework.
+- [Bayesian analysis](fitting-bayesian.ipynb) – A tutorial showing how
+ to run Bayesian MCMC sampling on a model with EasyScience to obtain
+ full posterior distributions for the parameters.
- [Progress Callback](progress-callback.ipynb) – A tutorial showing how
to monitor fitting progress across minimizer backends and update a
notebook UI while a fit is running.
diff --git a/docs/docs/user-guide/controlling-log-output.md b/docs/docs/user-guide/controlling-log-output.md
new file mode 100644
index 00000000..0403590a
--- /dev/null
+++ b/docs/docs/user-guide/controlling-log-output.md
@@ -0,0 +1,203 @@
+# Controlling Log Output
+
+EasyScience uses Python's standard `logging` module for all
+informational and warning messages. This gives you full control over
+what output the library produces and where it goes.
+
+## Quick Start
+
+The most common operation is suppressing all EasyScience messages. You
+can do it in one line:
+
+```python
+from easyscience import global_object
+
+global_object.log.level = 'ERROR'
+```
+
+Or using the standard library directly:
+
+```python
+import logging
+
+logging.getLogger('easyscience').setLevel(logging.ERROR)
+```
+
+Both forms set the package-root logger to `ERROR`, which suppresses all
+`WARNING`, `INFO`, and `DEBUG` messages from EasyScience.
+
+## Logger Hierarchy
+
+EasyScience loggers are named hierarchically under the root
+`easyscience` logger. This lets you suppress the whole package or
+individual subsystems:
+
+```
+easyscience # root — controls everything
+├── easyscience.base_classes # EasyList runtime warnings
+├── easyscience.legacy # ObjBase / CollectionBase deprecations
+├── easyscience.deprecated # @deprecated decorator messages
+├── easyscience.fitting # import-availability warnings
+│ ├── easyscience.fitting.bumps # Bumps fitting runtime messages
+│ ├── easyscience.fitting.lmfit # LMFit fitting runtime messages
+│ └── easyscience.fitting.dfo # DFO fitting runtime messages
+├── easyscience.variable # parameter warnings
+└── easyscience.global_object # undo/redo, debugging diagnostics
+```
+
+Setting the level on a parent logger affects all its children, because
+child loggers inherit the parent's effective level.
+
+```python
+import logging
+
+# Suppress everything from the fitting subsystem (including bumps/lmfit/dfo)
+logging.getLogger('easyscience.fitting').setLevel(logging.ERROR)
+
+# Suppress only Bumps runtime messages
+logging.getLogger('easyscience.fitting.bumps').setLevel(logging.ERROR)
+
+# Suppress only legacy deprecation notices
+logging.getLogger('easyscience.legacy').setLevel(logging.ERROR)
+```
+
+## Environment Variable
+
+You can control the log level **before** importing EasyScience by
+setting the `EASYSCIENCE_LOG_LEVEL` environment variable. This is useful
+when a downstream library cannot configure logging in code before
+EasyScience is imported.
+
+**Accepted values:** `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`, or
+a numeric level (e.g. `40`).
+
+**Example — suppressing all import-time messages:**
+
+```powershell
+# Windows PowerShell
+$env:EASYSCIENCE_LOG_LEVEL = 'ERROR'
+python -c "import easyscience" # silent
+```
+
+```bash
+# Linux / macOS
+EASYSCIENCE_LOG_LEVEL=ERROR python -c "import easyscience" # silent
+```
+
+Or from Python, set the environment variable before the import:
+
+```python
+import os
+
+os.environ['EASYSCIENCE_LOG_LEVEL'] = 'ERROR'
+import easyscience # now silent
+```
+
+## Temporary Suppression (Context Manager)
+
+When you only want to silence messages during a specific operation, use
+the `at_level` context manager:
+
+```python
+from easyscience import global_object
+import logging
+
+# Messages during the fit are suppressed, then the previous level is restored
+with global_object.log.at_level(logging.ERROR):
+ results = fitter.fit(x, y, weights)
+```
+
+This is the recommended pattern for technique-specific libraries that
+don't want EasyScience output to leak into their own users' consoles.
+
+## Convenience API
+
+The `global_object.log` object exposes a `level` property plus
+convenience methods that mirror `logging` module-level functions:
+
+| Member | Description |
+| ------------------ | ------------------------------------------------------------------------ |
+| `.level` | Get/set the package-root logger level (`'WARNING'` or `logging.WARNING`) |
+| `.debug(msg)` | Log a `DEBUG`-level message |
+| `.info(msg)` | Log an `INFO`-level message |
+| `.warning(msg)` | Log a `WARNING`-level message |
+| `.error(msg)` | Log an `ERROR`-level message |
+| `.critical(msg)` | Log a `CRITICAL`-level message |
+| `.exception(msg)` | Log an `ERROR`-level message with traceback |
+| `.getLogger(name)` | Get a child logger under `easyscience` |
+| `.at_level(level)` | Context manager for temporary level change |
+| `.suspend()` | Suppress all EasyScience output |
+| `.resume()` | Restore the previously set level |
+
+## Recipes
+
+### Recipe 1: Keep your test output clean
+
+When running tests that exercise EasyScience fitting, suppress the
+library's messages so they don't clutter your test reports:
+
+```python
+import logging
+from easyscience import global_object
+
+@pytest.fixture(autouse=True)
+def _quiet_easyscience():
+ # The test body runs *inside* the context manager (yield within `with`)
+ with global_object.log.at_level(logging.ERROR):
+ yield
+```
+
+### Recipe 2: Library author embedding EasyScience
+
+If you maintain a library that uses EasyScience internally, prevent
+EasyScience from writing to your users' consoles:
+
+```python
+# In your library's __init__.py, before any EasyScience import:
+import os
+os.environ.setdefault('EASYSCIENCE_LOG_LEVEL', 'ERROR')
+```
+
+### Recipe 3: Debug mode for development
+
+When developing or debugging, see all EasyScience internal diagnostics:
+
+```python
+from easyscience import global_object
+
+global_object.log.level = 'DEBUG'
+
+# Your code here — all EasyScience messages will be visible
+```
+
+### Recipe 4: See only error messages
+
+Keep the console clean but still see critical problems:
+
+```python
+from easyscience import global_object
+
+global_object.log.level = 'ERROR'
+```
+
+## Library-Safe Behaviour
+
+EasyScience follows standard library-logging best practices:
+
+- **No `logging.basicConfig()`** — EasyScience never reconfigures the
+ global logging setup.
+- **No default stream handlers** — EasyScience does not attach handlers
+ that write to `stdout` or `stderr`. It only creates log records.
+ Applications and test frameworks decide where those records go.
+- **Child loggers inherit** — Child loggers (e.g.
+ `easyscience.fitting.bumps`) are left at `logging.NOTSET` by default,
+ so they inherit level and handler configuration from the `easyscience`
+ package-root logger. Supressing the root suppresses everything.
+
+This means you are in full control. If you don't configure any handlers,
+Python's built-in `logging.lastResort` fallback still prints `WARNING`
+and above to `stderr`, so standalone users see important messages out of
+the box. `INFO` and `DEBUG` messages remain hidden until you opt in. If
+you do configure handlers (as `pytest` does via its logging plugin, or
+as an application might via `basicConfig`), you control what is shown
+and where.
diff --git a/docs/docs/user-guide/index.md b/docs/docs/user-guide/index.md
index bff8e315..84fe5c09 100644
--- a/docs/docs/user-guide/index.md
+++ b/docs/docs/user-guide/index.md
@@ -4,5 +4,7 @@ icon: material/book-open-variant
# :material-book-open-variant: User Guide
-This section is currently under development. Please check back later for
-updates.
+- [:material-volume-high: Controlling Log Output](controlling-log-output.md)
+ – How to suppress, filter, or redirect the messages that EasyScience
+ produces. Covers the `EASYSCIENCE_LOG_LEVEL` environment variable, the
+ logger hierarchy, context managers, and common recipes.
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index 65e6a543..91165ebc 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -145,13 +145,32 @@ plugins:
python:
paths: ['src'] # Change 'src' to your actual sources directory
options:
- docstring_style: google
- group_by_category: false
+ annotations_path: source
+ docstring_style: numpy
+ group_by_category: true
+ members_order: source
heading_level: 1
show_root_heading: true
show_root_full_path: false
show_submodules: true
- show_source: true
+ show_source: false
+ show_bases: false
+ # Uncomment when the project depends on `easyscience` and inherited
+ # EasyScience base-class members should be shown in the API docs.
+ # preload_modules:
+ # - easyscience
+ inherited_members: true
+ show_category_heading: true
+ merge_init_into_class: true
+ docstring_options:
+ ignore_init_summary: true
+ summary: true
+ relative_crossrefs: true
+ scoped_crossrefs: true
+ filters: ['!^_[^_]', '!__repr__', '!__dir__'] # This is the default filter minus __repr__ and __dir__
+ inventories:
+ - url: https://scipp.github.io/objects.inv
+ - url: https://numpy.org/doc/stable/objects.inv
- search
# Determines additional directories to watch when running mkdocs serve
@@ -172,12 +191,14 @@ nav:
- Installation & Setup: installation-and-setup/index.md
- User Guide:
- User Guide: user-guide/index.md
+ - Controlling Log Output: user-guide/controlling-log-output.md
- Tutorials:
- Tutorials: tutorials/index.md
+ - Bayesian analysis: tutorials/fitting-bayesian.ipynb
+ - Progress Callback: tutorials/progress-callback.ipynb
- Workshops & Schools:
- Fitting QENS: tutorials/fitting-qens.ipynb
- Fitting SANS: tutorials/fitting-sans.ipynb
- - Progress Callback: tutorials/progress-callback.ipynb
- API Reference:
- API Reference: api-reference/index.md
- base_classes: api-reference/base_classes.md
diff --git a/pixi.lock b/pixi.lock
index 8940ac8b..144dca8c 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -1,5587 +1,5956 @@
-version: 6
+version: 7
+platforms:
+- name: linux-64
+- name: osx-arm64
+- name: win-64
environments:
default:
channels:
+ - url: https://conda.anaconda.org/nodefaults/
- 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/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.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/linux-64/icu-78.2-h33c6efd_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_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/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/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.4-hecca717_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-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/libgcc-15.2.0-he0feb66_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.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.67.0-had1ee68_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-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.41.3-h5347b49_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/libsodium-1.0.21-h280c20c_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.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.1-hb9d3cd8_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.7.0-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/python-3.13.12-hc97d973_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/linux-64/msgspec-0.21.1-py314h5bd0f2a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.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/psutil-7.2.2-py314h0f05182_0.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/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/linux-64/rpds-py-0.30.0-py314h2e6c369_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_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/linux-64/zstd-1.5.7-hb78ec9c_6.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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyha191276_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-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/b9/45/860a82d618e5c3930faef0a0fe205b752323e5d10ce0c18fe5016fd4f8d2/chardet-7.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-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/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/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-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/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/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-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/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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-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/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/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-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/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/f2/85/ab6d04733a7d6ff32bfc8382bf1b07078228f5d6ebec5266b91bfc5c4ff7/pandas-3.0.1-cp313-cp313-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/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/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-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/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-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/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/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-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/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.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/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/94/98/aa2d4b9d28969cc7f62409f9f9fc5b5a853af651255eba03e9bee8546dd9/scipp-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_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/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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.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.2-h14c5de8_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.0-h19cb2f5_1.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.4-h991f03e_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/libmpdec-4.0.0-hf3981d6_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_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.1-hd23fc13_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.7.0-hf6efa0e_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/python-3.13.12-h894a449_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-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/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_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
+ - pypi: https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-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/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.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/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-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/56/26/1a22b9a19b4ca167ca462eaf91d0fc31285874d80b0381c55fdc5bc5f066/chardet-7.0.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-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/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/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-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/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.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/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.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/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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/88/b3/40207e0192415cbff7ea1d37b9f24b33f6d38a5a2f5d18a678de78f967ae/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.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/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-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/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-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
+ - 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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-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/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-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/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/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-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/0b/48/aad6ec4f8d007534c091e9a7172b3ec1b1ee6d99a9cbb936b5eab6c6cf58/pandas-3.0.1-cp313-cp313-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/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-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/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.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/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-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
+ - 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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/e5/22/75e119e0a200914f88f121cd956e1eb7f72c8ace4b63171f52ba0334d142/scipp-25.12.0-cp313-cp313-macosx_11_0_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/d7/51/ec641c26e6dca1b25a7d2035ba6ecb7c884ef1a100a9e42fbe4ce4405139/coverage-7.14.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_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/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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-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/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.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/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-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/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.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
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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/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/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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/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.2-hef89b57_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/osx-arm64/debugpy-1.8.20-py314he609de1_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/krb5-1.22.2-h385eeb1_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.0-h55c6f16_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.5-h55c6f16_1.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.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.0-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.67.0-hc438710_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_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.1-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.1-h8359307_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.7.0-hbfc8e16_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/python-3.13.12-h20e6be0_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/osx-arm64/msgspec-0.21.1-py314h6c2aa35_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.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/psutil-7.2.2-py314ha14b1ff_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/osx-arm64/python-3.14.4-h4c637c5_100_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/osx-arm64/rpds-py-0.30.0-py314haad56a0_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/tornado-6.5.5-py314h6c2aa35_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/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-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/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-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/24/fe/2f2425f3b0801e897653723ee827bc87e5a0feacf826ab268a9216680615/chardet-7.0.1-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-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/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/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-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/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/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-py3-none-any.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/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.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/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.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/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-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/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-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/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.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/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/a8/14/5990826f779f79148ae9d3a2c39593dc04d61d5d90541e71b5749f35af95/pandas-3.0.1-cp313-cp313-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/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-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/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.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/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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/18/5c/bc0ca94bff65fe0d206a369b54625f8ec7852dfd1d835174692026f34df9/scipp-25.12.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl
- pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-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/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-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/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.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/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
+ - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.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/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f3/9b/4165a1d56ddc302a0e2d518fd9d412a4fd0b57562618c78c5f21c57194f5/coverage-7.14.0-cp314-cp314-macosx_11_0_arm64.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyhe2676ad_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/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.4-hac47afa_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/win-64/debugpy-1.8.20-py314hb98de8c_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/win-64/libexpat-2.8.0-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/libsqlite-3.51.2-hf5d6505_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.7.0-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/python-3.13.12-h09917c8_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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.1-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/win-64/msgspec-0.21.1-py314h5a2d7ad_0.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/psutil-7.2.2-py314hc5dbbe4_0.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/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/win-64/rpds-py-0.30.0-py314h9f07db2_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.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/win-64/vc-14.3-h41ae7f8_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_35.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/win-64/zstd-1.5.7-h534d264_6.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-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/ed/44/7acb8f84fc7b5ad3c977ac31865b308881da1c0a6ca58be35554d2473dd7/chardet-7.0.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-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/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/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-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/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-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/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/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.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/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-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/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-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/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.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/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-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/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/d6/7d/216a1588b65a7aa5f4535570418a599d943c85afb1d95b0876fc00aa1468/pandas-3.0.1-cp313-cp313-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/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-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/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/eb/d1/b3cd2733a96a36c54c36889b2cfdd0331c1e5b57fa1757485a22d0ec3142/scipp-25.12.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl
- pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.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/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-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/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.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/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/f9/58/6e1b8f52fdc3184b47dc5037f5070d83a3d11042db1594b02d2a44d786c8/coverage-7.14.0-cp314-cp314-win_amd64.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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
py-311-env:
channels:
+ - url: https://conda.anaconda.org/nodefaults/
- 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/argon2-cffi-bindings-25.1.0-py311h49ec1c0_2.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/linux-64/icu-78.2-h33c6efd_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py311h03d9500_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py311hc665b79_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/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/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.4-hecca717_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-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.67.0-had1ee68_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.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/libsqlite-3.51.2-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.41.3-h5347b49_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.1-h0c1763c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.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.1-hb9d3cd8_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.7.0-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/python-3.11.14-hd63d673_3_cpython.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-py311h3778330_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.1-py311h49ec1c0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.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/psutil-7.2.2-py311haee01d2_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/pyyaml-6.0.3-py311h3778330_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py311h57d2397_2.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/rpds-py-0.30.0-py311h902ca64_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py311h49ec1c0_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/linux-64/zstd-1.5.7-hb78ec9c_6.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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/comm-0.2.3-pyhe01879c_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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-json-logger-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyha191276_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a1/7e/6815aab7d3a56610891c76ef79095677b8b5be6646aaf00f69b221765021/aiohttp-3.13.3-cp311-cp311-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/e4/9f/3d4ba1650e3eb3e7431a054e3bf1b5eaea25b84c72afabf5ef6fc33305d1/chardet-7.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-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/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/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/79/61/1ca198af22f7dd22c17ab86e9024ed3c06299cfdb08170640e9996d501a0/fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.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/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-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
- - 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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/8b/23/4ab1108e87851ccc69694b03b817d92e142966a6c4abd99e17db77f2c066/h5py-3.15.1-cp311-cp311-manylinux_2_27_x86_64.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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.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/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-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/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/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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/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/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/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/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/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-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/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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-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/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-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/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.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/79/db/e28c1b83e3680740aa78925f5fb2ae4d16207207419ad75ea9fe604f8676/matplotlib-3.10.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-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/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-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/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/2e/7c/870c7e7daec2a6c7ff2ac9e33b23317230d4e4e954b35112759ea4a924a7/pandas-3.0.1-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/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/a2/c8/46dfeac5825e600579157eea177be43e2f7ff4a99da9d0d0a49533509ac5/pillow-12.1.1-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/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/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4e/b6/ffe0bb67cec66cd450acff599bb07507bbf5ffda1a3a15dd2d8dbe7a6da7/scipp-25.12.0-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/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/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.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.2-h14c5de8_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.0-h19cb2f5_1.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.4-h991f03e_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.67.0-h3338091_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_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.1-hd23fc13_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.7.0-hf6efa0e_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/python-3.11.14-h74c2667_3_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/82/71/d5c31390d18d4f58115037c432b7e0348c60f6f53b727cad33172144a112/aiohttp-3.13.3-cp311-cp311-macosx_10_9_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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/00/fb/a90b4510aa9080966c65321db2084bcfa184518ee1ed15570d351649ecb2/chardet-7.0.1-cp311-cp311-macosx_10_9_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-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/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/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ac/49/4138d1acb6261499bedde1c07f8c2605d1d8f9d77a151e5507fd3ef084b6/fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.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
- - 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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/41/fd/8349b48b15b47768042cff06ad6e1c229f0a4bd89225bf6b6894fea27e6d/h5py-3.15.1-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.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/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/a0/c0/27fe1a68a39cf62472a300e2879ffc13c0538546c359b86f149cc19f6ac3/kiwisolver-1.4.9-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/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/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b1/10/31932775c94a86814f76b41c4a772b52abfb0e6125324f32c6da1196c297/chardet-7.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/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/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-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/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ff/07/c7087e003ceee9b9a82539b40414ec557aa795b584a1a346e89180853d79/pandas-3.0.1-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/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/2b/46/5da1ec4a5171ee7bf1a0efa064aba70ba3d6e0788ce3f5acd1375d23c8c0/pillow-12.1.1-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/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/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.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/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-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/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/12/0d/3f98a936a30bff4a460b51b9f85c4d994f94249930b2d8bedeb8111a359e/scipp-25.12.0-cp311-cp311-macosx_11_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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/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/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.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/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/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.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/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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/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/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.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/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/35/202235eb5c3c14c212462cd91d61b7386bf8fc44bc7a77f4742d2a69174b/coverage-7.14.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
osx-arm64:
+ - 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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/comm-0.2.3-pyhe01879c_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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-json-logger-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-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/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/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/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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py311h9408147_2.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-arm64/icu-78.2-hef89b57_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py311hd10dc20_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py311h8948835_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/krb5-1.22.2-h385eeb1_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.0-h55c6f16_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.5-h55c6f16_1.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.4-hf6b4638_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.0-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.67.0-hc438710_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_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.53.1-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.1-h8359307_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.7.0-hbfc8e16_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/python-3.11.14-h18782d2_3_cpython.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-py311hc290fe0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.1-py311hc949640_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.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/psutil-7.2.2-py311he363849_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py311hce6e4fa_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py311h9049b8e_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/pyyaml-6.0.3-py311hc290fe0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py311h745ac33_2.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/rpds-py-0.30.0-py311h71babbd_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/tornado-6.5.5-py311hc949640_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/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.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/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/0e/c9/741f8ac91e14b1d2e7100690425a5b2b919a87a5075406582991fb7de920/aiohttp-3.13.3-cp311-cp311-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/24/fa/3ad0b454a55376b7971fe64c2f225dfe56a491d8d8728fbfba63f8ff416d/chardet-7.0.1-cp311-cp311-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-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/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/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/69/12/bf9f4eaa2fad039356cc627587e30ed008c03f1cebd3034376b5ee8d1d44/fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.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
- - 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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/c1/b0/1c628e26a0b95858f54aba17e1599e7f6cd241727596cc2580b72cb0a9bf/h5py-3.15.1-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/31/a2/a12a503ac1fd4943c50f9822678e8015a790a13b5490354c68afb8489814/kiwisolver-1.4.9-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/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/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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/14/4b/d3c79495dee4831b8bebca2790e72cb90f0c5849c940570a7c7e5b70b952/chardet-7.4.3-cp311-cp311-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-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/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-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/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/51/18/325cd32ece1120d1da51cc4e4294c6580190699490183fc2fe8cb6d61ec5/matplotlib-3.10.9-cp311-cp311-macosx_11_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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-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/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/8d/46692d24b3f395d4cbf17bfcc57136b4f2f9c0c0df864b0bddfc1d71a014/coverage-7.14.0-cp311-cp311-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.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/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/85/d7/9b6ac05350ab7f7d3a730ff143ff3e2cada54514117c37be37e26dc91242/docstripy-0.7.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-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/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/c1/27/90683c7122febeefe84a56f2cde86a9f05f68d53885cebcc473298dfc33e/pandas-3.0.1-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/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/78/93/a29e9bc02d1cf557a834da780ceccd54e02421627200696fcf805ebdc3fb/pillow-12.1.1-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/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/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/6a/3a/ab0eb61593569d5a0d080002e4b8c0998cb1116d8710781b7225c304b880/scipp-25.12.0-cp311-cp311-macosx_11_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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.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/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/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/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.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/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-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/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/bf/3b/38ff88b347c3e346cda1d3fc1b65a7aa75d40632228d8b8a5d7b58508c24/h5py-3.16.0-cp311-cp311-macosx_11_0_arm64.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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.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/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.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/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.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/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
win-64:
+ - 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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyhe2676ad_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-json-logger-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py311h3485c13_2.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/win-64/libexpat-2.7.4-hac47afa_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py311h3485c13_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py311h5dfdfe8_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/win-64/libexpat-2.8.0-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.51.2-hf5d6505_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.7.0-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/python-3.11.14-h0159041_3_cpython.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.53.1-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-py311h3f79411_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.1-py311h3485c13_0.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/psutil-7.2.2-py311hf893f09_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/pywin32-311-py311hefeebc8_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py311hda3d55a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py311h3f79411_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py311hff25285_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py311hf51aa87_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py311h3485c13_0.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/win-64/vc-14.3-h41ae7f8_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_35.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
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/dc/f2/27cdf04c9851712d6c1b99df6821a6623c3c9e55956d4b1e318c337b5a48/aiohttp-3.13.3-cp311-cp311-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/73/64/9c5c450ba18359a8e8ab2943e6c3a0b100bd394799bc73a844e3c5cd9c7c/chardet-7.0.1-cp311-cp311-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-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/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/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/61/08/3d9c8613079d2b11c185b865de9a4c1a68850cfda2b357fae365cf609f29/coverage-7.13.4-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.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
- - 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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/23/95/499b4e56452ef8b6c95a271af0dde08dac4ddb70515a75f346d4f400579b/h5py-3.15.1-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-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/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/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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.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/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-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/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.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/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.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/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.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/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-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/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/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/5d/a6/e9b8f8a3e99602792b01fa7d0a731737615ab56d8bfd0b52935a0ef88b85/chardet-7.4.3-cp311-cp311-win_amd64.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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-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/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-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/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.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/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/0d/271aace3342157c64700c9ff4c59c7b392f3dbab393692e8db6fbe7ab96c/matplotlib-3.10.9-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/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/1f/67/af63f83cd6ca603a00fe8530c10a60f0879265b8be00b5930e8e78c5b30b/pandas-3.0.1-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/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/31/03/bef822e4f2d8f9d7448c133d0a18185d3cce3e70472774fffefe8b0ed562/pillow-12.1.1-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/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/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/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/bd/75/6a3786de6645ac2ccd94fbf83c59cc6b929bfa3a89cb62c8cb3be4de0606/scipp-25.12.0-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-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/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
- py-313-env:
+ - pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.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/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-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/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.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/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.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/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-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/e6/0d/8882a4c7a5ebe59a46b709e82411d9c730d67250d41a2e11bc4bcd4d431d/scipp-26.3.1-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/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f0/f0/a71ddbd874431e7a7cd96071f0c331cfbbad07704833c765d24ffbab8a67/coverage-7.14.0-cp311-cp311-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-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/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-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/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
+ py-314-env:
channels:
+ - url: https://conda.anaconda.org/nodefaults/
- 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/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.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/linux-64/icu-78.2-h33c6efd_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_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/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/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.4-hecca717_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-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/libgcc-15.2.0-he0feb66_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.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.67.0-had1ee68_0.conda
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-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.41.3-h5347b49_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/libsodium-1.0.21-h280c20c_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.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.1-hb9d3cd8_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.7.0-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/python-3.13.12-hc97d973_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/linux-64/msgspec-0.21.1-py314h5bd0f2a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.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/psutil-7.2.2-py314h0f05182_0.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/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/linux-64/rpds-py-0.30.0-py314h2e6c369_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_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/linux-64/zstd-1.5.7-hb78ec9c_6.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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyha191276_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-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/b9/45/860a82d618e5c3930faef0a0fe205b752323e5d10ce0c18fe5016fd4f8d2/chardet-7.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-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/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/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-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/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/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-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/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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-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/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/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-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/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/f2/85/ab6d04733a7d6ff32bfc8382bf1b07078228f5d6ebec5266b91bfc5c4ff7/pandas-3.0.1-cp313-cp313-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/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/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-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/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-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/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/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-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/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.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/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/94/98/aa2d4b9d28969cc7f62409f9f9fc5b5a853af651255eba03e9bee8546dd9/scipp-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_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/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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.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.2-h14c5de8_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.0-h19cb2f5_1.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.4-h991f03e_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/libmpdec-4.0.0-hf3981d6_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_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.1-hd23fc13_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.7.0-hf6efa0e_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/python-3.13.12-h894a449_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-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/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_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
+ - pypi: https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-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/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.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/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-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/56/26/1a22b9a19b4ca167ca462eaf91d0fc31285874d80b0381c55fdc5bc5f066/chardet-7.0.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-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/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/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-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/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-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
+ - 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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.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/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/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/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-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/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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/d7/51/ec641c26e6dca1b25a7d2035ba6ecb7c884ef1a100a9e42fbe4ce4405139/coverage-7.14.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_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/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.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/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-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/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.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
+ 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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/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/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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/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/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_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/krb5-1.22.2-h385eeb1_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.5-h55c6f16_1.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.8.0-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/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.1-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/osx-arm64/msgspec-0.21.1-py314h6c2aa35_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.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/psutil-7.2.2-py314ha14b1ff_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/osx-arm64/python-3.14.4-h4c637c5_100_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/osx-arm64/rpds-py-0.30.0-py314haad56a0_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/osx-arm64/tornado-6.5.5-py314h6c2aa35_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/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/88/b3/40207e0192415cbff7ea1d37b9f24b33f6d38a5a2f5d18a678de78f967ae/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-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/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-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/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-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/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/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-py3-none-any.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/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/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/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-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/0b/48/aad6ec4f8d007534c091e9a7172b3ec1b1ee6d99a9cbb936b5eab6c6cf58/pandas-3.0.1-cp313-cp313-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/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-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/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-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/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.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/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.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/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/e5/22/75e119e0a200914f88f121cd956e1eb7f72c8ace4b63171f52ba0334d142/scipp-25.12.0-cp313-cp313-macosx_11_0_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-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/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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-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/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.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.2-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.0-h55c6f16_1.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.4-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.67.0-hc438710_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-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.1-h8359307_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.7.0-hbfc8e16_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/python-3.13.12-h20e6be0_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-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/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.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/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/52/59/0782e51887ac6b07ffd1570e0364cf901ebc36345fea669969d2084baebb/simple_websocket-1.1.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/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-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/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-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/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.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/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-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/24/fe/2f2425f3b0801e897653723ee827bc87e5a0feacf826ab268a9216680615/chardet-7.0.1-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-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/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/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-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/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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-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/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.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/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.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/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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.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/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-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/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-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/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/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-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/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-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/a8/14/5990826f779f79148ae9d3a2c39593dc04d61d5d90541e71b5749f35af95/pandas-3.0.1-cp313-cp313-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/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-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/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/b3/52/bc858b1665d0dec3a2511f4e6f5c18ea85c0977563d624d597c95d6d0fd7/jupyterquiz-2.9.6.4-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-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/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-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/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/18/5c/bc0ca94bff65fe0d206a369b54625f8ec7852dfd1d835174692026f34df9/scipp-25.12.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.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/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
- 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
- - 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/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-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/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
+ - pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.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/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f3/9b/4165a1d56ddc302a0e2d518fd9d412a4fd0b57562618c78c5f21c57194f5/coverage-7.14.0-cp314-cp314-macosx_11_0_arm64.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyhe2676ad_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/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.4-hac47afa_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/win-64/debugpy-1.8.20-py314hb98de8c_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/win-64/libexpat-2.8.0-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/libsqlite-3.51.2-hf5d6505_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.7.0-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/python-3.13.12-h09917c8_100_cp313.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.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.1-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/win-64/msgspec-0.21.1-py314h5a2d7ad_0.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/psutil-7.2.2-py314hc5dbbe4_0.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/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/win-64/rpds-py-0.30.0-py314h9f07db2_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/tzdata-2025c-hc9c84f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.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/win-64/vc-14.3-h41ae7f8_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_35.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/win-64/zstd-1.5.7-h534d264_6.conda
+ - pypi: .
+ - pypi: https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-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/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.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/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-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/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-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/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-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/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-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/ed/44/7acb8f84fc7b5ad3c977ac31865b308881da1c0a6ca58be35554d2473dd7/chardet-7.0.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-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/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/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-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/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-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/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.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/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-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/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-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/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-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/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-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/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-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/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.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/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-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/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-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/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-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/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/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-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/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-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/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.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/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-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/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.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/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.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/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-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/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-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/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-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/33/b2/986d1220f6ee931e338d272bc1f3ec02cfe5f9b5fad84e95afdad57f1ebc/format_docstring-0.2.7-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/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.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/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3e/17/1f31d8562e6f970d64911f1abc330d233bc0c0601411cf7e19c1292be6da/spdx_headers-1.5.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-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/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-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/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-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/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.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/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/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.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/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.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/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-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/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-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/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-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/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-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/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-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/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/d6/7d/216a1588b65a7aa5f4535570418a599d943c85afb1d95b0876fc00aa1468/pandas-3.0.1-cp313-cp313-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/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-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/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-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/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-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/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.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/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-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/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.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/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-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/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-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/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/eb/d1/b3cd2733a96a36c54c36889b2cfdd0331c1e5b57fa1757485a22d0ec3142/scipp-25.12.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-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/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-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/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.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/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-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/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
- - pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.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/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.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/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl
- pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.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/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl
- - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- - pypi: ./
-packages:
-- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
- build_number: 20
- sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9
- md5: a9f577daf3de00bca7c3c76c0ecbd1de
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgomp >=7.5.0
- constrains:
- - openmp_impl <0.0a0
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 28948
- timestamp: 1770939786096
-- 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/0e/c9/741f8ac91e14b1d2e7100690425a5b2b919a87a5075406582991fb7de920/aiohttp-3.13.3-cp311-cp311-macosx_11_0_arm64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea
- 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/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3
- 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/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9
- 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/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e
- 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/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: aiohttp
- version: 3.13.3
- sha256: f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0
- 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/82/71/d5c31390d18d4f58115037c432b7e0348c60f6f53b727cad33172144a112/aiohttp-3.13.3-cp311-cp311-macosx_10_9_x86_64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64
- 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/a1/7e/6815aab7d3a56610891c76ef79095677b8b5be6646aaf00f69b221765021/aiohttp-3.13.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1
- 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/dc/f2/27cdf04c9851712d6c1b99df6821a6623c3c9e55956d4b1e318c337b5a48/aiohttp-3.13.3-cp311-cp311-win_amd64.whl
- name: aiohttp
- version: 3.13.3
- sha256: 642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f
- 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/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
- name: aiosignal
- version: 1.4.0
- sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e
- requires_dist:
- - frozenlist>=1.1.0
- - typing-extensions>=4.2 ; python_full_version < '3.13'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
- name: annotated-types
- version: 0.7.0
- sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
- requires_dist:
- - typing-extensions>=4.0.0 ; python_full_version < '3.9'
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl
- name: anyio
- version: 4.12.1
- sha256: d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c
- 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 ; python_full_version >= '3.10' and extra == 'trio'
- - trio>=0.31.0 ; python_full_version < '3.10' and extra == 'trio'
- requires_python: '>=3.9'
-- 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:
- - 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'
-- pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl
- name: asteval
- version: 1.0.8
- sha256: 6c64385c6ff859a474953c124987c7ee8354d781c76509b2c598741c4d1d28e9
- requires_dist:
- - build ; extra == 'dev'
- - twine ; extra == 'dev'
- - sphinx ; extra == 'doc'
- - pytest ; extra == 'test'
- - pytest-cov ; extra == 'test'
- - 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/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl
- name: async-lru
- version: 2.2.0
- sha256: e2c1cf731eba202b59c5feedaef14ffd9d02ad0037fcda64938699f2c380eafe
- requires_dist:
- - typing-extensions>=4.0.0 ; python_full_version < '3.11'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl
- name: attrs
- version: 25.4.0
- sha256: adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl
- name: autopep8
- version: 2.3.2
- sha256: ce8ad498672c845a0c3de2629c15b635ec2b05ef8177a6e7c91c74f3e9b51128
- requires_dist:
- - 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
- name: backrefs
- version: '6.2'
- sha256: 08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be
- requires_dist:
- - regex ; extra == 'extras'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-none-any.whl
- name: backrefs
- version: '6.2'
- sha256: 12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b
- 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'
-- 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:
- - webencodings
- - tinycss2>=1.1.0,<1.5 ; extra == 'css'
- requires_python: '>=3.10'
-- 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'
-- pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl
- name: build
- version: 1.4.0
- sha256: 6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596
- 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'
- - 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
- name: bumps
- version: 1.0.3
- sha256: 4f503c814b9ddd2cda760b2e35aaa6285651434fc2e64ccac55b1a666bca17f6
- requires_dist:
- - numpy
- - scipy
- - h5py
- - dill
- - cloudpickle
- - matplotlib
- - blinker
- - aiohttp
- - python-socketio
- - plotly
- - mpld3
- - msgpack
- - graphlib-backport ; python_full_version < '3.9'
- - build ; extra == 'dev'
- - pre-commit ; extra == 'dev'
- - pytest ; extra == 'dev'
- - pytest-cov ; extra == 'dev'
- - ruff ; extra == 'dev'
- - wheel ; extra == 'dev'
- - setuptools ; extra == 'dev'
- - sphinx ; extra == 'dev'
- - versioningit ; extra == 'dev'
- requires_python: '>=3.9'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
- sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6
- md5: d2ffd7602c02f2b316fd921d39876885
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- license: bzip2-1.0.6
- license_family: BSD
- 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
- depends:
- - __osx >=11.0
- license: bzip2-1.0.6
- license_family: BSD
- purls: []
- size: 124834
- timestamp: 1771350416561
-- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda
- sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902
- md5: 4cb8e6b48f67de0b018719cdf1136306
- depends:
- - ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- license: bzip2-1.0.6
- license_family: BSD
- purls: []
- size: 56115
- timestamp: 1771350256444
-- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda
- sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e
- md5: 920bb03579f15389b9e512095ad995b7
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- license: MIT
- license_family: MIT
- 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
- depends:
- - __osx >=11.0
- license: MIT
- license_family: MIT
- purls: []
- size: 180327
- timestamp: 1765215064054
-- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda
- sha256: 37950019c59b99585cee5d30dbc2cc9696ed4e11f5742606a4db1621ed8f94d6
- md5: f001e6e220355b7f87403a4d0e5bf1ca
- depends:
- - __win
- license: ISC
- purls: []
- size: 147734
- timestamp: 1772006322223
-- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda
- sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc
- md5: 4492fd26db29495f0ba23f146cd5638d
- depends:
- - __unix
- license: ISC
- 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/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl
- name: cffi
- version: 2.0.0
- sha256: 19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75
- requires_dist:
- - pycparser ; implementation_name != 'PyPy'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
- name: cffi
- version: 2.0.0
- sha256: 45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca
- requires_dist:
- - pycparser ; implementation_name != 'PyPy'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: cffi
- version: 2.0.0
- sha256: 00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb
- 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/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- name: cffi
- version: 2.0.0
- sha256: c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26
- 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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl
- name: cfgv
- version: 3.5.0
- sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/00/fb/a90b4510aa9080966c65321db2084bcfa184518ee1ed15570d351649ecb2/chardet-7.0.1-cp311-cp311-macosx_10_9_x86_64.whl
- name: chardet
- version: 7.0.1
- sha256: c3f59dc3e148b54813ec5c7b4b2e025d37f5dc221ee28a06d1a62f169cfaedf5
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/24/fa/3ad0b454a55376b7971fe64c2f225dfe56a491d8d8728fbfba63f8ff416d/chardet-7.0.1-cp311-cp311-macosx_11_0_arm64.whl
- name: chardet
- version: 7.0.1
- sha256: 3355a3c8453d673e7c1664fdd24a0c6ef39964c3d41befc4849250f7eb1de3b5
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/24/fe/2f2425f3b0801e897653723ee827bc87e5a0feacf826ab268a9216680615/chardet-7.0.1-cp313-cp313-macosx_11_0_arm64.whl
- name: chardet
- version: 7.0.1
- sha256: 63bc210ce73f8a1b87430b949f84d086cb326d67eb259305862e7c8861b73374
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/56/26/1a22b9a19b4ca167ca462eaf91d0fc31285874d80b0381c55fdc5bc5f066/chardet-7.0.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: chardet
- version: 7.0.1
- sha256: 67fe3f453416ed9343057dcf06583b36aae6d8bdb013370b3ff46bc37b7e30ac
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/73/64/9c5c450ba18359a8e8ab2943e6c3a0b100bd394799bc73a844e3c5cd9c7c/chardet-7.0.1-cp311-cp311-win_amd64.whl
- name: chardet
- version: 7.0.1
- sha256: 26186f0ea03c4c1f9be20c088b127c71b0e9d487676930fab77625ddec2a4ef2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/b9/45/860a82d618e5c3930faef0a0fe205b752323e5d10ce0c18fe5016fd4f8d2/chardet-7.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: chardet
- version: 7.0.1
- sha256: 8714f0013c208452a98e23595d99cef53c5364565454425f431446eb586e2591
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e4/9f/3d4ba1650e3eb3e7431a054e3bf1b5eaea25b84c72afabf5ef6fc33305d1/chardet-7.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: chardet
- version: 7.0.1
- sha256: 265cb3b5dafc0411c0949800a0692f07e986fb663b6ae1ecfba32ad193a55a03
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/ed/44/7acb8f84fc7b5ad3c977ac31865b308881da1c0a6ca58be35554d2473dd7/chardet-7.0.1-cp313-cp313-win_amd64.whl
- name: chardet
- version: 7.0.1
- sha256: c12abc65830068ad05bd257fb953aaaf63a551446688e03e145522086be5738c
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: 5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: 840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: 6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: charset-normalizer
- version: 3.4.4
- sha256: a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl
- name: click
- version: 8.3.1
- sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6
- 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.*'
-- 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/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl
- name: contourpy
- version: 1.3.3
- sha256: 1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263
- 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/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: contourpy
- version: 1.3.3
- sha256: 4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9
- 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/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: contourpy
- version: 1.3.3
- sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db
- 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/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl
- name: contourpy
- version: 1.3.3
- sha256: 177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5
- 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/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl
- name: contourpy
- version: 1.3.3
- sha256: 709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1
- 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/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl
- name: contourpy
- version: 1.3.3
- sha256: d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1
- 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/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl
- name: contourpy
- version: 1.3.3
- sha256: 3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42
- 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/9c/22/6d9cfea622a064d17f406bbea1dd37f95ac75094d44e23447df934661add/copier-9.12.0-py3-none-any.whl
- name: copier
- version: 9.12.0
- sha256: a1bc84dfd2a4b85dbe034999026c0e24ca02a6bc1574f45df07fd76d935c2ea9
- 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/61/08/3d9c8613079d2b11c185b865de9a4c1a68850cfda2b357fae365cf609f29/coverage-7.13.4-cp311-cp311-win_amd64.whl
- name: coverage
- version: 7.13.4
- sha256: 2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- name: coverage
- version: 7.13.4
- sha256: 8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl
- name: coverage
- version: 7.13.4
- sha256: 3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl
- name: coverage
- version: 7.13.4
- sha256: d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl
- name: coverage
- version: 7.13.4
- sha256: b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl
- name: coverage
- version: 7.13.4
- sha256: e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- name: coverage
- version: 7.13.4
- sha256: b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl
- name: coverage
- version: 7.13.4
- sha256: 19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11
- requires_dist:
- - tomli ; python_full_version <= '3.11' and extra == 'toml'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
- name: cycler
- version: 0.12.1
- sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30
- requires_dist:
- - ipython ; extra == 'docs'
- - matplotlib ; extra == 'docs'
- - numpydoc ; extra == 'docs'
- - sphinx ; extra == 'docs'
- - pytest ; extra == 'tests'
- - pytest-cov ; extra == 'tests'
- - pytest-xdist ; extra == 'tests'
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl
- name: debugpy
- version: 1.8.20
- sha256: eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7
- 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.*'
-- pypi: https://files.pythonhosted.org/packages/13/40/e412e277c43983693456d7f11f2bc72ca9209aa1342255bb446496d2fb48/dfo_ls-1.6.2-py3-none-any.whl
- name: dfo-ls
- version: 1.6.2
- sha256: 961d15e7194f3868e9e48da45010cb6d24d85491007fbee4e38a9f3ab8050cef
- requires_dist:
- - setuptools
- - numpy
- - scipy>=1.11
- - pandas
- - pytest ; extra == 'dev'
- - sphinx ; extra == 'dev'
- - sphinx-rtd-theme ; extra == 'dev'
- - trustregion>=1.1 ; extra == 'trustregion'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl
- name: dill
- version: 0.4.1
- sha256: 1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d
- requires_dist:
- - objgraph>=1.7.2 ; extra == 'graph'
- - gprof2dot>=2022.7.29 ; extra == 'profile'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
- 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/87/10/2c7edbf230e5c507d38367af498fa94258ed97205d9b4b6f63a921fe9c49/dunamai-1.26.0-py3-none-any.whl
- name: dunamai
- version: 1.26.0
- sha256: f584edf0fda0d308cce0961f807bc90a8fe3d9ff4d62f94e72eca7b43f0ed5f6
- requires_dist:
- - importlib-metadata>=1.6.0 ; python_full_version < '3.8'
- - packaging>=20.9
- requires_python: '>=3.5'
-- pypi: ./
- name: easyscience
- version: 2.3.0+dev2
- sha256: b7cf823c6869b1bc774920e0a39713f9517d61b4699854a265ba9ff2be6f9be6
- requires_dist:
- - asteval
- - bumps
- - dfo-ls
- - ipykernel
- - ipympl
- - ipython
- - ipywidgets
- - jupyterlab
- - lmfit
- - matplotlib
- - numpy
- - pixi-kernel
- - pooch
- - scipp
- - uncertainties
- - build ; extra == 'dev'
- - copier ; extra == 'dev'
- - docformatter ; extra == 'dev'
- - gitpython ; extra == 'dev'
- - interrogate ; extra == 'dev'
- - jinja2 ; extra == 'dev'
- - jupyterquiz ; extra == 'dev'
- - jupytext ; extra == 'dev'
- - mike ; extra == 'dev'
- - mkdocs ; extra == 'dev'
- - mkdocs-autorefs ; extra == 'dev'
- - mkdocs-jupyter ; extra == 'dev'
- - mkdocs-markdownextradata-plugin ; extra == 'dev'
- - mkdocs-material ; extra == 'dev'
- - mkdocs-plugin-inline-svg ; extra == 'dev'
- - mkdocstrings-python ; extra == 'dev'
- - nbmake ; extra == 'dev'
- - nbqa ; extra == 'dev'
- - nbstripout ; extra == 'dev'
- - pre-commit ; extra == 'dev'
- - pytest ; extra == 'dev'
- - pytest-cov ; extra == 'dev'
- - pytest-xdist ; extra == 'dev'
- - pyyaml ; extra == 'dev'
- - radon ; extra == 'dev'
- - ruff ; extra == 'dev'
- - spdx-headers ; extra == 'dev'
- - validate-pyproject[all] ; extra == 'dev'
- - versioningit ; extra == 'dev'
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl
- name: execnet
- version: 2.1.2
- sha256: 67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec
- requires_dist:
- - hatch ; extra == 'testing'
- - pre-commit ; extra == 'testing'
- - 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'
-- pypi: https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl
- name: filelock
- version: 3.25.0
- sha256: 5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl
- name: fonttools
- version: 4.61.1
- sha256: fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7
- 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/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl
- name: fonttools
- version: 4.61.1
- sha256: 21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b
- 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/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl
- name: fonttools
- version: 4.61.1
- sha256: 8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c
- 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/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: fonttools
- version: 4.61.1
- sha256: dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e
- 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/69/12/bf9f4eaa2fad039356cc627587e30ed008c03f1cebd3034376b5ee8d1d44/fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.whl
- name: fonttools
- version: 4.61.1
- sha256: c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09
- 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/79/61/1ca198af22f7dd22c17ab86e9024ed3c06299cfdb08170640e9996d501a0/fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- name: fonttools
- version: 4.61.1
- sha256: 75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9
- 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/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
- name: fonttools
- version: 4.61.1
- sha256: 64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5
- 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/ac/49/4138d1acb6261499bedde1c07f8c2605d1d8f9d77a151e5507fd3ef084b6/fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.whl
- name: fonttools
- version: 4.61.1
- sha256: 5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37
- 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/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/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl
- name: frozenlist
- version: 1.8.0
- sha256: f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40
- 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'
-- pypi: https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: frozenlist
- version: 1.8.0
- sha256: 96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl
- name: frozenlist
- version: 1.8.0
- sha256: fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
- name: frozenlist
- version: 1.8.0
- sha256: fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl
- name: frozenlist
- version: 1.8.0
- sha256: 878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231
- 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
- name: frozenlist
- version: 1.8.0
- sha256: 17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl
- name: funcy
- version: '2.0'
- sha256: 53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0
-- pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
- name: ghp-import
- version: 2.1.0
- sha256: 8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619
- requires_dist:
- - python-dateutil>=2.8.1
- - twine ; extra == 'dev'
- - markdown ; extra == 'dev'
- - flake8 ; extra == 'dev'
- - wheel ; extra == 'dev'
-- pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl
- name: gitdb
- version: 4.0.12
- sha256: 67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf
- requires_dist:
- - smmap>=3.0.1,<6
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl
- name: gitpython
- version: 3.1.46
- sha256: 79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058
- requires_dist:
- - gitdb>=4.0.1,<5
- - typing-extensions>=3.10.0.2 ; python_full_version < '3.10'
- - coverage[toml] ; extra == 'test'
- - ddt>=1.1.1,!=1.4.3 ; extra == 'test'
- - mock ; python_full_version < '3.8' and extra == 'test'
- - mypy==1.18.2 ; python_full_version >= '3.9' and extra == 'test'
- - pre-commit ; extra == 'test'
- - pytest>=7.3.1 ; extra == 'test'
- - pytest-cov ; extra == 'test'
- - pytest-instafail ; extra == 'test'
- - pytest-mock ; extra == 'test'
- - pytest-sugar ; extra == 'test'
- - typing-extensions ; python_full_version < '3.11' and extra == 'test'
- - sphinx>=7.1.2,<7.2 ; extra == 'doc'
- - sphinx-rtd-theme ; extra == 'doc'
- - sphinx-autodoc-typehints ; extra == 'doc'
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-py3-none-any.whl
- name: griffelib
- version: 2.0.0
- sha256: 01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f
- requires_dist:
- - pip>=24.0 ; extra == 'pypi'
- - 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'
-- pypi: https://files.pythonhosted.org/packages/23/95/499b4e56452ef8b6c95a271af0dde08dac4ddb70515a75f346d4f400579b/h5py-3.15.1-cp311-cp311-win_amd64.whl
- name: h5py
- version: 3.15.1
- sha256: 550e51131376889656feec4aff2170efc054a7fe79eb1da3bb92e1625d1ac878
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl
- name: h5py
- version: 3.15.1
- sha256: ab2219dbc6fcdb6932f76b548e2b16f34a1f52b7666e998157a4dfc02e2c4123
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/41/fd/8349b48b15b47768042cff06ad6e1c229f0a4bd89225bf6b6894fea27e6d/h5py-3.15.1-cp311-cp311-macosx_10_9_x86_64.whl
- name: h5py
- version: 3.15.1
- sha256: 5aaa330bcbf2830150c50897ea5dcbed30b5b6d56897289846ac5b9e529ec243
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/88/b3/40207e0192415cbff7ea1d37b9f24b33f6d38a5a2f5d18a678de78f967ae/h5py-3.15.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: h5py
- version: 3.15.1
- sha256: c8440fd8bee9500c235ecb7aa1917a0389a2adb80c209fa1cc485bd70e0d94a5
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/8b/23/4ab1108e87851ccc69694b03b817d92e142966a6c4abd99e17db77f2c066/h5py-3.15.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: h5py
- version: 3.15.1
- sha256: 5b849ba619a066196169763c33f9f0f02e381156d61c03e000bb0100f9950faf
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/c1/b0/1c628e26a0b95858f54aba17e1599e7f6cd241727596cc2580b72cb0a9bf/h5py-3.15.1-cp311-cp311-macosx_11_0_arm64.whl
- name: h5py
- version: 3.15.1
- sha256: c970fb80001fffabb0109eaf95116c8e7c0d3ca2de854e0901e8a04c1f098509
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: h5py
- version: 3.15.1
- sha256: 121b2b7a4c1915d63737483b7bff14ef253020f617c2fb2811f67a4bed9ac5e8
- requires_dist:
- - numpy>=1.21.2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl
- name: h5py
- version: 3.15.1
- sha256: dea78b092fd80a083563ed79a3171258d4a4d307492e7cf8b2313d464c82ba52
- 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:
- - 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:
- - anyio
- - certifi
- - 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'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda
- sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329
- md5: 186a18e3ba246eccfc7cff00cd19a870
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- - libstdcxx >=14
- license: MIT
- license_family: MIT
- purls: []
- size: 12728445
- timestamp: 1767969922681
-- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.2-h14c5de8_0.conda
- sha256: f3066beae7fe3002f09c8a412cdf1819f49a2c9a485f720ec11664330cf9f1fe
- md5: 30334add4de016489b731c6662511684
- depends:
- - __osx >=10.13
- license: MIT
- license_family: MIT
- purls: []
- size: 12263724
- timestamp: 1767970604977
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda
- sha256: 24bc62335106c30fecbcc1dba62c5eba06d18b90ea1061abd111af7b9c89c2d7
- md5: 114e6bfe7c5ad2525eb3597acdbf2300
- depends:
- - __osx >=11.0
- license: MIT
- license_family: MIT
- purls: []
- size: 12389400
- timestamp: 1772209104304
-- pypi: https://files.pythonhosted.org/packages/40/66/71c1227dff78aaeb942fed29dd5651f2aec166cc7c9aeea3e8b26a539b7d/identify-2.6.17-py2.py3-none-any.whl
- name: identify
- version: 2.6.17
- sha256: be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0
- 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'
-- pypi: https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl
- name: importlib-metadata
- version: 8.7.1
- sha256: 5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
- requires_dist:
- - zipp>=3.20
- - pytest>=6,!=8.1.* ; extra == 'test'
- - packaging ; extra == 'test'
- - pyfakefs ; extra == 'test'
- - flufl-flake8 ; extra == 'test'
- - pytest-perf>=0.9.2 ; extra == 'test'
- - jaraco-test>=5.4 ; 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'
- - ipython ; extra == 'perf'
- - pytest-checkdocs>=2.4 ; extra == 'check'
- - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check'
- - pytest-cov ; extra == 'cover'
- - pytest-enabler>=3.4 ; extra == 'enabler'
- - pytest-mypy>=1.0.1 ; extra == 'type'
- - mypy<1.19 ; platform_python_implementation == 'PyPy' and extra == 'type'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl
- name: importlib-resources
- version: 6.5.2
- sha256: 789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec
- requires_dist:
- - zipp>=3.1.0 ; python_full_version < '3.10'
- - pytest>=6,!=8.1.* ; extra == 'test'
- - zipp>=3.17 ; extra == 'test'
- - jaraco-test>=5.4 ; 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'
- - pytest-checkdocs>=2.4 ; extra == 'check'
- - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check'
- - pytest-cov ; extra == 'cover'
- - pytest-enabler>=2.2 ; extra == 'enabler'
- - pytest-mypy ; extra == 'type'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
- name: iniconfig
- version: 2.3.0
- sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
- name: interrogate
- version: 1.7.0
- sha256: b13ff4dd8403369670e2efe684066de9fcb868ad9d7f2b4095d8112142dc9d12
- requires_dist:
- - attrs
- - click>=7.1
- - colorama
- - py
- - tabulate
- - tomli ; python_full_version < '3.11'
- - cairosvg ; extra == 'dev'
- - sphinx ; extra == 'dev'
- - sphinx-autobuild ; extra == 'dev'
- - pytest ; extra == 'dev'
- - pytest-cov ; extra == 'dev'
- - pytest-mock ; extra == 'dev'
- - coverage[toml] ; extra == 'dev'
- - wheel ; extra == 'dev'
- - pre-commit ; extra == 'dev'
- - sphinx ; extra == 'docs'
- - sphinx-autobuild ; extra == 'docs'
- - cairosvg ; extra == 'png'
- - pytest ; extra == 'tests'
- - pytest-cov ; extra == 'tests'
- - pytest-mock ; extra == 'tests'
- - coverage[toml] ; extra == 'tests'
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl
- name: ipykernel
- version: 6.31.0
- sha256: abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af
- requires_dist:
- - appnope>=0.1.2 ; sys_platform == 'darwin'
- - comm>=0.1.1
- - debugpy>=1.6.5
- - ipython>=7.23.1
- - jupyter-client>=8.0.0
- - jupyter-core>=4.12,!=5.0.*
- - matplotlib-inline>=0.1
- - nest-asyncio>=1.4
- - packaging>=22
- - psutil>=5.7
- - pyzmq>=25
- - tornado>=6.2
- - 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 ; extra == 'docs'
- - sphinx-autodoc-typehints ; 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,<9 ; extra == 'test'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
- name: ipympl
- version: 0.10.0
- sha256: a09c4f0ff86490cc62aed45e53b912fb706e3ec3506c4a51ce4a670d6667f5ce
- requires_dist:
- - ipython<10
- - ipywidgets>=7.6.0,<9
- - matplotlib>=3.5.0,<4
- - numpy
- - pillow
- - traitlets<6
- - intersphinx-registry ; extra == 'docs'
- - myst-nb ; extra == 'docs'
- - sphinx-book-theme ; extra == 'docs'
- - sphinx-copybutton ; extra == 'docs'
- - sphinx-thebe ; extra == 'docs'
- - sphinx-togglebutton ; extra == 'docs'
- - sphinx>=1.5 ; extra == 'docs'
- - nbval>=0.11.0 ; extra == 'test'
- - pytest>=9.0.2 ; extra == 'test'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.0-py3-none-any.whl
- name: ipython
- version: 9.10.0
- sha256: c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d
- 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/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:
- - pygments
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl
- name: ipywidgets
- version: 8.1.8
- sha256: ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e
- requires_dist:
- - comm>=0.1.3
- - ipython>=6.1.0
- - traitlets>=4.3.1
- - widgetsnbextension~=4.0.14
- - jupyterlab-widgets~=3.0.15
- - jsonschema ; extra == 'test'
- - ipykernel ; extra == 'test'
- - pytest>=3.6.0 ; extra == 'test'
- - 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'
-- 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
- sha256: e1082f5564917649c76fed239117820610516ec10f87735d0338688800a55b34
- requires_dist:
- - jinja2
- - pyyaml
- - pytest ; extra == 'test'
- - pytest-cov ; extra == 'test'
-- pypi: https://files.pythonhosted.org/packages/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl
- name: json5
- version: 0.13.0
- sha256: 9a08e1dd65f6a4d4c6fa82d216cf2477349ec2346a38fd70cc11d2557499fbcc
- requires_python: '>=3.8.0'
-- pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl
- name: jsonpointer
- version: 3.0.0
- sha256: 13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942
- requires_python: '>=3.7'
-- 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
- - 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/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl
- name: jupyter-lsp
- version: 2.3.0
- sha256: e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f
- requires_dist:
- - 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/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/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-py3-none-any.whl
- name: jupyterlab
- version: 4.5.5
- sha256: a35694a40a8e7f2e82f387472af24e61b22adcce87b5a8ab97a5d9c486202a6d
- 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
- - packaging
- - setuptools>=41.1.0
- - tomli>=1.2.2 ; python_full_version < '3.11'
- - 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'
-- 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'
-- pypi: https://files.pythonhosted.org/packages/f7/5a/488f492b49b712ca38326e12c78d0d48ab6be682a2989ce533f0f2c4dfd2/jupyterquiz-2.9.6.2-py2.py3-none-any.whl
- name: jupyterquiz
- version: 2.9.6.2
- sha256: f60f358c809d06a38c423c804740c1113c8840e130227aef50694a9201474bef
-- pypi: https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl
- name: jupytext
- version: 1.19.1
- sha256: d8975035155d034bdfde5c0c37891425314b7ea8d3a6c4b5d18c294348714cd9
- requires_dist:
- - markdown-it-py>=1.0
- - mdit-py-plugins
- - nbformat
+ - pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.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/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.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/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-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/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-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/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-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/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/bf/50/98b146aea0f1cd7531d25f12bea69fa9ce8d1662124f93fb30dc4511b65e/docstring_parser_fork-0.0.14-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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.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/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.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/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.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/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.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/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-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/f9/58/6e1b8f52fdc3184b47dc5037f5070d83a3d11042db1594b02d2a44d786c8/coverage-7.14.0-cp314-cp314-win_amd64.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/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
+ user:
+ channels:
+ - url: https://conda.anaconda.org/nodefaults/
+ - url: https://conda.anaconda.org/conda-forge/
+ indexes:
+ - https://pypi.org/simple
+ 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/argon2-cffi-bindings-25.1.0-py314h5bd0f2a_2.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/cffi-2.0.0-py314h4a8dc5f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_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/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.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/libexpat-2.8.0-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_19.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.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/libsodium-1.0.21-h280c20c_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.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/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/linux-64/msgspec-0.21.1-py314h5bd0f2a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_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/psutil-7.2.2-py314h0f05182_0.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/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/linux-64/rpds-py-0.30.0-py314h2e6c369_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/linux-64/tornado-6.5.5-py314h5bd0f2a_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/linux-64/zstd-1.5.7-hb78ec9c_6.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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyha191276_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_0.conda
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.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/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-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/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-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/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-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/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-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/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.1.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_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
+ - pypi: https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/8a/4cb9367a86f2b9526727ee94e5e6a3d86f9f7d7d947927b444e5bcd56a89/easyscience-2.3.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/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-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/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/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/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-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/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/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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
+ - pypi: https://files.pythonhosted.org/packages/c7/a0/5ff05d1919ca249508012cad89f08fdc6cfbdaa15b41651c5fe6dffaf1d3/dfo_ls-1.6.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.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/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-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/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.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
+ 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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyh53cf698_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/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/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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py314h44086f9_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.20-py314he609de1_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/osx-arm64/libcxx-22.1.5-h55c6f16_1.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/libexpat-2.8.0-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/libmpdec-4.0.0-h84a0fba_1.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.1-h1b79a29_0.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/osx-arm64/msgspec-0.21.1-py314h6c2aa35_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_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/psutil-7.2.2-py314ha14b1ff_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/osx-arm64/python-3.14.4-h4c637c5_100_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/osx-arm64/rpds-py-0.30.0-py314haad56a0_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/osx-arm64/tornado-6.5.5-py314h6c2aa35_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/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.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/0f/0e/0eb94e64f5badef67f11fe1e448dde2a44f00940d8949f4adf71d560552e/scipp-26.3.1-cp314-cp314-macosx_14_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-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/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.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/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-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/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-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/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.1.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.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/4a/8a/4cb9367a86f2b9526727ee94e5e6a3d86f9f7d7d947927b444e5bcd56a89/easyscience-2.3.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/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-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/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.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/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-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/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl
+ - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl
+ - pypi: https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-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/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-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/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.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/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-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/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.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/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ 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/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/attrs-26.1.0-pyhcf101f3_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/noarch/ca-certificates-2026.4.22-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/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/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/idna-3.13-pyhcf101f3_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.13.0-pyhe2676ad_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/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_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.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-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_pygments-0.3.0-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_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/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-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.7-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/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/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-3.2.1-pyh332efcf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-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/noarch/referencing-0.37.0-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/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/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.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/noarch/tomli-2.4.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.0-pyhcf101f3_0.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/wcwidth-0.7.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/zipp-3.23.1-pyhcf101f3_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/win-64/bzip2-1.0.8-h0ad9c76_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_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/win-64/libexpat-2.8.0-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/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.1-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/win-64/msgspec-0.21.1-py314h5a2d7ad_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/psutil-7.2.2-py314hc5dbbe4_0.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/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/win-64/rpds-py-0.30.0-py314h9f07db2_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/win-64/tornado-6.5.5-py314h5a2d7ad_0.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_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_35.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_35.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/win-64/zstd-1.5.7-h534d264_6.conda
+ - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.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/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-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/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.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/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.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/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.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/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-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/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.1.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-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/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/4a/8a/4cb9367a86f2b9526727ee94e5e6a3d86f9f7d7d947927b444e5bcd56a89/easyscience-2.3.1-py3-none-any.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/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.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/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-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/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-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/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-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/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-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/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-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/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.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/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.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/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.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/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-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/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-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/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.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/e5/e2/c2e3abf398f80732e58b03be77bde9022550d221dd8781bf586bd4d97cc1/async_lru-2.3.0-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-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/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+packages:
+- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
+ build_number: 20
+ sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9
+ md5: a9f577daf3de00bca7c3c76c0ecbd1de
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgomp >=7.5.0
+ constrains:
+ - openmp_impl <0.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 28948
+ timestamp: 1770939786096
+- conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py311h49ec1c0_2.conda
+ sha256: b81f852f13a1d148f6ad7e2a29ab375eb1558b73c9bfa38792d98ea7fb414cff
+ md5: 6e36e9d2b535c3fbe2e093108df26695
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - cffi >=1.0.1
+ - libgcc >=14
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/argon2-cffi-bindings?source=hash-mapping
+ size: 35831
+ timestamp: 1762509453632
+- 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/linux-64/bzip2-1.0.8-hda65f42_9.conda
+ sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6
+ md5: d2ffd7602c02f2b316fd921d39876885
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: bzip2-1.0.6
+ license_family: BSD
+ purls: []
+ size: 260182
+ timestamp: 1771350215188
+- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda
+ sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e
+ md5: 920bb03579f15389b9e512095ad995b7
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 207882
+ timestamp: 1765214722852
+- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py311h03d9500_1.conda
+ sha256: 3ad13377356c86d3a945ae30e9b8c8734300925ef81a3cb0a9db0d755afbe7bb
+ md5: 3912e4373de46adafd8f1e97e4bd166b
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libffi >=3.5.2,<3.6.0a0
+ - libgcc >=14
+ - pycparser
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
+ size: 303338
+ timestamp: 1761202960110
+- 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/linux-64/debugpy-1.8.20-py311hc665b79_0.conda
+ sha256: e69be2be543c4d4898895d8aebe758bc683c5a1198583ad676f5719782a07131
+ md5: 400e4667a12884216df869cad5fb004b
+ depends:
+ - python
+ - libgcc >=14
+ - libstdcxx >=14
+ - __glibc >=2.17,<3.0.a0
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 2733654
+ timestamp: 1769744984842
+- 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/linux-64/icu-78.3-h33c6efd_0.conda
+ sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a
+ md5: c80d8a3b84358cb967fa81e7075fbc8a
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libstdcxx >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 12723451
+ timestamp: 1773822285671
+- 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
+- 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/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda
+ sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c
+ md5: 18335a698559cdbcd86150a48bf54ba6
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - zstd >=1.5.7,<1.6.0a0
+ constrains:
+ - binutils_impl_linux-64 2.45.1
+ license: GPL-3.0-only
+ license_family: GPL
+ purls: []
+ size: 728002
+ timestamp: 1774197446916
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda
+ sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239
+ md5: 6f7b4302263347698fd24565fbf11310
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libstdcxx >=14
+ constrains:
+ - libabseil-static =20260107.1=cxx17*
+ - abseil-cpp =20260107.1
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 1384817
+ timestamp: 1770863194876
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda
+ sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e
+ md5: 72c8fd1af66bd67bf580645b426513ed
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 79965
+ timestamp: 1764017188531
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda
+ sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b
+ md5: 366b40a69f0ad6072561c1d09301c886
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libbrotlicommon 1.2.0 hb03c661_1
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 34632
+ timestamp: 1764017199083
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda
+ sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d
+ md5: 4ffbb341c8b616aa2494b6afb26a0c5f
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libbrotlicommon 1.2.0 hb03c661_1
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 298378
+ timestamp: 1764017210931
+- 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/linux-64/libev-4.33-hd590300_2.conda
+ sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4
+ md5: 172bf1cd1ff8629f2b1179945ed45055
+ depends:
+ - libgcc-ng >=12
+ license: BSD-2-Clause
+ license_family: BSD
+ purls: []
+ size: 112766
+ timestamp: 1702146165126
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-hecca717_0.conda
+ sha256: ea33c40977ea7a2c3658c522230058395bc2ee0d89d99f0711390b6a1ee80d12
+ md5: a3b390520c563d78cc58974de95a03e5
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ constrains:
+ - expat 2.8.0.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 77241
+ timestamp: 1777846112704
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
+ sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6
+ md5: a360c33a5abe61c07959e449fa1453eb
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 58592
+ timestamp: 1769456073053
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda
+ sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46
+ md5: 57736f29cc2b0ec0b6c2952d3f101b6a
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - _openmp_mutex >=4.5
+ constrains:
+ - libgcc-ng ==15.2.0=*_19
+ - libgomp 15.2.0 he0feb66_19
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 1041084
+ timestamp: 1778269013026
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda
+ sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98
+ md5: 331ee9b72b9dff570d56b1302c5ab37d
+ depends:
+ - libgcc 15.2.0 he0feb66_19
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 27694
+ timestamp: 1778269016987
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda
+ sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b
+ md5: faac990cb7aedc7f3a2224f2c9b0c26c
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 603817
+ timestamp: 1778268942614
+- 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.3.*
+ license: 0BSD
+ purls: []
+ size: 113478
+ timestamp: 1775825492909
+- 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/linux-64/libnghttp2-1.68.1-h877daf1_0.conda
+ sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f
+ md5: 2a45e7f8af083626f009645a6481f12d
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - c-ares >=1.34.6,<2.0a0
+ - libev >=4.33,<4.34.0a0
+ - libev >=4.33,<5.0a0
+ - libgcc >=14
+ - libstdcxx >=14
+ - libzlib >=1.3.1,<2.0a0
+ - openssl >=3.5.5,<4.0a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 663344
+ timestamp: 1773854035739
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda
+ sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5
+ md5: d864d34357c3b65a4b731f78c0801dc4
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: LGPL-2.1-only
+ license_family: GPL
+ 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/linux-64/libsqlite-3.53.1-h0c1763c_0.conda
+ sha256: 54cdcd3214313b62c2a8ee277e6f42150d9b748264c1b70d958bf735e420ef8d
+ md5: 7dc38adcbf71e6b38748e919e16e0dce
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libzlib >=1.3.2,<2.0a0
+ license: blessing
+ purls: []
+ size: 954962
+ timestamp: 1777986471789
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda
+ sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc
+ md5: 5794b3bdc38177caf969dabd3af08549
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc 15.2.0 he0feb66_19
+ constrains:
+ - libstdcxx-ng ==15.2.0=*_19
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 5852044
+ timestamp: 1778269036376
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda
+ sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829
+ md5: 38ffe67b78c9d4de527be8315e5ada2c
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 40297
+ timestamp: 1775052476770
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda
+ sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b
+ md5: 0f03292cc56bf91a077a134ea8747118
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 895108
+ timestamp: 1753948278280
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
+ sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c
+ md5: 5aa797f8787fe7a17d1b0821485b5adc
+ depends:
+ - libgcc-ng >=12
+ license: LGPL-2.1-or-later
+ purls: []
+ size: 100393
+ timestamp: 1702724383534
+- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda
+ sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9
+ md5: d87ff7921124eccd67248aa483c23fec
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ constrains:
+ - zlib 1.3.2 *_2
+ license: Zlib
+ license_family: Other
+ purls: []
+ size: 63629
+ timestamp: 1774072609062
+- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py311h3778330_1.conda
+ sha256: 710e207b2e91308a34bcfe547c60ad86c1fa294827266ba18548c1fe1a9d8333
+ md5: f9efdf9b0f3d0cc309d56af6edf2a6b0
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ constrains:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 26756
+ timestamp: 1772445078834
+- 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/linux-64/msgspec-0.21.1-py311h49ec1c0_0.conda
+ sha256: 59123ba4af69c1e7ca6b1b8ffcc40f2aff9a635814495bda3f4f555b3b929165
+ md5: 0347d2804701019ac005528df9eb502c
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/msgspec?source=hash-mapping
+ size: 217556
+ timestamp: 1776337480302
+- conda: https://conda.anaconda.org/conda-forge/linux-64/msgspec-0.21.1-py314h5bd0f2a_0.conda
+ sha256: 52565ceea81e801c59dcaeaf5a9c77fba2fade445e67e0864fda50d4b944e15b
+ md5: 4a8ea416a56e58f012e445f7af2bbcc8
+ 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: 220990
+ timestamp: 1776337508167
+- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda
+ sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3
+ md5: fc21868a1a5aacc937e7a18747acb8a5
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: X11 AND BSD-3-Clause
+ purls: []
+ size: 918956
+ timestamp: 1777422145199
+- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-25.8.2-he4ff34a_0.conda
+ sha256: d1a673d1418d9e956b6e4e46c23e72a511c5c1d45dc5519c947457427036d5e2
+ md5: baffb1570b3918c784d4490babc52fbf
+ depends:
+ - libgcc >=14
+ - libstdcxx >=14
+ - __glibc >=2.28,<3.0.a0
+ - libnghttp2 >=1.68.1,<2.0a0
+ - libuv >=1.51.0,<2.0a0
+ - c-ares >=1.34.6,<2.0a0
+ - openssl >=3.5.5,<4.0a0
+ - libsqlite >=3.52.0,<4.0a0
+ - icu >=78.3,<79.0a0
+ - libzlib >=1.3.2,<2.0a0
+ - libabseil >=20260107.1,<20260108.0a0
+ - libabseil * cxx17*
+ - zstd >=1.5.7,<1.6.0a0
+ - libbrotlicommon >=1.2.0,<1.3.0a0
+ - libbrotlienc >=1.2.0,<1.3.0a0
+ - libbrotlidec >=1.2.0,<1.3.0a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 18829340
+ timestamp: 1774514313036
+- 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
+ - libgcc >=14
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 3167099
+ timestamp: 1775587756857
+- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py311haee01d2_0.conda
+ sha256: 8d9325af538a8f56013e42bbb91a4dc6935aece34476e20bafacf6007b571e86
+ md5: 2ed8f6fe8b51d8e19f7621941f7bb95f
+ depends:
+ - python
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 231786
+ timestamp: 1769678156460
+- 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/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.14.4-habeac84_100_cp314.conda
+ build_number: 100
+ sha256: dec247c5badc811baa34d6085df9d0465535883cf745e22e8d79092ad54a3a7b
+ md5: a443f87920815d41bfe611296e507995
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - bzip2 >=1.0.8,<2.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
+ - 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.6,<4.0a0
+ - python_abi 3.14.* *_cp314
+ - readline >=8.3,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ - zstd >=1.5.7,<1.6.0a0
+ license: Python-2.0
+ purls: []
+ size: 36705460
+ timestamp: 1775614357822
+ python_site_packages_path: lib/python3.14/site-packages
+- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_1.conda
+ sha256: c9a6cd2c290d7c3d2b30ea34a0ccda30f770e8ddb2937871f2c404faf60d0050
+ md5: a24add9a3bababee946f3bc1c829acfe
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 206190
+ timestamp: 1770223702917
+- 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=hash-mapping
+ size: 202391
+ timestamp: 1770223462836
+- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py311h57d2397_2.conda
+ sha256: 4137226663b353919396f8cf239971cfa54107cd077cf3b65e979ba3e1f8a037
+ md5: 759edfe34f07c5c4565b6c5ec0c7fb17
+ depends:
+ - python
+ - libgcc >=14
+ - libstdcxx >=14
+ - __glibc >=2.17,<3.0.a0
+ - zeromq >=4.3.5,<4.4.0a0
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pyzmq?source=hash-mapping
+ size: 383627
+ timestamp: 1771716979818
+- 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/linux-64/readline-8.3-h853b02a_0.conda
+ sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002
+ md5: d7d95fc8287ea7bf33e0e7116d2b95ec
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - ncurses >=6.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ purls: []
+ size: 345073
+ timestamp: 1765813471974
+- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py311h902ca64_0.conda
+ sha256: bf5e6197fb08b8c6e421ca0126e966b7c3ae62b84d7b98523356b4fd5ae6f8ae
+ md5: 3893f7b40738f9fe87510cb4468cdda5
+ depends:
+ - python
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python_abi 3.11.* *_cp311
+ constrains:
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 383153
+ timestamp: 1764543197251
+- 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/linux-64/tk-8.6.13-noxft_h366c992_103.conda
+ sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac
+ md5: cffd3bdd58090148f4cfcd831f4b26ab
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libzlib >=1.3.1,<2.0a0
+ constrains:
+ - xorg-libx11 >=1.8.12,<2.0a0
+ license: TCL
+ license_family: BSD
+ purls: []
+ size: 3301196
+ timestamp: 1769460227866
+- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py311h49ec1c0_0.conda
+ sha256: cd8bc08ca661291cfbb05581b79f7e6a6971a072a54a335abcea5460c1230880
+ md5: 73b44a114241e564deb5846e7394bf19
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ license: Apache-2.0
+ license_family: Apache
+ purls:
+ - pkg:pypi/tornado?source=hash-mapping
+ size: 876817
+ timestamp: 1774358035290
+- 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=hash-mapping
+ size: 912476
+ timestamp: 1774358032579
+- 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/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/linux-64/zstd-1.5.7-hb78ec9c_6.conda
+ sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7
+ md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 601375
+ timestamp: 1764777111296
+- 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
+- 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=hash-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
+ - 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/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
+- 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/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
+- 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
+- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda
+ sha256: f8ff1f98423674278964a46c93a1766f9e91960d44efd91c6c3ed56a33813f46
+ md5: 7c5ebdc286220e8021bf55e6384acd67
+ depends:
+ - python >=3.10
+ - webencodings
+ - 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
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-h4c7d964_0.conda
+ sha256: 6f4ff81534c19e76acf52fcabf4a258088a932b8f1ac56e9a59e98f6051f8e46
+ md5: 56fb2c6c73efc627b40c77d14caecfba
+ depends:
+ - __win
+ license: ISC
+ purls: []
+ size: 131388
+ timestamp: 1776865633471
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda
+ sha256: c9dbcc8039a52023660d6d1bbf87594a93dd69c6ac5a2a44323af2c92976728d
+ md5: e18ad67cf881dcadee8b8d9e2f8e5f73
+ depends:
+ - __unix
+ license: ISC
+ purls: []
+ size: 131039
+ timestamp: 1776865545798
+- 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/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
+- 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
+- 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
+- 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
+- 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
+- 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
+- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.13-pyhcf101f3_0.conda
+ sha256: 9ab620e6f64bb67737bd7bc1ad6f480770124e304c6710617aba7fe60b089f48
+ md5: fb7130c190f9b4ec91219840a05ba3ac
+ depends:
+ - python >=3.10
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/idna?source=hash-mapping
+ size: 59038
+ timestamp: 1776947141407
+- 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=hash-mapping
+ size: 34387
+ timestamp: 1773931568510
+- 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
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.13.0-pyh53cf698_0.conda
+ sha256: a0af49948a1842dfd15a0b0b2fd56c94ddbd07e07a6c8b4bc70d43015eafaff0
+ md5: 73e9657cd19605740d21efb14d8d0cb9
+ 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
+ - psutil >=7
+ - pygments >=2.14.0
+ - python >=3.11
+ - stack_data >=0.6.0
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - pexpect >4.6
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython?source=hash-mapping
+ size: 651632
+ timestamp: 1777038396606
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.13.0-pyhe2676ad_0.conda
+ sha256: f252ec33597115ff21cbb31051f6f9be34ca36cbbbf3d266b597660d8d8edde9
+ md5: 5631ab99e902463d9dd4221e5b4eab6d
+ 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
+ - psutil >=7
+ - pygments >=2.14.0
+ - python >=3.11
+ - stack_data >=0.6.0
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - colorama >=0.4.4
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython?source=hash-mapping
+ size: 650593
+ timestamp: 1777038425499
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda
+ sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104
+ md5: bd80ba060603cc228d9d81c257093119
+ depends:
+ - pygments
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython-pygments-lexers?source=hash-mapping
+ size: 13993
+ timestamp: 1737123723464
+- 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=hash-mapping
+ size: 120685
+ timestamp: 1764517220861
+- 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.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_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.1-pyhcf101f3_0.conda
+ sha256: c7edb5682c6316a95ad781dccb1b6589cd2ec0bf94f23c21152974eb0363b5d7
+ md5: bf42ee94c750c0b2e7e998b79ac299ea
+ depends:
+ - jsonschema-with-format-nongpl >=4.18.0
- packaging
- - pyyaml
- - tomli ; python_full_version < '3.11'
- - autopep8 ; extra == 'dev'
- - black ; extra == 'dev'
- - flake8 ; extra == 'dev'
- - gitpython ; extra == 'dev'
- - ipykernel ; extra == 'dev'
- - isort ; extra == 'dev'
- - jupyter-fs[fs]>=1.0 ; extra == 'dev'
- - jupyter-server!=2.11 ; extra == 'dev'
- - marimo>=0.17.6,<=0.19.4 ; extra == 'dev'
- - nbconvert ; extra == 'dev'
- - pre-commit ; extra == 'dev'
- - pytest ; extra == 'dev'
- - pytest-asyncio ; extra == 'dev'
- - pytest-cov>=2.6.1 ; extra == 'dev'
- - pytest-randomly ; extra == 'dev'
- - pytest-xdist ; extra == 'dev'
- - sphinx ; extra == 'dev'
- - sphinx-gallery>=0.8 ; extra == 'dev'
- - myst-parser ; extra == 'docs'
- - sphinx ; extra == 'docs'
- - sphinx-copybutton ; extra == 'docs'
- - sphinx-rtd-theme ; extra == 'docs'
- - pytest ; extra == 'test'
- - pytest-asyncio ; extra == 'test'
- - pytest-randomly ; extra == 'test'
- - pytest-xdist ; extra == 'test'
- - black ; extra == 'test-cov'
- - ipykernel ; extra == 'test-cov'
- - jupyter-server!=2.11 ; extra == 'test-cov'
- - nbconvert ; extra == 'test-cov'
- - pytest ; extra == 'test-cov'
- - pytest-asyncio ; extra == 'test-cov'
- - pytest-cov>=2.6.1 ; extra == 'test-cov'
- - pytest-randomly ; extra == 'test-cov'
- - pytest-xdist ; extra == 'test-cov'
- - autopep8 ; extra == 'test-external'
- - black ; extra == 'test-external'
- - flake8 ; extra == 'test-external'
- - gitpython ; extra == 'test-external'
- - ipykernel ; extra == 'test-external'
- - isort ; extra == 'test-external'
- - jupyter-fs[fs]>=1.0 ; extra == 'test-external'
- - jupyter-server!=2.11 ; extra == 'test-external'
- - marimo>=0.17.6,<=0.19.4 ; extra == 'test-external'
- - nbconvert ; extra == 'test-external'
- - pre-commit ; extra == 'test-external'
- - pytest ; extra == 'test-external'
- - pytest-asyncio ; extra == 'test-external'
- - pytest-randomly ; extra == 'test-external'
- - pytest-xdist ; extra == 'test-external'
- - sphinx ; extra == 'test-external'
- - sphinx-gallery>=0.8 ; extra == 'test-external'
- - black ; extra == 'test-functional'
- - pytest ; extra == 'test-functional'
- - pytest-asyncio ; extra == 'test-functional'
- - pytest-randomly ; extra == 'test-functional'
- - pytest-xdist ; extra == 'test-functional'
- - black ; extra == 'test-integration'
- - ipykernel ; extra == 'test-integration'
- - jupyter-server!=2.11 ; extra == 'test-integration'
- - nbconvert ; extra == 'test-integration'
- - pytest ; extra == 'test-integration'
- - pytest-asyncio ; extra == 'test-integration'
- - pytest-randomly ; extra == 'test-integration'
- - pytest-xdist ; extra == 'test-integration'
- - bash-kernel ; extra == 'test-ui'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: 1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/31/a2/a12a503ac1fd4943c50f9822678e8015a790a13b5490354c68afb8489814/kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: 2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/a0/c0/27fe1a68a39cf62472a300e2879ffc13c0538546c359b86f149cc19f6ac3/kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: 39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- name: kiwisolver
- version: 1.4.9
- sha256: b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098
- 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/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda
- sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3
- md5: 12bd9a3f089ee6c9266a37dab82afabd
+ - python >=3.10
+ - 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: 24002
+ timestamp: 1776861872237
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.18.2-pyhcf101f3_0.conda
+ sha256: 04fb8ea7749f67abaf76df6257bf86688e1389ceed55eb4fb0176fd2e882dbd6
+ md5: 5ee7945accf0f215ddd6055d25d7cd83
+ 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: 360522
+ timestamp: 1778060967727
+- 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_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/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=hash-mapping
+ size: 94312
+ timestamp: 1761596921009
+- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
+ sha256: 35b43d7343f74452307fd018a1cca92b8f68961ff8e2ab6a81ce0a703c9a3764
+ md5: 9acc1c385be401d533ff70ef5b50dae6
+ depends:
+ - python >=3.10
+ - traitlets
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/matplotlib-inline?source=compressed-mapping
+ size: 15725
+ timestamp: 1778264403247
+- conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.1-pyhcf101f3_0.conda
+ sha256: b52dc6c78fbbe7a3008535cb8bfd87d70d8053e9250bbe16e387470a9df07070
+ md5: b97e84d1553b4a1c765b87fff83453ad
+ depends:
+ - python >=3.10
+ - typing_extensions
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/mistune?source=hash-mapping
+ size: 74567
+ timestamp: 1777824616382
+- 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=hash-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=hash-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
+- 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
+- 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.2-pyhc364b38_0.conda
+ sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890
+ md5: 4c06a92e74452cfa53623a81592e8934
+ depends:
+ - python >=3.8
+ - python
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/packaging?source=hash-mapping
+ size: 91574
+ timestamp: 1777103621679
+- 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.7-pyhcf101f3_0.conda
+ sha256: 611882f7944b467281c46644ffde6c5145d1a7730388bcde26e7e86819b0998e
+ md5: 39894c952938276405a1bd30e4ce2caf
+ depends:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/parso?source=hash-mapping
+ size: 82472
+ timestamp: 1777722955579
+- 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
+- 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=hash-mapping
+ size: 25862
+ timestamp: 1775741140609
+- 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=hash-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
+ 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
+- 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
+- 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
+- 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=hash-mapping
+ size: 893031
+ timestamp: 1774796815820
+- 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
+- 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.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-3.2.1-pyh332efcf_0.conda
+ sha256: 1c55116c22512cef7b01d55ae49697707f2c1fd829407183c19817e2d300fd8d
+ md5: 1cd2f3e885162ee1366312bd1b1677fd
+ depends:
+ - python >=3.10
+ - typing_extensions
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/python-json-logger?source=hash-mapping
+ size: 18969
+ timestamp: 1777318679482
+- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.2-pyhd8ed1ab_0.conda
+ sha256: e943f9c15a6bdba2e1b9f423ab913b3f6b02197b0ef9f8e6b7464d78b59965b9
+ md5: f6ad7450fc21e00ecc23812baed6d2e4
+ depends:
+ - python >=3.10
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/tzdata?source=hash-mapping
+ size: 146639
+ timestamp: 1777068997932
+- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda
+ build_number: 8
+ sha256: fddf123692aa4b1fc48f0471e346400d9852d96eeed77dbfdd746fa50a8ff894
+ md5: 8fcb6b0e2161850556231336dae58358
+ constrains:
+ - python 3.11.* *_cpython
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 7003
+ timestamp: 1752805919375
+- 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/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/returns-0.27.0-pyhc364b38_0.conda
+ sha256: 3b45efeae771f1a20307b36ecdb3a8911a89c05382836b50c62b0a99d8d3dfd8
+ md5: da94ff04d97ec5efc42cbe5da3c43a84
+ depends:
+ - 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: 100559
+ timestamp: 1776176903101
+- 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
+ 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/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:
- - __glibc >=2.17,<3.0.a0
- - zstd >=1.5.7,<1.6.0a0
+ - __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
+- 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
+- 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
+- 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
+- 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/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/noarch/traitlets-5.15.0-pyhcf101f3_0.conda
+ sha256: dfb681579be59c2e790c95f7f49b7529a9b0511d6385ad276e3c8988cbd54d2c
+ md5: 4bada6a6d908a27262af8ebddf4f7492
+ depends:
+ - python >=3.10
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/traitlets?source=hash-mapping
+ size: 115165
+ timestamp: 1778074251714
+- 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
+- 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
+ license: LicenseRef-Public-Domain
+ purls: []
+ size: 119135
+ timestamp: 1767016325805
+- 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/wcwidth-0.7.0-pyhd8ed1ab_0.conda
+ sha256: 1ee2d8384972ecbf8630ce8a3ea9d16858358ad3e8566675295e66996d5352da
+ md5: eb9538b8e55069434a18547f43b96059
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/wcwidth?source=hash-mapping
+ size: 82917
+ timestamp: 1777744489106
+- 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
+- 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: 24461
+ timestamp: 1776131454755
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-25.1.0-py311h9408147_2.conda
+ sha256: c15fc1aa6184185f1b31670a16b76d59f484d3efa25b467f28d59088cf0085c0
+ md5: 501c2a606787bcd55b9ddee776208333
+ depends:
+ - __osx >=11.0
+ - cffi >=1.0.1
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/argon2-cffi-bindings?source=hash-mapping
+ size: 34403
+ timestamp: 1762509963182
+- 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/osx-arm64/bzip2-1.0.8-hd037594_9.conda
+ sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df
+ md5: 620b85a3f45526a8bc4d23fd78fc22f0
+ depends:
+ - __osx >=11.0
+ license: bzip2-1.0.6
+ license_family: BSD
+ purls: []
+ size: 124834
+ timestamp: 1771350416561
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda
+ sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196
+ md5: bcb3cba70cf1eec964a03b4ba7775f01
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 180327
+ timestamp: 1765215064054
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py311hd10dc20_1.conda
+ sha256: 1ffde698463d6e7ed571bdb85cb17bfc1d3a107c026d20047995512dcc2749ec
+ md5: 4d7f6780e36f18e7601811dddf3bbec5
+ depends:
+ - __osx >=11.0
+ - libffi >=3.5.2,<3.6.0a0
+ - pycparser
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
+ size: 294848
+ timestamp: 1761203196617
+- 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/osx-arm64/debugpy-1.8.20-py311h8948835_0.conda
+ sha256: 093b015e9abf27fb4d3b4f7e52417d35cd69a99fab8b95ec5c6c3983275c46ba
+ md5: 150c921424bc9f08c0378f8a6ae58d05
+ depends:
+ - python
+ - __osx >=11.0
+ - libcxx >=19
+ - python 3.11.* *_cpython
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 2668163
+ timestamp: 1769745020016
+- 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/osx-arm64/icu-78.3-hef89b57_0.conda
+ sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5
+ md5: f1182c91c0de31a7abd40cedf6a5ebef
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 12361647
+ timestamp: 1773822915649
+- 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/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda
+ sha256: 756611fbb8d2957a5b4635d9772bd8432cb6ddac05580a6284cca6fdc9b07fca
+ md5: bb65152e0d7c7178c0f1ee25692c9fd1
+ depends:
+ - __osx >=11.0
+ - libcxx >=19
+ constrains:
+ - abseil-cpp =20260107.1
+ - libabseil-static =20260107.1=cxx17*
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 1229639
+ timestamp: 1770863511331
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda
+ sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229
+ md5: 006e7ddd8a110771134fcc4e1e3a6ffa
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 79443
+ timestamp: 1764017945924
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda
+ sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf
+ md5: 079e88933963f3f149054eec2c487bc2
+ depends:
+ - __osx >=11.0
+ - libbrotlicommon 1.2.0 hc919400_1
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 29452
+ timestamp: 1764017979099
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda
+ sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1
+ md5: b2b7c8288ca1a2d71ff97a8e6a1e8883
+ depends:
+ - __osx >=11.0
+ - libbrotlicommon 1.2.0 hc919400_1
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 290754
+ timestamp: 1764018009077
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.5-h55c6f16_1.conda
+ sha256: dddd01bd6b338221342a89530a1caffe6051a70cc8f8b1d8bb591d5447a3c603
+ md5: ff484b683fecf1e875dfc7aa01d19796
+ depends:
+ - __osx >=11.0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ purls: []
+ size: 569359
+ timestamp: 1778191546305
+- 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/osx-arm64/libev-4.33-h93a5062_2.conda
+ sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f
+ md5: 36d33e440c31857372a72137f78bacf5
+ license: BSD-2-Clause
+ license_family: BSD
+ purls: []
+ size: 107458
+ timestamp: 1702146414478
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.0-hf6b4638_0.conda
+ sha256: f4b1cafc59afaede8fa0a2d9cf376840f1c553001acd72f6ead18bbc8ac8c49c
+ md5: 65466e82c09e888ca7560c11a97d5450
+ depends:
+ - __osx >=11.0
+ constrains:
+ - expat 2.8.0.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 68789
+ timestamp: 1777846180142
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
+ sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7
+ md5: 43c04d9cb46ef176bb2a4c77e324d599
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 40979
+ timestamp: 1769456747661
+- 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.3.*
+ license: 0BSD
+ purls: []
+ size: 92472
+ timestamp: 1775825802659
+- 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/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda
+ sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a
+ md5: 6ea18834adbc3b33df9bd9fb45eaf95b
+ 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: 576526
+ timestamp: 1773854624224
+- 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/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda
+ sha256: 49daec7c83e70d4efc17b813547824bc2bcf2f7256d84061d24fbfe537da9f74
+ md5: 6681822ea9d362953206352371b6a904
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.2,<2.0a0
+ license: blessing
+ purls: []
+ size: 920047
+ timestamp: 1777987051643
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda
+ sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689
+ md5: c0d87c3c8e075daf1daf6c31b53e8083
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 421195
+ timestamp: 1753948426421
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda
+ sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05
+ md5: bc5a5721b6439f2f62a84f2548136082
+ depends:
+ - __osx >=11.0
constrains:
- - binutils_impl_linux-64 2.45.1
- license: GPL-3.0-only
- license_family: GPL
+ - zlib 1.3.2 *_2
+ license: Zlib
+ license_family: Other
purls: []
- size: 725507
- timestamp: 1770267139900
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda
- sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239
- md5: 6f7b4302263347698fd24565fbf11310
+ size: 47759
+ timestamp: 1774072956767
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py311hc290fe0_1.conda
+ sha256: d635f2b1d9e19e8e68c5d33150f7e4f62df08ef2ef0e85977f743e81939afc01
+ md5: ff068874356bbc7f9bd2d793f809f44b
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- - libstdcxx >=14
+ - __osx >=11.0
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
constrains:
- - libabseil-static =20260107.1=cxx17*
- - abseil-cpp =20260107.1
- license: Apache-2.0
- license_family: Apache
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 26511
+ timestamp: 1772445369187
+- 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=hash-mapping
+ size: 27256
+ timestamp: 1772445397216
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.1-py311hc949640_0.conda
+ sha256: 55ce08c77b6e87fcc5cca61a516e81fdcc1cd0969e0204fce0a32ca84118a148
+ md5: 24707aa446fa7babd806397b8c5349a2
+ depends:
+ - __osx >=11.0
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/msgspec?source=hash-mapping
+ size: 207945
+ timestamp: 1776338655947
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgspec-0.21.1-py314h6c2aa35_0.conda
+ sha256: 24a9105921e94fa526ffde1e956fa550c48ddb9ce4b0cf19ae22e79ed267261e
+ md5: 26fce586b13842a0f9f9a3aabae3e943
+ 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: 216965
+ timestamp: 1776338889692
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda
+ sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d
+ md5: 343d10ed5b44030a2f67193905aea159
+ depends:
+ - __osx >=11.0
+ license: X11 AND BSD-3-Clause
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
+ size: 805509
+ timestamp: 1777423252320
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.8.2-h7039424_0.conda
+ sha256: 4782b172b3b8a557b60bf5f591821cf100e2092ba7a5494ce047dfa41626de26
+ md5: ca8277c52fdface8bb8ebff7cd9a6f56
depends:
- - __osx >=10.13
- libcxx >=19
- constrains:
- - libabseil-static =20260107.1=cxx17*
- - abseil-cpp =20260107.1
- license: Apache-2.0
- license_family: Apache
+ - __osx >=11.0
+ - 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
+ - libnghttp2 >=1.68.1,<2.0a0
+ - libuv >=1.51.0,<2.0a0
+ - libsqlite >=3.52.0,<4.0a0
+ - libzlib >=1.3.2,<2.0a0
+ - openssl >=3.5.5,<4.0a0
+ - zstd >=1.5.7,<1.6.0a0
+ - c-ares >=1.34.6,<2.0a0
+ - libabseil >=20260107.1,<20260108.0a0
+ - libabseil * cxx17*
+ license: MIT
+ license_family: MIT
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
+ size: 17101803
+ timestamp: 1774517834028
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda
+ sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea
+ md5: 25dcccd4f80f1638428613e0d7c9b4e1
depends:
- __osx >=11.0
- - libcxx >=19
- constrains:
- - abseil-cpp =20260107.1
- - libabseil-static =20260107.1=cxx17*
+ - ca-certificates
license: Apache-2.0
license_family: Apache
purls: []
- size: 1229639
- timestamp: 1770863511331
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda
- sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e
- md5: 72c8fd1af66bd67bf580645b426513ed
+ size: 3106008
+ timestamp: 1775587972483
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py311he363849_0.conda
+ sha256: 2b774e8f4ccaac8783d1908f281e4bb20b7036d6708dc913ee7811b070f5b4b5
+ md5: 7cff50265141513c960f00ba586780ea
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
+ - python
+ - python 3.11.* *_cpython
+ - __osx >=11.0
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 245203
+ timestamp: 1769678306347
+- 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/osx-arm64/pyobjc-core-12.1-py311hce6e4fa_0.conda
+ sha256: f6dced0ea4f220abc1278f6217e22ca1c631f6154dd086b0a7a2866589d6b78c
+ md5: 812e22c5c7859e719ec225ece0c6f2c1
+ depends:
+ - __osx >=11.0
+ - libffi >=3.5.2,<3.6.0a0
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ - setuptools
license: MIT
license_family: MIT
- 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
+ purls:
+ - pkg:pypi/pyobjc-core?source=hash-mapping
+ size: 481434
+ timestamp: 1763151508974
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-12.1-py314h3a4d195_0.conda
+ sha256: df5af268c5a74b7160d772c263ece6f43257faff571783443e34b5f1d5a61cf2
+ md5: 75a84fc8337557347252cc4fd3ba2a93
depends:
- - __osx >=10.13
+ - __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: []
- size: 78854
- timestamp: 1764017554982
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda
- sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229
- md5: 006e7ddd8a110771134fcc4e1e3a6ffa
+ 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-py311h9049b8e_0.conda
+ sha256: 67e209a5e9ebaf08aa36e2a4b9139ff91a7ecee7c17408d0a3a1ea1dc3a67681
+ md5: b215a767b5ef6f16347cacebc409e66b
depends:
- __osx >=11.0
+ - libffi >=3.5.2,<3.6.0a0
+ - pyobjc-core 12.1.*
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
license: MIT
license_family: MIT
- purls: []
- size: 79443
- timestamp: 1764017945924
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda
- sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b
- md5: 366b40a69f0ad6072561c1d09301c886
+ purls:
+ - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping
+ size: 383445
+ timestamp: 1763160541362
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-12.1-py314h36abed7_0.conda
+ sha256: aa76ee4328d0514d7c1c455dcd2d3b547db1c59797e54ce0a3f27de5b970e508
+ md5: 4219bb3408016e22316cf8b443b5ef93
depends:
- - __glibc >=2.17,<3.0.a0
- - libbrotlicommon 1.2.0 hb03c661_1
- - libgcc >=14
+ - __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
+- 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: 34632
- timestamp: 1764017199083
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda
- sha256: 729158be90ae655a4e0427fe4079767734af1f9b69ff58cf94ca6e8d4b3eb4b7
- md5: 63186ac7a8a24b3528b4b14f21c03f54
+ size: 14753109
+ timestamp: 1772730203101
+- 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 >=10.13
- - libbrotlicommon 1.2.0 h8616949_1
- license: MIT
- license_family: MIT
+ - __osx >=11.0
+ - bzip2 >=1.0.8,<2.0a0
+ - libexpat >=2.7.5,<3.0a0
+ - libffi >=3.5.2,<3.6.0a0
+ - liblzma >=5.8.2,<6.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.6,<4.0a0
+ - python_abi 3.14.* *_cp314
+ - readline >=8.3,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ - zstd >=1.5.7,<1.6.0a0
+ license: Python-2.0
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
+ size: 13533346
+ timestamp: 1775616188373
+ python_site_packages_path: lib/python3.14/site-packages
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py311hc290fe0_1.conda
+ sha256: 984e73d7957460689e10533059de8adb38a308853d298900a37acc58edd84cec
+ md5: e4b908da7cd496b3fa6798c0f60a2a19
depends:
- __osx >=11.0
- - libbrotlicommon 1.2.0 hc919400_1
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ - yaml >=0.2.5,<0.3.0a0
license: MIT
license_family: MIT
- purls: []
- size: 29452
- timestamp: 1764017979099
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda
- sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d
- md5: 4ffbb341c8b616aa2494b6afb26a0c5f
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 192948
+ timestamp: 1770223655988
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda
+ sha256: 95f385f9606e30137cf0b5295f63855fd22223a4cf024d306cf9098ea1c4a252
+ md5: dcf51e564317816cb8d546891019b3ab
depends:
- - __glibc >=2.17,<3.0.a0
- - libbrotlicommon 1.2.0 hb03c661_1
- - libgcc >=14
+ - __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/osx-arm64/pyzmq-27.1.0-py311h745ac33_2.conda
+ sha256: c5d65e1192241d764a68eb0e95ef3ec4800a7e8584260aa2bdcfad0a2d769609
+ md5: 9648524ed194922a084f0c2c2c2ada6a
+ depends:
+ - python
+ - __osx >=11.0
+ - python 3.11.* *_cpython
+ - libcxx >=19
+ - zeromq >=4.3.5,<4.4.0a0
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pyzmq?source=hash-mapping
+ size: 359869
+ timestamp: 1771717160649
+- 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/osx-arm64/readline-8.3-h46df422_0.conda
+ sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477
+ md5: f8381319127120ce51e081dce4865cf4
+ depends:
+ - __osx >=11.0
+ - ncurses >=6.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
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
+ size: 313930
+ timestamp: 1765813902568
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.30.0-py311h71babbd_0.conda
+ sha256: 15873755f078583cea046f7ca7fc0d5348d1f29a16a30b73bdb53dd62f2ba379
+ md5: 4408829b022e8e0d19365c0c00be00c4
depends:
- - __osx >=10.13
- - libbrotlicommon 1.2.0 h8616949_1
+ - python
+ - python 3.11.* *_cpython
+ - __osx >=11.0
+ - python_abi 3.11.* *_cp311
+ constrains:
+ - __osx >=11.0
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
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 357600
+ timestamp: 1764543142990
+- 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
- - libbrotlicommon 1.2.0 hc919400_1
license: MIT
license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 350976
+ timestamp: 1764543169524
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda
+ sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3
+ md5: a9d86bc62f39b94c4661716624eb21b0
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: TCL
+ license_family: BSD
purls: []
- size: 290754
- timestamp: 1764018009077
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.0-h19cb2f5_1.conda
- sha256: fa002b43752fe5860e588435525195324fe250287105ebd472ac138e97de45e6
- md5: 836389b6b9ae58f3fbcf7cafebd5c7f2
+ size: 3127137
+ timestamp: 1769460817696
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py311hc949640_0.conda
+ sha256: 572923958ec987f3f68e228dfec243c89ab94b50398731215d36e2e040db8703
+ md5: 6f12d9ff025ab1875dff67ad779ca29d
depends:
- __osx >=11.0
- license: Apache-2.0 WITH LLVM-exception
+ - python >=3.11,<3.12.0a0
+ - python >=3.11,<3.12.0a0 *_cpython
+ - python_abi 3.11.* *_cp311
+ license: Apache-2.0
license_family: Apache
- purls: []
- size: 570141
- timestamp: 1772001147762
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda
- sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb
- md5: e9c56daea841013e7774b5cd46f41564
+ purls:
+ - pkg:pypi/tornado?source=hash-mapping
+ size: 875022
+ timestamp: 1774358570256
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py314h6c2aa35_0.conda
+ sha256: 4ccc4a20d676c0ba85adee9c99015bec7f5b685df0cf8006e34573f1d6c2ce75
+ md5: 3f81f8b2fe2c26a82c0abf57ab2b9610
depends:
- __osx >=11.0
- license: Apache-2.0 WITH LLVM-exception
+ - 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: []
- size: 568910
- timestamp: 1772001095642
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
- sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4
- md5: 172bf1cd1ff8629f2b1179945ed45055
+ purls:
+ - pkg:pypi/tornado?source=hash-mapping
+ size: 910845
+ timestamp: 1774358965067
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda
+ sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac
+ md5: 78a0fe9e9c50d2c381e8ee47e3ea437d
depends:
- - libgcc-ng >=12
- license: BSD-2-Clause
- license_family: BSD
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
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
+ size: 83386
+ timestamp: 1753484079473
+- 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: 106663
- timestamp: 1702146352558
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda
- sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f
- md5: 36d33e440c31857372a72137f78bacf5
- license: BSD-2-Clause
+ size: 245246
+ timestamp: 1772476886668
+- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda
+ sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9
+ md5: ab136e4c34e97f34fb621d2592a393d8
+ depends:
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
license_family: BSD
purls: []
- size: 107458
- timestamp: 1702146414478
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda
- sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5
- md5: e7f7ce06ec24cfcfb9e36d28cf82ba57
+ size: 433413
+ timestamp: 1764777166076
+- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py311h3485c13_2.conda
+ sha256: 787e9a5f0a5624fee2af4f58c823bd7933b8ca560e794dd9a821e990b31d2d49
+ md5: 5fde0926a521a37d454a5e3162cb6e51
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- constrains:
- - expat 2.7.4.*
+ - cffi >=1.0.1
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - 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: 38502
+ timestamp: 1762509668838
+- 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda
+ sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902
+ md5: 4cb8e6b48f67de0b018719cdf1136306
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: bzip2-1.0.6
+ license_family: BSD
purls: []
- size: 76798
- timestamp: 1771259418166
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda
- sha256: 8d9d79b2de7d6f335692391f5281607221bf5d040e6724dad4c4d77cd603ce43
- md5: a684eb8a19b2aa68fde0267df172a1e3
+ size: 56115
+ timestamp: 1771350256444
+- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py311h3485c13_1.conda
+ sha256: c9caca6098e3d92b1a269159b759d757518f2c477fbbb5949cb9fee28807c1f1
+ md5: f02335db0282d5077df5bc84684f7ff9
depends:
- - __osx >=10.13
- constrains:
- - expat 2.7.4.*
+ - pycparser
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: MIT
license_family: MIT
- purls: []
- size: 74578
- timestamp: 1771260142624
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda
- sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf
- md5: a92e310ae8dfc206ff449f362fc4217f
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
+ size: 297941
+ timestamp: 1761203850323
+- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda
+ sha256: 924f2f01fa7a62401145ef35ab6fc95f323b7418b2644a87fea0ea68048880ed
+ md5: c360170be1c9183654a240aadbedad94
depends:
- - __osx >=11.0
- constrains:
- - expat 2.7.4.*
+ - 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: []
- size: 68199
- timestamp: 1771260020767
-- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda
- sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d
- md5: 1c1ced969021592407f16ada4573586d
+ purls:
+ - pkg:pypi/cffi?source=hash-mapping
+ size: 294731
+ timestamp: 1761203441365
+- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py311h5dfdfe8_0.conda
+ sha256: 661e5c582b1f853a46a78d4bb6e55f2bfdac66e68d015e111f1580a11c28abbf
+ md5: 683be2cd10e80a367790b3083ce529b7
depends:
- - ucrt >=10.0.20348.0
+ - python
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- constrains:
- - expat 2.7.4.*
+ - ucrt >=10.0.20348.0
+ - python_abi 3.11.* *_cp311
license: MIT
license_family: MIT
- purls: []
- size: 70323
- timestamp: 1771259521393
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda
- sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6
- md5: a360c33a5abe61c07959e449fa1453eb
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 3940002
+ timestamp: 1769745017274
+- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda
+ sha256: ece1d8299ad081edaf1e5279f2a900bdedddb2c795ac029a06401543cd7610ad
+ md5: 48ae8370a4562f7049d587d017792a3a
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
+ - 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: []
- size: 58592
- timestamp: 1769456073053
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda
- sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6
- md5: 66a0dc7464927d0853b590b6f53ba3ea
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 4026404
+ timestamp: 1769745008861
+- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda
+ sha256: eb60f1ad8b597bcf95dee11bc11fe71a8325bc1204cf51d2bb1f2120ffd77761
+ md5: 4432f52dc0c8eb6a7a6abc00a037d93c
depends:
- - __osx >=10.13
+ - 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: 53583
- timestamp: 1769456300951
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda
- sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7
- md5: 43c04d9cb46ef176bb2a4c77e324d599
+ size: 751055
+ timestamp: 1769769688841
+- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.0-hac47afa_0.conda
+ sha256: 2d81d647c1f01108803457cac999b947456f44dd0a3c2325395677feacaeca67
+ md5: 264e350e035092b5135a2147c238aec4
depends:
- - __osx >=11.0
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - expat 2.8.0.*
license: MIT
license_family: MIT
purls: []
- size: 40979
- timestamp: 1769456747661
+ size: 71094
+ timestamp: 1777846223617
- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda
sha256: 59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190
md5: 720b39f5ec0610457b725eb3f396219a
@@ -5594,697 +5963,1047 @@ packages:
purls: []
size: 45831
timestamp: 1769456418774
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda
- sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5
- md5: 0aa00f03f9e39fb9876085dee11a85d4
+- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda
+ sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1
+ md5: 8f83619ab1588b98dd99c90b0bfc5c6d
depends:
- - __glibc >=2.17,<3.0.a0
- - _openmp_mutex >=4.5
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
constrains:
- - libgcc-ng ==15.2.0=*_18
- - libgomp 15.2.0 he0feb66_18
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
+ - xz 5.8.3.*
+ license: 0BSD
purls: []
- size: 1041788
- timestamp: 1771378212382
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda
- sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893
- md5: d5e96b1ed75ca01906b3d2469b4ce493
+ size: 106486
+ timestamp: 1775825663227
+- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda
+ sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514
+ md5: e4a9fc2bba3b022dad998c78856afe47
depends:
- - libgcc 15.2.0 he0feb66_18
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSD-2-Clause
+ license_family: BSD
purls: []
- size: 27526
- timestamp: 1771378224552
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda
- sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110
- md5: 239c5e9546c38a1e884d69effcf4c882
+ size: 89411
+ timestamp: 1769482314283
+- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda
+ sha256: d915f4fa8ebbf237c7a6e511ed458f2cfdc7c76843a924740318a15d0dd33d6d
+ md5: da2aa614d16a795b3007b6f4a1318a81
depends:
- - __glibc >=2.17,<3.0.a0
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ license: ISC
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
+ size: 276860
+ timestamp: 1772479407566
+- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.1-hf5d6505_0.conda
+ sha256: e70562450332ca8954bc16f3455468cca5ef3695c7d7187ecc87f8fc3c70e9eb
+ md5: 7fea434a17c323256acc510a041b80d7
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- constrains:
- - xz 5.8.2.*
- license: 0BSD
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: blessing
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
+ size: 1304178
+ timestamp: 1777986510497
+- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda
+ sha256: 88609816e0cc7452bac637aaf65783e5edf4fee8a9f8e22bdc3a75882c536061
+ md5: dbabbd6234dea34040e631f87676292f
depends:
- - __osx >=10.13
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
constrains:
- - xz 5.8.2.*
- license: 0BSD
+ - zlib 1.3.2 *_2
+ license: Zlib
+ license_family: Other
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
+ size: 58347
+ timestamp: 1774072851498
+- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py311h3f79411_1.conda
+ sha256: 3d37fb1900e31131f84549560e7a4bfea5f39aa3ecd73345fef1f33975cf0baa
+ md5: f55de41c947bdd2ff9bbeffedf8089f7
depends:
- - __osx >=11.0
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
constrains:
- - xz 5.8.2.*
- 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
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 29362
+ timestamp: 1772445178723
+- 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:
- - xz 5.8.2.*
- license: 0BSD
- 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
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 30022
+ timestamp: 1772445159549
+- conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.1-py311h3485c13_0.conda
+ sha256: d096ad02a47a61aeeade2ad3639cc300adf950790cca097717040d46ca5bff52
+ md5: 6e6fd9a9012358254bebee33eb3d7f71
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- license: BSD-2-Clause
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 92400
- timestamp: 1769482286018
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda
- sha256: 1096c740109386607938ab9f09a7e9bca06d86770a284777586d6c378b8fb3fd
- md5: ec88ba8a245855935b871a7324373105
+ purls:
+ - pkg:pypi/msgspec?source=hash-mapping
+ size: 199272
+ timestamp: 1776337711230
+- conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.21.1-py314h5a2d7ad_0.conda
+ sha256: 6a076225fa315d29c5d556e3912a6319aea60b4f458c23f23f5ce66495cb9414
+ md5: a4b20f401c93cf8651093fcc8380e3c9
depends:
- - __osx >=10.13
- license: BSD-2-Clause
+ - 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: 201836
+ timestamp: 1776337750218
+- conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.8.2-h80d1838_0.conda
+ sha256: 5e38e51da1aa4bc352db9b4cec1c3e25811de0f4408edaa24e009a64de6dbfdf
+ md5: e626ee7934e4b7cb21ce6b721cff8677
+ license: MIT
+ license_family: MIT
purls: []
- size: 79899
- timestamp: 1769482558610
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda
- sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2
- md5: 57c4be259f5e0b99a5983799a228ae55
+ size: 31271315
+ timestamp: 1774517904472
+- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.2-hf411b9b_0.conda
+ sha256: feb5815125c60f2be4a411e532db1ed1cd2d7261a6a43c54cb6ae90724e2e154
+ md5: 05c7d624cff49dbd8db1ad5ba537a8a3
depends:
- - __osx >=11.0
- license: BSD-2-Clause
- license_family: BSD
+ - ca-certificates
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Apache-2.0
+ license_family: Apache
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
+ size: 9410183
+ timestamp: 1775589779763
+- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py311hf893f09_0.conda
+ sha256: 32da17824abadd1f5b46faedfa4964c7b1817b11887c2e8bb4e48628da51b93a
+ md5: fd968cdacc7967efd0ff5ef1805b812c
depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
+ - python_abi 3.11.* *_cp311
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 249478
+ timestamp: 1769678166841
+- 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
- license: BSD-2-Clause
+ - ucrt >=10.0.20348.0
+ - python_abi 3.14.* *_cp314
+ license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 89411
- timestamp: 1769482314283
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda
- sha256: a4a7dab8db4dc81c736e9a9b42bdfd97b087816e029e221380511960ac46c690
- md5: b499ce4b026493a13774bcf0f4c33849
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 249950
+ timestamp: 1769678167309
+- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.15-h0159041_0_cpython.conda
+ sha256: a1f1031088ce69bc99c82b95980c1f54e16cbd5c21f042e9c1ea25745a8fc813
+ md5: d09dbf470b41bca48cbe6a78ba1e009b
depends:
- - __glibc >=2.17,<3.0.a0
- - c-ares >=1.34.5,<2.0a0
- - libev >=4.33,<4.34.0a0
- - libev >=4.33,<5.0a0
- - libgcc >=14
- - libstdcxx >=14
+ - 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
- - openssl >=3.5.2,<4.0a0
+ - openssl >=3.5.5,<4.0a0
+ - 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.11.* *_cp311
+ license: Python-2.0
+ purls: []
+ size: 18416208
+ timestamp: 1772728847666
+- 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.5,<3.0a0
+ - libffi >=3.5.2,<3.6.0a0
+ - liblzma >=5.8.2,<6.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
+ - zstd >=1.5.7,<1.6.0a0
+ license: Python-2.0
+ purls: []
+ size: 18055445
+ timestamp: 1775615317758
+ python_site_packages_path: Lib/site-packages
+- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py311hefeebc8_1.conda
+ sha256: e3ef7e0cc53111ab81b8a9dd3eabc1374d7420d4c9fce3c8631e73310203ad55
+ md5: c1cfe9f5d8e278cc4d2d4c7b0126634d
+ 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.11.* *_cp311
+ license: PSF-2.0
+ license_family: PSF
+ purls:
+ - pkg:pypi/pywin32?source=hash-mapping
+ size: 6729388
+ timestamp: 1756487145061
+- 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-py311hda3d55a_1.conda
+ sha256: b1f6b3a907e36f7af486faf3892f47fab42993c13c934cc19855bbae227f2b18
+ md5: e5dd9afed138ff193d4593f1b15a388b
+ depends:
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ - winpty
license: MIT
license_family: MIT
- purls: []
- size: 666600
- timestamp: 1756834976695
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda
- sha256: c48d7e1cc927aef83ff9c48ae34dd1d7495c6ccc1edc4a3a6ba6aff1624be9ac
- md5: e7630cef881b1174d40f3e69a883e55f
- depends:
- - __osx >=10.13
- - c-ares >=1.34.5,<2.0a0
- - libcxx >=19
- - libev >=4.33,<4.34.0a0
- - libev >=4.33,<5.0a0
- - libzlib >=1.3.1,<2.0a0
- - openssl >=3.5.2,<4.0a0
+ purls:
+ - pkg:pypi/pywinpty?source=hash-mapping
+ size: 215911
+ timestamp: 1759557817579
+- 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: []
- size: 605680
- timestamp: 1756835898134
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda
- sha256: a07cb53b5ffa2d5a18afc6fd5a526a5a53dd9523fbc022148bd2f9395697c46d
- md5: a4b4dd73c67df470d091312ab87bf6ae
+ purls:
+ - pkg:pypi/pywinpty?source=hash-mapping
+ size: 216325
+ timestamp: 1759557436167
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py311h3f79411_1.conda
+ sha256: 301c3ba100d25cd5ae37895988ee3ab986210d4d972aa58efed948fbe857773d
+ md5: a0153c033dc55203e11d1cac8f6a9cf2
depends:
- - __osx >=11.0
- - c-ares >=1.34.5,<2.0a0
- - libcxx >=19
- - libev >=4.33,<4.34.0a0
- - libev >=4.33,<5.0a0
- - libzlib >=1.3.1,<2.0a0
- - openssl >=3.5.2,<4.0a0
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - 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: []
- size: 575454
- timestamp: 1756835746393
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda
- sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5
- md5: d864d34357c3b65a4b731f78c0801dc4
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 187108
+ timestamp: 1770223467913
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda
+ sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997
+ md5: 0cd9b88826d0f8db142071eb830bce56
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
- license: LGPL-2.1-only
- license_family: GPL
- purls: []
- size: 33731
- timestamp: 1750274110928
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda
- sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217
- md5: da5be73701eecd0e8454423fd6ffcf30
+ - 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
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py311hff25285_2.conda
+ sha256: d37e831618e8df0506d32e16820adab550b74b36d039da753f7543bb967b700d
+ md5: 0ad824e928af5d6200a97649d810ab2b
depends:
- - __glibc >=2.17,<3.0.a0
- - icu >=78.2,<79.0a0
- - libgcc >=14
- - libzlib >=1.3.1,<2.0a0
- license: blessing
- purls: []
- size: 942808
- timestamp: 1768147973361
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda
- sha256: 710a7ea27744199023c92e66ad005de7f8db9cf83f10d5a943d786f0dac53b7c
- md5: d910105ce2b14dfb2b32e92ec7653420
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.11.* *_cp311
+ - zeromq >=4.3.5,<4.3.6.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pyzmq?source=hash-mapping
+ size: 363314
+ timestamp: 1771716977369
+- 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
+- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py311hf51aa87_0.conda
+ sha256: 6edeab1412def450e72f0e96a5d8bb31a2a0b4e56624699c916d3bafd4d9b475
+ md5: 43ab63451a9df29f2c499da524665de9
depends:
- - __osx >=10.13
- - libzlib >=1.3.1,<2.0a0
- license: blessing
- purls: []
- size: 987506
- timestamp: 1768148247615
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda
- sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167
- md5: 4b0bf313c53c3e89692f020fb55d5f2c
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.11.* *_cp311
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 241288
+ timestamp: 1764543026991
+- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda
+ sha256: e4435368c5c25076dc0f5918ba531c5a92caee8e0e2f9912ef6810049cf00db2
+ md5: e86531e278ad304438e530953cd55d14
depends:
- - __osx >=11.0
- - icu >=78.2,<79.0a0
- - libzlib >=1.3.1,<2.0a0
- license: blessing
- purls: []
- size: 909777
- timestamp: 1768148320535
-- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda
- sha256: 756478128e3e104bd7e7c3ce6c1b0efad7e08c7320c69fdc726e039323c63fbb
- md5: 903979414b47d777d548e5f0165e6cd8
+ - 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
+- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda
+ sha256: 0e79810fae28f3b69fe7391b0d43f5474d6bd91d451d5f2bde02f55ae481d5e3
+ md5: 0481bfd9814bf525bd4b3ee4b51494c4
depends:
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- license: blessing
+ license: TCL
+ license_family: BSD
purls: []
- size: 1291616
- timestamp: 1768148278261
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda
- sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e
- md5: 1b08cd684f34175e4514474793d44bcb
+ size: 3526350
+ timestamp: 1769460339384
+- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py311h3485c13_0.conda
+ sha256: 71f58fe09f7729ad82c8eb942e775ddeffcef454483911d19d1041ac5d81eec3
+ md5: b004afcc680af88cb877978e71d42667
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc 15.2.0 he0feb66_18
+ - python >=3.11,<3.12.0a0
+ - python_abi 3.11.* *_cp311
+ - 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: 878544
+ timestamp: 1774358187588
+- 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/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
+ sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5
+ md5: 71b24316859acd00bdb8b38f5e2ce328
constrains:
- - libstdcxx-ng ==15.2.0=*_18
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
+ - vc14_runtime >=14.29.30037
+ - vs2015_runtime >=14.29.30037
+ license: LicenseRef-MicrosoftWindowsSDK10
purls: []
- size: 5852330
- timestamp: 1771378262446
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda
- sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee
- md5: db409b7c1720428638e7c0d509d3e1b5
+ size: 694692
+ timestamp: 1756385147981
+- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_35.conda
+ sha256: a4ce63bb91e9643c72f5536fd7175fd1a5471eaceb697e8cd0121694f35e3033
+ md5: d2a7e373b818698a6396a064d7198963
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
+ - vc14_runtime >=14.44.35208
+ track_features:
+ - vc14
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 40311
- timestamp: 1766271528534
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda
- sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b
- md5: 0f03292cc56bf91a077a134ea8747118
+ size: 19869
+ timestamp: 1778624950980
+- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_35.conda
+ sha256: a862f0241d87741eb9aee6c09078a3b864a9d377a1247b72afcf754d8962c908
+ md5: 29290b5d84e1612cdf31363838c80458
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- license: MIT
- license_family: MIT
+ - ucrt >=10.0.20348.0
+ - vcomp14 14.44.35208 h818238b_35
+ constrains:
+ - vs2015_runtime 14.44.35208.* *_35
+ license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
+ license_family: Proprietary
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
+ size: 685268
+ timestamp: 1778624949333
+- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_35.conda
+ sha256: 1ccfbc04ccb05ca8c98c9ae3606d0a163aeaf380819b3fbbc83642f27b039207
+ md5: 76582ce7a38bf80d11443682929d908d
depends:
- - __osx >=10.13
+ - ucrt >=10.0.20348.0
+ constrains:
+ - vs2015_runtime 14.44.35208.* *_35
+ license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
+ license_family: Proprietary
+ purls: []
+ size: 116006
+ timestamp: 1778624928408
+- 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: 422612
- timestamp: 1753948458902
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda
- sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689
- md5: c0d87c3c8e075daf1daf6c31b53e8083
+ size: 1176306
+- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda
+ sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309
+ md5: 433699cba6602098ae8957a323da2664
depends:
- - __osx >=11.0
+ - 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: 421195
- timestamp: 1753948426421
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
- sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c
- md5: 5aa797f8787fe7a17d1b0821485b5adc
- depends:
- - libgcc-ng >=12
- license: LGPL-2.1-or-later
- purls: []
- size: 100393
- timestamp: 1702724383534
-- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
- sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4
- md5: edb0dca6bc32e4f4789199455a1dbeb8
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
- constrains:
- - zlib 1.3.1 *_2
- license: Zlib
- license_family: Other
- purls: []
- size: 60963
- timestamp: 1727963148474
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
- sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09
- md5: 003a54a4e32b02f7355b50a837e699da
- depends:
- - __osx >=10.13
- constrains:
- - zlib 1.3.1 *_2
- license: Zlib
- license_family: Other
- purls: []
- size: 57133
- timestamp: 1727963183990
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
- sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b
- md5: 369964e85dc26bfe78f41399b366c435
+ size: 63944
+ timestamp: 1753484092156
+- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda
+ sha256: b8568dfde46edf3455458912ea6ffb760e4456db8230a0cf34ecbc557d3c275f
+ md5: 1ab0237036bfb14e923d6107473b0021
depends:
- - __osx >=11.0
- constrains:
- - zlib 1.3.1 *_2
- license: Zlib
- license_family: Other
+ - 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: 46438
- timestamp: 1727963202283
-- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
- md5: 41fbfac52c601159df6c01f875de31b9
+ size: 265665
+ timestamp: 1772476832995
+- 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
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- constrains:
- - zlib 1.3.1 *_2
- license: Zlib
- license_family: Other
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
purls: []
- size: 55476
- timestamp: 1727963768015
-- pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
- name: lmfit
- version: 1.3.4
- sha256: afce1593b42324d37ae2908249b0c55445e2f4c1a0474ff706a8e2f7b5d949fa
+ size: 388453
+ timestamp: 1764777142545
+- pypi: .
+ name: easyscience
+ requires_dist:
+ - asteval
+ - bumps
+ - dfo-ls
+ - lmfit
+ - numpy
+ - scipp
+ - build ; extra == 'dev'
+ - copier ; extra == 'dev'
+ - docstripy ; extra == 'dev'
+ - format-docstring ; extra == 'dev'
+ - gitpython ; extra == 'dev'
+ - interrogate ; extra == 'dev'
+ - ipykernel ; extra == 'dev'
+ - ipympl ; extra == 'dev'
+ - ipython ; extra == 'dev'
+ - ipywidgets ; extra == 'dev'
+ - jinja2 ; extra == 'dev'
+ - jupyterlab ; extra == 'dev'
+ - jupyterquiz ; extra == 'dev'
+ - jupytext ; extra == 'dev'
+ - matplotlib ; extra == 'dev'
+ - mike ; extra == 'dev'
+ - mkdocs ; extra == 'dev'
+ - mkdocs-autorefs ; extra == 'dev'
+ - mkdocs-jupyter ; extra == 'dev'
+ - mkdocs-markdownextradata-plugin ; extra == 'dev'
+ - mkdocs-material ; extra == 'dev'
+ - mkdocs-plugin-inline-svg ; extra == 'dev'
+ - mkdocstrings-python ; extra == 'dev'
+ - nbmake ; extra == 'dev'
+ - nbqa ; extra == 'dev'
+ - nbstripout ; extra == 'dev'
+ - pooch ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - pydoclint ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - pytest-xdist ; extra == 'dev'
+ - pyyaml ; extra == 'dev'
+ - radon ; extra == 'dev'
+ - ruff ; extra == 'dev'
+ - spdx-headers ; extra == 'dev'
+ - validate-pyproject[all] ; extra == 'dev'
+ - versioningit ; extra == 'dev'
+ requires_python: '>=3.11'
+- 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/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
+ name: h11
+ version: 0.16.0
+ sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
+ requires_python: '>=3.8'
+- 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: f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3
+ 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/07/c7/deb8c5e604404dbf10a3808a858946ca3547692ff6316b698945bb72177e/python_socketio-5.16.1-py3-none-any.whl
+ name: python-socketio
+ version: 5.16.1
+ sha256: a3eb1702e92aa2f2b5d3ba00261b61f062cce51f1cfb6900bf3ab4d1934d2d35
+ requires_dist:
+ - bidict>=0.21.0
+ - python-engineio>=4.11.0
+ - requests>=2.21.0 ; extra == 'client'
+ - websocket-client>=0.54.0 ; extra == 'client'
+ - aiohttp>=3.4 ; extra == 'asyncio-client'
+ - tox ; extra == 'dev'
+ - sphinx ; extra == 'docs'
+ - furo ; extra == 'docs'
+ requires_python: '>=3.8'
+- 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'
+ requires_python: '>=3.11'
+- 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/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/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: eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118
requires_dist:
- - asteval>=1.0
- - numpy>=1.24
- - scipy>=1.10.0
- - uncertainties>=3.2.2
- - dill>=0.3.4
- - build ; extra == 'dev'
- - check-wheel-contents ; extra == 'dev'
- - flake8-pyproject ; extra == 'dev'
- - pre-commit ; extra == 'dev'
- - twine ; extra == 'dev'
- - cairosvg ; extra == 'doc'
- - corner ; extra == 'doc'
- - emcee>=3.0.0 ; extra == 'doc'
- - ipykernel ; extra == 'doc'
- - jupyter-sphinx>=0.2.4 ; extra == 'doc'
- - matplotlib ; extra == 'doc'
- - numdifftools ; extra == 'doc'
- - pandas ; extra == 'doc'
- - pillow ; extra == 'doc'
- - pycairo ; sys_platform == 'win32' and extra == 'doc'
- - sphinx ; extra == 'doc'
- - sphinx-gallery>=0.10 ; extra == 'doc'
- - sphinxcontrib-svg2pdfconverter ; extra == 'doc'
- - sympy ; extra == 'doc'
- - coverage ; extra == 'test'
- - flaky ; extra == 'test'
- - pytest ; extra == 'test'
+ - numpy>=1.26.4,<2.7
+ - pytest>=8.0.0 ; extra == 'test'
- pytest-cov ; extra == 'test'
- - lmfit[dev,doc,test] ; extra == 'all'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl
- name: mando
- version: 0.7.1
- sha256: 26ef1d70928b6057ee3ca12583d73c63e05c49de8972d620c278a7b206581a8a
+ - 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/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl
+ name: contourpy
+ version: 1.3.3
+ sha256: 23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381
requires_dist:
- - six
- - argparse ; python_full_version < '2.7'
- - funcsigs ; python_full_version < '3.3'
- - rst2ansi ; extra == 'restructuredtext'
-- pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl
- name: markdown
- version: 3.10.2
- sha256: e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36
+ - 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/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl
+ name: build
+ version: 1.5.0
+ sha256: 13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f
requires_dist:
- - coverage ; extra == 'testing'
- - pyyaml ; extra == 'testing'
- - mkdocs>=1.6 ; extra == 'docs'
- - mkdocs-nature>=0.6 ; extra == 'docs'
- - mdx-gh-links>=0.2 ; extra == 'docs'
- - mkdocstrings[python]>=0.28.3 ; extra == 'docs'
- - mkdocs-gen-files ; extra == 'docs'
- - mkdocs-section-index ; extra == 'docs'
- - mkdocs-literate-nav ; extra == 'docs'
+ - 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.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.10'
-- pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl
- name: markdown-it-py
- version: 4.0.0
- sha256: 87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147
+- 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: 1f103f6c5a33b08773206c613fe2dd9c02585f5c4e44b77311c54b7828a758ed
requires_dist:
- - mdurl~=0.1
- - psutil ; extra == 'benchmarking'
- - pytest ; extra == 'benchmarking'
- - pytest-benchmark ; extra == 'benchmarking'
- - commonmark~=0.9 ; extra == 'compare'
- - markdown~=3.4 ; extra == 'compare'
- - mistletoe~=1.0 ; extra == 'compare'
- - mistune~=3.0 ; extra == 'compare'
- - panflute~=2.3 ; extra == 'compare'
- - markdown-it-pyrs ; extra == 'compare'
- - linkify-it-py>=1,<3 ; extra == 'linkify'
- - mdit-py-plugins>=0.5.0 ; extra == 'plugins'
- - gprof2dot ; extra == 'profiling'
- - mdit-py-plugins>=0.5.0 ; extra == 'rtd'
- - myst-parser ; extra == 'rtd'
- - pyyaml ; extra == 'rtd'
- - sphinx ; extra == 'rtd'
- - sphinx-copybutton ; extra == 'rtd'
- - sphinx-design ; extra == 'rtd'
- - sphinx-book-theme~=1.0 ; extra == 'rtd'
- - jupyter-sphinx ; extra == 'rtd'
- - ipykernel ; extra == 'rtd'
- - coverage ; extra == 'testing'
- - pytest ; extra == 'testing'
- - pytest-cov ; extra == 'testing'
- - pytest-regressions ; extra == 'testing'
- - requests ; extra == 'testing'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl
- name: markupsafe
- version: 3.0.3
- sha256: 9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5
- requires_python: '>=3.9'
-- 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/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl
- name: markupsafe
- version: 3.0.3
- sha256: e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795
- 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/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl
- name: markupsafe
- version: 3.0.3
- sha256: 116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219
+ - 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/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/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: markupsafe
- version: 3.0.3
- sha256: ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676
+- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl
+ name: pyparsing
+ version: 3.3.2
+ sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d
+ requires_dist:
+ - railroad-diagrams ; extra == 'diagrams'
+ - jinja2 ; extra == 'diagrams'
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
+- 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'
-- pypi: https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl
- name: matplotlib
- version: 3.10.8
- sha256: 3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6
- 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/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-win_amd64.whl
- name: matplotlib
- version: 3.10.8
- sha256: e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149
- 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/6f/d3/a4bbc01c237ab710a1f22b4da72f4ff6d77eb4c7735ea9811a94ae239067/matplotlib-3.10.8-cp311-cp311-win_amd64.whl
- name: matplotlib
- version: 3.10.8
- sha256: 18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9
+- pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl
+ name: griffelib
+ version: 2.0.2
+ sha256: 925c857658fb1ba40c0772c37acbc2ab650bd794d9c1b9726922e36ea4117ea1
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'
+ - pip>=24.0 ; extra == 'pypi'
+ - platformdirs>=4.2 ; extra == 'pypi'
+ - wheel>=0.42 ; extra == 'pypi'
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- name: matplotlib
- version: 3.10.8
- sha256: a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486
+- 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: 4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286
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'
+ - 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/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl
- name: matplotlib
- version: 3.10.8
- sha256: 56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1
+- 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'
+- pypi: https://files.pythonhosted.org/packages/12/b3/88c0ef22878c86035f058df0ac6c171319ffd0aa52a406455ed3a3847566/ipympl-0.10.0-py3-none-any.whl
+ name: ipympl
+ version: 0.10.0
+ sha256: a09c4f0ff86490cc62aed45e53b912fb706e3ec3506c4a51ce4a670d6667f5ce
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/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
+ - ipython<10
+ - ipywidgets>=7.6.0,<9
+ - matplotlib>=3.5.0,<4
+ - numpy
+ - pillow
+ - traitlets<6
+ - intersphinx-registry ; extra == 'docs'
+ - myst-nb ; extra == 'docs'
+ - sphinx-book-theme ; extra == 'docs'
+ - sphinx-copybutton ; extra == 'docs'
+ - sphinx-thebe ; extra == 'docs'
+ - sphinx-togglebutton ; extra == 'docs'
+ - sphinx>=1.5 ; extra == 'docs'
+ - nbval>=0.11.0 ; extra == 'test'
+ - pytest>=9.0.2 ; extra == 'test'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/12/c9/6869a1dcf4aaf309b9543ec070be3ec3adebee7c9bec9af8c230494134b9/interrogate-1.7.0-py3-none-any.whl
+ name: interrogate
+ version: 1.7.0
+ sha256: b13ff4dd8403369670e2efe684066de9fcb868ad9d7f2b4095d8112142dc9d12
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
- name: matplotlib
- version: 3.10.8
- sha256: 6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160
+ - attrs
+ - click>=7.1
+ - colorama
+ - py
+ - tabulate
+ - tomli ; python_full_version < '3.11'
+ - cairosvg ; extra == 'dev'
+ - sphinx ; extra == 'dev'
+ - sphinx-autobuild ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - pytest-mock ; extra == 'dev'
+ - coverage[toml] ; extra == 'dev'
+ - wheel ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - sphinx ; extra == 'docs'
+ - sphinx-autobuild ; extra == 'docs'
+ - cairosvg ; extra == 'png'
+ - pytest ; extra == 'tests'
+ - pytest-cov ; extra == 'tests'
+ - pytest-mock ; extra == 'tests'
+ - coverage[toml] ; extra == 'tests'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/13/95/cf3f7fe4910cf0365fa8ea0c731f4b8a624d97cd76ea777913ac8d0868e2/mkdocs_jupyter-0.26.3-py3-none-any.whl
+ name: mkdocs-jupyter
+ version: 0.26.3
+ sha256: cd6644fb578131157194d750fd4d10fc2fd8f1e84e00036ee62df3b5b4b84c82
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'
+ - ipykernel>6.0.0,<8
+ - jupytext>1.13.8,<2
+ - mkdocs-material>9.0.0
+ - mkdocs>=1.4.0,<2
+ - nbconvert>=7.2.9,<8
+ - pygments>2.12.0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/14/4b/d3c79495dee4831b8bebca2790e72cb90f0c5849c940570a7c7e5b70b952/chardet-7.4.3-cp311-cp311-macosx_11_0_arm64.whl
+ name: chardet
+ version: 7.4.3
+ sha256: 7005c88da26fd95d8abb8acbe6281d833e9a9181b03cf49b4546c4555389bd97
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/fd/14/baad3222f424b19ce6ad243c71de1ad9ec6b2e4eb1e458a48fdc6d120401/matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl
- name: matplotlib
- version: 3.10.8
- sha256: a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78
- 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'
+- pypi: https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7
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
+- 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: 6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
+ name: versioningit
+ version: 3.3.0
+ sha256: 23b1db3c4756cded9bd6b0ddec6643c261e3d0c471707da3e0b230b81ce53e4b
requires_dist:
- - traitlets
- - flake8 ; extra == 'test'
- - nbdime ; extra == 'test'
- - nbval ; extra == 'test'
- - notebook ; extra == 'test'
- - pytest ; extra == 'test'
+ - importlib-metadata>=3.6 ; python_full_version < '3.10'
+ - packaging>=17.1
+ - tomli>=1.2,<3.0 ; python_full_version < '3.11'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl
+ name: dill
+ version: 0.4.1
+ sha256: 1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d
+ requires_dist:
+ - objgraph>=1.7.2 ; extra == 'graph'
+ - gprof2dot>=2022.7.29 ; extra == 'profile'
requires_python: '>=3.9'
-- 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
- sha256: 07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f
+- 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: 26291c0a882b9d5aac868c6d6f2508b79baa821ed30060a22c50620dbcce9e75
requires_dist:
- - markdown-it-py>=2.0.0,<5.0.0
- - pre-commit ; extra == 'code-style'
- - myst-parser ; extra == 'rtd'
- - sphinx-book-theme ; extra == 'rtd'
- - coverage ; extra == 'testing'
- - pytest ; extra == 'testing'
- - pytest-cov ; extra == 'testing'
- - pytest-regressions ; extra == 'testing'
+ - 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/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
+ name: nbstripout
+ version: 0.9.1
+ sha256: ca027ee45742ee77e4f8e9080254f9a707f1161ba11367b82fdf4a29892c759e
+ requires_dist:
+ - nbformat
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- name: mdurl
- version: 0.1.2
- sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl
- name: mergedeep
- version: 1.3.4
- sha256: 70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307
- requires_python: '>=3.6'
-- pypi: https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl
- name: mike
- version: 2.1.3
- sha256: d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a
+- pypi: https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl
+ name: virtualenv
+ version: 21.3.2
+ sha256: c58ea748fa50bb2a4367da5ba3d30b02458ed40b4ea888faad94021f3309f764
requires_dist:
- - importlib-metadata
- - importlib-resources
- - jinja2>=2.7
- - mkdocs>=1.0
- - pyparsing>=3.0
- - pyyaml>=5.1
- - pyyaml-env-tag
- - verspec
- - coverage ; extra == 'dev'
- - flake8-quotes ; extra == 'dev'
- - flake8>=3.0 ; extra == 'dev'
- - shtab ; extra == 'dev'
- - coverage ; extra == 'test'
- - 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
+ - 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
+ - typing-extensions>=4.13.2 ; python_full_version < '3.11'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl
+ name: gitpython
+ version: 3.1.50
+ sha256: d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9
+ requires_dist:
+ - gitdb>=4.0.1,<5
+ - typing-extensions>=3.10.0.2 ; python_full_version < '3.10'
+ - coverage[toml] ; extra == 'test'
+ - ddt>=1.1.1,!=1.4.3 ; extra == 'test'
+ - mock ; python_full_version < '3.8' and extra == 'test'
+ - mypy==1.18.2 ; python_full_version >= '3.9' and extra == 'test'
+ - pre-commit ; extra == 'test'
+ - pytest>=7.3.1 ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - pytest-instafail ; extra == 'test'
+ - pytest-mock ; extra == 'test'
+ - pytest-sugar ; extra == 'test'
+ - typing-extensions ; python_full_version < '3.11' and extra == 'test'
+ - sphinx>=7.4.7,<8 ; extra == 'doc'
+ - sphinx-rtd-theme ; extra == 'doc'
+ - sphinx-autodoc-typehints ; extra == 'doc'
+ 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/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl
+ name: certifi
+ version: 2026.4.22
+ sha256: 3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a
+ requires_python: '>=3.7'
+- 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: f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162
requires_dist:
- - typing-extensions ; python_full_version < '3.11'
- requires_python: '>=3.8'
+ - 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/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl
name: mkdocs
version: 1.6.1
@@ -6321,422 +7040,62 @@ packages:
- pyyaml==5.1 ; extra == 'min-versions'
- watchdog==2.0 ; extra == 'min-versions'
requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
- name: mkdocs-autorefs
- version: 1.4.4
- sha256: 834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089
- requires_dist:
- - markdown>=3.3
- - markupsafe>=2.0.1
- - mkdocs>=1.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
- name: mkdocs-get-deps
- version: 0.2.0
- sha256: 2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134
- requires_dist:
- - importlib-metadata>=4.3 ; python_full_version < '3.10'
- - mergedeep>=1.3.4
- - platformdirs>=2.2.0
- - pyyaml>=5.1
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/08/37/5f1fd5c3f6954b3256f8126275e62af493b96fb6aef6c0dbc4ee326032ad/mkdocs_jupyter-0.25.1-py3-none-any.whl
- name: mkdocs-jupyter
- version: 0.25.1
- sha256: 3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8
- requires_dist:
- - ipykernel>6.0.0,<7.0.0
- - jupytext>1.13.8,<2
- - mkdocs-material>9.0.0
- - mkdocs>=1.4.0,<2
- - nbconvert>=7.2.9,<8
- - pygments>2.12.0
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl
- name: mkdocs-markdownextradata-plugin
- version: 0.2.6
- sha256: 34dd40870781784c75809596b2d8d879da783815b075336d541de1f150c94242
- requires_dist:
- - mkdocs
- - pyyaml
- requires_python: '>=3.6'
-- pypi: https://files.pythonhosted.org/packages/b9/1b/16ad0193079bb8a15aa1d2620813a9cd15b18de150a4ea1b2c607fb4c74d/mkdocs_material-9.7.3-py3-none-any.whl
- name: mkdocs-material
- version: 9.7.3
- sha256: 37ebf7b4788c992203faf2e71900be3c197c70a4be9b0d72aed537b08a91dd9d
+- 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:
- - babel>=2.10
- - backrefs>=5.7.post1
- - colorama>=0.4
- - jinja2>=3.1
- - markdown>=3.2
- - mkdocs-material-extensions>=1.3
- - mkdocs>=1.6
- - paginate>=0.5
- - pygments>=2.16
- - pymdown-extensions>=10.2
- - requests>=2.30
- - mkdocs-git-committers-plugin-2>=1.1 ; extra == 'git'
- - mkdocs-git-revision-date-localized-plugin>=1.2.4 ; extra == 'git'
- - cairosvg>=2.6 ; extra == 'imaging'
- - pillow>=10.2 ; extra == 'imaging'
- - mkdocs-minify-plugin>=0.7 ; extra == 'recommended'
- - mkdocs-redirects>=1.2 ; extra == 'recommended'
- - mkdocs-rss-plugin>=1.6 ; extra == 'recommended'
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
- name: mkdocs-material-extensions
- version: 1.3.1
- sha256: adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
+ - 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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl
- name: mkdocs-plugin-inline-svg
- version: 0.1.0
- sha256: a5aab2d98a19b24019f8e650f54fc647c2f31e7d0e36fc5cf2d2161acc0ea49a
- requires_dist:
- - mkdocs
- requires_python: '>=3.5'
-- pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
- name: mkdocstrings
- version: 1.0.3
- sha256: 0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046
- requires_dist:
- - jinja2>=3.1
- - markdown>=3.6
- - markupsafe>=1.1
- - mkdocs>=1.6
- - mkdocs-autorefs>=1.4
- - pymdown-extensions>=6.3
- - mkdocstrings-crystal>=0.3.4 ; extra == 'crystal'
- - mkdocstrings-python-legacy>=0.2.1 ; extra == 'python-legacy'
- - mkdocstrings-python>=1.16.2 ; extra == 'python'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
- name: mkdocstrings-python
- version: 2.0.3
- sha256: 0b83513478bdfd803ff05aa43e9b1fca9dd22bcd9471f09ca6257f009bc5ee12
- requires_dist:
- - mkdocstrings>=0.30
- - mkdocs-autorefs>=1.4
- - griffelib>=2.0
- - typing-extensions>=4.0 ; python_full_version < '3.11'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
- name: mpld3
- version: 0.5.12
- sha256: bea31799a4041029a906f53f2662bbf1c49903e0c0bc712b412354158ec7cf54
- requires_dist:
- - jinja2
- - matplotlib
-- pypi: https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl
- name: msgpack
- version: 1.1.2
- sha256: d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68
- 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
- name: msgpack
- version: 1.1.2
- sha256: 2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: msgpack
- version: 1.1.2
- sha256: fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl
- name: msgpack
- version: 1.1.2
- sha256: 4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl
- name: msgpack
- version: 1.1.2
- sha256: a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl
- name: msgpack
- version: 1.1.2
- sha256: 283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl
- name: msgpack
- version: 1.1.2
- sha256: 42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7
- 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/03/59/fdcb3af72f750a8de2bcf39d62ada70b5eb17b06d7f63860e0a679cb656b/msgspec-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl
- name: msgspec
- version: 0.20.0
- sha256: 09e0efbf1ac641fedb1d5496c59507c2f0dc62a052189ee62c763e0aae217520
- 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/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: msgspec
- version: 0.20.0
- sha256: 7fac7e9c92eddcd24c19d9e5f6249760941485dff97802461ae7c995a2450111
- 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/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl
- name: msgspec
- version: 0.20.0
- sha256: f6532369ece217fd37c5ebcfd7e981f2615628c21121b7b2df9d3adcf2fd69b8
- 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
- name: msgspec
- version: 0.20.0
- sha256: 23ee3787142e48f5ee746b2909ce1b76e2949fbe0f97f9f6e70879f06c218b54
- 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
- name: msgspec
- version: 0.20.0
- sha256: bb4d873f24ae18cd1334f4e37a178ed46c9d186437733351267e0a269bdf7e53
- 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
- name: msgspec
- version: 0.20.0
- sha256: d1dcc93a3ce3d3195985bfff18a48274d0b5ffbc96fa1c5b89da6f0d9af81b29
- 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/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: msgspec
- version: 0.20.0
- sha256: 9c1ff8db03be7598b50dd4b4a478d6fe93faae3bd54f4f17aa004d0e46c14c46
- 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/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl
- name: msgspec
- version: 0.20.0
- sha256: 67d5e4dfad52832017018d30a462604c80561aa62a9d548fc2bd4e430b66a352
- 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/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'
-- pypi: https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl
- name: multidict
- version: 6.7.1
- sha256: 935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445
- 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/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: multidict
- version: 6.7.1
- sha256: 9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429
- requires_dist:
- - typing-extensions>=4.1.0 ; python_full_version < '3.11'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl
- name: multidict
- version: 6.7.1
- sha256: 960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5
- requires_dist:
- - typing-extensions>=4.1.0 ; python_full_version < '3.11'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: multidict
- version: 6.7.1
- sha256: 84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2
- 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
- name: multidict
- version: 6.7.1
- sha256: bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b
- 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
- name: multidict
- version: 6.7.1
- sha256: f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855
- requires_dist:
- - typing-extensions>=4.1.0 ; python_full_version < '3.11'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.0-py3-none-any.whl
- name: narwhals
- version: 2.17.0
- sha256: 2ac5307b7c2b275a7d66eeda906b8605e3d7a760951e188dcfff86e8ebe083dd
- requires_dist:
- - cudf-cu12>=24.10.0 ; extra == 'cudf'
- - dask[dataframe]>=2024.8 ; extra == 'dask'
- - duckdb>=1.1 ; extra == 'duckdb'
- - ibis-framework>=6.0.0 ; extra == 'ibis'
- - packaging ; extra == 'ibis'
- - pyarrow-hotfix ; extra == 'ibis'
- - rich ; extra == 'ibis'
- - modin ; extra == 'modin'
- - pandas>=1.1.3 ; extra == 'pandas'
- - polars>=0.20.4 ; extra == 'polars'
- - 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/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl
- name: nbconvert
- version: 7.17.0
- sha256: 4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518
+- 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: 23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719
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'
-- pypi: https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
- name: nbmake
- version: 1.5.5
- sha256: c6fbe6e48b60cacac14af40b38bf338a3b88f47f085c54ac5b8639ff0babaf4b
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: 5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b
+ 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
+ version: 4.62.1
+ sha256: 8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae
requires_dist:
- - ipykernel>=5.4.0
- - nbclient>=0.6.6
- - nbformat>=5.0.4
- - pygments>=2.7.3
- - pytest>=6.1.0
- requires_python: '>=3.8.0'
+ - 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/28/88/4789719fbbe166d12d345b3ac66b96105f10001b16e00a9765ba29261a21/nbqa-1.9.1-py3-none-any.whl
name: nbqa
version: 1.9.1
@@ -6756,254 +7115,124 @@ packages:
- pyupgrade ; extra == 'toolchain'
- ruff ; extra == 'toolchain'
requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/20/16/e777eadfa0c0305878c36fae1d5e6db474fbb15dae202b9ec378809dfb4d/nbstripout-0.9.1-py3-none-any.whl
- name: nbstripout
- version: 0.9.1
- sha256: ca027ee45742ee77e4f8e9080254f9a707f1161ba11367b82fdf4a29892c759e
+- pypi: https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl
+ name: mkdocs-autorefs
+ version: 1.4.4
+ sha256: 834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089
requires_dist:
- - nbformat
+ - markdown>=3.3
+ - markupsafe>=2.0.1
+ - mkdocs>=1.1
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl
+ name: pooch
+ version: 1.9.0
+ sha256: f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b
+ requires_dist:
+ - platformdirs>=2.5.0
+ - packaging>=20.0
+ - requests>=2.19.0
+ - tqdm>=4.41.0,<5.0.0 ; extra == 'progress'
+ - paramiko>=2.7.0 ; extra == 'sftp'
+ - xxhash>=1.4.3 ; extra == 'xxhash'
+ - pytest-httpserver ; extra == 'test'
+ - pytest-localftpserver ; extra == 'test'
+ requires_python: '>=3.9'
+- 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:
+ - anyio
+ - certifi
+ - 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'
+- pypi: https://files.pythonhosted.org/packages/2a/79/309d0e637f6f37e83c711f547308b91af02b72d2326ddd860b966080ef29/msgpack-1.1.2-cp311-cp311-win_amd64.whl
+ name: msgpack
+ version: 1.1.2
+ sha256: d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825
requires_python: '>=3.10'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda
- sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586
- md5: 47e340acb35de30501a76c7c799c41d7
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
- license: X11 AND BSD-3-Clause
- 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
- depends:
- - __osx >=11.0
- license: X11 AND BSD-3-Clause
- 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'
-- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
- name: nodeenv
- version: 1.10.0
- sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827
- 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/linux-64/nodejs-25.7.0-he4ff34a_0.conda
- sha256: 4791285a34195615e22a94dc62cbd43181548b34eb34e6cb1dcf8f469476a32e
- md5: ba562095149fde99c700365d90e6d632
- depends:
- - __glibc >=2.28,<3.0.a0
- - libstdcxx >=14
- - libgcc >=14
- - libnghttp2 >=1.67.0,<2.0a0
- - c-ares >=1.34.6,<2.0a0
- - zstd >=1.5.7,<1.6.0a0
- - libbrotlicommon >=1.2.0,<1.3.0a0
- - libbrotlienc >=1.2.0,<1.3.0a0
- - libbrotlidec >=1.2.0,<1.3.0a0
- - libuv >=1.51.0,<2.0a0
- - openssl >=3.5.5,<4.0a0
- - libabseil >=20260107.1,<20260108.0a0
- - libabseil * cxx17*
- - icu >=78.2,<79.0a0
- - libzlib >=1.3.1,<2.0a0
- - libsqlite >=3.51.2,<4.0a0
- license: MIT
- license_family: MIT
- purls: []
- size: 18875002
- timestamp: 1772300115686
-- conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-25.7.0-hf6efa0e_0.conda
- sha256: a23a3b536f1ccd3c10a2cbdf8c638b601c51f6e9bbf1e6c708610cf5b1df3d0f
- md5: 448185eb18358e4b5fe2a157cc7e415f
- depends:
- - libcxx >=19
- - __osx >=10.15
- - openssl >=3.5.5,<4.0a0
- - c-ares >=1.34.6,<2.0a0
- - libuv >=1.51.0,<2.0a0
- - libbrotlicommon >=1.2.0,<1.3.0a0
- - libbrotlienc >=1.2.0,<1.3.0a0
- - libbrotlidec >=1.2.0,<1.3.0a0
- - libabseil >=20260107.1,<20260108.0a0
- - libabseil * cxx17*
- - libnghttp2 >=1.67.0,<2.0a0
- - icu >=78.2,<79.0a0
- - libsqlite >=3.51.2,<4.0a0
- - libzlib >=1.3.1,<2.0a0
- - zstd >=1.5.7,<1.6.0a0
- license: MIT
- license_family: MIT
- purls: []
- size: 18342335
- timestamp: 1772299132495
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-25.7.0-hbfc8e16_0.conda
- sha256: 6398a45d2bb943585540d98a9b1b3bed1fb48fabd327b56eba2ece00e3dd202f
- md5: 22a4a51f30590f274bb3f831d911c09a
- depends:
- - __osx >=11.0
- - libcxx >=19
- - libsqlite >=3.51.2,<4.0a0
- - zstd >=1.5.7,<1.6.0a0
- - libbrotlicommon >=1.2.0,<1.3.0a0
- - libbrotlienc >=1.2.0,<1.3.0a0
- - libbrotlidec >=1.2.0,<1.3.0a0
- - libuv >=1.51.0,<2.0a0
- - libabseil >=20260107.1,<20260108.0a0
- - libabseil * cxx17*
- - icu >=78.2,<79.0a0
- - c-ares >=1.34.6,<2.0a0
- - openssl >=3.5.5,<4.0a0
- - libnghttp2 >=1.67.0,<2.0a0
- - libzlib >=1.3.1,<2.0a0
- license: MIT
- license_family: MIT
- purls: []
- size: 17351648
- timestamp: 1772299122966
-- conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-25.7.0-h80d1838_0.conda
- sha256: 0ea0ddad32366396d1beda7ce93ddd3d9f705286c1a4f99f05ec0049183c1e97
- md5: 61b62d3be12c9edbe34f202d51891927
- license: MIT
- license_family: MIT
- purls: []
- size: 31254428
- timestamp: 1772299132945
-- 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
+- pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl
+ name: mkdocs-material
+ version: 9.7.6
+ sha256: 71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba
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'
-- pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: numpy
- version: 2.4.2
- sha256: d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: numpy
- version: 2.4.2
- sha256: c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl
- name: numpy
- version: 2.4.2
- sha256: cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl
- name: numpy
- version: 2.4.2
- sha256: 7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl
- name: numpy
- version: 2.4.2
- sha256: 6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl
- name: numpy
- version: 2.4.2
- sha256: aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-cp311-cp311-win_amd64.whl
- name: numpy
- version: 2.4.2
- sha256: b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695
- requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl
- name: numpy
- version: 2.4.2
- sha256: 8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98
- requires_python: '>=3.11'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda
- sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c
- md5: f61eb8cd60ff9057122a3d338b99c00f
- depends:
- - __glibc >=2.17,<3.0.a0
- - ca-certificates
- - libgcc >=14
- 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
- depends:
- - __osx >=10.13
- - 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
- 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
- depends:
- - ca-certificates
- - ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- license: Apache-2.0
- license_family: Apache
- purls: []
- size: 9343023
- timestamp: 1769557547888
-- 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
+ - babel>=2.10
+ - backrefs>=5.7.post1
+ - colorama>=0.4
+ - jinja2>=3.1
+ - markdown>=3.2
+ - mkdocs-material-extensions>=1.3
+ - mkdocs>=1.6,<2
+ - paginate>=0.5
+ - pygments>=2.16
+ - pymdown-extensions>=10.2
+ - requests>=2.30
+ - mkdocs-git-committers-plugin-2>=1.1 ; extra == 'git'
+ - mkdocs-git-revision-date-localized-plugin>=1.2.4 ; extra == 'git'
+ - cairosvg>=2.6 ; extra == 'imaging'
+ - pillow>=10.2 ; extra == 'imaging'
+ - mkdocs-minify-plugin>=0.7 ; extra == 'recommended'
+ - mkdocs-redirects>=1.2 ; extra == 'recommended'
+ - mkdocs-rss-plugin>=1.6 ; extra == 'recommended'
requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
- name: paginate
- version: 0.5.7
- sha256: b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591
+- pypi: https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl
+ name: mergedeep
+ version: 1.3.4
+ sha256: 70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307
+ requires_python: '>=3.6'
+- 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: 180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
+ name: mkdocstrings-python
+ version: 2.0.3
+ sha256: 0b83513478bdfd803ff05aa43e9b1fca9dd22bcd9471f09ca6257f009bc5ee12
+ requires_dist:
+ - mkdocstrings>=0.30
+ - mkdocs-autorefs>=1.4
+ - griffelib>=2.0
+ - typing-extensions>=4.0 ; python_full_version < '3.11'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: 34cf8167e023ad956c15f36302911d5406bd99a9862c1a8499ea6f7c0e015dc2
requires_dist:
- - pytest ; extra == 'dev'
- - tox ; extra == 'dev'
- - black ; extra == 'lint'
-- pypi: https://files.pythonhosted.org/packages/0b/48/aad6ec4f8d007534c091e9a7172b3ec1b1ee6d99a9cbb936b5eab6c6cf58/pandas-3.0.1-cp313-cp313-macosx_10_13_x86_64.whl
+ - 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
name: pandas
- version: 3.0.1
- sha256: 5272627187b5d9c20e55d27caf5f2cd23e286aba25cadf73c8590e432e2b7262
+ version: 3.0.3
+ sha256: 8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27
requires_dist:
- numpy>=1.26.0 ; python_full_version < '3.14'
- numpy>=2.3.3 ; python_full_version >= '3.14'
@@ -7051,7 +7280,7 @@ packages:
- pyqt5>=5.15.9 ; extra == 'clipboard'
- qtpy>=2.4.2 ; extra == 'clipboard'
- zstandard>=0.23.0 ; extra == 'compression'
- - pytz>=2024.2 ; extra == 'timezone'
+ - pytz>=2020.1 ; extra == 'timezone'
- adbc-driver-postgresql>=1.2.0 ; extra == 'all'
- adbc-driver-sqlite>=1.2.0 ; extra == 'all'
- beautifulsoup4>=4.12.3 ; extra == 'all'
@@ -7077,7 +7306,7 @@ packages:
- 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'
+ - pytz>=2020.1 ; extra == 'all'
- pyxlsb>=1.0.10 ; extra == 'all'
- qtpy>=2.4.2 ; extra == 'all'
- scipy>=1.14.1 ; extra == 'all'
@@ -7090,10 +7319,67 @@ packages:
- xlsxwriter>=3.2.0 ; extra == 'all'
- zstandard>=0.23.0 ; extra == 'all'
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/1f/67/af63f83cd6ca603a00fe8530c10a60f0879265b8be00b5930e8e78c5b30b/pandas-3.0.1-cp311-cp311-win_amd64.whl
+- pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
+ name: distlib
+ version: 0.4.0
+ sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16
+- 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/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl
+ name: tokenize-rt
+ version: 6.2.0
+ sha256: a152bf4f249c847a66497a4a95f63376ed68ac6abf092a2f7cfb29d044ecff44
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl
+ name: ruff
+ version: 0.15.12
+ sha256: c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d
+ requires_python: '>=3.7'
+- 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: fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca
+ 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/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl
name: pandas
- version: 3.0.1
- sha256: 84f0904a69e7365f79a0c77d3cdfccbfb05bf87847e3a51a41e1426b0edb9c79
+ version: 3.0.3
+ sha256: 3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5
requires_dist:
- numpy>=1.26.0 ; python_full_version < '3.14'
- numpy>=2.3.3 ; python_full_version >= '3.14'
@@ -7141,7 +7427,7 @@ packages:
- pyqt5>=5.15.9 ; extra == 'clipboard'
- qtpy>=2.4.2 ; extra == 'clipboard'
- zstandard>=0.23.0 ; extra == 'compression'
- - pytz>=2024.2 ; extra == 'timezone'
+ - pytz>=2020.1 ; extra == 'timezone'
- adbc-driver-postgresql>=1.2.0 ; extra == 'all'
- adbc-driver-sqlite>=1.2.0 ; extra == 'all'
- beautifulsoup4>=4.12.3 ; extra == 'all'
@@ -7167,7 +7453,7 @@ packages:
- 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'
+ - pytz>=2020.1 ; extra == 'all'
- pyxlsb>=1.0.10 ; extra == 'all'
- qtpy>=2.4.2 ; extra == 'all'
- scipy>=1.14.1 ; extra == 'all'
@@ -7180,280 +7466,507 @@ packages:
- xlsxwriter>=3.2.0 ; extra == 'all'
- zstandard>=0.23.0 ; extra == 'all'
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/2e/7c/870c7e7daec2a6c7ff2ac9e33b23317230d4e4e954b35112759ea4a924a7/pandas-3.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- name: pandas
- version: 3.0.1
- sha256: 830994d7e1f31dd7e790045235605ab61cff6c94defc774547e8b7fdfbff3dc7
+- pypi: https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl
+ name: lmfit
+ version: 1.3.4
+ sha256: afce1593b42324d37ae2908249b0c55445e2f4c1a0474ff706a8e2f7b5d949fa
+ requires_dist:
+ - asteval>=1.0
+ - numpy>=1.24
+ - scipy>=1.10.0
+ - uncertainties>=3.2.2
+ - dill>=0.3.4
+ - build ; extra == 'dev'
+ - check-wheel-contents ; extra == 'dev'
+ - flake8-pyproject ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - twine ; extra == 'dev'
+ - cairosvg ; extra == 'doc'
+ - corner ; extra == 'doc'
+ - emcee>=3.0.0 ; extra == 'doc'
+ - ipykernel ; extra == 'doc'
+ - jupyter-sphinx>=0.2.4 ; extra == 'doc'
+ - matplotlib ; extra == 'doc'
+ - numdifftools ; extra == 'doc'
+ - pandas ; extra == 'doc'
+ - pillow ; extra == 'doc'
+ - pycairo ; sys_platform == 'win32' and extra == 'doc'
+ - sphinx ; extra == 'doc'
+ - sphinx-gallery>=0.10 ; extra == 'doc'
+ - sphinxcontrib-svg2pdfconverter ; extra == 'doc'
+ - sympy ; extra == 'doc'
+ - coverage ; extra == 'test'
+ - flaky ; extra == 'test'
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - lmfit[dev,doc,test] ; extra == 'all'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.1.1-py3-none-any.whl
+ name: pip
+ version: 26.1.1
+ sha256: 99cb1c2899893b075ff56e4ed0af55669a955b49ad7fb8d8603ecdaf4ed653fb
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl
+ name: questionary
+ version: 2.1.1
+ sha256: a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59
+ requires_dist:
+ - prompt-toolkit>=2.0,<4.0
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-py3-none-any.whl
+ name: jupyterlab
+ version: 4.5.7
+ sha256: fba4cb0e2c44a52859669d8c98b45de029d5e515f8407bf8534d2a8fc5f0964d
+ 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
+ - packaging
+ - setuptools>=41.1.0
+ - tomli>=1.2.2 ; python_full_version < '3.11'
+ - 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/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl
+ name: h5py
+ version: 3.16.0
+ sha256: fa48993a0b799737ba7fd21e2350fa0a60701e58180fae9f2de834bc39a147ab
+ requires_dist:
+ - numpy>=1.21.2
+ requires_python: '>=3.10'
+- 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
+ sha256: 73bcb1ed087824b55ccaa497d03d8f0f0b0eaf30e5f0f7d5bbd29d2c4fe78fcf
+ requires_dist:
+ - chardet>=5.2.0
+ - requests>=2.32.3
+ - black>=23.0.0 ; extra == 'dev'
+ - build>=0.10.0 ; extra == 'dev'
+ - hatch>=1.9.0 ; extra == 'dev'
+ - isort>=5.12.0 ; extra == 'dev'
+ - mypy>=1.0.0 ; extra == 'dev'
+ - pre-commit>=4.3.0 ; extra == 'dev'
+ - pytest-cov>=4.0.0 ; extra == 'dev'
+ - pytest>=7.0.0 ; extra == 'dev'
+ - ruff>=0.5.0 ; extra == 'dev'
+ - twine>=4.0.0 ; extra == 'dev'
+ - types-requests>=2.31.0.6 ; extra == 'dev'
+ - pytest-cov>=4.0.0 ; extra == 'test'
+ - pytest-mock>=3.10.0 ; extra == 'test'
+ - pytest>=7.0.0 ; extra == 'test'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl
+ name: backrefs
+ version: '7.0'
+ sha256: a6448b28180e3ca01134c9cf09dcebafad8531072e09903c5451748a05f24bc9
+ requires_dist:
+ - regex ; extra == 'extras'
+ requires_python: '>=3.10'
+- 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'
+- pypi: https://files.pythonhosted.org/packages/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: 97e35e8d39ccc85859095e01a53847432ba9a53ddf7986f7a54a11b73d0e143f
+ 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
+ requires_python: '>=3.10'
+- 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: 1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52
+ requires_dist:
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: 44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82
+ requires_python: '>=3.10'
+- 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: 2ef08ba8d83542807f9f9833ba8f01583215c1629693bfadb1d6508cbdeb335c
+ 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/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ name: charset-normalizer
+ version: 3.4.7
+ sha256: bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: pillow
+ version: 12.2.0
+ sha256: 71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65
+ 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/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl
+ name: charset-normalizer
+ version: 3.4.7
+ sha256: 92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f
+ requires_python: '>=3.7'
+- 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: 0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/4a/8a/4cb9367a86f2b9526727ee94e5e6a3d86f9f7d7d947927b444e5bcd56a89/easyscience-2.3.1-py3-none-any.whl
+ name: easyscience
+ version: 2.3.1
+ sha256: 51dd343ff4bcf7c36e8fada32ed3ca2bdc7e1226ae08965a2c11d9fd936e3e40
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'
+ - asteval
+ - bumps
+ - dfo-ls
+ - ipykernel
+ - ipympl
+ - ipython
+ - ipywidgets
+ - jupyterlab
+ - lmfit
+ - matplotlib
+ - numpy
+ - pixi-kernel
+ - pooch
+ - scipp
+ - uncertainties
+ - build ; extra == 'dev'
+ - copier ; extra == 'dev'
+ - docformatter ; extra == 'dev'
+ - gitpython ; extra == 'dev'
+ - interrogate ; extra == 'dev'
+ - jinja2 ; extra == 'dev'
+ - jupyterquiz ; extra == 'dev'
+ - jupytext ; extra == 'dev'
+ - mike ; extra == 'dev'
+ - mkdocs ; extra == 'dev'
+ - mkdocs-autorefs ; extra == 'dev'
+ - mkdocs-jupyter ; extra == 'dev'
+ - mkdocs-markdownextradata-plugin ; extra == 'dev'
+ - mkdocs-material ; extra == 'dev'
+ - mkdocs-plugin-inline-svg ; extra == 'dev'
+ - mkdocstrings-python ; extra == 'dev'
+ - nbmake ; extra == 'dev'
+ - nbqa ; extra == 'dev'
+ - nbstripout ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - pytest-xdist ; extra == 'dev'
+ - pyyaml ; extra == 'dev'
+ - radon ; extra == 'dev'
+ - ruff ; extra == 'dev'
+ - spdx-headers ; extra == 'dev'
+ - validate-pyproject[all] ; extra == 'dev'
+ - versioningit ; extra == 'dev'
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/a8/14/5990826f779f79148ae9d3a2c39593dc04d61d5d90541e71b5749f35af95/pandas-3.0.1-cp313-cp313-macosx_11_0_arm64.whl
- name: pandas
- version: 3.0.1
- sha256: 661e0f665932af88c7877f31da0dc743fe9c8f2524bdffe23d24fdcb67ef9d56
+- 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: 3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19
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'
+ - 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/c1/27/90683c7122febeefe84a56f2cde86a9f05f68d53885cebcc473298dfc33e/pandas-3.0.1-cp311-cp311-macosx_11_0_arm64.whl
- name: pandas
- version: 3.0.1
- sha256: 24ba315ba3d6e5806063ac6eb717504e499ce30bd8c236d8693a5fd3f084c796
+- pypi: https://files.pythonhosted.org/packages/4c/65/b4b86e5fa07543bfbbcdc6c9f7f9f561e66a5f3539992e3009973f2b1314/jupytext-1.19.2-py3-none-any.whl
+ name: jupytext
+ version: 1.19.2
+ sha256: 8a31e896c7e9215841783aade24336e945543057e1c2d7f00b22f9e870348688
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/d6/7d/216a1588b65a7aa5f4535570418a599d943c85afb1d95b0876fc00aa1468/pandas-3.0.1-cp313-cp313-win_amd64.whl
+ - markdown-it-py>=1.0
+ - mdit-py-plugins
+ - nbformat
+ - packaging
+ - pyyaml
+ - tomli ; python_full_version < '3.11'
+ - autopep8 ; extra == 'dev'
+ - black ; extra == 'dev'
+ - flake8 ; extra == 'dev'
+ - gitpython ; extra == 'dev'
+ - ipykernel ; extra == 'dev'
+ - isort ; extra == 'dev'
+ - jupyter-fs[fs]>=1.0 ; extra == 'dev'
+ - jupyter-server!=2.11 ; extra == 'dev'
+ - marimo>=0.17.6,<=0.19.4 ; extra == 'dev'
+ - nbconvert ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-asyncio ; extra == 'dev'
+ - pytest-cov>=2.6.1 ; extra == 'dev'
+ - pytest-randomly ; extra == 'dev'
+ - pytest-xdist ; extra == 'dev'
+ - sphinx ; extra == 'dev'
+ - sphinx-gallery>=0.8 ; extra == 'dev'
+ - myst-parser ; extra == 'docs'
+ - sphinx ; extra == 'docs'
+ - sphinx-copybutton ; extra == 'docs'
+ - sphinx-rtd-theme ; extra == 'docs'
+ - pytest ; extra == 'test'
+ - pytest-asyncio ; extra == 'test'
+ - pytest-randomly ; extra == 'test'
+ - pytest-xdist ; extra == 'test'
+ - black ; extra == 'test-cov'
+ - ipykernel ; extra == 'test-cov'
+ - jupyter-server!=2.11 ; extra == 'test-cov'
+ - nbconvert ; extra == 'test-cov'
+ - pytest ; extra == 'test-cov'
+ - pytest-asyncio ; extra == 'test-cov'
+ - pytest-cov>=2.6.1 ; extra == 'test-cov'
+ - pytest-randomly ; extra == 'test-cov'
+ - pytest-xdist ; extra == 'test-cov'
+ - autopep8 ; extra == 'test-external'
+ - black ; extra == 'test-external'
+ - flake8 ; extra == 'test-external'
+ - gitpython ; extra == 'test-external'
+ - ipykernel ; extra == 'test-external'
+ - isort ; extra == 'test-external'
+ - jupyter-fs[fs]>=1.0 ; extra == 'test-external'
+ - jupyter-server!=2.11 ; extra == 'test-external'
+ - marimo>=0.17.6,<=0.19.4 ; extra == 'test-external'
+ - nbconvert ; extra == 'test-external'
+ - pre-commit ; extra == 'test-external'
+ - pytest ; extra == 'test-external'
+ - pytest-asyncio ; extra == 'test-external'
+ - pytest-randomly ; extra == 'test-external'
+ - pytest-xdist ; extra == 'test-external'
+ - sphinx ; extra == 'test-external'
+ - sphinx-gallery>=0.8 ; extra == 'test-external'
+ - black ; extra == 'test-functional'
+ - pytest ; extra == 'test-functional'
+ - pytest-asyncio ; extra == 'test-functional'
+ - pytest-randomly ; extra == 'test-functional'
+ - pytest-xdist ; extra == 'test-functional'
+ - black ; extra == 'test-integration'
+ - ipykernel ; extra == 'test-integration'
+ - jupyter-server!=2.11 ; extra == 'test-integration'
+ - nbconvert ; extra == 'test-integration'
+ - pytest ; extra == 'test-integration'
+ - pytest-asyncio ; extra == 'test-integration'
+ - pytest-randomly ; extra == 'test-integration'
+ - pytest-xdist ; extra == 'test-integration'
+ - bash-kernel ; extra == 'test-ui'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/51/18/325cd32ece1120d1da51cc4e4294c6580190699490183fc2fe8cb6d61ec5/matplotlib-3.10.9-cp311-cp311-macosx_11_0_arm64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: dfca0129678bd56379db26c52b5d77ed7de314c047492fbdc763aa7501710cfb
+ 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
+ requires_python: '>=3.10'
+- 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.3
+ sha256: acc46d1b8b7d5783216afe15db56d1c179b9a40e5a1558bc13164c4fd20674c4
+ requires_python: '>=3.10'
+- 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
+ sha256: 4af6069630a38ed6c561010f0e11a5bc0d4ca569b36306eb257cd9a192497c8c
+ requires_dist:
+ - wsproto
+ - tox ; extra == 'dev'
+ - flake8 ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - sphinx ; extra == 'docs'
+ requires_python: '>=3.6'
+- 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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
+ name: pluggy
+ version: 1.6.0
+ sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
+ requires_dist:
+ - pre-commit ; extra == 'dev'
+ - tox ; extra == 'dev'
+ - pytest ; extra == 'testing'
+ - pytest-benchmark ; extra == 'testing'
+ - coverage ; extra == 'testing'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl
+ name: ipywidgets
+ version: 8.1.8
+ sha256: ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e
+ requires_dist:
+ - comm>=0.1.3
+ - ipython>=6.1.0
+ - traitlets>=4.3.1
+ - widgetsnbextension~=4.0.14
+ - jupyterlab-widgets~=3.0.15
+ - jsonschema ; extra == 'test'
+ - ipykernel ; extra == 'test'
+ - pytest>=3.6.0 ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - pytz ; extra == 'test'
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
name: pandas
- version: 3.0.1
- sha256: 9fea306c783e28884c29057a1d9baa11a349bbf99538ec1da44c8476563d1b25
+ version: 3.0.3
+ sha256: 9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a
requires_dist:
- numpy>=1.26.0 ; python_full_version < '3.14'
- numpy>=2.3.3 ; python_full_version >= '3.14'
@@ -7501,7 +8014,7 @@ packages:
- pyqt5>=5.15.9 ; extra == 'clipboard'
- qtpy>=2.4.2 ; extra == 'clipboard'
- zstandard>=0.23.0 ; extra == 'compression'
- - pytz>=2024.2 ; extra == 'timezone'
+ - pytz>=2020.1 ; extra == 'timezone'
- adbc-driver-postgresql>=1.2.0 ; extra == 'all'
- adbc-driver-sqlite>=1.2.0 ; extra == 'all'
- beautifulsoup4>=4.12.3 ; extra == 'all'
@@ -7527,7 +8040,7 @@ packages:
- 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'
+ - pytz>=2020.1 ; extra == 'all'
- pyxlsb>=1.0.10 ; extra == 'all'
- qtpy>=2.4.2 ; extra == 'all'
- scipy>=1.14.1 ; extra == 'all'
@@ -7540,10 +8053,22 @@ packages:
- xlsxwriter>=3.2.0 ; extra == 'all'
- zstandard>=0.23.0 ; extra == 'all'
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/f2/85/ab6d04733a7d6ff32bfc8382bf1b07078228f5d6ebec5266b91bfc5c4ff7/pandas-3.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_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: 3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0
+ requires_python: '>=3.9'
+- 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'
+- pypi: https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl
name: pandas
- version: 3.0.1
- sha256: 1ff8cf1d2896e34343197685f432450ec99a85ba8d90cce2030c5eee2ef98791
+ version: 3.0.3
+ sha256: 4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639
requires_dist:
- numpy>=1.26.0 ; python_full_version < '3.14'
- numpy>=2.3.3 ; python_full_version >= '3.14'
@@ -7591,7 +8116,7 @@ packages:
- pyqt5>=5.15.9 ; extra == 'clipboard'
- qtpy>=2.4.2 ; extra == 'clipboard'
- zstandard>=0.23.0 ; extra == 'compression'
- - pytz>=2024.2 ; extra == 'timezone'
+ - pytz>=2020.1 ; extra == 'timezone'
- adbc-driver-postgresql>=1.2.0 ; extra == 'all'
- adbc-driver-sqlite>=1.2.0 ; extra == 'all'
- beautifulsoup4>=4.12.3 ; extra == 'all'
@@ -7617,7 +8142,7 @@ packages:
- 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'
+ - pytz>=2020.1 ; extra == 'all'
- pyxlsb>=1.0.10 ; extra == 'all'
- qtpy>=2.4.2 ; extra == 'all'
- scipy>=1.14.1 ; extra == 'all'
@@ -7630,10 +8155,88 @@ packages:
- xlsxwriter>=3.2.0 ; extra == 'all'
- zstandard>=0.23.0 ; extra == 'all'
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/ff/07/c7087e003ceee9b9a82539b40414ec557aa795b584a1a346e89180853d79/pandas-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl
+- pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
+ name: mkdocs-material-extensions
+ version: 1.3.1
+ sha256: adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/5b/69/93b34728cc386efdde0c342f8c680b9187dea7beb7adaf6b58a0713be101/mpld3-0.5.12-py3-none-any.whl
+ name: mpld3
+ version: 0.5.12
+ sha256: bea31799a4041029a906f53f2662bbf1c49903e0c0bc712b412354158ec7cf54
+ requires_dist:
+ - jinja2
+ - matplotlib
+- pypi: https://files.pythonhosted.org/packages/5d/a6/e9b8f8a3e99602792b01fa7d0a731737615ab56d8bfd0b52935a0ef88b85/chardet-7.4.3-cp311-cp311-win_amd64.whl
+ name: chardet
+ version: 7.4.3
+ sha256: ccc1f83ab4bcfb901cf39e0c4ba6bc6e726fc6264735f10e24ceb5cb47387578
+ requires_python: '>=3.10'
+- 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
+ name: contourpy
+ version: 1.3.3
+ sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db
+ 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/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/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: 81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl
+ name: propcache
+ version: 0.5.2
+ sha256: 97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl
name: pandas
- version: 3.0.1
- sha256: de09668c1bf3b925c07e5762291602f0d789eca1b3a781f99c1c78f6cac0e7ea
+ version: 3.0.3
+ sha256: bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f
requires_dist:
- numpy>=1.26.0 ; python_full_version < '3.14'
- numpy>=2.3.3 ; python_full_version >= '3.14'
@@ -7681,7 +8284,7 @@ packages:
- pyqt5>=5.15.9 ; extra == 'clipboard'
- qtpy>=2.4.2 ; extra == 'clipboard'
- zstandard>=0.23.0 ; extra == 'compression'
- - pytz>=2024.2 ; extra == 'timezone'
+ - pytz>=2020.1 ; extra == 'timezone'
- adbc-driver-postgresql>=1.2.0 ; extra == 'all'
- adbc-driver-sqlite>=1.2.0 ; extra == 'all'
- beautifulsoup4>=4.12.3 ; extra == 'all'
@@ -7707,7 +8310,7 @@ packages:
- 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'
+ - pytz>=2020.1 ; extra == 'all'
- pyxlsb>=1.0.10 ; extra == 'all'
- qtpy>=2.4.2 ; extra == 'all'
- scipy>=1.14.1 ; extra == 'all'
@@ -7715,240 +8318,15 @@ packages:
- 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/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'
-- pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
- name: pathspec
- version: 1.0.4
- sha256: fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723
- requires_dist:
- - hyperscan>=0.7 ; extra == 'hyperscan'
- - typing-extensions>=4 ; extra == 'optional'
- - google-re2>=1.1 ; extra == 're2'
- - 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/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: pillow
- version: 12.1.1
- sha256: 6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60
- 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/2b/46/5da1ec4a5171ee7bf1a0efa064aba70ba3d6e0788ce3f5acd1375d23c8c0/pillow-12.1.1-cp311-cp311-macosx_10_10_x86_64.whl
- name: pillow
- version: 12.1.1
- sha256: e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32
- 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/31/03/bef822e4f2d8f9d7448c133d0a18185d3cce3e70472774fffefe8b0ed562/pillow-12.1.1-cp311-cp311-win_amd64.whl
- name: pillow
- version: 12.1.1
- sha256: fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563
- 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/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-win_amd64.whl
- name: pillow
- version: 12.1.1
- sha256: 344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1
- 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/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: pillow
- version: 12.1.1
- sha256: 47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717
- 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/78/93/a29e9bc02d1cf557a834da780ceccd54e02421627200696fcf805ebdc3fb/pillow-12.1.1-cp311-cp311-macosx_11_0_arm64.whl
- name: pillow
- version: 12.1.1
- sha256: 365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38
- 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/a2/c8/46dfeac5825e600579157eea177be43e2f7ff4a99da9d0d0a49533509ac5/pillow-12.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+ - 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/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl
name: pillow
- version: 12.1.1
- sha256: 597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b
+ version: 12.2.0
+ sha256: 6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60
requires_dist:
- furo ; extra == 'docs'
- olefile ; extra == 'docs'
@@ -7977,132 +8355,335 @@ packages:
- trove-classifiers>=2024.10.12 ; extra == 'tests'
- defusedxml ; extra == 'xmp'
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl
- name: pillow
- version: 12.1.1
- sha256: 8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2
+- 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: 8c1eff849cdd53cbc73c214c30ebdb6f1bb8b64790b4b4fc36acdb5e43570210
+ requires_dist:
+ - numpy>=1.21.2
+ requires_python: '>=3.10'
+- 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: 1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e
+ 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/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl
+ name: scipy
+ version: 1.17.1
+ sha256: a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee
+ 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/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
+ name: mkdocstrings
+ version: 1.0.4
+ sha256: 63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b
+ requires_dist:
+ - jinja2>=3.1
+ - markdown>=3.6
+ - markupsafe>=1.1
+ - mkdocs>=1.6
+ - mkdocs-autorefs>=1.4
+ - pymdown-extensions>=6.3
+ - mkdocstrings-crystal>=0.3.4 ; extra == 'crystal'
+ - mkdocstrings-python-legacy>=0.2.1 ; extra == 'python-legacy'
+ - mkdocstrings-python>=1.16.2 ; extra == 'python'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: frozenlist
+ version: 1.8.0
+ sha256: fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93
+ requires_python: '>=3.9'
+- 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: 9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b
+ requires_python: '>=3.9'
+- 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
+ sha256: e1082f5564917649c76fed239117820610516ec10f87735d0338688800a55b34
+ requires_dist:
+ - jinja2
+ - pyyaml
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+- pypi: https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl
+ name: mike
+ version: 2.2.0
+ sha256: e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040
+ requires_dist:
+ - jinja2>=2.7
+ - mkdocs~=1.0
+ - pyparsing>=3.0
+ - pyyaml>=5.1
+ - pyyaml-env-tag
+ - verspec
+ - importlib-metadata ; python_full_version < '3.10'
+ - importlib-resources ; python_full_version < '3.10'
+ - coverage ; extra == 'dev'
+ - flake8-quotes ; extra == 'dev'
+ - flake8>=3.0 ; extra == 'dev'
+ - shtab ; extra == 'dev'
+ - coverage ; extra == 'test'
+ - flake8-quotes ; extra == 'test'
+ - flake8>=3.0 ; extra == 'test'
+ - shtab ; extra == 'test'
+- 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/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
+ name: annotated-types
+ version: 0.7.0
+ sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+ requires_dist:
+ - typing-extensions>=4.0.0 ; python_full_version < '3.9'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl
+ name: plumbum
+ version: 1.10.0
+ sha256: 9583d737ac901c474d99d030e4d5eec4c4e6d2d7417b1cf49728cf3be34f6dc8
+ requires_dist:
+ - pywin32 ; platform_python_implementation != 'PyPy' and sys_platform == 'win32'
+ - paramiko ; extra == 'ssh'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/79/db/e28c1b83e3680740aa78925f5fb2ae4d16207207419ad75ea9fe604f8676/matplotlib-3.10.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: 8e436d155fa8a3399dc62683f8f5d0e2e50d25d0144a73edd73f82eec8f4abfb
+ 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/7b/67/b1944235474aac3f0b0e1b232ce49547f9f9461ca4b943df1b88da5d3f1d/bumps-1.0.4-py3-none-any.whl
+ name: bumps
+ version: 1.0.4
+ sha256: 78b8cfaf9fbcbf2fd77f6d4a2f8c906b0e03a794804ba6caf64d56d6f6cce4d4
+ requires_dist:
+ - numpy
+ - scipy
+ - h5py
+ - dill
+ - cloudpickle
+ - matplotlib
+ - blinker
+ - aiohttp
+ - python-socketio
+ - plotly
+ - mpld3
+ - msgpack
+ - uncertainties
+ - build ; extra == 'dev'
+ - pre-commit ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - ruff ; extra == 'dev'
+ - wheel ; extra == 'dev'
+ - setuptools ; extra == 'dev'
+ - sphinx ; extra == 'dev'
+ - versioningit ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/7b/e3/d81b065a2d866a33a541ac63a2a4cc5737e03ce2379ac3191c98bb8867e3/trove_classifiers-2026.5.7.17-py3-none-any.whl
+ name: trove-classifiers
+ version: 2026.5.7.17
+ sha256: 5ec0800de5e2ddbd7c663cb4c0c15328f132dc168813897c18866c5c7b93db33
+- 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: cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd
requires_dist:
+ - numpy>=1.25
- furo ; extra == 'docs'
- - olefile ; extra == 'docs'
- - sphinx>=8.2 ; extra == 'docs'
- - sphinx-autobuild ; extra == 'docs'
+ - sphinx>=7.2 ; 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/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl
- name: platformdirs
- version: 4.9.2
- sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd
+ - 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/7e/0d/271aace3342157c64700c9ff4c59c7b392f3dbab393692e8db6fbe7ab96c/matplotlib-3.10.9-cp311-cp311-win_amd64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: d730e984eddf56974c3e72b6129c7ca462ac38dc624338f4b0b23eb23ecba00f
+ 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
requires_python: '>=3.10'
-- 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
+- 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
+ name: aiohttp
+ version: 3.13.5
+ sha256: 3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc
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'
+ - 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/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
+ name: httpcore
+ version: 1.0.9
+ sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55
+ requires_dist:
+ - 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/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
- name: pluggy
- version: 1.6.0
- sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
+- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl
+ name: urllib3
+ version: 2.7.0
+ sha256: 9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897
requires_dist:
- - pre-commit ; extra == 'dev'
- - tox ; extra == 'dev'
- - pytest ; extra == 'testing'
- - pytest-benchmark ; extra == 'testing'
- - coverage ; extra == 'testing'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl
- name: plumbum
- version: 1.10.0
- sha256: 9583d737ac901c474d99d030e4d5eec4c4e6d2d7417b1cf49728cf3be34f6dc8
+ - 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.10'
+- pypi: https://files.pythonhosted.org/packages/7f/8d/46692d24b3f395d4cbf17bfcc57136b4f2f9c0c0df864b0bddfc1d71a014/coverage-7.14.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: a1816c505187592dcd1c5a5f226601a549f70365fbd00930ac88b0c225b76bb4
requires_dist:
- - pywin32 ; platform_python_implementation != 'PyPy' and sys_platform == 'win32'
- - paramiko ; extra == 'ssh'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl
- name: pooch
- version: 1.9.0
- sha256: f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
+ 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
+ name: kiwisolver
+ version: 1.5.0
+ sha256: 2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ name: pydantic-core
+ version: 2.46.4
+ sha256: f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4
requires_dist:
- - platformdirs>=2.5.0
- - packaging>=20.0
- - requests>=2.19.0
- - tqdm>=4.41.0,<5.0.0 ; extra == 'progress'
- - paramiko>=2.7.0 ; extra == 'sftp'
- - xxhash>=1.4.3 ; extra == 'xxhash'
- - pytest-httpserver ; extra == 'test'
- - pytest-localftpserver ; extra == 'test'
+ - typing-extensions>=4.14.1
requires_python: '>=3.9'
-- 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/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl
name: pre-commit
- version: 4.5.1
- sha256: 3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77
+ version: 4.6.0
+ sha256: e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b
requires_dist:
- cfgv>=2.0.0
- identify>=1.0.0
@@ -8110,384 +8691,453 @@ 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:
- - wcwidth
- requires_python: '>=3.8'
-- 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
- name: propcache
- version: 0.4.1
- sha256: fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
- name: propcache
- version: 0.4.1
- sha256: cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl
- name: propcache
- version: 0.4.1
- sha256: d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311
- 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
- name: propcache
- version: 0.4.1
- sha256: 6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: propcache
- version: 0.4.1
- sha256: d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl
- name: propcache
- version: 0.4.1
- sha256: 364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl
- name: propcache
- version: 0.4.1
- sha256: 381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e
+- pypi: https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl
+ name: filelock
+ version: 3.29.0
+ sha256: 96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/83/04/28a41024ccbd67467380b6fb440ae916c1e4f25e2cd4c63abe6835ac566e/msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl
+ name: msgpack
+ version: 1.1.2
+ sha256: 283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0
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
+- 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:
- - 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
+ - nbformat
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl
+ name: pydoclint
+ version: 0.8.3
+ sha256: 5fc9b82d0d515afce0908cb70e8ff695a68b19042785c248c4f227ad66b4a164
+ requires_dist:
+ - click>=8.1.0
+ - docstring-parser-fork>=0.0.12
+ - tomli>=2.0.1 ; python_full_version < '3.11'
+ - flake8>=4 ; extra == 'flake8'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/87/ec/e38ce072e724fd7add6243613f8d1810da084f54175353d25ccf9f9c7e5a/aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl
+ name: aiohttp
+ version: 3.13.5
+ sha256: e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c
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
+ - 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/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl
+ name: mkdocs-get-deps
+ version: 0.2.2
+ sha256: e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650
requires_dist:
- - pytest ; extra == 'tests'
-- pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl
- name: py
- version: 1.11.0
- sha256: 607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
- requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'
-- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl
- name: pycodestyle
- version: 2.14.0
- sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d
+ - importlib-metadata>=4.3 ; python_full_version < '3.10'
+ - mergedeep>=1.3.4
+ - platformdirs>=2.2.0
+ - pyyaml>=5.1
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
+- pypi: https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl
+ name: fonttools
+ version: 4.62.1
+ sha256: 40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7
+ 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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
- name: pydantic
- version: 2.12.5
- sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d
- requires_dist:
- - annotated-types>=0.6.0
- - 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/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl
+- 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/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
+ name: nodeenv
+ version: 1.10.0
+ sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*'
+- pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
name: pydantic-core
- version: 2.41.5
- sha256: 76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe
+ version: 2.46.4
+ sha256: 7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b
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
- name: pydantic-core
- version: 2.41.5
- sha256: 7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b
+- 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/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl
+ name: uncertainties
+ version: 3.2.3
+ sha256: 313353900d8f88b283c9bad81e7d2b2d3d4bcc330cbace35403faaed7e78890a
requires_dist:
- - typing-extensions>=4.14.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl
- name: pydantic-core
- version: 2.41.5
- sha256: 941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9
+ - numpy ; extra == 'arrays'
+ - pytest ; extra == 'test'
+ - pytest-codspeed ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - scipy ; extra == 'test'
+ - sphinx ; extra == 'doc'
+ - sphinx-copybutton ; extra == 'doc'
+ - python-docs-theme ; extra == 'doc'
+ - uncertainties[arrays,doc,test] ; extra == 'all'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
+ name: paginate
+ version: 0.5.7
+ sha256: b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591
requires_dist:
- - typing-extensions>=4.14.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl
- name: pydantic-core
- version: 2.41.5
- sha256: 112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34
+ - pytest ; extra == 'dev'
+ - tox ; extra == 'dev'
+ - black ; extra == 'lint'
+- 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:
- - typing-extensions>=4.14.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl
- name: pydantic-core
- version: 2.41.5
- sha256: 79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11
+ - 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/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl
+ name: numpy
+ version: 2.4.4
+ sha256: 2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a
+ requires_python: '>=3.11'
+- pypi: https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl
+ name: yarl
+ version: 1.23.0
+ sha256: bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46
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
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl
+ name: radon
+ version: 6.0.1
+ sha256: 632cc032364a6f8bb1010a2f6a12d0f14bc7e5ede76585ef29dc0cecf4cd8859
requires_dist:
- - typing-extensions>=4.14.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- name: pydantic-core
- version: 2.41.5
- sha256: 406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586
+ - mando>=0.6,<0.8
+ - colorama==0.4.1 ; python_full_version < '3.5'
+ - colorama>=0.4.1 ; python_full_version >= '3.5'
+ - tomli>=2.0.1 ; extra == 'toml'
+- pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
+ name: identify
+ version: 2.6.19
+ sha256: 20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a
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
+ - ukkonen ; extra == 'license'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl
+ name: scipy
+ version: 1.17.1
+ sha256: d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff
requires_dist:
- - typing-extensions>=4.14.1
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl
- name: pygments
- version: 2.19.2
- sha256: 86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
+ - 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/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl
+ name: charset-normalizer
+ version: 3.4.7
+ sha256: c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl
+ name: contourpy
+ version: 1.3.3
+ sha256: 3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42
+ 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/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: 27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d
+ requires_python: '>=3.11'
+- pypi: https://files.pythonhosted.org/packages/98/ba/fc20faf5b2bb04615fa906f8daecfe896e6f7a56b34debd93c4a4d63e6e5/copier-9.15.0-py3-none-any.whl
+ name: copier
+ version: 9.15.0
+ sha256: 0f59c2ea36df42f3ded85c091c3f1e2c8d3814b537504f0abc8c2e508f7e013d
+ 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/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl
+ name: asteval
+ version: 1.0.8
+ sha256: 6c64385c6ff859a474953c124987c7ee8354d781c76509b2c598741c4d1d28e9
requires_dist:
- - colorama>=0.4.6 ; extra == 'windows-terminal'
+ - build ; extra == 'dev'
+ - twine ; extra == 'dev'
+ - sphinx ; extra == 'doc'
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - coverage ; extra == 'test'
+ - asteval[dev,doc,test] ; extra == 'all'
+ requires_python: '>=3.10'
+- 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/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl
- name: pymdown-extensions
- version: '10.21'
- sha256: 91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f
+- pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl
+ name: tabulate
+ version: 0.10.0
+ sha256: f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3
requires_dist:
- - markdown>=3.6
- - pyyaml
- - pygments>=2.19.1 ; extra == 'extra'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl
- name: pyparsing
- version: 3.3.2
- sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d
+ - wcwidth ; extra == 'widechars'
+ 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
+ name: yarl
+ version: 1.23.0
+ sha256: 99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598
+ requires_dist:
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
+ requires_python: '>=3.10'
+- 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: 756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25
requires_dist:
- - railroad-diagrams ; extra == 'diagrams'
- - jinja2 ; extra == 'diagrams'
+ - 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/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl
- name: pyproject-hooks
- 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
- name: pytest
- version: 9.0.2
- sha256: 711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b
+- 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:
- - colorama>=0.4 ; sys_platform == 'win32'
- - exceptiongroup>=1 ; python_full_version < '3.11'
- - iniconfig>=1.0.1
- - packaging>=22
- - pluggy>=1.5,<2
- - pygments>=2.7.2
- - tomli>=1 ; python_full_version < '3.11'
- - argcomplete ; extra == 'dev'
- - attrs>=19.2 ; extra == 'dev'
- - hypothesis>=3.56 ; extra == 'dev'
- - mock ; extra == 'dev'
- - requests ; extra == 'dev'
- - setuptools ; extra == 'dev'
- - xmlschema ; extra == 'dev'
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl
+ - 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'
+- pypi: https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl
name: pytest-cov
- version: 7.0.0
- sha256: 3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861
+ version: 7.1.0
+ sha256: a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678
requires_dist:
- coverage[toml]>=7.10.6
- pluggy>=1.2
@@ -8496,237 +9146,90 @@ packages:
- pytest-xdist ; extra == 'testing'
- virtualenv ; extra == 'testing'
requires_python: '>=3.9'
-- 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
- sha256: 202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88
+- pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl
+ name: autopep8
+ version: 2.3.2
+ sha256: ce8ad498672c845a0c3de2629c15b635ec2b05ef8177a6e7c91c74f3e9b51128
requires_dist:
- - execnet>=2.1
- - pytest>=7.0.0
- - filelock ; extra == 'testing'
- - psutil>=3.0 ; extra == 'psutil'
- - setproctitle ; extra == 'setproctitle'
+ - pycodestyle>=2.12.0
+ - tomli ; python_full_version < '3.11'
requires_python: '>=3.9'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hd63d673_3_cpython.conda
- build_number: 3
- sha256: 41b29c2d62f7028bb7bb05eef3ff55f81e3c1cb40e76ba95a890a058fbc2a896
- md5: 26d8f4db8c578dedba9f2c11423e59e5
- depends:
- - __glibc >=2.17,<3.0.a0
- - bzip2 >=1.0.8,<2.0a0
- - ld_impl_linux-64 >=2.36.1
- - libexpat >=2.7.3,<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.4,<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: 30905206
- timestamp: 1769472446175
-- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda
- build_number: 100
- sha256: 8a08fe5b7cb5a28aa44e2994d18dbf77f443956990753a4ca8173153ffb6eb56
- md5: 4c875ed0e78c2d407ec55eadffb8cf3d
- depends:
- - __glibc >=2.17,<3.0.a0
- - bzip2 >=1.0.8,<2.0a0
- - ld_impl_linux-64 >=2.36.1
- - libexpat >=2.7.3,<3.0a0
- - libffi >=3.5.2,<3.6.0a0
- - libgcc >=14
- - liblzma >=5.8.2,<6.0a0
- - libmpdec >=4.0.0,<5.0a0
- - libsqlite >=3.51.2,<4.0a0
- - libuuid >=2.41.3,<3.0a0
- - libzlib >=1.3.1,<2.0a0
- - ncurses >=6.5,<7.0a0
- - openssl >=3.5.5,<4.0a0
- - python_abi 3.13.* *_cp313
- - readline >=8.3,<9.0a0
- - tk >=8.6.13,<8.7.0a0
- - tzdata
- license: Python-2.0
- purls: []
- size: 37364553
- timestamp: 1770272309861
- python_site_packages_path: lib/python3.13/site-packages
-- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h74c2667_3_cpython.conda
- build_number: 3
- sha256: 327d6c5eb61657d4b76e1024da9c790d3e7aacee84487403e9eef1b730982e63
- md5: df79e5958af70212260d5e163e867d98
- depends:
- - __osx >=10.13
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<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.4,<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: 15666344
- timestamp: 1769473006716
-- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda
- build_number: 100
- sha256: 9548dcf58cf6045aa4aa1f2f3fa6110115ca616a8d5fa142a24081d2b9d91291
- md5: 99b1fa1fe8a8ab58224969f4568aadca
- depends:
- - __osx >=10.13
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<3.0a0
- - libffi >=3.5.2,<3.6.0a0
- - liblzma >=5.8.2,<6.0a0
- - libmpdec >=4.0.0,<5.0a0
- - libsqlite >=3.51.2,<4.0a0
- - libzlib >=1.3.1,<2.0a0
- - ncurses >=6.5,<7.0a0
- - openssl >=3.5.5,<4.0a0
- - python_abi 3.13.* *_cp313
- - readline >=8.3,<9.0a0
- - tk >=8.6.13,<8.7.0a0
- - tzdata
- license: Python-2.0
- purls: []
- size: 17570178
- timestamp: 1770272361922
- python_site_packages_path: lib/python3.13/site-packages
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.14-h18782d2_3_cpython.conda
- build_number: 3
- sha256: f862d544a455bedfa5d77305f0a42c8e3392956e364f8f92d6ca1c844fb3fbd1
- md5: b8f6a28ffd3c97367d4e58e8793ff47c
- depends:
- - __osx >=11.0
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<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.4,<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: 13707418
- timestamp: 1769472290774
-- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda
- build_number: 100
- sha256: 9a4f16a64def0853f0a7b6a7beb40d498fd6b09bee10b90c3d6069b664156817
- md5: 179c0f5ae4f22bc3be567298ed0b17b9
- depends:
- - __osx >=11.0
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<3.0a0
- - libffi >=3.5.2,<3.6.0a0
- - liblzma >=5.8.2,<6.0a0
- - libmpdec >=4.0.0,<5.0a0
- - libsqlite >=3.51.2,<4.0a0
- - libzlib >=1.3.1,<2.0a0
- - ncurses >=6.5,<7.0a0
- - openssl >=3.5.5,<4.0a0
- - python_abi 3.13.* *_cp313
- - readline >=8.3,<9.0a0
- - tk >=8.6.13,<8.7.0a0
- - tzdata
- license: Python-2.0
- purls: []
- size: 12770674
- timestamp: 1770272314517
- python_site_packages_path: lib/python3.13/site-packages
-- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.14-h0159041_3_cpython.conda
- build_number: 3
- sha256: 5676dadd9d4fba1bce51bd7e5cf8fcf76f85b88b7baa15bd10ca00557e67f10e
- md5: 05ded1dca7befb66ec95a9ec6d34a71a
- depends:
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<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.4,<4.0a0
- - 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.11.* *_cp311
- license: Python-2.0
- purls: []
- size: 18353938
- timestamp: 1769471078924
-- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda
- build_number: 100
- sha256: da70aec20ff5a5ae18bbba9fdd1e18190b419605cafaafb3bdad8becf11ce94d
- md5: 4440c24966d0aa0c8f1e1d5006dac2d6
- depends:
- - bzip2 >=1.0.8,<2.0a0
- - libexpat >=2.7.3,<3.0a0
- - libffi >=3.5.2,<3.6.0a0
- - liblzma >=5.8.2,<6.0a0
- - libmpdec >=4.0.0,<5.0a0
- - libsqlite >=3.51.2,<4.0a0
- - libzlib >=1.3.1,<2.0a0
- - openssl >=3.5.5,<4.0a0
- - python_abi 3.13.* *_cp313
- - tk >=8.6.13,<8.7.0a0
- - tzdata
- - ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- license: Python-2.0
- purls: []
- size: 16535316
- timestamp: 1770270322707
- python_site_packages_path: Lib/site-packages
-- 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.*'
-- pypi: https://files.pythonhosted.org/packages/06/54/82a6e2ef37f0f23dccac604b9585bdcbd0698604feb64807dcb72853693e/python_discovery-1.1.0-py3-none-any.whl
- name: python-discovery
- version: 1.1.0
- sha256: a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b
+- pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl
+ name: gitdb
+ version: 4.0.12
+ sha256: 67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf
+ requires_dist:
+ - smmap>=3.0.1,<6
+ requires_python: '>=3.7'
+- 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: 4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c
+ requires_python: '>=3.9'
+- 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/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl
+ name: kiwisolver
+ version: 1.5.0
+ sha256: d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
+ name: verspec
+ version: 0.1.0
+ sha256: 741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31
+ requires_dist:
+ - coverage ; extra == 'test'
+ - flake8>=3.7 ; extra == 'test'
+ - mypy ; extra == 'test'
+ - pretend ; extra == 'test'
+ - pytest ; extra == 'test'
+- pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl
+ name: wsproto
+ version: 1.3.2
+ sha256: 61eea322cdf56e8cc904bd3ad7573359a242ba65688716b0710a5eb12beab584
requires_dist:
- - filelock>=3.15.4
- - platformdirs>=4.3.6,<5
- - furo>=2025.12.19 ; extra == 'docs'
- - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs'
- - sphinx>=9.1 ; extra == 'docs'
- - sphinxcontrib-mermaid>=2 ; extra == 'docs'
- - covdefaults>=2.3 ; extra == 'testing'
- - coverage>=7.5.4 ; extra == 'testing'
- - pytest-mock>=3.14 ; extra == 'testing'
- - pytest>=8.3.5 ; extra == 'testing'
- - setuptools>=75.1 ; extra == 'testing'
- requires_python: '>=3.8'
+ - h11>=0.16.0,<1
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl
+ name: mdit-py-plugins
+ version: 0.6.1
+ sha256: 214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d
+ requires_dist:
+ - markdown-it-py>=2.0.0,<5.0.0
+ - pre-commit ; extra == 'code-style'
+ - myst-parser ; extra == 'rtd'
+ - sphinx-book-theme ; extra == 'rtd'
+ - coverage ; extra == 'testing'
+ - pytest ; extra == 'testing'
+ - pytest-cov ; extra == 'testing'
+ - pytest-regressions ; extra == 'testing'
+ - pytest-timeout ; extra == 'testing'
+ requires_python: '>=3.10'
+- 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: cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/a8/4e/c09876f08fa9faaa5e1178f3d77b7af3f343258689bd6f3b72593b2f74e3/mkdocs_markdownextradata_plugin-0.2.6-py3-none-any.whl
+ name: mkdocs-markdownextradata-plugin
+ version: 0.2.6
+ sha256: 34dd40870781784c75809596b2d8d879da783815b075336d541de1f150c94242
+ requires_dist:
+ - mkdocs
+ - pyyaml
+ requires_python: '>=3.6'
+- 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: 63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70
+ requires_dist:
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
+ requires_python: '>=3.10'
- pypi: https://files.pythonhosted.org/packages/aa/54/0cce26da03a981f949bb8449c9778537f75f5917c172e1d2992ff25cb57d/python_engineio-4.13.1-py3-none-any.whl
name: python-engineio
version: 4.13.1
@@ -8740,845 +9243,568 @@ packages:
- sphinx ; extra == 'docs'
- furo ; extra == 'docs'
requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl
- name: python-json-logger
- version: 4.0.0
- sha256: af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2
- requires_dist:
- - typing-extensions ; python_full_version < '3.10'
- - 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'
- - backports-zoneinfo ; python_full_version < '3.9' and 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.8'
-- 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
- sha256: a3eb1702e92aa2f2b5d3ba00261b61f062cce51f1cfb6900bf3ab4d1934d2d35
- requires_dist:
- - bidict>=0.21.0
- - python-engineio>=4.11.0
- - requests>=2.21.0 ; extra == 'client'
- - websocket-client>=0.54.0 ; extra == 'client'
- - aiohttp>=3.4 ; extra == 'asyncio-client'
- - tox ; extra == 'dev'
- - sphinx ; extra == 'docs'
- - furo ; extra == 'docs'
- requires_python: '>=3.8'
-- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda
- build_number: 8
- sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7
- md5: 94305520c52a4aa3f6c2b1ff6008d9f8
- constrains:
- - python 3.13.* *_cp313
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 7002
- timestamp: 1752805902938
-- 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/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl
- name: pywin32
- version: '311'
- sha256: 718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d
-- 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/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl
- name: pywinpty
- version: 3.0.3
- sha256: 9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab
- 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/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: pyyaml
- version: 6.0.3
- sha256: 0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl
- name: pyyaml
- version: 6.0.3
- sha256: 79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl
- name: pyyaml
- version: 6.0.3
- sha256: 2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl
- name: pyyaml
- version: 6.0.3
- sha256: 8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8
- 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'
-- 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
+- pypi: https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl
+ name: ruff
+ version: 0.15.12
+ sha256: fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5
+ requires_python: '>=3.7'
+- pypi: https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl
+ name: pydantic-core
+ version: 2.46.4
+ sha256: 6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33
requires_dist:
- - pyyaml
+ - typing-extensions>=4.14.1
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
+- pypi: https://files.pythonhosted.org/packages/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl
+ name: matplotlib
+ version: 3.10.9
+ sha256: 336b9acc64d309063126edcdaca00db9373af3c476bb94388fe9c5a53ad13e6f
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
+ - 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,<10 ; extra == 'dev'
+ - setuptools>=64 ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl
+ name: execnet
+ version: 2.1.2
+ sha256: 67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec
requires_dist:
- - cffi ; implementation_name == 'pypy'
+ - hatch ; extra == 'testing'
+ - pre-commit ; extra == 'testing'
+ - pytest ; extra == 'testing'
+ - tox ; extra == 'testing'
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
+- 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'
+- pypi: https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl
+ name: pydantic-core
+ version: 2.46.4
+ sha256: 23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462
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
+ - typing-extensions>=4.14.1
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl
+ name: click
+ version: 8.3.3
+ sha256: a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
requires_dist:
- - cffi ; implementation_name == 'pypy'
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl
- name: questionary
- version: 2.1.1
- sha256: a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59
+ - colorama ; sys_platform == 'win32'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl
+ name: pydantic-core
+ version: 2.46.4
+ sha256: e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c
requires_dist:
- - prompt-toolkit>=2.0,<4.0
+ - typing-extensions>=4.14.1
requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/93/f7/d00d9b4a0313a6be3a3e0818e6375e15da6d7076f4ae47d1324e7ca986a1/radon-6.0.1-py2.py3-none-any.whl
- name: radon
- version: 6.0.1
- sha256: 632cc032364a6f8bb1010a2f6a12d0f14bc7e5ede76585ef29dc0cecf4cd8859
+- pypi: https://files.pythonhosted.org/packages/b1/10/31932775c94a86814f76b41c4a772b52abfb0e6125324f32c6da1196c297/chardet-7.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
+ name: chardet
+ version: 7.4.3
+ sha256: 4c3da294de1a681097848ab58bd3f2771a674f8039d2d87a5538b28856b815e9
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl
+ name: chardet
+ version: 7.4.3
+ sha256: b95c934b9ad59e2ba8abb9be49df70d3ad1b0d95d864b9fdb7588d4fa8bd921c
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: yarl
+ version: 1.23.0
+ sha256: dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432
requires_dist:
- - mando>=0.6,<0.8
- - colorama==0.4.1 ; python_full_version < '3.5'
- - colorama>=0.4.1 ; python_full_version >= '3.5'
- - tomli>=2.0.1 ; extra == 'toml'
-- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
- sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002
- md5: d7d95fc8287ea7bf33e0e7116d2b95ec
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- - ncurses >=6.5,<7.0a0
- license: GPL-3.0-only
- license_family: GPL
- 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
- depends:
- - __osx >=11.0
- - ncurses >=6.5,<7.0a0
- license: GPL-3.0-only
- license_family: GPL
- 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'
+ - idna>=2.0
+ - multidict>=4.0
+ - propcache>=0.2.1
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl
- name: requests
- version: 2.32.5
- sha256: 2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6
+- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
+ name: mdurl
+ version: 0.1.2
+ sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8
+ requires_python: '>=3.7'
+- 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
+ sha256: f8c4418f6c827454523fc882a30d744b585cb58ac1ae277769c3059d04fc272b
+- pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl
+ name: markdown-it-py
+ version: 4.2.0
+ sha256: 9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
requires_dist:
- - charset-normalizer>=2,<4
- - idna>=2.5,<4
- - urllib3>=1.21.1,<3
- - certifi>=2017.4.17
- - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks'
- - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3'
+ - mdurl~=0.1
+ - psutil ; extra == 'benchmarking'
+ - pytest ; extra == 'benchmarking'
+ - pytest-benchmark ; extra == 'benchmarking'
+ - commonmark~=0.9 ; extra == 'compare'
+ - markdown~=3.4 ; extra == 'compare'
+ - mistletoe~=1.0 ; extra == 'compare'
+ - mistune~=3.0 ; extra == 'compare'
+ - panflute~=2.3 ; extra == 'compare'
+ - markdown-it-pyrs ; extra == 'compare'
+ - linkify-it-py>=1,<3 ; extra == 'linkify'
+ - mdit-py-plugins>=0.5.0 ; extra == 'plugins'
+ - gprof2dot ; extra == 'profiling'
+ - mdit-py-plugins>=0.5.0 ; extra == 'rtd'
+ - myst-parser ; extra == 'rtd'
+ - pyyaml ; extra == 'rtd'
+ - sphinx ; extra == 'rtd'
+ - sphinx-copybutton ; extra == 'rtd'
+ - sphinx-design ; extra == 'rtd'
+ - sphinx-book-theme~=1.0 ; extra == 'rtd'
+ - jupyter-sphinx ; extra == 'rtd'
+ - ipykernel ; extra == 'rtd'
+ - coverage ; extra == 'testing'
+ - pytest ; extra == 'testing'
+ - pytest-cov ; extra == 'testing'
+ - pytest-regressions ; extra == 'testing'
+ - pytest-timeout ; extra == 'testing'
+ - requests ; extra == 'testing'
+ requires_python: '>=3.10'
+- 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
+ sha256: 20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2
+ requires_dist:
+ - pyyaml>=3.10 ; extra == 'watchmedo'
requires_python: '>=3.9'
-- 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
+- pypi: https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-py3-none-any.whl
+ name: python-discovery
+ version: 1.3.1
+ sha256: ed188687ebb3b82c01a17cd5ac62fc94d9f6487a7f1a0f9dfe89753fec91039c
+ requires_dist:
+ - filelock>=3.15.4
+ - platformdirs>=4.3.6,<5
+ - furo>=2025.12.19 ; extra == 'docs'
+ - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs'
+ - sphinx>=9.1 ; extra == 'docs'
+ - sphinxcontrib-mermaid>=2 ; extra == 'docs'
+ - sphinxcontrib-towncrier>=0.4 ; extra == 'docs'
+ - towncrier>=25.8 ; extra == 'docs'
+ - covdefaults>=2.3 ; extra == 'testing'
+ - coverage>=7.5.4 ; extra == 'testing'
+ - pytest-mock>=3.14 ; extra == 'testing'
+ - pytest>=8.3.5 ; extra == 'testing'
+ - setuptools>=75.1 ; extra == 'testing'
+ requires_python: '>=3.8'
+- pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl
+ name: validate-pyproject
+ version: '0.25'
+ sha256: f9d05e2686beff82f9ea954f582306b036ced3d3feb258c1110f2c2a495b1981
requires_dist:
- - 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
+ - fastjsonschema>=2.16.2,<=3
+ - packaging>=24.2 ; extra == 'all'
+ - trove-classifiers>=2021.10.20 ; extra == 'all'
+ - tomli>=1.2.1 ; python_full_version < '3.11' and extra == 'all'
+ - validate-pyproject-schema-store ; extra == 'store'
+ requires_python: '>=3.8'
+- 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/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: pillow
+ version: 12.2.0
+ sha256: 80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae
requires_dist:
- - lark>=1.2.2
- - pytest>=8.3.5 ; extra == 'testing'
- requires_python: '>=3.9'
-- 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/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/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- name: rpds-py
- version: 0.30.0
- sha256: 9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl
- name: rpds-py
- version: 0.30.0
- sha256: f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl
- name: rpds-py
- version: 0.30.0
- sha256: 806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15
- 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/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl
- name: rpds-py
- version: 0.30.0
- sha256: e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8
+ - 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/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl
- name: ruff
- version: 0.15.4
- sha256: a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl
- name: ruff
- version: 0.15.4
- sha256: 5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a33992
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl
- name: ruff
- version: 0.15.4
- sha256: 04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f
- requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- name: ruff
- version: 0.15.4
- sha256: 451a2e224151729b3b6c9ffb36aed9091b2996fe4bdbd11f47e27d8f2e8888ec
+- pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl
+ name: pyproject-hooks
+ version: 1.2.0
+ sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
requires_python: '>=3.7'
-- pypi: https://files.pythonhosted.org/packages/12/0d/3f98a936a30bff4a460b51b9f85c4d994f94249930b2d8bedeb8111a359e/scipp-25.12.0-cp311-cp311-macosx_11_0_x86_64.whl
- name: scipp
- version: 25.12.0
- sha256: 6391dc46739006e1e4eb7f2fcbcdbdd40f11a3cbae53e93b63b5ba32909bd792
- 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'
+- pypi: https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl
+ name: numpy
+ version: 2.4.4
+ sha256: 6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/18/5c/bc0ca94bff65fe0d206a369b54625f8ec7852dfd1d835174692026f34df9/scipp-25.12.0-cp313-cp313-macosx_11_0_arm64.whl
- name: scipp
- version: 25.12.0
- sha256: 0285c91b202dea9aeb18f29d73ff135208a19b2068cd30e17ee81fc435b1943c
+- 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: 241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b
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/4e/b6/ffe0bb67cec66cd450acff599bb07507bbf5ffda1a3a15dd2d8dbe7a6da7/scipp-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: scipp
- version: 25.12.0
- sha256: 9ec0200eeb660965056b27f5f05505a961d8921b78d0a92c04743d1c22ce7203
+ - 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/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl
+ name: kiwisolver
+ version: 1.5.0
+ sha256: beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/bf/3b/38ff88b347c3e346cda1d3fc1b65a7aa75d40632228d8b8a5d7b58508c24/h5py-3.16.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: h5py
+ version: 3.16.0
+ sha256: c3f0a0e136f2e95dd0b67146abb6668af4f1a69c81ef8651a2d316e8e01de447
requires_dist:
- - numpy>=2
+ - numpy>=1.21.2
+ requires_python: '>=3.10'
+- 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
+ sha256: 4c544f234ef2cc2749a3df32b70c437d77888b1099143a1ad5454452c574b9af
+ requires_dist:
+ - docstring-parser[docs] ; extra == 'dev'
+ - docstring-parser[test] ; extra == 'dev'
+ - pre-commit>=2.16.0 ; python_full_version >= '3.9' and extra == 'dev'
+ - pydoctor>=25.4.0 ; extra == 'docs'
- 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/6a/3a/ab0eb61593569d5a0d080002e4b8c0998cb1116d8710781b7225c304b880/scipp-25.12.0-cp311-cp311-macosx_11_0_arm64.whl
- name: scipp
- version: 25.12.0
- sha256: e27082f5bd3655f15479ce87be495235b9bcd9b5db654a7219261be0c6117b31
+ requires_python: '>=3.8'
+- 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:
- - 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/94/98/aa2d4b9d28969cc7f62409f9f9fc5b5a853af651255eba03e9bee8546dd9/scipp-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- name: scipp
- version: 25.12.0
- sha256: e5694bef45299c4813ee2fe863fab600c3b0f5e13e2735072dbbb5cf1804d0e0
+ - 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/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/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.3
+ sha256: 6e3bd9f936e04bae89c254262af08d9e5b98f805175ba1e29d454e6cba3107b7
+ requires_python: '>=3.10'
+- 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/c6/3d/020a6b6248c3d4a37797db068256f0b3f15b01bc481327ba888c50309aa8/mkdocs_plugin_inline_svg-0.1.0-py3-none-any.whl
+ name: mkdocs-plugin-inline-svg
+ version: 0.1.0
+ sha256: a5aab2d98a19b24019f8e650f54fc647c2f31e7d0e36fc5cf2d2161acc0ea49a
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/bd/75/6a3786de6645ac2ccd94fbf83c59cc6b929bfa3a89cb62c8cb3be4de0606/scipp-25.12.0-cp311-cp311-win_amd64.whl
- name: scipp
- version: 25.12.0
- sha256: aee5f585232e2a7a664f57bb9695164715271b74896704e7ee8a669dd7b06008
+ - mkdocs
+ requires_python: '>=3.5'
+- 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
+ sha256: d147d42e471e240f9abf8bc38351a88f555ea6a8fcfd83119bbbf93c36f75ab2
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/e5/22/75e119e0a200914f88f121cd956e1eb7f72c8ace4b63171f52ba0334d142/scipp-25.12.0-cp313-cp313-macosx_11_0_x86_64.whl
- name: scipp
- version: 25.12.0
- sha256: 27ebc37f3b7e20c9dca9cf1a0ac53c4ffaea31c02dfc8ba2b5aa008a252cbcba
+ - setuptools
+ - numpy
+ - scipy>=1.11
+ - pandas
+ - pytest ; extra == 'dev'
+ - sphinx ; extra == 'dev'
+ - sphinx-rtd-theme ; extra == 'dev'
+ - trustregion>=1.1 ; extra == 'trustregion'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl
+ name: narwhals
+ version: 2.21.0
+ sha256: 1e6617d0fca68ae1fda29e5397c4eaacd3ffc9fffe6bcd6ded0c690475e853be
+ requires_dist:
+ - cudf-cu12>=24.10.0 ; extra == 'cudf'
+ - dask[dataframe]>=2024.8 ; extra == 'dask'
+ - duckdb>=1.1 ; extra == 'duckdb'
+ - ibis-framework>=6.0.0 ; extra == 'ibis'
+ - packaging ; extra == 'ibis'
+ - pyarrow-hotfix ; extra == 'ibis'
+ - rich ; extra == 'ibis'
+ - modin ; extra == 'modin'
+ - pandas>=1.1.3 ; extra == 'pandas'
+ - polars>=0.20.4 ; extra == 'polars'
+ - 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/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl
+ name: multidict
+ version: 6.7.1
+ sha256: bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b
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/eb/d1/b3cd2733a96a36c54c36889b2cfdd0331c1e5b57fa1757485a22d0ec3142/scipp-25.12.0-cp313-cp313-win_amd64.whl
- name: scipp
- version: 25.12.0
- sha256: 015db5035749750cf026db56fe537af10f159dc3cd0f51f0ea9f4ecc3a7a5da8
+ - typing-extensions>=4.1.0 ; python_full_version < '3.11'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl
+ name: backrefs
+ version: '7.0'
+ sha256: a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475
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/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
+ - regex ; extra == 'extras'
+ requires_python: '>=3.10'
+- 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
+ sha256: 202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88
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/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl
- name: scipy
- version: 1.17.1
- sha256: 37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448
+ - execnet>=2.1
+ - pytest>=7.0.0
+ - filelock ; extra == 'testing'
+ - psutil>=3.0 ; extra == 'psutil'
+ - setproctitle ; extra == 'setproctitle'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
+ name: iniconfig
+ version: 2.3.0
+ sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12
+ 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:
- - 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/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl
- name: scipy
- version: 1.17.1
- sha256: 7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d
+ - 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/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl
+ name: pillow
+ version: 12.2.0
+ sha256: 4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150
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'
+ - 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/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+ name: numpy
+ version: 2.4.4
+ sha256: df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502
requires_python: '>=3.11'
-- pypi: https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl
- name: scipy
- version: 1.17.1
- sha256: a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee
+- pypi: https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl
+ name: watchdog
+ version: 6.0.0
+ sha256: afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c
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/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl
- name: scipy
- version: 1.17.1
- sha256: d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff
+ - pyyaml>=3.10 ; extra == 'watchmedo'
+ requires_python: '>=3.9'
+- 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/d2/f0/834e479e47e499b6478e807fb57b31cc2db696c4db30557bb6f5aea4a90b/mando-0.7.1-py2.py3-none-any.whl
+ name: mando
+ version: 0.7.1
+ sha256: 26ef1d70928b6057ee3ca12583d73c63e05c49de8972d620c278a7b206581a8a
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/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl
- name: scipy
- version: 1.17.1
- sha256: 4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b
+ - six
+ - argparse ; python_full_version < '2.7'
+ - funcsigs ; python_full_version < '3.3'
+ - rst2ansi ; extra == 'restructuredtext'
+- 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:
- - 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/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl
- name: scipy
- version: 1.17.1
- sha256: 766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd
+ - 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/d4/06/19ff1efd58b85906149ce83dfddce23252cea5bec7e0fa5f834336cfe836/scipp-26.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+ name: scipp
+ version: 26.3.1
+ sha256: ab5859a24b3150b588dd2c67e68b0c7f07c9444eae501f3b6326d6b4a34cbf10
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'
+ - 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/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
+- pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
+ name: pytest
+ version: 9.0.3
+ sha256: 2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9
+ requires_dist:
+ - colorama>=0.4 ; sys_platform == 'win32'
+ - exceptiongroup>=1 ; python_full_version < '3.11'
+ - iniconfig>=1.0.1
+ - packaging>=22
+ - pluggy>=1.5,<2
+ - pygments>=2.7.2
+ - tomli>=1 ; python_full_version < '3.11'
+ - argcomplete ; extra == 'dev'
+ - attrs>=19.2 ; extra == 'dev'
+ - hypothesis>=3.56 ; extra == 'dev'
+ - mock ; extra == 'dev'
+ - requests ; extra == 'dev'
+ - setuptools ; extra == 'dev'
+ - xmlschema ; extra == 'dev'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl
+ name: funcy
+ version: '2.0'
+ sha256: 53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0
+- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl
+ name: pycodestyle
+ version: 2.14.0
+ sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/d7/51/ec641c26e6dca1b25a7d2035ba6ecb7c884ef1a100a9e42fbe4ce4405139/coverage-7.14.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: 5ebb8f4614a3787d567e610bbfdf96a4798dd69a1afb1bd8ad228d4111fe6ff3
+ requires_dist:
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
+ requires_python: '>=3.10'
+- 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/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl
+ name: cfgv
+ version: 3.5.0
+ sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0
+ requires_python: '>=3.10'
+- 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: 581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464
+ sha256: 3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b
requires_dist:
- numpy>=1.26.4,<2.7
- pytest>=8.0.0 ; extra == 'test'
@@ -9619,305 +9845,19 @@ 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/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl
- name: setuptools
- version: 82.0.0
- sha256: 70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0
- 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'
- - platformdirs>=4.2.2 ; 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'
-- 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
- sha256: 4af6069630a38ed6c561010f0e11a5bc0d4ca569b36306eb257cd9a192497c8c
- requires_dist:
- - wsproto
- - tox ; extra == 'dev'
- - flake8 ; extra == 'dev'
- - pytest ; extra == 'dev'
- - 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.*'
-- pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl
- name: smmap
- version: 5.0.2
- sha256: b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e
- 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'
-- 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
- sha256: 73bcb1ed087824b55ccaa497d03d8f0f0b0eaf30e5f0f7d5bbd29d2c4fe78fcf
- requires_dist:
- - chardet>=5.2.0
- - requests>=2.32.3
- - black>=23.0.0 ; extra == 'dev'
- - build>=0.10.0 ; extra == 'dev'
- - hatch>=1.9.0 ; extra == 'dev'
- - isort>=5.12.0 ; extra == 'dev'
- - mypy>=1.0.0 ; extra == 'dev'
- - pre-commit>=4.3.0 ; extra == 'dev'
- - pytest-cov>=4.0.0 ; extra == 'dev'
- - pytest>=7.0.0 ; extra == 'dev'
- - ruff>=0.5.0 ; extra == 'dev'
- - twine>=4.0.0 ; extra == 'dev'
- - types-requests>=2.31.0.6 ; extra == 'dev'
- - pytest-cov>=4.0.0 ; extra == 'test'
- - 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'
-- pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl
- name: tabulate
- version: 0.9.0
- sha256: 024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
- requires_dist:
- - wcwidth ; extra == 'widechars'
- requires_python: '>=3.7'
-- 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
+- pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
+ name: watchdog
+ version: 6.0.0
+ sha256: 9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282
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/linux-64/tk-8.6.13-noxft_h366c992_103.conda
- sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac
- md5: cffd3bdd58090148f4cfcd831f4b26ab
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- - libzlib >=1.3.1,<2.0a0
- constrains:
- - xorg-libx11 >=1.8.12,<2.0a0
- license: TCL
- license_family: BSD
- 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
- depends:
- - __osx >=11.0
- - libzlib >=1.3.1,<2.0a0
- license: TCL
- license_family: BSD
- purls: []
- size: 3127137
- timestamp: 1769460817696
-- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda
- sha256: 0e79810fae28f3b69fe7391b0d43f5474d6bd91d451d5f2bde02f55ae481d5e3
- md5: 0481bfd9814bf525bd4b3ee4b51494c4
- depends:
- - ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- license: TCL
- license_family: BSD
- purls: []
- size: 3526350
- timestamp: 1769460339384
-- pypi: https://files.pythonhosted.org/packages/33/f0/3fe8c6e69135a845f4106f2ff8b6805638d4e85c264e70114e8126689587/tokenize_rt-6.2.0-py2.py3-none-any.whl
- name: tokenize-rt
- version: 6.2.0
- sha256: a152bf4f249c847a66497a4a95f63376ed68ac6abf092a2f7cfb29d044ecff44
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl
- name: tomli
- version: 2.4.0
- sha256: d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
- name: tomli
- version: 2.4.0
- sha256: 9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: tomli
- version: 2.4.0
- sha256: 84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl
- name: tomli
- version: 2.4.0
- sha256: 3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl
- name: tomli
- version: 2.4.0
- sha256: b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
- name: tomli
- version: 2.4.0
- sha256: 5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: tomli
- version: 2.4.0
- sha256: 1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: tomli
- version: 2.4.0
- sha256: 5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76
- requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- name: tornado
- version: 6.5.4
- sha256: e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl
- name: tornado
- version: 6.5.4
- sha256: d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-cp39-abi3-win_amd64.whl
- name: tornado
- version: 6.5.4
- sha256: fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-cp39-abi3-macosx_10_9_x86_64.whl
- name: tornado
- version: 6.5.4
- sha256: 2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843
+ - pyyaml>=3.10 ; extra == 'watchmedo'
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
+- pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl
+ name: watchdog
+ version: 6.0.0
+ sha256: cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680
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'
-- 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
+ - pyyaml>=3.10 ; extra == 'watchmedo'
requires_python: '>=3.9'
- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
name: typing-inspection
@@ -9926,371 +9866,441 @@ 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
- name: tzdata
- version: '2025.3'
- sha256: 06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1
- requires_python: '>=2'
-- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
- sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c
- md5: ad659d0a2b3e47e38d829aa8cad2d610
- license: LicenseRef-Public-Domain
- purls: []
- size: 119135
- timestamp: 1767016325805
-- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
- sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5
- md5: 71b24316859acd00bdb8b38f5e2ce328
- constrains:
- - vc14_runtime >=14.29.30037
- - vs2015_runtime >=14.29.30037
- license: LicenseRef-MicrosoftWindowsSDK10
- purls: []
- size: 694692
- timestamp: 1756385147981
-- pypi: https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl
- name: uncertainties
- version: 3.2.3
- sha256: 313353900d8f88b283c9bad81e7d2b2d3d4bcc330cbace35403faaed7e78890a
+- pypi: https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl
+ name: multidict
+ version: 6.7.1
+ sha256: f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855
+ requires_dist:
+ - typing-extensions>=4.1.0 ; python_full_version < '3.11'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl
+ name: markdown
+ version: 3.10.2
+ sha256: e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36
+ requires_dist:
+ - coverage ; extra == 'testing'
+ - pyyaml ; extra == 'testing'
+ - mkdocs>=1.6 ; extra == 'docs'
+ - mkdocs-nature>=0.6 ; extra == 'docs'
+ - mdx-gh-links>=0.2 ; extra == 'docs'
+ - mkdocstrings[python]>=0.28.3 ; extra == 'docs'
+ - mkdocs-gen-files ; extra == 'docs'
+ - mkdocs-section-index ; extra == 'docs'
+ - mkdocs-literate-nav ; extra == 'docs'
+ requires_python: '>=3.10'
+- 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:
- - numpy ; extra == 'arrays'
- - pytest ; extra == 'test'
- - pytest-codspeed ; extra == 'test'
+ - 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'
- - scipy ; extra == 'test'
- - sphinx ; extra == 'doc'
- - sphinx-copybutton ; extra == 'doc'
- - python-docs-theme ; extra == 'doc'
- - uncertainties[arrays,doc,test] ; extra == 'all'
+ - 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'
-- 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
- 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
+- 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: 5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f
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'
+ - typing-extensions>=4.1.0 ; python_full_version < '3.11'
requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/b7/ee/e9c95cda829131f71a8dff5ce0406059fd16e591c074414e31ada19ba7c3/validate_pyproject-0.25-py3-none-any.whl
- name: validate-pyproject
- version: '0.25'
- sha256: f9d05e2686beff82f9ea954f582306b036ced3d3feb258c1110f2c2a495b1981
+- 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:
- - fastjsonschema>=2.16.2,<=3
- - packaging>=24.2 ; extra == 'all'
- - trove-classifiers>=2021.10.20 ; extra == 'all'
- - tomli>=1.2.1 ; python_full_version < '3.11' and extra == 'all'
- - validate-pyproject-schema-store ; extra == 'store'
- requires_python: '>=3.8'
-- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda
- sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a
- md5: 1e610f2416b6acdd231c5f573d754a0f
- depends:
- - vc14_runtime >=14.44.35208
- track_features:
- - vc14
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 19356
- timestamp: 1767320221521
-- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda
- sha256: 02732f953292cce179de9b633e74928037fa3741eb5ef91c3f8bae4f761d32a5
- md5: 37eb311485d2d8b2c419449582046a42
- depends:
- - ucrt >=10.0.20348.0
- - vcomp14 14.44.35208 h818238b_34
- constrains:
- - vs2015_runtime 14.44.35208.* *_34
- license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
- license_family: Proprietary
- purls: []
- size: 683233
- timestamp: 1767320219644
-- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda
- sha256: 878d5d10318b119bd98ed3ed874bd467acbe21996e1d81597a1dbf8030ea0ce6
- md5: 242d9f25d2ae60c76b38a5e42858e51d
- depends:
- - ucrt >=10.0.20348.0
- constrains:
- - vs2015_runtime 14.44.35208.* *_34
- license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
- license_family: Proprietary
- purls: []
- size: 115235
- timestamp: 1767320173250
-- pypi: https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl
- name: versioningit
- version: 3.3.0
- sha256: 23b1db3c4756cded9bd6b0ddec6643c261e3d0c471707da3e0b230b81ce53e4b
+ - typing-extensions>=4.0.0 ; python_full_version < '3.11'
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/e6/0d/8882a4c7a5ebe59a46b709e82411d9c730d67250d41a2e11bc4bcd4d431d/scipp-26.3.1-cp311-cp311-win_amd64.whl
+ name: scipp
+ version: 26.3.1
+ sha256: 37877cf07b4f54f224d5465c265d6a1e591d605d0c23dd350a4b48d95c26ab7b
requires_dist:
- - importlib-metadata>=3.6 ; python_full_version < '3.10'
- - packaging>=17.1
- - tomli>=1.2,<3.0 ; python_full_version < '3.11'
+ - 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/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
+ name: cycler
+ version: 0.12.1
+ sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30
+ requires_dist:
+ - ipython ; extra == 'docs'
+ - matplotlib ; extra == 'docs'
+ - numpydoc ; extra == 'docs'
+ - sphinx ; extra == 'docs'
+ - pytest ; extra == 'tests'
+ - pytest-cov ; extra == 'tests'
+ - pytest-xdist ; extra == 'tests'
requires_python: '>=3.8'
-- pypi: https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl
- name: verspec
- version: 0.1.0
- sha256: 741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31
+- 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: 80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac
+ requires_python: '>=3.10'
+- pypi: https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ name: ruff
+ version: 0.15.12
+ sha256: 83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0
+ requires_python: '>=3.7'
+- 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:
- - coverage ; extra == 'test'
- - flake8>=3.7 ; extra == 'test'
- - mypy ; extra == 'test'
- - pretend ; extra == 'test'
- - pytest ; extra == 'test'
-- pypi: https://files.pythonhosted.org/packages/78/55/896b06bf93a49bec0f4ae2a6f1ed12bd05c8860744ac3a70eda041064e4d/virtualenv-21.1.0-py3-none-any.whl
- name: virtualenv
- version: 21.1.0
- sha256: 164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07
+ - 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/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl
+ name: pandas
+ version: 3.0.3
+ sha256: 6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea
+ 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>=2020.1 ; 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>=2020.1 ; 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/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl
+ name: nbmake
+ version: 1.5.5
+ sha256: c6fbe6e48b60cacac14af40b38bf338a3b88f47f085c54ac5b8639ff0babaf4b
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/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl
- name: watchdog
- version: 6.0.0
- sha256: ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2
+ - ipykernel>=5.4.0
+ - nbclient>=0.6.6
+ - nbformat>=5.0.4
+ - pygments>=2.7.3
+ - pytest>=6.1.0
+ requires_python: '>=3.8.0'
+- pypi: https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl
+ name: requests
+ version: 2.34.0
+ sha256: 917520a21b767485ce7c588f4ebb917c436b24a31231b44228715eaeb5a52c60
requires_dist:
- - pyyaml>=3.10 ; extra == 'watchmedo'
- requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: watchdog
- version: 6.0.0
- sha256: 76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134
+ - 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/f0/f0/a71ddbd874431e7a7cd96071f0c331cfbbad07704833c765d24ffbab8a67/coverage-7.14.0-cp311-cp311-win_amd64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: bfb0ed8ec5d25e93face268115d7964db9df8b9aae8edcde9ec6b16c726a7cc1
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
- sha256: 20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
+ requires_python: '>=3.10'
+- 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: e4360f15875a532bc7b98196c7592ed4fc92672a57c0a621355961cafb17a6dd
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
- name: watchdog
- version: 6.0.0
- sha256: afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c
+ - numpy>=1.21.2
+ requires_python: '>=3.10'
+- 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: 0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1
requires_dist:
- - pyyaml>=3.10 ; extra == 'watchmedo'
+ - typing-extensions>=4.1.0 ; python_full_version < '3.11'
requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl
- name: watchdog
- version: 6.0.0
- sha256: cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680
+- pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
+ name: pathspec
+ version: 1.1.1
+ sha256: a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189
requires_dist:
- - pyyaml>=3.10 ; extra == 'watchmedo'
+ - hyperscan>=0.7 ; extra == 'hyperscan'
+ - typing-extensions>=4 ; extra == 'optional'
+ - google-re2>=1.1 ; extra == 're2'
requires_python: '>=3.9'
-- pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl
- name: watchdog
- version: 6.0.0
- sha256: a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b
+- pypi: https://files.pythonhosted.org/packages/f3/9b/4165a1d56ddc302a0e2d518fd9d412a4fd0b57562618c78c5f21c57194f5/coverage-7.14.0-cp314-cp314-macosx_11_0_arm64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: ba3b8390db29296dbbf49e91b6fe08f990743a90c8f447ba4c2ffc29670dfa63
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
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
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'
-- 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
+- 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/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl
- name: wsproto
- version: 1.3.2
- sha256: 61eea322cdf56e8cc904bd3ad7573359a242ba65688716b0710a5eb12beab584
+- pypi: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl
+ name: py
+ version: 1.11.0
+ sha256: 607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
+ requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'
+- pypi: https://files.pythonhosted.org/packages/f7/20/e6c0ff62ca2ad1a396a34f4380bafccaaf8791ff8fccf3d995a1fc12d417/h5py-3.16.0-cp311-cp311-win_amd64.whl
+ name: h5py
+ version: 3.16.0
+ sha256: 17d1f1630f92ad74494a9a7392ab25982ce2b469fc62da6074c0ce48366a2999
requires_dist:
- - h11>=0.16.0,<1
+ - numpy>=1.21.2
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
+- 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
+ sha256: 5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638
requires_dist:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- name: yarl
- version: 1.23.0
- sha256: 34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4
+ - markdown>=3.6
+ - pyyaml
+ - pygments>=2.19.1 ; extra == 'extra'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
+ name: ghp-import
+ version: 2.1.0
+ sha256: 8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619
requires_dist:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl
- name: yarl
- version: 1.23.0
- sha256: 4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5
+ - python-dateutil>=2.8.1
+ - twine ; extra == 'dev'
+ - markdown ; extra == 'dev'
+ - flake8 ; extra == 'dev'
+ - wheel ; extra == 'dev'
+- 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:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl
- name: yarl
- version: 1.23.0
- sha256: baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3
+ - 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'
+- pypi: https://files.pythonhosted.org/packages/f9/58/6e1b8f52fdc3184b47dc5037f5070d83a3d11042db1594b02d2a44d786c8/coverage-7.14.0-cp314-cp314-win_amd64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: 45e0f79d8351fa76e256716df91eab12890d32678b9590df7ae1042e4bd4cf5d
requires_dist:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl
- name: yarl
- version: 1.23.0
- sha256: bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46
+- 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: 715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74
+ requires_python: '>=3.11'
+- pypi: https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl
+ name: dunamai
+ version: 1.26.1
+ sha256: 2727d939c5b4257cb01ea404372803b477f5176e5a347c43beaf89cd5072e853
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
- name: yarl
- version: 1.23.0
- sha256: 99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598
+ - importlib-metadata>=1.6.0 ; python_full_version < '3.8'
+ - packaging>=20.9
+ requires_python: '>=3.5'
+- pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl
+ name: aiosignal
+ version: 1.4.0
+ sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e
requires_dist:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
- requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl
- name: yarl
- version: 1.23.0
- sha256: 7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b
+ - frozenlist>=1.1.0
+ - typing-extensions>=4.2 ; python_full_version < '3.13'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl
+ name: pydantic-core
+ version: 2.46.4
+ sha256: 811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac
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
- name: yarl
- version: 1.23.0
- sha256: dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432
+ - typing-extensions>=4.14.1
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/fd/35/202235eb5c3c14c212462cd91d61b7386bf8fc44bc7a77f4742d2a69174b/coverage-7.14.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
+ name: coverage
+ version: 7.14.0
+ sha256: 9336e23e8bb3a3925398261385e2a1533957d3e760e91070dcb0e98bfa514eed
requires_dist:
- - idna>=2.0
- - multidict>=4.0
- - propcache>=0.2.1
+ - tomli ; python_full_version <= '3.11' and extra == 'toml'
requires_python: '>=3.10'
-- pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl
- name: zipp
- version: 3.23.0
- sha256: 071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e
+- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
+ name: pydantic
+ version: 2.13.4
+ sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba
requires_dist:
- - pytest>=6,!=8.1.* ; extra == 'test'
- - jaraco-itertools ; extra == 'test'
- - jaraco-functools ; extra == 'test'
- - more-itertools ; extra == 'test'
- - big-o ; extra == 'test'
- - pytest-ignore-flaky ; extra == 'test'
- - jaraco-test ; 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'
- - pytest-checkdocs>=2.4 ; extra == 'check'
- - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check'
- - pytest-cov ; extra == 'cover'
- - pytest-enabler>=2.2 ; extra == 'enabler'
- - pytest-mypy ; extra == 'type'
+ - annotated-types>=0.6.0
+ - pydantic-core==2.46.4
+ - 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/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
+ name: contourpy
+ version: 1.3.3
+ sha256: cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77
+ 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/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: 7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709
+ 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/zstd-1.5.7-hb78ec9c_6.conda
- sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7
- md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829
- depends:
- - __glibc >=2.17,<3.0.a0
- - libzlib >=1.3.1,<2.0a0
- license: BSD-3-Clause
- license_family: BSD
- 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
- depends:
- - __osx >=11.0
- - libzlib >=1.3.1,<2.0a0
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 433413
- timestamp: 1764777166076
diff --git a/pixi.toml b/pixi.toml
index 842c0507..a3237349 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -1,27 +1,3 @@
-#######################
-# ENVIRONMENT VARIABLES
-#######################
-
-# Platform-independent
-
-[activation.env]
-PYTHONIOENCODING = "utf-8"
-
-# Platform-specific
-
-# Ensures the main package is used from the source code during
-# development, even if main package is installed in editable mode
-# via uv. This is important because `pixi update` might replace
-# the installed version with the latest released version.
-
-# Unix/macOS
-[target.unix.activation.env]
-PYTHONPATH = "${PIXI_PROJECT_ROOT}/src${PYTHONPATH:+:${PYTHONPATH}}"
-
-# Windows
-[target.win.activation.env]
-PYTHONPATH = "${PIXI_PROJECT_ROOT}/src;%PYTHONPATH%"
-
###########
# WORKSPACE
###########
@@ -29,43 +5,61 @@ 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',
+ # Set minimum supported version for glibc to be 2.35 to ensure packages
+ # like `crysfml` that only have wheels for glibc 2.35+
+ # (manylinux_2_35_x86_64) are used.
+ #libc = { family = 'glibc', version = '2.35' }
+ { platform = 'linux-64', glibc = '2.35' },
+ # Set minimum supported version for macOS to be 14.0 to ensure packages
+ # like `scipp` that only have wheels for macOS 14.0+ (macosx_14_0_arm64)
+ # are used instead of building from source. This is a workaround for
+ # Pixi, see https://github.com/prefix-dev/pixi/issues/5667
+ { platform = 'osx-arm64', macos = '14.0' },
+]
# Channels for fetching packages
-channels = ['conda-forge']
-
-#####################
-# SYSTEM REQUIREMENTS
-#####################
-
-[system-requirements]
-
-# Set minimum supported version for macOS to be 14.0 to ensure packages
-# like `skipp` that only have wheels for macOS 14.0+ (macosx_14_0_arm64)
-# are used instead of building from source. This is a workaround for
-# Pixi, see https://github.com/prefix-dev/pixi/issues/5667
-macos = '14.0'
+channels = ['nodefaults', 'conda-forge']
##########
# FEATURES
##########
-# Default feature configuration
+# Default features:
-[dependencies]
-nodejs = '*' # Required for Prettier (non-Python formatting)
-#gsl = '*' # GNU Scientific Library; required for pdffit2
-
-[pypi-dependencies] # == [feature.default.pypi-dependencies]
-#pip = '*' # Native package installer
-easyscience = { path = ".", editable = true, extras = ['dev'] }
+[activation.env]
+PYTHONIOENCODING = 'utf-8'
-# Specific features: Set specific Python versions
+# Non-default features:
+# Set specific Python versions to be used in CI testing.
[feature.py-min.dependencies]
python = '3.11.*'
+
[feature.py-max.dependencies]
-python = '3.13.*'
+python = '3.14.*'
+
+# Development dependencies for local development and testing with
+# editable installations.
+
+[feature.dev.dependencies]
+nodejs = '*' # Required for Prettier (non-Python formatting)
+pixi-kernel = '*' # Pixi Jupyter kernel
+
+[feature.dev.pypi-dependencies]
+pip = '*'
+easyscience = { path = '.', editable = true, extras = ['dev'] }
+
+# User-like behavior for testing with pip-installed dependencies instead
+# of editable installations.
+
+[feature.user.dependencies]
+pixi-kernel = '*' # Pixi Jupyter kernel
+
+[feature.user.pypi-dependencies]
+pip = '*'
+easyscience = '*'
##############
# ENVIRONMENTS
@@ -75,12 +69,18 @@ python = '3.13.*'
# The `default` feature is always included in all environments.
# Additional features can be specified per environment.
-py-311-env = { features = ['default', 'py-min'] }
-py-313-env = { features = ['default', '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'] }
+# Specific environments for CI testing with different Python versions.
+py-311-env = { features = ['py-min', 'dev'] }
+py-314-env = { features = ['py-max', 'dev'] }
+
+# The `default` environment is developer-oriented for local development
+# and testing with editable installation of the current package.
+default = { features = ['py-max', 'dev'] }
+
+# The `user` environment allows testing with pip-installed dependencies
+# instead of editable installation of the current package.
+user = { features = ['py-max', 'user'] }
#######
# TASKS
@@ -93,9 +93,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'
-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=1200 --color=yes -n auto -v'
test = { depends-on = ['unit-tests'] }
@@ -104,12 +104,12 @@ test = { depends-on = ['unit-tests'] }
###########
pyproject-check = 'python -m validate_pyproject pyproject.toml'
-docs-format-check = 'docformatter --check src/ docs/docs/tutorials/'
-notebook-format-check = 'nbqa ruff docs/docs/tutorials/'
+docstring-lint-check = 'pydoclint --quiet 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'
@@ -117,21 +117,23 @@ check = 'pre-commit run --hook-stage manual --all-files'
# 🛠️ Fixes
##########
-docs-format-fix = 'docformatter --in-place src/ docs/docs/tutorials/'
-notebook-format-fix = 'nbqa ruff --fix 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-format-fix = "ruff format 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/'
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 code auto-formatting steps have been applied."'
+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-format-fix',
- 'success-message-fix',
+ 'notebook-lint-fix',
+ 'success-message',
] }
####################
@@ -150,6 +152,7 @@ raw-metrics-json = 'radon raw -s -j src/'
#############
unit-tests-coverage = 'pixi run unit-tests --cov=src/easyscience --cov-report=term-missing'
+functional-tests-coverage = 'pixi run functional-tests --cov=src/easyscience --cov-report=term-missing'
integration-tests-coverage = 'pixi run integration-tests --cov=src/easyscience --cov-report=term-missing'
docstring-coverage = 'interrogate -c pyproject.toml src/easyscience'
@@ -165,8 +168,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',
@@ -179,13 +182,14 @@ 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-deploy-pre = 'mike deploy -F docs/mkdocs.yml --push --branch gh-pages --update-aliases --alias-type redirect'
+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-inventory-check = 'python -c "from pathlib import Path; p = Path(\"docs/site/objects.inv\"); raise SystemExit(0 if p.is_file() and p.stat().st_size > 0 else \"missing or empty docs/site/objects.inv\")"'
+
+docs-deploy-pre = 'mike deploy -F docs/mkdocs.yml --push --branch gh-pages --update-aliases --alias-type copy'
docs-set-default-pre = 'mike set-default -F docs/mkdocs.yml --push --branch gh-pages'
docs-update-assets = 'python tools/update_docs_assets.py'
@@ -194,9 +198,9 @@ docs-update-assets = 'python tools/update_docs_assets.py'
# 📦 Template Management Tasks
##############################
-copier-copy = "copier copy gh:easyscience/templates . --data-file .copier-answers.yml --data template_type=lib"
-copier-recopy = "copier recopy --data-file .copier-answers.yml --data template_type=lib"
-copier-update = "copier update --data-file .copier-answers.yml --data template_type=lib"
+copier-copy = 'copier copy gh:easyscience/templates . --data-file .copier-answers.yml --data template_type=lib'
+copier-recopy = 'copier recopy --data-file .copier-answers.yml --data template_type=lib'
+copier-update = 'copier update --data-file .copier-answers.yml --data template_type=lib'
#####################
# 🪝 Pre-commit Hooks
@@ -243,9 +247,9 @@ github-labels = 'python tools/update_github_labels.py'
# ⚖️ SPDX License Headers
#########################
-spdx-remove = 'python tools/remove_spdx.py src/ tests/'
-spdx-add = 'python tools/add_spdx.py src/ tests/'
-spdx-check = 'python tools/check_spdx.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 b403f1dd..67ddcaf8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -20,28 +20,27 @@ classifiers = [
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: 3.13',
+ 'Programming Language :: Python :: 3.14',
]
requires-python = '>=3.11'
dependencies = [
- 'asteval', # Safely evaluate Python expressions from strings
- 'lmfit', # Non-linear least squares fitting
- 'bumps', # Bayesian uncertainty estimation
- 'dfo-ls', # Derivative-free optimization
- 'uncertainties', # Propagation of uncertainties in calculations
- 'numpy', # Numerical computing
- 'scipp', # Handling and analysis of scientific data
- 'pooch', # Data downloader
- 'matplotlib', # Plotting library
- 'jupyterlab', # Jupyter notebooks
- 'pixi-kernel', # Pixi Jupyter kernel
- 'ipykernel', # Jupyter kernel (required for running notebooks)
- 'ipywidgets', # Widgets (needed for interactive matplotlib backends)
- 'ipympl', # Matplotlib Jupyter widget backend (%matplotlib widget)
- 'IPython', # Interactive Python shell
+ 'asteval', # Safely evaluate Python expressions from strings
+ 'lmfit', # Non-linear least squares fitting
+ 'bumps', # Bayesian uncertainty estimation
+ 'dfo-ls', # Derivative-free optimization
+ 'numpy', # Numerical computing
+ 'scipp', # Handling and analysis of scientific data
]
[project.optional-dependencies]
dev = [
+ 'pooch', # Data downloader
+ 'matplotlib', # Plotting library
+ 'jupyterlab', # Jupyter notebooks
+ 'ipykernel', # Jupyter kernel (required for running notebooks)
+ 'ipywidgets', # Widgets (needed for interactive matplotlib backends)
+ 'ipympl', # Matplotlib Jupyter widget backend (%matplotlib widget)
+ 'IPython', # Interactive Python shell
'GitPython', # Interact with Git repositories
'build', # Building the package
'pre-commit', # Pre-commit hooks
@@ -58,8 +57,10 @@ dev = [
'versioningit', # Automatic versioning from git tags
'jupytext', # Jupyter notebook text format support
'jupyterquiz', # Quizzes in Jupyter notebooks
- 'docformatter', # Code formatter for docstrings
- 'interrogate', # Check for missing docstrings
+ 'pydoclint', # Docstring linter
+ 'format-docstring', # Docstring formatter
+ 'docstripy', # Convert docstrings to other formats
+ 'interrogate', # Docstring coverage checker
'copier', # Template management
'mike', # MkDocs: Versioned documentation support
'mkdocs', # Static site generator
@@ -83,12 +84,6 @@ Documentation = 'https://easyscience.github.io/core'
# Build system configuration
############################
-# Build system 'hatch' -- Python project manager
-# https://hatch.pypa.io/
-
-# Versioning system 'versioningit' -- Versioning from git tags
-# https://versioningit.readthedocs.io/
-
[build-system]
build-backend = 'hatchling.build'
requires = ['hatchling', 'versioningit']
@@ -97,9 +92,11 @@ requires = ['hatchling', 'versioningit']
# Configuration for hatchling
#############################
+# 'hatch' -- Build system for Python
+# https://hatch.pypa.io/
+
[tool.hatch.build.targets.wheel]
packages = ['src/easyscience']
-exclude = ['src/easyscience/legacy']
[tool.hatch.metadata]
allow-direct-references = true
@@ -111,6 +108,9 @@ source = 'versioningit' # Use versioningit to manage the version
# Configuration for versioningit
################################
+# 'versioningit' -- Versioning from git tags
+# https://versioningit.readthedocs.io/
+
# Versioningit generates versions from git tags, so we don't need to
# either specify them statically in pyproject.toml or save them in the
# source code. Do not use {distance} in the version format, as it
@@ -134,18 +134,21 @@ default-tag = 'v999.0.0'
# Configuration for interrogate
################################
-# 'interrogate' -- Check for missing docstrings
+# 'interrogate' -- Docstring coverage checker
# https://interrogate.readthedocs.io/en/latest/
[tool.interrogate]
-fail-under = 0 # Minimum docstring coverage percentage to pass
+fail-under = 45 # Minimum docstring coverage percentage to pass
verbose = 1
-#exclude = ['src/**/__init__.py']
+exclude = ['src/easyscience/legacy']
#######################################
# Configuration for coverage/pytest-cov
#######################################
+# 'coverage' -- Code coverage measurement tool
+# https://coverage.readthedocs.io/en/latest/
+
[tool.coverage.run]
branch = true # Measure branch coverage as well
source = ['src'] # Limit coverage to the source code directory
@@ -153,12 +156,15 @@ source = ['src'] # Limit coverage to the source code directory
[tool.coverage.report]
show_missing = true # Show missing lines
skip_covered = false # Skip files with 100% coverage in the report
-fail_under = 0 # Minimum coverage percentage to pass
+fail_under = 80 # Minimum coverage percentage to pass
##########################
# Configuration for pytest
##########################
+# 'pytest' -- Testing framework
+# https://docs.pytest.org/en/stable/
+
[tool.pytest.ini_options]
addopts = '--import-mode=importlib'
markers = ['fast: mark test as fast (should be run on every push)']
@@ -172,19 +178,23 @@ testpaths = ['tests']
# https://docs.astral.sh/ruff/rules/
[tool.ruff]
-exclude = ['legacy', 'tests']
+exclude = ['tests', 'legacy', 'src/easyscience/legacy']
indent-width = 4
-line-length = 99
-preview = true # Enable new rules that are not yet stable, like DOC
+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
+builtins = [
+ 'display',
+] # Clutch-fix/patch to https://github.com/nbQA-dev/nbQA/issues/882
+# 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
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)
-# https://docs.astral.sh/ruff/rules/
+# Linting rules to use with Ruff
+
[tool.ruff.lint]
select = [
# 'E', # General PEP 8 style errors
@@ -198,46 +208,99 @@ select = [
# 'W', # General PEP 8 warnings (e.g., lines too long, trailing whitespace)
]
+# Exceptions to the linting rules
+
+# 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
+ # 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]
-'tests/**/*.py' = ['S101'] # Allow assert statements in tests
+'*/__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/
+]
+'docs/**' = [
+ 'INP001', # https://docs.astral.sh/ruff/rules/implicit-namespace-package/
+ 'T201', # https://docs.astral.sh/ruff/rules/print/
+]
+'docs/docs/tutorials/**' = [
+ 'E402', # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file/
+]
+
+# Specific options for certain rules
[tool.ruff.lint.flake8-tidy-imports]
+# Disallow all relative imports
ban-relative-imports = 'all'
[tool.ruff.lint.isort]
+# Forces all from imports to appear on their own line
force-single-line = true
[tool.ruff.lint.mccabe]
-max-complexity = 10 # default is 10
+# Cyclomatic complexity threshold (default is 10)
+max-complexity = 10
[tool.ruff.lint.pycodestyle]
# 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.
-max-doc-length = 99
+# Use 72 characters for docstrings.
+max-line-length = 99 # See also `line-length` in [tool.ruff]
+max-doc-length = 72
[tool.ruff.lint.pydocstyle]
-convention = 'google'
+convention = 'numpy'
-################################
-# Configuration for docformatter
-################################
+[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
-# 'docformatter' -- Code formatter for docstrings
-# https://docformatter.readthedocs.io/en/latest/
+#############################
+# Configuration for pydoclint
+#############################
-[tool.docformatter]
-recursive = true
-wrap-summaries = 72
-wrap-descriptions = 72
-close-quotes-on-newline = true
+# 'pydoclint' -- Docstring linter, a faster alternative to
+# 'darglint' or 'darglint2'.
+# https://pypi.org/project/pydoclint/
+
+# This is a more advanced docstring linter compared to Ruff's built-in
+# docstring check rules D or DOC. For example, among many other things,
+# it can check that arguments in the docstring, which are used by MkDocs
+# and IDEs to render parameter documentation, remain synchronized with
+# the parameter declarations in the code (in function's signature).
+
+[tool.pydoclint]
+exclude = 'src/easyscience/legacy'
+style = 'numpy'
+check-style-mismatch = true
+check-arg-defaults = true
+allow-init-docstring = true
+
+####################################
+# Configuration for format-docstring
+####################################
+
+# 'format-docstring' -- Code formatter for docstrings
+# https://github.com/jsh9/format-docstring
+
+[tool.format_docstring]
+exclude = 'src/easyscience/legacy'
+docstring_style = 'numpy'
+line_length = 72
+fix_rst_backticks = true
+verbose = 'default'
diff --git a/src/easyscience/__init__.py b/src/easyscience/__init__.py
index 167e98e0..ae709682 100644
--- a/src/easyscience/__init__.py
+++ b/src/easyscience/__init__.py
@@ -14,6 +14,7 @@
from .base_classes import ObjBase # noqa: E402
from .fitting import AvailableMinimizers # noqa: E402
from .fitting import Fitter # noqa: E402
+from .legacy import CollectionBase # noqa: E402
from .variable import DescriptorNumber # noqa: E402
from .variable import Parameter # noqa: E402
@@ -23,6 +24,7 @@
__version__,
global_object,
ObjBase,
+ CollectionBase,
AvailableMinimizers,
Fitter,
DescriptorNumber,
diff --git a/src/easyscience/base_classes/__init__.py b/src/easyscience/base_classes/__init__.py
index b5dc0418..6c465346 100644
--- a/src/easyscience/base_classes/__init__.py
+++ b/src/easyscience/base_classes/__init__.py
@@ -1,11 +1,11 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+from ..legacy.collection_base import CollectionBase
+from ..legacy.obj_base import ObjBase
from .based_base import BasedBase
-from .collection_base import CollectionBase
from .easy_list import EasyList
from .model_base import ModelBase
from .new_base import NewBase
-from .obj_base import ObjBase
__all__ = [BasedBase, CollectionBase, ObjBase, ModelBase, NewBase, EasyList]
diff --git a/src/easyscience/base_classes/based_base.py b/src/easyscience/base_classes/based_base.py
index 1e5ac567..4044fb7b 100644
--- a/src/easyscience/base_classes/based_base.py
+++ b/src/easyscience/base_classes/based_base.py
@@ -53,12 +53,17 @@ def _arg_spec(self) -> Set[str]:
]
return set(names[1:])
- def __reduce__(self):
- """Make the class picklable. Due to the nature of the dynamic
- class definitions special measures need to be taken.
+ def __reduce__(self) -> tuple:
+ """
+ Make the class picklable.
+
+ Due to the nature of the dynamic class definitions special
+ measures need to be taken.
- :return: Tuple consisting of how to make the object
- :rtype: tuple
+ Returns
+ -------
+ tuple
+ Tuple consisting of how to make the object.
"""
state = self.encode()
cls = getattr(self, '__old_class__', self.__class__)
@@ -71,10 +76,20 @@ def unique_name(self) -> str:
@unique_name.setter
def unique_name(self, new_unique_name: str):
- """Set a new unique name for the object. The old name is still
- kept in the map.
+ """
+ Set a new unique name for the object.
+
+ The old name is still kept in the map.
- :param new_unique_name: New unique name for the object
+ Parameters
+ ----------
+ new_unique_name : str
+ New unique name for the object.
+
+ Raises
+ ------
+ TypeError
+ If ``new_unique_name`` is not a string.
"""
if not isinstance(new_unique_name, str):
raise TypeError('Unique name has to be a string.')
@@ -83,18 +98,25 @@ def unique_name(self, new_unique_name: str):
@property
def name(self) -> str:
- """Get the common name of the object.
+ """
+ Get the common name of the object.
- :return: Common name of the object
+ Returns
+ -------
+ str
+ Common name of the object.
"""
return self._name
@name.setter
def name(self, new_name: str):
- """Set a new common name for the object.
+ """
+ Set a new common name for the object.
- :param new_name: New name for the object
- :return: None
+ Parameters
+ ----------
+ new_name : str
+ New name for the object.
"""
self._name = new_name
@@ -105,8 +127,9 @@ def interface(self) -> InterfaceFactoryTemplate:
@interface.setter
def interface(self, new_interface: InterfaceFactoryTemplate):
- """Set the current interface to the object and generate bindings
- if possible.
+ """
+ Set the current interface to the object and generate bindings if
+ possible.
iF.e. ``` def __init__(self, bar, interface=None, **kwargs):
super().__init__(self, **kwargs) self.foo = bar
@@ -118,9 +141,13 @@ def interface(self, new_interface: InterfaceFactoryTemplate):
self.generate_bindings()
def generate_bindings(self):
- """Generate or re-generate bindings to an interface (if exists)
+ """
+ Generate or re-generate bindings to an interface (if exists).
- :raises: AttributeError
+ Raises
+ ------
+ AttributeError
+ If ``interface`` has not been set.
"""
if self.interface is None:
raise AttributeError(
@@ -146,9 +173,13 @@ def switch_interface(self, new_interface_name: str):
self.generate_bindings()
def get_parameters(self) -> List[Parameter]:
- """Get all parameter objects as a list.
+ """
+ Get all parameter objects as a list.
- :return: List of `Parameter` objects.
+ Returns
+ -------
+ List[Parameter]
+ List of ``Parameter`` objects.
"""
par_list = []
for key, item in self._kwargs.items():
@@ -159,9 +190,13 @@ def get_parameters(self) -> List[Parameter]:
return par_list
def _get_linkable_attributes(self) -> List[DescriptorBase]:
- """Get all objects which can be linked against as a list.
+ """
+ Get all objects which can be linked against as a list.
- :return: List of `Descriptor`/`Parameter` objects.
+ Returns
+ -------
+ List[DescriptorBase]
+ List of ``Descriptor``/`Parameter` objects.
"""
item_list = []
for key, item in self._kwargs.items():
@@ -172,10 +207,14 @@ def _get_linkable_attributes(self) -> List[DescriptorBase]:
return item_list
def get_fit_parameters(self) -> List[Parameter]:
- """Get all objects which can be fitted (and are not fixed) as a
+ """
+ Get all objects which can be fitted (and are not fixed) as a
list.
- :return: List of `Parameter` objects which can be used in fitting.
+ Returns
+ -------
+ List[Parameter]
+ List of ``Parameter`` objects which can be used in fitting.
"""
fit_list = []
for key, item in self._kwargs.items():
@@ -187,11 +226,13 @@ def get_fit_parameters(self) -> List[Parameter]:
return fit_list
def __dir__(self) -> Iterable[str]:
- """This creates auto-completion and helps out in iPython
- notebooks.
+ """
+ This creates auto-completion and helps out in iPython notebooks.
- :return: list of function and parameter names for auto-
- completion
+ Returns
+ -------
+ Iterable[str]
+ List of function and parameter names for auto- completion.
"""
new_class_objs = list(k for k in dir(self.__class__) if not k.startswith('_'))
return sorted(new_class_objs)
@@ -203,13 +244,21 @@ def __copy__(self) -> BasedBase:
return new_obj
def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Convert an object into a full dictionary using
- `SerializerDict`. This is a shortcut for
+ """
+ Convert an object into a full dictionary using
+ ``SerializerDict``. This is a shortcut for
```obj.encode(encoder=SerializerDict)```
- :param skip: List of field names as strings to skip when forming
- the dictionary
- :return: encoded object containing all information to reform an
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming
+ the dictionary. By default, None.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Encoded object containing all information to reform an
EasyScience object.
"""
# extend skip to include unique_name by default
diff --git a/src/easyscience/base_classes/collection_base.py b/src/easyscience/base_classes/collection_base.py
index 3328abc5..c62e9382 100644
--- a/src/easyscience/base_classes/collection_base.py
+++ b/src/easyscience/base_classes/collection_base.py
@@ -1,251 +1,18 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-from __future__ import annotations
+"""
+.. deprecated::
+ This module has been moved to ``easyscience.legacy.collection_base``.
+ Please update your imports.
+"""
-from collections.abc import MutableSequence
-from numbers import Number
-from typing import TYPE_CHECKING
-from typing import Any
-from typing import Callable
-from typing import List
-from typing import Optional
-from typing import Tuple
-from typing import Union
+from easyscience import global_object
-from easyscience.base_classes.new_base import NewBase
-from easyscience.global_object.undo_redo import NotarizedDict
+from ..legacy.collection_base import CollectionBase # noqa: F401
-from ..variable.descriptor_base import DescriptorBase
-from .based_base import BasedBase
-
-if TYPE_CHECKING:
- from ..fitting.calculators import InterfaceFactoryTemplate
-
-
-class CollectionBase(BasedBase, MutableSequence):
- """This is the base class for which all higher level classes are
- built off of.
-
- NOTE: This object is serializable only if parameters are supplied as:
- `ObjBase(a=value, b=value)`. For `Parameter` or `Descriptor` objects we can
- cheat with `ObjBase(*[Descriptor(...), Parameter(...), ...])`.
- """
-
- def __init__(
- self,
- name: str,
- *args: Union[BasedBase, DescriptorBase, NewBase],
- interface: Optional[InterfaceFactoryTemplate] = None,
- unique_name: Optional[str] = None,
- **kwargs,
- ):
- """Set up the base collection class.
-
- :param name: Name of this object
- :type name: str
- :param args: selection of
- :param _kwargs: Fields which this class should contain
- :type _kwargs: dict
- """
- BasedBase.__init__(self, name, unique_name=unique_name)
- kwargs = {key: kwargs[key] for key in kwargs.keys() if kwargs[key] is not None}
- _args = []
- for item in args:
- if not isinstance(item, list):
- _args.append(item)
- else:
- _args += item
- _kwargs = {}
- for key, item in kwargs.items():
- if isinstance(item, list) and len(item) > 0:
- _args += item
- else:
- _kwargs[key] = item
- kwargs = _kwargs
- for item in list(kwargs.values()) + _args:
- if not issubclass(type(item), (DescriptorBase, BasedBase, NewBase)):
- raise AttributeError('A collection can only be formed from easyscience objects.')
- args = _args
- _kwargs = {}
- for key, item in kwargs.items():
- _kwargs[key] = item
- for arg in args:
- kwargs[arg.unique_name] = arg
- _kwargs[arg.unique_name] = arg
-
- # Set kwargs, also useful for serialization
- self._kwargs = NotarizedDict(**_kwargs)
-
- for key in kwargs.keys():
- if key in self.__dict__.keys() or key in self.__slots__:
- raise AttributeError(
- f'Given kwarg: `{key}`, is an internal attribute. Please rename.'
- )
- if kwargs[key]: # Might be None (empty tuple or list)
- self._global_object.map.add_edge(self, kwargs[key])
- self._global_object.map.reset_type(kwargs[key], 'created_internal')
- if interface is not None:
- kwargs[key].interface = interface
- # TODO wrap getter and setter in Logger
- if interface is not None:
- self.interface = interface
- self._kwargs._stack_enabled = True
-
- def insert(self, index: int, value: Union[DescriptorBase, BasedBase, NewBase]) -> None:
- """Insert an object into the collection at an index.
-
- :param index: Index for EasyScience object to be inserted.
- :type index: int
- :param value: Object to be inserted.
- :type value: Union[BasedBase, DescriptorBase, NewBase]
- :return: None
- :rtype: None
- """
- t_ = type(value)
- if issubclass(t_, (BasedBase, DescriptorBase, NewBase)):
- update_key = list(self._kwargs.keys())
- values = list(self._kwargs.values())
- # Update the internal dict
- new_key = value.unique_name
- update_key.insert(index, new_key)
- values.insert(index, value)
- self._kwargs.reorder(**{k: v for k, v in zip(update_key, values)})
- # ADD EDGE
- self._global_object.map.add_edge(self, value)
- self._global_object.map.reset_type(value, 'created_internal')
- value.interface = self.interface
- else:
- raise AttributeError('Only EasyScience objects can be put into an EasyScience group')
-
- def __getitem__(self, idx: Union[int, slice]) -> Union[DescriptorBase, BasedBase, NewBase]:
- """Get an item in the collection based on its index.
-
- :param idx: index or slice of the collection.
- :type idx: Union[int, slice]
- :return: Object at index `idx`
- :rtype: Union[Parameter, Descriptor, ObjBase, 'CollectionBase']
- """
- if isinstance(idx, slice):
- start, stop, step = idx.indices(len(self))
- return self.__class__(
- getattr(self, 'name'), *[self[i] for i in range(start, stop, step)]
- )
- if str(idx) in self._kwargs.keys():
- return self._kwargs[str(idx)]
- if isinstance(idx, str):
- idx = [index for index, item in enumerate(self) if item.name == idx]
- noi = len(idx)
- if noi == 0:
- raise IndexError('Given index does not exist')
- elif noi == 1:
- idx = idx[0]
- else:
- return self.__class__(getattr(self, 'name'), *[self[i] for i in idx])
- elif not isinstance(idx, int) or isinstance(idx, bool):
- if isinstance(idx, bool):
- raise TypeError('Boolean indexing is not supported at the moment')
- try:
- if idx > len(self):
- raise IndexError(f'Given index {idx} is out of bounds')
- except TypeError:
- raise IndexError('Index must be of type `int`/`slice` or an item name (`str`)')
- keys = list(self._kwargs.keys())
- return self._kwargs[keys[idx]]
-
- def __setitem__(self, key: int, value: Union[BasedBase, DescriptorBase, NewBase]) -> None:
- """Set an item via it's index.
-
- :param key: Index in self.
- :type key: int
- :param value: Value which index key should be set to.
- :type value: Any
- """
- if isinstance(value, Number): # noqa: S3827
- item = self.__getitem__(key)
- item.value = value
- elif issubclass(type(value), (BasedBase, DescriptorBase, NewBase)):
- update_key = list(self._kwargs.keys())
- values = list(self._kwargs.values())
- old_item = values[key]
- # Update the internal dict
- update_dict = {update_key[key]: value}
- self._kwargs.update(update_dict)
- # ADD EDGE
- self._global_object.map.add_edge(self, value)
- self._global_object.map.reset_type(value, 'created_internal')
- value.interface = self.interface
- # REMOVE EDGE
- self._global_object.map.prune_vertex_from_edge(self, old_item)
- else:
- raise NotImplementedError(
- 'At the moment only numerical values or EasyScience objects can be set.'
- )
-
- def __delitem__(self, key: int) -> None:
- """Try to delete an idem by key.
-
- :param key:
- :type key:
- :return:
- :rtype:
- """
- keys = list(self._kwargs.keys())
- item = self._kwargs[keys[key]]
- self._global_object.map.prune_vertex_from_edge(self, item)
- del self._kwargs[keys[key]]
-
- def __len__(self) -> int:
- """Get the number of items in this collection.
-
- :return: Number of items in this collection.
- :rtype: int
- """
- return len(self._kwargs.keys())
-
- def _convert_to_dict(self, in_dict, encoder, skip: List[str] = [], **kwargs) -> dict:
- """Convert ones self into a serialized form.
-
- :return: dictionary of ones self
- :rtype: dict
- """
- d = {}
- if hasattr(self, '_modify_dict'):
- # any extra keys defined on the inheriting class
- d = self._modify_dict(skip=skip, **kwargs)
- in_dict['data'] = [encoder._convert_to_dict(item, skip=skip, **kwargs) for item in self]
- out_dict = {**in_dict, **d}
- return out_dict
-
- @property
- def data(self) -> Tuple:
- """The data function returns a tuple of the keyword arguments
- passed to the constructor. This is useful for when you need to
- pass in a dictionary of data to other functions, such as with
- matplotlib's plot function.
-
- :param self: Access attributes of the class within the method
- :return: The values of the attributes in a tuple :doc-author:
- Trelent
- """
- return tuple(self._kwargs.values())
-
- def __repr__(self) -> str:
- return f'{self.__class__.__name__} `{getattr(self, "name")}` of length {len(self)}'
-
- def sort(
- self,
- mapping: Callable[[Union[BasedBase, DescriptorBase, NewBase]], Any],
- reverse: bool = False,
- ) -> None:
- """Sort the collection according to the given mapping.
-
- :param mapping: mapping function to sort the collection. i.e.
- lambda parameter: parameter.value
- :type mapping: Callable
- :param reverse: Reverse the sorting.
- :type reverse: bool
- """
- i = list(self._kwargs.items())
- i.sort(key=lambda x: mapping(x[1]), reverse=reverse)
- self._kwargs.reorder(**{k[0]: k[1] for k in i})
+global_object.log.warning(
+ 'easyscience.base_classes.collection_base is deprecated. '
+ 'Please import from easyscience.legacy.collection_base instead.',
+ stacklevel=2,
+)
diff --git a/src/easyscience/base_classes/easy_list.py b/src/easyscience/base_classes/easy_list.py
index 39f04eaa..23ac673d 100644
--- a/src/easyscience/base_classes/easy_list.py
+++ b/src/easyscience/base_classes/easy_list.py
@@ -4,7 +4,6 @@
from __future__ import annotations
import copy
-import warnings
from collections.abc import MutableSequence
from typing import Any
from typing import Callable
@@ -16,14 +15,17 @@
from typing import TypeVar
from typing import overload
+from easyscience import global_object
from easyscience.io.serializer_base import SerializerBase
+from easyscience.variable.descriptor_base import DescriptorBase
+from .model_base import ModelBase
from .new_base import NewBase
ProtectedType_ = TypeVar('ProtectedType', bound=NewBase)
-class EasyList(NewBase, MutableSequence[ProtectedType_]):
+class EasyList(ModelBase, MutableSequence[ProtectedType_]):
# If we were to inherit from List instead of MutableSequence,
# we would have to overwrite "extend", "remove", "__iadd__", "count", "append", "__iter__" and "clear"
def __init__(
@@ -34,14 +36,28 @@ def __init__(
display_name: Optional[str] = None,
**kwargs: Any,
):
- """Initialize the EasyList.
-
- :param args: Initial items to add to the list
- :param protected_types: Types that are allowed in the list. Can
- be a single NewBase subclass or a list of them. If None,
- defaults to [NewBase].
- :param unique_name: Optional unique name for the list
- :param display_name: Optional display name for the list
+ """
+ Initialize the EasyList.
+
+ Parameters
+ ----------
+ *args : ProtectedType_ | list[ProtectedType_]
+ Initial items to add to the list.
+ protected_types : list[Type[NewBase]] | Type[NewBase] | None, default=None
+ Types that are allowed in the list. Can be a single NewBase
+ subclass or a list of them. If None,. By default, None.
+ unique_name : Optional[str], default=None
+ Optional unique name for the list. By default, None.
+ display_name : Optional[str], default=None
+ Optional display name for the list. By default, None.
+ **kwargs : Any
+ Additional keyword arguments used during deserialization.
+
+ Raises
+ ------
+ TypeError
+ If ``protected_types`` is not a supported NewBase type or
+ iterable of supported types.
"""
super().__init__(unique_name=unique_name, display_name=display_name)
if protected_types is None:
@@ -82,10 +98,25 @@ def __getitem__(self, idx: slice) -> 'EasyList[ProtectedType_]': ...
@overload
def __getitem__(self, idx: str) -> ProtectedType_: ...
def __getitem__(self, idx: int | slice | str) -> ProtectedType_ | 'EasyList[ProtectedType_]':
- """Get an item by index, slice, or unique_name.
-
- :param idx: Index, slice, or unique_name of the item
- :return: The item or a new EasyList for slices
+ """
+ Get an item by index, slice, or unique_name.
+
+ Parameters
+ ----------
+ idx : int | slice | str
+ Index, slice, or unique_name of the item.
+
+ Returns
+ -------
+ ProtectedType_ | 'EasyList[ProtectedType_]'
+ The item or a new EasyList for slices.
+
+ Raises
+ ------
+ KeyError
+ If ``idx`` is a string that does not match any item.
+ TypeError
+ If ``idx`` is not an int, slice, or string.
"""
if isinstance(idx, int):
return self._data[idx]
@@ -107,16 +138,28 @@ def __setitem__(self, idx: slice, value: Iterable[ProtectedType_]) -> None: ...
def __setitem__(
self, idx: int | slice, value: ProtectedType_ | Iterable[ProtectedType_]
) -> None:
- """Set an item at an index.
-
- :param idx: Index to set
- :param value: New value
+ """
+ Set an item at an index.
+
+ Parameters
+ ----------
+ idx : int | slice
+ Index to set.
+ value : ProtectedType_ | Iterable[ProtectedType_]
+ New value.
+
+ Raises
+ ------
+ TypeError
+ If ``idx`` or ``value`` has an invalid type.
+ ValueError
+ If slice assignment changes the slice length.
"""
if isinstance(idx, int):
if not isinstance(value, tuple(self._protected_types)):
raise TypeError(f'Items must be one of {self._protected_types}, got {type(value)}')
if value is not self._data[idx] and value in self:
- warnings.warn(
+ global_object.log.getLogger('base_classes').warning(
f'Item with unique name "{self._get_key(value)}" already in EasyList, it will be ignored'
)
return
@@ -134,7 +177,7 @@ def __setitem__(
if not isinstance(v, tuple(self._protected_types)):
raise TypeError(f'Items must be one of {self._protected_types}, got {type(v)}')
if v in self and replaced[i] is not v:
- warnings.warn(
+ global_object.log.getLogger('base_classes').warning(
f'Item with unique name "{v.unique_name}" already in EasyList, it will be ignored'
)
new_values[i] = replaced[
@@ -145,9 +188,20 @@ def __setitem__(
raise TypeError('Index must be an int or slice')
def __delitem__(self, idx: int | slice | str) -> None:
- """Delete an item by index, slice, or name.
-
- :param idx: Index, slice, or name of item to delete
+ """
+ Delete an item by index, slice, or name.
+
+ Parameters
+ ----------
+ idx : int | slice | str
+ Index, slice, or name of item to delete.
+
+ Raises
+ ------
+ KeyError
+ If ``idx`` is a string that does not match any item.
+ TypeError
+ If ``idx`` is not an int, slice, or string.
"""
if isinstance(idx, (int, slice)):
del self._data[idx]
@@ -165,32 +219,72 @@ def __len__(self) -> int:
return len(self._data)
def insert(self, index: int, value: ProtectedType_) -> None:
- """Insert an item at an index.
-
- :param index: Index to insert at
- :param value: Item to insert
+ """
+ Insert an item at an index.
+
+ Parameters
+ ----------
+ index : int
+ Index to insert at.
+ value : ProtectedType_
+ Item to insert.
+
+ Raises
+ ------
+ TypeError
+ If ``index`` is not an integer or ``value`` is of a
+ protected type mismatch.
"""
if not isinstance(index, int):
raise TypeError('Index must be an integer')
elif not isinstance(value, tuple(self._protected_types)):
raise TypeError(f'Items must be one of {self._protected_types}, got {type(value)}')
if value in self:
- warnings.warn(
+ global_object.log.getLogger('base_classes').warning(
f'Item with unique name "{self._get_key(value)}" already in EasyList, it will be ignored'
)
return
self._data.insert(index, value)
- def _get_key(self, obj) -> str:
- """Get the unique name of an object.
+ def _get_key(self, obj: ProtectedType_) -> str:
+ """
+ Get the unique name of an object.
Can be overridden to use a different attribute as the key.
- :param object: Object to get the key for
- :return: The key of the object
- :rtype: str
+
+ Parameters
+ ----------
+ obj : ProtectedType_
+ Object to get the key for.
+
+ Returns
+ -------
+ str
+ The key of the object.
"""
return obj.unique_name
+ def get_all_variables(self) -> List[DescriptorBase]:
+ """
+ Get all ``Descriptor`` and ``Parameter`` objects from all
+ elements that are derived from ``ModelBase``.
+
+ For each element that is a ``ModelBase`` instance, the element's
+ own ``get_all_variables()`` method is called and the results are
+ collected into a single flat list.
+
+ Returns
+ -------
+ List[DescriptorBase]
+ Flat list of all ``DescriptorBase`` objects from all
+ ``ModelBase`` elements.
+ """
+ all_vars: List[DescriptorBase] = []
+ for item in self._data:
+ if isinstance(item, ModelBase):
+ all_vars.extend(item.get_all_variables())
+ return all_vars
+
# Overwriting methods
def __repr__(self) -> str:
@@ -207,10 +301,15 @@ def __reversed__(self):
return self._data.__reversed__()
def sort(self, key: Callable[[ProtectedType_], Any] = None, reverse: bool = False) -> None:
- """Sort the collection according to the given key function.
-
- :param key: Mapping function to sort by
- :param reverse: Whether to reverse the sort
+ """
+ Sort the collection according to the given key function.
+
+ Parameters
+ ----------
+ key : Callable[[ProtectedType_], Any], default=None
+ Mapping function to sort by. By default, None.
+ reverse : bool, default=False
+ Whether to reverse the sort. By default, False.
"""
self._data.sort(reverse=reverse, key=key)
@@ -225,10 +324,25 @@ def index(self, value: ProtectedType_ | str, start: int = 0, stop: int = None) -
return self._data.index(value, start, stop)
def pop(self, index: int | str = -1) -> ProtectedType_:
- """Remove and return an item at the given index or unique_name.
-
- :param index: Index or unique_name of the item to remove
- :return: The removed item
+ """
+ Remove and return an item at the given index or unique_name.
+
+ Parameters
+ ----------
+ index : int | str, default=-1
+ Index or unique_name of the item to remove. By default, -1.
+
+ Returns
+ -------
+ ProtectedType_
+ The removed item.
+
+ Raises
+ ------
+ KeyError
+ If ``index`` is a string that does not match any item.
+ TypeError
+ If ``index`` is not an int or string.
"""
if isinstance(index, int):
return self._data.pop(index)
@@ -243,9 +357,13 @@ def pop(self, index: int | str = -1) -> ProtectedType_:
# Serialization support
def to_dict(self) -> dict:
- """Convert the EasyList to a dictionary for serialization.
+ """
+ Convert the EasyList to a dictionary for serialization.
- :return: Dictionary representation of the EasyList
+ Returns
+ -------
+ dict
+ Dictionary representation of the EasyList.
"""
dict_repr = super().to_dict()
if self._protected_types != [NewBase]:
@@ -258,11 +376,26 @@ def to_dict(self) -> dict:
@classmethod
def from_dict(cls, obj_dict: Dict[str, Any]) -> NewBase:
- """Re-create an EasyScience object from a full encoded
- dictionary.
-
- :param obj_dict: dictionary containing the serialized contents (from `SerializerDict`) of an EasyScience object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object from a full encoded dictionary.
+
+ Parameters
+ ----------
+ obj_dict : Dict[str, Any]
+ Dictionary containing the serialized contents (from
+ ``SerializerDict``) of an EasyScience object.
+
+ Returns
+ -------
+ NewBase
+ Reformed EasyScience object.
+
+ Raises
+ ------
+ ImportError
+ If a protected type cannot be imported.
+ ValueError
+ If the input dictionary does not describe an EasyList.
"""
if not SerializerBase._is_serialized_easyscience_object(obj_dict):
raise ValueError(
diff --git a/src/easyscience/base_classes/model_base.py b/src/easyscience/base_classes/model_base.py
index 419492c9..dee45ba5 100644
--- a/src/easyscience/base_classes/model_base.py
+++ b/src/easyscience/base_classes/model_base.py
@@ -20,22 +20,25 @@
class ModelBase(NewBase):
- """This is the base class for all model classes in EasyScience. It
+ """
+ This is the base class for all model classes in EasyScience. It
provides methods to get parameters for fitting and analysis as well
as proper serialization/deserialization for
DescriptorNumber/Parameter attributes.
- It assumes that Parameters/DescriptorNumbers are assigned as properties with the getters returning the parameter
- but the setter only setting the value of the parameter.
- e.g.
+ It assumes that Parameters/DescriptorNumbers are assigned as
+ properties with the getters returning the parameter but the setter
+ only setting the value of the parameter. e.g.
```python
@property
def my_param(self) -> Parameter:
+ '''My param.'''
return self._my_param
@my_param.setter
def my_param(self, new_value: float) -> None:
+ '''My param.'''
self._my_param.value = new_value
```
"""
@@ -44,9 +47,13 @@ def __init__(self, unique_name: Optional[str] = None, display_name: Optional[str
super().__init__(unique_name=unique_name, display_name=display_name)
def get_all_variables(self) -> List[DescriptorBase]:
- """Get all `Descriptor` and `Parameter` objects as a list.
+ """
+ Get all ``Descriptor`` and ``Parameter`` objects as a list.
- :return: List of `Descriptor` and `Parameter` objects.
+ Returns
+ -------
+ List[DescriptorBase]
+ List of ``Descriptor`` and ``Parameter`` objects.
"""
vars = []
for attr_name in dir(self):
@@ -58,29 +65,42 @@ def get_all_variables(self) -> List[DescriptorBase]:
return vars
def get_all_parameters(self) -> List[Parameter]:
- """Get all `Parameter` objects as a list.
+ """
+ Get all ``Parameter`` objects as a list.
- :return: List of `Parameter` objects.
+ Returns
+ -------
+ List[Parameter]
+ List of ``Parameter`` objects.
"""
return [param for param in self.get_all_variables() if isinstance(param, Parameter)]
def get_fittable_parameters(self) -> List[Parameter]:
- """Get all parameters which can be fitted as a list.
+ """
+ Get all parameters which can be fitted as a list.
- :return: List of `Parameter` objects.
+ Returns
+ -------
+ List[Parameter]
+ List of ``Parameter`` objects.
"""
return [param for param in self.get_all_parameters() if param.independent]
def get_free_parameters(self) -> List[Parameter]:
- """Get all parameters which are currently free to be fitted as a
+ """
+ Get all parameters which are currently free to be fitted as a
list.
- :return: List of `Parameter` objects.
+ Returns
+ -------
+ List[Parameter]
+ List of ``Parameter`` objects.
"""
return [param for param in self.get_fittable_parameters() if not param.fixed]
def get_fit_parameters(self) -> List[Parameter]:
- """This is an alias for `get_free_parameters`.
+ """
+ This is an alias for ``get_free_parameters``.
To be removed when fully moved to new base classes and minimizer
can be changed.
@@ -89,11 +109,29 @@ def get_fit_parameters(self) -> List[Parameter]:
@classmethod
def from_dict(cls, obj_dict: Dict[str, Any]) -> ModelBase:
- """Re-create an EasyScience object with DescriptorNumber
- attributes from a full encoded dictionary.
-
- :param obj_dict: dictionary containing the serialized contents (from `SerializerDict`) of an EasyScience object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object with DescriptorNumber attributes
+ from a full encoded dictionary.
+
+ Parameters
+ ----------
+ obj_dict : Dict[str, Any]
+ Dictionary containing the serialized contents (from
+ ``SerializerDict``) of an EasyScience object.
+
+ Returns
+ -------
+ ModelBase
+ Reformed EasyScience object.
+
+ Raises
+ ------
+ SyntaxError
+ If a deserialized parameter cannot be attached back to the
+ class definition.
+ ValueError
+ If the input dictionary does not describe the expected
+ class.
"""
if not SerializerBase._is_serialized_easyscience_object(obj_dict):
raise ValueError('Input must be a dictionary representing an EasyScience object.')
diff --git a/src/easyscience/base_classes/new_base.py b/src/easyscience/base_classes/new_base.py
index 778e9ba9..115677f1 100644
--- a/src/easyscience/base_classes/new_base.py
+++ b/src/easyscience/base_classes/new_base.py
@@ -21,7 +21,8 @@
class NewBase:
- """This is the new base class for easyscience objects.
+ """
+ This is the new base class for easyscience objects.
It provides serialization capabilities as well as unique naming and
display naming.
@@ -44,7 +45,8 @@ def __init__(self, unique_name: Optional[str] = None, display_name: Optional[str
@property
def _arg_spec(self) -> Set[str]:
- """This method is used by the serializer to determine which
+ """
+ This method is used by the serializer to determine which
arguments are needed by the constructor to deserialize the
object.
"""
@@ -63,10 +65,20 @@ def unique_name(self) -> str:
@unique_name.setter
def unique_name(self, new_unique_name: str):
- """Set a new unique name for the object. The old name is still
- kept in the map.
+ """
+ Set a new unique name for the object.
+
+ The old name is still kept in the map.
- :param new_unique_name: New unique name for the object
+ Parameters
+ ----------
+ new_unique_name : str
+ New unique name for the object.
+
+ Raises
+ ------
+ TypeError
+ If ``new_unique_name`` is not a string.
"""
if not isinstance(new_unique_name, str):
raise TypeError('Unique name has to be a string.')
@@ -76,9 +88,13 @@ def unique_name(self, new_unique_name: str):
@property
def display_name(self) -> str:
- """Get a pretty display name.
+ """
+ Get a pretty display name.
- :return: The pretty display name.
+ Returns
+ -------
+ str
+ The pretty display name.
"""
display_name = self._display_name
if display_name is None:
@@ -88,21 +104,38 @@ def display_name(self) -> str:
@display_name.setter
@property_stack
def display_name(self, name: str | None) -> None:
- """Set the pretty display name.
+ """
+ Set the pretty display name.
- :param name: Pretty display name of the object.
+ Parameters
+ ----------
+ name : str | None
+ Pretty display name of the object.
+
+ Raises
+ ------
+ TypeError
+ If ``name`` is neither a string nor ``None``.
"""
if name is not None and not isinstance(name, str):
raise TypeError('Display name must be a string or None')
self._display_name = name
def to_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Convert an EasyScience object into a full dictionary using
- `SerializerBase`s generic `convert_to_dict` method.
-
- :param skip: List of field names as strings to skip when forming
- the dictionary
- :return: encoded object containing all information to reform an
+ """
+ Convert an EasyScience object into a full dictionary using
+ ``SerializerBase``s generic ``convert_to_dict`` method.
+
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ dictionary. By default, None.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Encoded object containing all information to reform an
EasyScience object.
"""
serializer = SerializerBase()
@@ -116,11 +149,25 @@ def to_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
@classmethod
def from_dict(cls, obj_dict: Dict[str, Any]) -> NewBase:
- """Re-create an EasyScience object from a full encoded
- dictionary.
-
- :param obj_dict: dictionary containing the serialized contents (from `SerializerDict`) of an EasyScience object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object from a full encoded dictionary.
+
+ Parameters
+ ----------
+ obj_dict : Dict[str, Any]
+ Dictionary containing the serialized contents (from
+ ``SerializerDict``) of an EasyScience object.
+
+ Returns
+ -------
+ NewBase
+ Reformed EasyScience object.
+
+ Raises
+ ------
+ ValueError
+ If the input dictionary does not describe the expected
+ class.
"""
if not SerializerBase._is_serialized_easyscience_object(obj_dict):
raise ValueError('Input must be a dictionary representing an EasyScience object.')
@@ -133,11 +180,13 @@ def from_dict(cls, obj_dict: Dict[str, Any]) -> NewBase:
)
def __dir__(self) -> Iterable[str]:
- """This creates auto-completion and helps out in iPython
- notebooks.
+ """
+ This creates auto-completion and helps out in iPython notebooks.
- :return: list of function and parameter names for auto-
- completion
+ Returns
+ -------
+ Iterable[str]
+ List of function and parameter names for auto- completion.
"""
new_class_objs = list(k for k in dir(self.__class__) if not k.startswith('_'))
return sorted(new_class_objs)
diff --git a/src/easyscience/base_classes/obj_base.py b/src/easyscience/base_classes/obj_base.py
index 8576b67b..8d44b193 100644
--- a/src/easyscience/base_classes/obj_base.py
+++ b/src/easyscience/base_classes/obj_base.py
@@ -1,156 +1,18 @@
# SPDX-FileCopyrightText: 2025 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-from __future__ import annotations
+"""
+.. deprecated::
+ This module has been moved to ``easyscience.legacy.obj_base``.
+ Please update your imports.
+"""
-from typing import TYPE_CHECKING
-from typing import Callable
-from typing import Optional
+from easyscience import global_object
-from ..utils.classTools import addLoggedProp
-from ..variable.descriptor_base import DescriptorBase
-from .based_base import BasedBase
+from ..legacy.obj_base import ObjBase # noqa: F401
-if TYPE_CHECKING:
- from ..io import SerializerComponent
-
-
-class ObjBase(BasedBase):
- """This is the base class for which all higher level classes are
- built off of.
-
- NOTE: This object is serializable only if parameters are supplied as:
- `ObjBase(a=value, b=value)`. For `Parameter` or `Descriptor` objects we can
- cheat with `ObjBase(*[Descriptor(...), Parameter(...), ...])`.
- """
-
- def __init__(
- self,
- name: str,
- unique_name: Optional[str] = None,
- *args: Optional[SerializerComponent],
- **kwargs: Optional[SerializerComponent],
- ):
- """Set up the base class.
-
- :param name: Name of this object
- :param args: Any arguments?
- :param kwargs: Fields which this class should contain
- """
- super(ObjBase, self).__init__(name=name, unique_name=unique_name)
- # If Parameter or Descriptor is given as arguments...
- for arg in args:
- if issubclass(type(arg), (ObjBase, DescriptorBase)):
- kwargs[getattr(arg, 'name')] = arg
- # Set kwargs, also useful for serialization
- known_keys = self.__dict__.keys()
- self._kwargs = kwargs
- for key in kwargs.keys():
- if key in known_keys:
- raise AttributeError('Kwargs cannot overwrite class attributes in ObjBase.')
- if issubclass(type(kwargs[key]), (BasedBase, DescriptorBase)) or 'CollectionBase' in [
- c.__name__ for c in type(kwargs[key]).__bases__
- ]:
- self._global_object.map.add_edge(self, kwargs[key])
- self._global_object.map.reset_type(kwargs[key], 'created_internal')
- addLoggedProp(
- self,
- key,
- self.__getter(key),
- self.__setter(key),
- get_id=key,
- my_self=self,
- test_class=ObjBase,
- )
-
- def _add_component(self, key: str, component: SerializerComponent) -> None:
- """Dynamically add a component to the class. This is an internal
- method, though can be called remotely. The recommended
- alternative is to use typing, i.e.
-
- .. code-block:: python
-
- class Foo(Bar):
- def __init__(self, foo: Parameter, bar: Parameter):
- super(Foo, self).__init__(bar=bar)
- self._add_component('foo', foo)
-
- :param key: Name of component to be added
- :param component: Component to be added
- :return: None
- """
- self._kwargs[key] = component
- self._global_object.map.add_edge(self, component)
- self._global_object.map.reset_type(component, 'created_internal')
- addLoggedProp(
- self,
- key,
- self.__getter(key),
- self.__setter(key),
- get_id=key,
- my_self=self,
- test_class=ObjBase,
- )
-
- def __setattr__(self, key: str, value: SerializerComponent) -> None:
- # Assume that the annotation is a ClassVar
- old_obj = None
- if (
- hasattr(self.__class__, '__annotations__')
- and key in self.__class__.__annotations__
- and hasattr(self.__class__.__annotations__[key], '__args__')
- and issubclass(
- getattr(value, '__old_class__', value.__class__),
- self.__class__.__annotations__[key].__args__,
- )
- ):
- if issubclass(type(getattr(self, key, None)), (BasedBase, DescriptorBase)):
- old_obj = self.__getattribute__(key)
- self._global_object.map.prune_vertex_from_edge(self, old_obj)
- self._add_component(key, value)
- else:
- if hasattr(self, key) and issubclass(type(value), (BasedBase, DescriptorBase)):
- old_obj = self.__getattribute__(key)
- self._global_object.map.prune_vertex_from_edge(self, old_obj)
- self._global_object.map.add_edge(self, value)
- super(ObjBase, self).__setattr__(key, value)
- # Update the interface bindings if something changed (BasedBase and Descriptor)
- if old_obj is not None:
- old_interface = getattr(self, 'interface', None)
- if old_interface is not None:
- self.generate_bindings()
-
- def __repr__(self) -> str:
- return f'{self.__class__.__name__} `{getattr(self, "name")}`'
-
- @staticmethod
- def __getter(key: str) -> Callable[[SerializerComponent], SerializerComponent]:
- def getter(obj: SerializerComponent) -> SerializerComponent:
- return obj._kwargs[key]
-
- return getter
-
- @staticmethod
- def __setter(key: str) -> Callable[[SerializerComponent], None]:
- def setter(obj: SerializerComponent, value: float) -> None:
- if issubclass(obj._kwargs[key].__class__, (DescriptorBase)) and not issubclass(
- value.__class__, (DescriptorBase)
- ):
- obj._kwargs[key].value = value
- else:
- obj._kwargs[key] = value
-
- return setter
-
- # @staticmethod
- # def __setter(key: str) -> Callable[[Union[B, V]], None]:
- # def setter(obj: Union[V, B], value: float) -> None:
- # if issubclass(obj._kwargs[key].__class__, Descriptor):
- # if issubclass(obj._kwargs[key].__class__, Descriptor):
- # obj._kwargs[key] = value
- # else:
- # obj._kwargs[key].value = value
- # else:
- # obj._kwargs[key] = value
- #
- # return setter
+global_object.log.warning(
+ 'easyscience.base_classes.obj_base is deprecated. '
+ 'Please import from easyscience.legacy.obj_base instead.',
+ stacklevel=2,
+)
diff --git a/src/easyscience/fitting/available_minimizers.py b/src/easyscience/fitting/available_minimizers.py
index 0cfd262b..311bf35e 100644
--- a/src/easyscience/fitting/available_minimizers.py
+++ b/src/easyscience/fitting/available_minimizers.py
@@ -1,10 +1,11 @@
# SPDX-FileCopyrightText: 2024 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
from dataclasses import dataclass
from enum import Enum
+from easyscience import global_object
+
# Change to importlib.metadata when Python 3.10 is the minimum version
# import importlib.metadata
# installed_packages = [x.name for x in importlib.metadata.distributions()]
@@ -15,11 +16,8 @@
lmfit_engine_available = True
except ImportError:
- # TODO make this a proper message (use logging?)
- warnings.warn(
- 'LMFit minimization is not available. Probably lmfit has not been installed.',
- ImportWarning,
- stacklevel=2,
+ global_object.log.getLogger('fitting').warning(
+ 'LMFit minimization is not available. Probably lmfit has not been installed.'
)
bumps_engine_available = False
@@ -28,11 +26,8 @@
bumps_engine_available = True
except ImportError:
- # TODO make this a proper message (use logging?)
- warnings.warn(
- 'Bumps minimization is not available. Probably bumps has not been installed.',
- ImportWarning,
- stacklevel=2,
+ global_object.log.getLogger('fitting').warning(
+ 'Bumps minimization is not available. Probably bumps has not been installed.'
)
dfo_engine_available = False
@@ -41,11 +36,8 @@
dfo_engine_available = True
except ImportError:
- # TODO make this a proper message (use logging?)
- warnings.warn(
- 'DFO minimization is not available. Probably dfols has not been installed.',
- ImportWarning,
- stacklevel=2,
+ global_object.log.getLogger('fitting').warning(
+ 'DFO minimization is not available. Probably dfols has not been installed.'
)
diff --git a/src/easyscience/fitting/calculators/interface_factory.py b/src/easyscience/fitting/calculators/interface_factory.py
index f9103523..ad5fbc24 100644
--- a/src/easyscience/fitting/calculators/interface_factory.py
+++ b/src/easyscience/fitting/calculators/interface_factory.py
@@ -4,12 +4,15 @@
from __future__ import annotations
from typing import TYPE_CHECKING
+from typing import Any
from typing import Callable
from typing import List
from typing import NamedTuple
from typing import Optional
from typing import Type
+from easyscience import global_object
+
if TYPE_CHECKING:
from abc import ABCMeta
@@ -17,8 +20,8 @@
class InterfaceFactoryTemplate:
- """This class allows for the creation and transference of
- interfaces.
+ """
+ This class allows for the creation and transference of interfaces.
"""
def __init__(self, interface_list: List[ABCMeta], *args, **kwargs):
@@ -27,43 +30,60 @@ def __init__(self, interface_list: List[ABCMeta], *args, **kwargs):
self.__interface_obj: None = None
self.create(*args, **kwargs)
- def create(self, *args, **kwargs):
- """Create an interface to a calculator from those initialized.
- Interfaces can be selected by `interface_name` where
- `interface_name` is one of `obj.available_interfaces`. This
+ def create(self, *args: Any, interface_name: str | None = None, **kwargs: Any) -> None:
+ """
+ Create an interface to a calculator from those initialized.
+
+ Interfaces can be selected by ``interface_name`` where
+ ``interface_name`` is one of ``obj.available_interfaces``. This
interface can now be accessed by obj().
- :param interface_name: name of interface to be created
- :type interface_name: str
- :return: None
- :rtype: noneType
+ Parameters
+ ----------
+ *args : Any
+ Positional arguments forwarded to the interface constructor.
+ interface_name : str | None, default=None
+ Name of interface to be created.
+
+ **kwargs : Any
+ Keyword arguments forwarded to the interface constructor.
+
+ Raises
+ ------
+ NotImplementedError
+ If no interfaces are available to instantiate.
"""
- if kwargs.get('interface_name', None) is None:
+ if interface_name is None:
if len(self._interfaces) > 0:
# Fallback name
interface_name = self.return_name(self._interfaces[0])
else:
raise NotImplementedError
- else:
- interface_name = kwargs.pop('interface_name')
interfaces = self.available_interfaces
if interface_name in interfaces:
self._current_interface = self._interfaces[interfaces.index(interface_name)]
self.__interface_obj = self._current_interface(*args, **kwargs)
- def switch(self, new_interface: str, fitter: Optional[Type[Fitter]] = None):
- """Changes the current interface to a new interface. The current
- interface is destroyed and all SerializerComponent parameters
- carried over to the new interface. i.e. pick up where you left
- off.
-
- :param new_interface: name of new interface to be created
- :type new_interface: str
- :param fitter: Fitting interface which contains the fitting
- object which may have bindings which will be updated.
- :type fitter: EasyScience.fitting.Fitter
- :return: None
- :rtype: noneType
+ def switch(self, new_interface: str, fitter: Optional[Type[Fitter]] = None) -> None:
+ """
+ Changes the current interface to a new interface.
+
+ The current interface is destroyed and all SerializerComponent
+ parameters carried over to the new interface. i.e. pick up where
+ you left off.
+
+ Parameters
+ ----------
+ new_interface : str
+ Name of new interface to be created.
+ fitter : Optional[Type[Fitter]], default=None
+ Fitting interface which contains the fitting object which
+ may have bindings which will be updated. By default, None.
+
+ Raises
+ ------
+ AttributeError
+ If ``new_interface`` is not a valid interface name.
"""
interfaces = self.available_interfaces
if new_interface in interfaces:
@@ -78,38 +98,51 @@ def switch(self, new_interface: str, fitter: Optional[Type[Fitter]] = None):
if hasattr(obj, 'update_bindings'):
obj.update_bindings()
except Exception as e:
- print(f'Unable to auto generate bindings.\n{e}')
+ global_object.log.getLogger('fitting.calculators').warning(
+ 'Unable to auto generate bindings.\n%s', e
+ )
elif hasattr(fitter, 'generate_bindings'):
try:
fitter.generate_bindings()
except Exception as e:
- print(f'Unable to auto generate bindings.\n{e}')
+ global_object.log.getLogger('fitting.calculators').warning(
+ 'Unable to auto generate bindings.\n%s', e
+ )
@property
def available_interfaces(self) -> List[str]:
- """Return all available interfaces.
+ """
+ Return all available interfaces.
- :return: List of available interface names
- :rtype: List[str]
+ Returns
+ -------
+ List[str]
+ List of available interface names.
"""
return [self.return_name(this_interface) for this_interface in self._interfaces]
@property
def current_interface(self) -> ABCMeta:
- """Returns the constructor for the currently selected interface.
+ """
+ Returns the constructor for the currently selected interface.
- :return: Interface constructor
- :rtype: InterfaceTemplate
+ Returns
+ -------
+ ABCMeta
+ Interface constructor.
"""
return self._current_interface
@property
def current_interface_name(self) -> str:
- """Returns the constructor name for the currently selected
+ """
+ Returns the constructor name for the currently selected
interface.
- :return: Interface constructor name
- :rtype: str
+ Returns
+ -------
+ str
+ Interface constructor name.
"""
return self.return_name(self._current_interface)
@@ -117,17 +150,13 @@ def current_interface_name(self) -> str:
def fit_func(
self,
) -> Callable: # , x_array: np.ndarray, *args, **kwargs) -> np.ndarray:
- """Pass through to the underlying interfaces fitting function.
-
- :param x_array: points to be calculated at
- :type x_array: np.ndarray
- :param args: positional arguments for the fitting function
- :type args: Any
- :param kwargs: key/value pair arguments for the fitting function.
- :type kwargs: Any
- :return: points calculated at positional values `x`
- :rtype: np.ndarray
- #
+ """
+ Pass through to the underlying interfaces fitting function.
+
+ Returns
+ -------
+ Callable
+ Callable proxy to the underlying interface fit function.
"""
def __fit_func(*args, **kwargs):
@@ -138,14 +167,23 @@ def __fit_func(*args, **kwargs):
def call(self, *args, **kwargs):
return self.fit_func(*args, **kwargs)
- def generate_bindings(self, model, *args, ifun=None, **kwargs):
- """Automatically bind a `Parameter` to the corresponding
+ def generate_bindings(self, model: Any, *args: Any, ifun: Any = None, **kwargs: Any) -> None:
+ """
+ Automatically bind a ``Parameter`` to the corresponding
interface.
- :param name: parameter name
- :type name: str
- :return: binding property
- :rtype: property
+ Parameters
+ ----------
+ model : Any
+ Model whose linkable attributes should be bound.
+ *args : Any
+ Positional arguments reserved for interface-specific binding
+ hooks.
+ ifun : Any, default=None
+ Optional interface hook. By default, None.
+ **kwargs : Any
+ Keyword arguments reserved for interface-specific binding
+ hooks.
"""
class_links = self.__interface_obj.create(model)
@@ -214,6 +252,7 @@ def convert_key(self, lookup_key: str) -> str:
return key
def __make_getter(self, get_name: str) -> Callable:
+
def get_value():
inner_key = self.name_conversion.get(get_name, None)
return self.getter_fn(self.link_name, inner_key)
@@ -221,6 +260,7 @@ def get_value():
return get_value
def __make_setter(self, get_name: str) -> Callable:
+
def set_value(value):
inner_key = self.name_conversion.get(get_name, None)
self.setter_fn(self.link_name, **{inner_key: value})
diff --git a/src/easyscience/fitting/fitter.py b/src/easyscience/fitting/fitter.py
index 29ea0953..7cb948e0 100644
--- a/src/easyscience/fitting/fitter.py
+++ b/src/easyscience/fitting/fitter.py
@@ -9,6 +9,8 @@
import numpy as np
+from easyscience import global_object
+
from .available_minimizers import AvailableMinimizers
from .available_minimizers import from_string_to_enum
from .minimizers import FitResults
@@ -19,7 +21,8 @@
class Fitter:
- """Fitter is a class which makes it possible to undertake fitting
+ """
+ Fitter is a class which makes it possible to undertake fitting
utilizing one of the supported minimizers.
"""
@@ -44,11 +47,16 @@ def convert_to_pars_obj(self, pars) -> object:
return self._minimizer.convert_to_pars_obj(pars)
# TODO: remove this method when we are ready to adjust the dependent products
- def initialize(self, fit_object, fit_function: Callable) -> None:
- """Set the model and callable in the calculator interface.
-
- :param fit_object: The EasyScience model object
- :param fit_function: The function to be optimized against.
+ def initialize(self, fit_object: object, fit_function: Callable) -> None:
+ """
+ Set the model and callable in the calculator interface.
+
+ Parameters
+ ----------
+ fit_object : object
+ The EasyScience model object.
+ fit_function : Callable
+ The function to be optimized against.
"""
self._fit_object = fit_object
self._fit_function = fit_function
@@ -56,24 +64,35 @@ def initialize(self, fit_object, fit_function: Callable) -> None:
# TODO: remove this method when we are ready to adjust the dependent products
def create(self, minimizer_enum: Union[AvailableMinimizers, str] = DEFAULT_MINIMIZER) -> None:
- """Create the required minimizer.
+ """
+ Create the required minimizer.
- :param minimizer_enum: The enum of the minimization engine to
- create.
+ Parameters
+ ----------
+ minimizer_enum : Union[AvailableMinimizers, str], default=DEFAULT_MINIMIZER
+ The enum of the minimization engine to create. By default,
+ DEFAULT_MINIMIZER.
"""
if isinstance(minimizer_enum, str):
- print(f'minimizer should be set with enum {minimizer_enum}')
+ global_object.log.getLogger('fitting').warning(
+ 'minimizer should be set with enum %s', minimizer_enum
+ )
minimizer_enum = from_string_to_enum(minimizer_enum)
self._update_minimizer(minimizer_enum)
def switch_minimizer(self, minimizer_enum: Union[AvailableMinimizers, str]) -> None:
- """Switch minimizer and initialize.
+ """
+ Switch minimizer and initialize.
- :param minimizer_enum: The enum of the minimizer to create and
- instantiate.
+ Parameters
+ ----------
+ minimizer_enum : Union[AvailableMinimizers, str]
+ The enum of the minimizer to create and instantiate.
"""
if isinstance(minimizer_enum, str):
- print(f'minimizer should be set with enum {minimizer_enum}')
+ global_object.log.getLogger('fitting').warning(
+ 'minimizer should be set with enum %s', minimizer_enum
+ )
minimizer_enum = from_string_to_enum(minimizer_enum)
self._update_minimizer(minimizer_enum)
@@ -88,96 +107,150 @@ def _update_minimizer(self, minimizer_enum: AvailableMinimizers) -> None:
@property
def available_minimizers(self) -> List[str]:
- """Get a list of the names of available fitting minimizers.
+ """
+ Get a list of the names of available fitting minimizers.
- :return: List of available fitting minimizers
- :rtype: List[str]
+ Returns
+ -------
+ List[str]
+ List of available fitting minimizers.
"""
return [minimize.name for minimize in AvailableMinimizers]
@property
def minimizer(self) -> MinimizerBase:
- """Get the current fitting minimizer object.
+ """
+ Get the current fitting minimizer object.
- :return:
- :rtype: MinimizerBase
+ Returns
+ -------
+ MinimizerBase
"""
return self._minimizer
@property
def tolerance(self) -> float:
- """Get the tolerance for the minimizer.
+ """
+ Get the tolerance for the minimizer.
- :return: Tolerance for the minimizer
+ Returns
+ -------
+ float
+ Tolerance for the minimizer.
"""
return self._tolerance
@tolerance.setter
def tolerance(self, tolerance: float) -> None:
- """Set the tolerance for the minimizer.
+ """
+ Set the tolerance for the minimizer.
- :param tolerance: Tolerance for the minimizer
+ Parameters
+ ----------
+ tolerance : float
+ Tolerance for the minimizer.
"""
self._tolerance = tolerance
@property
def max_evaluations(self) -> int:
- """Get the maximal number of evaluations for the minimizer.
+ """
+ Get the maximal number of evaluations for the minimizer.
- :return: Maximal number of steps for the minimizer
+ Returns
+ -------
+ int
+ Maximal number of steps for the minimizer.
"""
return self._max_evaluations
@max_evaluations.setter
def max_evaluations(self, max_evaluations: int) -> None:
- """Set the maximal number of evaluations for the minimizer.
+ """
+ Set the maximal number of evaluations for the minimizer.
- :param max_evaluations: Maximal number of steps for the
- minimizer
+ Parameters
+ ----------
+ max_evaluations : int
+ Maximal number of steps for the minimizer.
"""
self._max_evaluations = max_evaluations
@property
def fit_function(self) -> Callable:
- """The raw fit function that the optimizer will call (no
- wrapping) :return: Raw fit function.
+ """
+ Get the raw fit function that the optimizer will call.
+
+ Returns
+ -------
+ Callable
+ Raw fit function.
"""
return self._fit_function
@fit_function.setter
def fit_function(self, fit_function: Callable) -> None:
- """Set the raw fit function to a new one.
+ """
+ Set the raw fit function to a new one.
- :param fit_function: New fit function
- :return: None
+ Parameters
+ ----------
+ fit_function : Callable
+ New fit function.
+
+ Returns
+ -------
+ None
+ None.
"""
self._fit_function = fit_function
self._update_minimizer(self._enum_current_minimizer)
@property
- def fit_object(self):
- """The EasyScience object which will be used as a model :return:
+ def fit_object(self) -> object:
+ """
+ Get the EasyScience object used as a model.
- EasyScience Model.
+ Returns
+ -------
+ object
+ EasyScience model object.
"""
return self._fit_object
@fit_object.setter
- def fit_object(self, fit_object) -> None:
- """Set the EasyScience object which wil be used as a model
- :param fit_object: New EasyScience object :return: None.
+ def fit_object(self, fit_object: object) -> None:
+ """
+ Set the EasyScience object which wil be used as a model.
+
+ Parameters
+ ----------
+ fit_object : object
+ New EasyScience object.
"""
self._fit_object = fit_object
self._update_minimizer(self._enum_current_minimizer)
- def _fit_function_wrapper(self, real_x=None, flatten: bool = True) -> Callable:
- """Simple fit function which injects the real X (independent)
+ def _fit_function_wrapper(
+ self, real_x: Optional[np.ndarray] = None, flatten: bool = True
+ ) -> Callable:
+ """
+ Simple fit function which injects the real X (independent)
values into the optimizer function.
This will also flatten the results if needed.
- :param real_x: Independent x parameters to be injected
- :param flatten: Should the result be a flat 1D array?
- :return: Wrapped optimizer function.
+
+ Parameters
+ ----------
+ real_x : Optional[np.ndarray], default=None
+ Independent x parameters to be injected. By default, None.
+ flatten : bool, default=True
+ Should the result be a flat 1D array? By default, True.
+
+ Returns
+ -------
+ Callable
+ Wrapped optimizer function.
"""
fun = self._fit_function
@@ -194,7 +267,8 @@ def wrapped_fit_function(x, **kwargs):
@property
def fit(self) -> Callable:
- """Property which wraps the current `fit` function from the
+ """
+ Property which wraps the current ``fit`` function from the
fitting interface.
This property return a wrapped fit function which converts the
@@ -212,7 +286,8 @@ def inner_fit_callable(
progress_callback: Callable[[dict], bool | None] | None = None,
**kwargs,
) -> FitResults:
- """This is a wrapped callable which performs the actual
+ """
+ This is a wrapped callable which performs the actual
fitting. It is split into.
3 sections, PRE/ FIT/ POST.
@@ -256,13 +331,31 @@ def _precompute_reshaping(
y: np.ndarray,
weights: Optional[np.ndarray],
vectorized: bool,
- ):
- """Check the dimensions of the inputs and reshape if necessary.
-
- :param x: ND matrix of dependent points
- :param y: N-1D matrix of independent points
- :param kwargs: Additional key-word arguments
- :return:
+ ) -> tuple[np.ndarray, np.ndarray, np.ndarray, Optional[np.ndarray], tuple[int, ...]]:
+ """
+ Check the dimensions of the inputs and reshape if necessary.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ ND matrix of dependent points.
+ y : np.ndarray
+ N-1D matrix of independent points.
+ weights : Optional[np.ndarray]
+ Optional weights for the fit.
+ vectorized : bool
+ Whether ``x`` already stores vectorized coordinates.
+
+ Returns
+ -------
+ tuple[np.ndarray, np.ndarray, np.ndarray, Optional[np.ndarray], tuple[int, ...]]
+ Reshaped x values, reshaped input data, flattened y values,
+ flattened weights, and the original x shape.
+
+ Raises
+ ------
+ ValueError
+ If the shapes of ``x`` and ``y`` are incompatible.
"""
# Make sure that they are np arrays
x_new = np.array(x)
@@ -303,15 +396,134 @@ def _precompute_reshaping(
def _post_compute_reshaping(
fit_result: FitResults, x: np.ndarray, y: np.ndarray
) -> FitResults:
- """Reshape the output of the fitter into the correct dimensions.
-
- :param fit_result: Output from the fitter
- :param x: Input x independent
- :param y: Input y dependent
- :return: Reshaped Fit Results
+ """
+ Reshape the output of the fitter into the correct dimensions.
+
+ Parameters
+ ----------
+ fit_result : FitResults
+ Output from the fitter.
+ x : np.ndarray
+ Input x independent.
+ y : np.ndarray
+ Input y dependent.
+
+ Returns
+ -------
+ FitResults
+ Reshaped Fit Results.
"""
fit_result.x = x
fit_result.y_obs = y
fit_result.y_calc = np.reshape(fit_result.y_calc, y.shape)
fit_result.y_err = np.reshape(fit_result.y_err, y.shape)
return fit_result
+
+ def mcmc_sample(
+ self,
+ x: np.ndarray,
+ y: np.ndarray,
+ weights: np.ndarray,
+ samples: int = 10000,
+ burn: int = 2000,
+ thin: int = 10,
+ population: Optional[int] = None,
+ vectorized: bool = False,
+ sampler_kwargs: Optional[dict] = None,
+ progress_callback: Optional[Callable[[dict], Optional[bool]]] = None,
+ abort_test: Optional[Callable[[], bool]] = None,
+ ) -> dict:
+ """
+ Run Bayesian MCMC sampling using the BUMPS DREAM sampler.
+
+ Works with both a plain ``Fitter`` (single dataset) and a
+ ``MultiFitter`` (multiple datasets) via polymorphic dispatch:
+ ``_precompute_reshaping`` and ``_fit_function_wrapper`` are
+ resolved on the concrete subclass at call time, so multi-dataset
+ flattening is handled automatically when called on a
+ ``MultiFitter`` instance.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Independent variable array (or list of arrays for
+ ``MultiFitter``).
+ y : np.ndarray
+ Dependent variable array (or list of arrays for
+ ``MultiFitter``).
+ weights : np.ndarray
+ Weight array (or list of arrays for ``MultiFitter``).
+ samples : int, default=10000
+ Number of retained DREAM samples requested from BUMPS.
+ burn : int, default=2000
+ Burn-in steps to discard before collecting samples.
+ thin : int, default=10
+ Thinning interval — only every ``thin``-th sample is kept,
+ which reduces autocorrelation between consecutive draws.
+ population : Optional[int], default=None
+ BUMPS DREAM population count (number of parallel chains).
+ vectorized : bool, default=False
+ When ``True``, each x array may be multi-dimensional (e.g.
+ an ``(N, M, 2)`` grid for a 2D model) and is left as-is.
+ When ``False`` (default), each x array is expected to be
+ 1-D.
+ sampler_kwargs : Optional[dict], default=None
+ Additional keyword arguments forwarded to the BUMPS DREAM
+ sampler.
+ progress_callback : Optional[Callable[[dict], Optional[bool]]], default=None
+ Optional callback invoked at each DREAM generation. The
+ payload dict includes ``iteration`` and ``sampling: True``.
+ abort_test : Optional[Callable[[], bool]], default=None
+ Optional callable that returns ``True`` to abort sampling
+ early.
+
+ Returns
+ -------
+ dict
+ Dictionary with keys ``'draws'``, ``'param_names'``,
+ ``'internal_bumps_object'``, and ``'logp'``.
+
+ Raises
+ ------
+ ValueError
+ If ``samples``, ``burn``, or ``thin`` are invalid.
+ RuntimeError
+ If the active minimizer is not a BUMPS instance.
+ """
+ if not isinstance(samples, int) or samples <= 0:
+ raise ValueError('samples must be a positive integer.')
+ if not isinstance(burn, int) or burn < 0:
+ raise ValueError('burn must be a non-negative integer.')
+ if not isinstance(thin, int) or thin < 1:
+ raise ValueError('thin must be a positive integer.')
+
+ x_fit, x_new, y_new, w_new, dims = self._precompute_reshaping(x, y, weights, vectorized)
+ self._dependent_dims = dims
+
+ original_fit_func = self._fit_function
+ self.fit_function = self._fit_function_wrapper(x_new, flatten=True)
+
+ try:
+ minimizer = self.minimizer
+ if not (hasattr(minimizer, 'package') and minimizer.package == 'bumps'):
+ raise RuntimeError(
+ 'Bayesian sampling requires a BUMPS minimizer. '
+ 'Use ``fitter.switch_minimizer(AvailableMinimizers.Bumps)`` first.'
+ )
+
+ result = minimizer.mcmc_sample(
+ x=x_fit,
+ y=y_new,
+ weights=w_new,
+ samples=samples,
+ burn=burn,
+ thin=thin,
+ population=population,
+ sampler_kwargs=sampler_kwargs,
+ progress_callback=progress_callback,
+ abort_test=abort_test,
+ )
+ finally:
+ self.fit_function = original_fit_func
+
+ return result
diff --git a/src/easyscience/fitting/minimizers/bumps_utils/eval_counter.py b/src/easyscience/fitting/minimizers/bumps_utils/eval_counter.py
index d1ef0765..087786f8 100644
--- a/src/easyscience/fitting/minimizers/bumps_utils/eval_counter.py
+++ b/src/easyscience/fitting/minimizers/bumps_utils/eval_counter.py
@@ -7,7 +7,8 @@
class EvalCounter:
- """Wrap a callable so the number of invocations is recorded on
+ """
+ Wrap a callable so the number of invocations is recorded on
``count``.
Used by the BUMPS minimizer to count objective-function evaluations
diff --git a/src/easyscience/fitting/minimizers/bumps_utils/progress_monitor.py b/src/easyscience/fitting/minimizers/bumps_utils/progress_monitor.py
index 9b3e87e8..8af39452 100644
--- a/src/easyscience/fitting/minimizers/bumps_utils/progress_monitor.py
+++ b/src/easyscience/fitting/minimizers/bumps_utils/progress_monitor.py
@@ -6,8 +6,9 @@
class BumpsProgressMonitor(Monitor):
- """BUMPS :class:`Monitor` that forwards per-step progress
- information to a user-supplied callback.
+ """
+ BUMPS :class:`Monitor` that forwards per-step progress information
+ to a user-supplied callback.
The monitor delegates payload construction to ``payload_builder`` so
the BUMPS minimizer can keep all backend-specific payload semantics
diff --git a/src/easyscience/fitting/minimizers/minimizer_base.py b/src/easyscience/fitting/minimizers/minimizer_base.py
index 35527a12..48eef544 100644
--- a/src/easyscience/fitting/minimizers/minimizer_base.py
+++ b/src/easyscience/fitting/minimizers/minimizer_base.py
@@ -6,6 +6,7 @@
from inspect import Parameter as InspectParameter
from inspect import Signature
from inspect import _empty
+from typing import Any
from typing import Callable
from typing import Dict
from typing import List
@@ -26,8 +27,9 @@
class MinimizerBase(metaclass=ABCMeta):
- """This template class is the basis for all minimizer engines in
- `EasyScience`.
+ """
+ This template class is the basis for all minimizer engines in
+ ``EasyScience``.
"""
package: str = None
@@ -76,39 +78,69 @@ def fit(
progress_callback: Callable[[dict], bool | None] | None = None,
**kwargs,
) -> FitResults:
- """Perform a fit using the engine.
-
- :param x: points to be calculated at
- :type x: np.ndarray
- :param y: measured points
- :type y: np.ndarray
- :param weights: Weights for supplied measured points
- :type weights: np.ndarray
- :param model: Optional Model which is being fitted to
- :param parameters: Optional parameters for the fit
- :param method: method for the minimizer to use.
- :type method: str
- :param kwargs: Additional arguments for the fitting function.
- :return: Fit results
+ """
+ Perform a fit using the engine.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Points to be calculated at.
+ y : np.ndarray
+ Measured points.
+ weights : np.ndarray
+ Weights for supplied measured points.
+ model : Callable | None, default=None
+ Optional Model which is being fitted to. By default, None.
+ parameters : List[Parameter] | None, default=None
+ Optional parameters for the fit. By default, None.
+ method : str | None, default=None
+ Method for the minimizer to use. By default, None.
+ tolerance : float | None, default=None
+ Requested convergence tolerance. By default, None.
+ max_evaluations : int | None, default=None
+ Maximum number of objective evaluations. By default, None.
+ progress_callback : Callable[[dict], bool | None] | None, default=None
+ Optional progress callback. By default, None.
+ **kwargs :
+ Additional arguments for the fitting function.
+
+ Returns
+ -------
+ FitResults
+ Fit results.
"""
def evaluate(
self, x: np.ndarray, minimizer_parameters: dict[str, float] | None = None, **kwargs
) -> np.ndarray:
- """Evaluate the fit function for values of x. Parameters used
- are either the latest or user supplied. If the parameters are
- user supplied, it must be in a dictionary of {'parameter_name':
- parameter_value,...}.
-
- :param x: x values for which the fit function will be evaluated
- :type x: np.ndarray
- :param minimizer_parameters: Dictionary of parameters which will be used in the fit function. They must be in a dictionary
- of {'parameter_name': parameter_value,...}
- :type minimizer_parameters: dict
- :param kwargs: additional arguments
- :return: y values calculated at points x for a set of parameters.
- :rtype: np.ndarray
- """ # noqa: E501
+ """
+ Evaluate the fit function for values of x.
+
+ Parameters used are either the latest or user supplied. If the
+ parameters are user supplied, it must be in a dictionary of
+ {'parameter_name': parameter_value,...}.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ X values for which the fit function will be evaluated.
+ minimizer_parameters : dict[str, float] | None, default=None
+ Dictionary of parameters which will be used in the fit
+ function. They must be in a dictionary of {'parameter_name':
+ parameter_value,...}. By default, None.
+ **kwargs :
+ Additional arguments.
+
+ Returns
+ -------
+ np.ndarray
+ Y values calculated at points x for a set of parameters.
+
+ Raises
+ ------
+ TypeError
+ If ``minimizer_parameters`` is not a dictionary.
+ """
if minimizer_parameters is None:
minimizer_parameters = {}
if not isinstance(minimizer_parameters, dict):
@@ -134,46 +166,68 @@ def _get_method_kwargs(self, passed_method: str | None = None) -> dict[str, str]
return {}
@abstractmethod
- def convert_to_pars_obj(self, par_list: List[Parameter] | None = None):
- """Create an engine compatible container with the `Parameters`
+ def convert_to_pars_obj(self, par_list: List[Parameter] | None = None) -> Any:
+ """
+ Create an engine compatible container with the ``Parameters``
converted from the base object.
- :param par_list: If only a single/selection of parameter is
- required. Specify as a list
- :type par_list: List[str]
- :return: engine Parameters compatible object
+ Parameters
+ ----------
+ par_list : List[Parameter] | None, default=None
+ If only a single/selection of parameter is required. Specify
+ as a list. By default, None.
+
+ Returns
+ -------
+ Any
+ Engine Parameters compatible object.
"""
@staticmethod
@abstractmethod
def supported_methods() -> List[str]:
- """Return a list of supported methods for the minimizer.
+ """
+ Return a list of supported methods for the minimizer.
- :return: List of supported methods
- :rtype: List[str]
+ Returns
+ -------
+ List[str]
+ List of supported methods.
"""
@staticmethod
@abstractmethod
def all_methods() -> List[str]:
- """Return a list of all available methods for the minimizer.
+ """
+ Return a list of all available methods for the minimizer.
- :return: List of all available methods
- :rtype: List[str]
+ Returns
+ -------
+ List[str]
+ List of all available methods.
"""
@staticmethod
@abstractmethod
def convert_to_par_object(obj): # todo after constraint changes, add type hint: obj: ObjBase
- """Convert an `EasyScience.variable.Parameter` object to an
+ """
+ Convert an ``EasyScience.variable.Parameter`` object to an
engine Parameter object.
"""
def _prepare_parameters(self, parameters: dict[str, float]) -> dict[str, float]:
- """Prepare the parameters for the minimizer.
+ """
+ Prepare the parameters for the minimizer.
+
+ Parameters
+ ----------
+ parameters : dict[str, float]
+ Dict of parameters for the minimizer with names as keys.
- :param parameters: Dict of parameters for the minimizer with
- names as keys.
+ Returns
+ -------
+ dict[str, float]
+ Completed parameter dictionary for the minimizer.
"""
pars = self._cached_pars
@@ -184,10 +238,14 @@ def _prepare_parameters(self, parameters: dict[str, float]) -> dict[str, float]:
return parameters
def _generate_fit_function(self) -> Callable:
- """Using the user supplied `fit_function`, wrap it in such a way
- we can update `Parameter` on iterations.
+ """
+ Using the user supplied ``fit_function``, wrap it in such a way
+ we can update ``Parameter`` on iterations.
- :return: a fit function which is compatible with bumps models
+ Returns
+ -------
+ Callable
+ A fit function which is compatible with bumps models.
"""
# Original fit function
func = self._original_fit_function
@@ -200,15 +258,22 @@ def _generate_fit_function(self) -> Callable:
self._cached_pars_vals[key] = (parameter.value, parameter.error)
# Make a new fit function
- def _fit_function(x: np.ndarray, **kwargs):
- """Wrapped fit function which now has an EasyScience
- compatible form.
-
- :param x: array of data points to be calculated
- :type x: np.ndarray
- :param kwargs: key word arguments
- :return: points calculated at `x`
- :rtype: np.ndarray
+ def _fit_function(x: np.ndarray, **kwargs) -> np.ndarray:
+ """
+ Wrapped fit function which now has an EasyScience compatible
+ form.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Array of data points to be calculated.
+ **kwargs :
+ Key word arguments.
+
+ Returns
+ -------
+ np.ndarray
+ Points calculated at ``x``.
"""
# Update the `Parameter` values and the callback if needed
# TODO THIS IS NOT THREAD SAFE :-(
@@ -231,11 +296,12 @@ def _fit_function(x: np.ndarray, **kwargs):
@staticmethod
def _create_signature(parameters: Dict[int, Parameter]) -> Signature:
- """Wrap the function signature.
+ """
+ Wrap the function signature.
- This is done as lmfit wants the function to be in the form:
- f = (x, a=1, b=2)...
- Where we need to be generic. Note that this won't hold for much outside of this scope.
+ This is done as lmfit wants the function to be in the form: f =
+ (x, a=1, b=2)... Where we need to be generic. Note that this
+ won't hold for much outside of this scope.
"""
wrapped_parameters = []
wrapped_parameters.append(
diff --git a/src/easyscience/fitting/minimizers/minimizer_bumps.py b/src/easyscience/fitting/minimizers/minimizer_bumps.py
index 13678854..b2b0694a 100644
--- a/src/easyscience/fitting/minimizers/minimizer_bumps.py
+++ b/src/easyscience/fitting/minimizers/minimizer_bumps.py
@@ -1,10 +1,11 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+from __future__ import annotations
+
import copy
-import warnings
+from typing import Any
from typing import Callable
-from typing import List
import numpy as np
from bumps.fitters import FIT_AVAILABLE_IDS
@@ -33,38 +34,41 @@
class Bumps(MinimizerBase):
"""
- This is a wrapper to Bumps: https://bumps.readthedocs.io/
- It allows for the Bumps fitting engine to use parameters declared in an `EasyScience.base_classes.ObjBase`.
+ This is a wrapper to Bumps: https://bumps.readthedocs.io/ It allows
+ for the Bumps fitting engine to use parameters declared in an
+ ``EasyScience.base_classes.ObjBase``.
"""
package = 'bumps'
def __init__(
self,
- obj, #: ObjBase,
+ obj: object, #: ObjBase,
fit_function: Callable,
minimizer_enum: AvailableMinimizers | None = None,
): # todo after constraint changes, add type hint: obj: ObjBase # noqa: E501
- """Initialize the fitting engine with a `ObjBase` and an
- arbitrary fitting function.
-
- :param obj: Object containing elements of the `Parameter` class
- :type obj: ObjBase
- :param fit_function: function that when called returns y values. 'x' must be the first
- and only positional argument. Additional values can be supplied by
- keyword/value pairs
- :type fit_function: Callable
+ """
+ Initialize the fitting engine.
+
+ Parameters
+ ----------
+ obj : object
+ Object containing the ``Parameter`` instances to fit.
+ fit_function : Callable
+ Callable returning model y values for the supplied x values.
+ minimizer_enum : AvailableMinimizers | None, default=None
+ Selected BUMPS minimizer configuration. By default, None.
"""
super().__init__(obj=obj, fit_function=fit_function, minimizer_enum=minimizer_enum)
self._p_0 = {}
self._eval_counter: EvalCounter | None = None
@staticmethod
- def all_methods() -> List[str]:
+ def all_methods() -> list[str]:
return FIT_AVAILABLE_IDS_FILTERED
@staticmethod
- def supported_methods() -> List[str]:
+ def supported_methods() -> list[str]:
# only a small subset
methods = ['amoeba', 'newton', 'lm']
return methods
@@ -75,49 +79,67 @@ def fit(
y: np.ndarray,
weights: np.ndarray,
model: Callable | None = None,
- parameters: List[Parameter] | None = None,
+ parameters: list[Parameter] | None = None,
method: str | None = None,
tolerance: float | None = None,
max_evaluations: int | None = None,
progress_callback: Callable[[dict], bool | None] | None = None,
+ abort_test: Callable[[], bool] | None = None,
minimizer_kwargs: dict | None = None,
engine_kwargs: dict | None = None,
- **kwargs,
+ **kwargs: Any,
) -> FitResults:
- """Perform a fit using the BUMPS engine.
-
- :param x: points to be calculated at
- :type x: np.ndarray
- :param y: measured points
- :type y: np.ndarray
- :param weights: Weights for supplied measured points
- :type weights: np.ndarray
- :param model: Optional Model which is being fitted to
- :param parameters: Optional parameters for the fit
- :type parameters: List[BumpsParameter]
- :param method: Method for minimization
- :type method: str
- :param max_evaluations: Maximum number of optimizer steps. Forwarded to BUMPS as
- its ``steps`` parameter. If ``None``, the default value defined by the
- selected BUMPS fitter (``fitclass.settings``) is used.
- :type max_evaluations: int | None
- :param progress_callback: Optional callback for progress updates. The payload
- field ``iteration`` carries the BUMPS optimizer step index.
- :type progress_callback: Callable
-
- .. note::
- The :class:`FitResults` field ``n_evaluations`` reports the number of
- **objective-function evaluations** consumed by the fit, for cross-backend
- consistency with LMFit (``nfev``) and DFO-LS (``nf``). For BUMPS this is
- distinct from the optimizer **step count** that ``max_evaluations`` (i.e.
- BUMPS ``steps``) is budgeted against and returned as
- :class:`FitResults.iterations`; a single step may trigger several objective
- evaluations, so ``n_evaluations`` can legitimately exceed
- ``max_evaluations``. The budget-exhaustion check is performed against
- ``iterations``, not ``n_evaluations``.
-
- :return: Fit results
- :rtype: FitResults
+ """
+ Perform a fit using the BUMPS engine.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Points to be calculated at.
+ y : np.ndarray
+ Measured points.
+ weights : np.ndarray
+ Weights for supplied measured points.
+ model : Callable | None, default=None
+ Optional Model which is being fitted to. By default, None.
+ parameters : list[Parameter] | None, default=None
+ Optional parameters for the fit. By default, None.
+ method : str | None, default=None
+ Method for minimization. By default, None.
+ tolerance : float | None, default=None
+ Requested optimizer tolerance. By default, None.
+ max_evaluations : int | None, default=None
+ Maximum number of optimizer steps. Forwarded to BUMPS as its
+ ``steps`` parameter. If ``None``, the default value defined
+ by the selected BUMPS fitter (``fitclass.settings``) is
+ used. By default, None.
+ progress_callback : Callable[[dict], bool | None] | None, default=None
+ Optional callback for progress updates. The payload field
+ ``iteration`` carries the BUMPS optimizer step index. By
+ default, None.
+ abort_test : Callable[[], bool] | None, default=None
+ Optional callback that returns ``True`` to signal that the
+ fit should be aborted. Called periodically during the BUMPS
+ optimizer iteration loop.
+ minimizer_kwargs : dict | None, default=None
+ Additional keyword arguments passed to the BUMPS minimizer.
+ By default, None.
+ engine_kwargs : dict | None, default=None
+ Additional engine keyword arguments. By default, None.
+ **kwargs : Any
+ Additional keyword arguments passed to ``FitDriver``.
+
+ Returns
+ -------
+ FitResults
+ Fit results.
+
+ Raises
+ ------
+ FitError
+ If the BUMPS fit fails.
+ ValueError
+ If the input shapes or weights are invalid.
"""
method_dict = self._get_method_kwargs(method)
@@ -186,6 +208,7 @@ def fit(
fitclass=fitclass,
problem=problem,
monitors=monitors,
+ abort_test=abort_test if abort_test is not None else (lambda: False),
**minimizer_kwargs,
**kwargs,
)
@@ -267,15 +290,21 @@ def _current_parameter_snapshot(self, problem, point: np.ndarray) -> dict:
snapshot[dict_name] = float(value)
return snapshot
- def convert_to_pars_obj(self, par_list: List[Parameter] | None = None) -> List[BumpsParameter]:
- """Create a container with the `Parameters` converted from the
+ def convert_to_pars_obj(self, par_list: list[Parameter] | None = None) -> list[BumpsParameter]:
+ """
+ Create a container with the ``Parameters`` converted from the
base object.
- :param par_list: If only a single/selection of parameter is
- required. Specify as a list
- :type par_list: List[str]
- :return: bumps Parameters list
- :rtype: List[BumpsParameter]
+ Parameters
+ ----------
+ par_list : list[Parameter] | None, default=None
+ If only a single/selection of parameter is required. Specify
+ as a list. By default, None.
+
+ Returns
+ -------
+ list[BumpsParameter]
+ Bumps Parameters list.
"""
if par_list is None:
# Assume that we have a ObjBase for which we can obtain a list
@@ -285,12 +314,20 @@ def convert_to_pars_obj(self, par_list: List[Parameter] | None = None) -> List[B
# For some reason I have to double staticmethod :-/
@staticmethod
- def convert_to_par_object(obj) -> BumpsParameter:
- """Convert an `EasyScience.variable.Parameter` object to a bumps
+ def convert_to_par_object(obj: Parameter) -> BumpsParameter:
+ """
+ Convert an ``EasyScience.variable.Parameter`` object to a bumps
Parameter object.
- :return: bumps Parameter compatible object.
- :rtype: BumpsParameter
+ Parameters
+ ----------
+ obj : Parameter
+ EasyScience parameter to convert.
+
+ Returns
+ -------
+ BumpsParameter
+ Bumps Parameter compatible object.
"""
value = obj.value
@@ -302,20 +339,29 @@ def convert_to_par_object(obj) -> BumpsParameter:
fixed=obj.fixed,
)
- def _make_model(self, parameters: List[BumpsParameter] | None = None) -> Callable:
- """Generate a bumps model from the supplied `fit_function` and
+ def _make_model(self, parameters: list[BumpsParameter] | None = None) -> Callable:
+ """
+ Generate a bumps model from the supplied ``fit_function`` and
parameters in the base object. Note that this makes a callable
as it needs to be initialized with *x*, *y*, *weights*
Weights are converted to dy (standard deviation of y).
- :return: Callable to make a bumps Curve model
- :rtype: Callable
+ Parameters
+ ----------
+ parameters : list[BumpsParameter] | None, default=None
+ Optional BUMPS parameters to bind into the model.
+
+ Returns
+ -------
+ Callable
+ Callable to make a bumps Curve model.
"""
fit_func = EvalCounter(self._generate_fit_function())
self._eval_counter = fit_func
def _outer(obj):
+
def _make_func(x, y, weights):
bumps_pars = {}
if not parameters:
@@ -334,19 +380,205 @@ def _make_func(x, y, weights):
return _outer(self)
+ def mcmc_sample(
+ self,
+ x: np.ndarray,
+ y: np.ndarray,
+ weights: np.ndarray,
+ samples: int = 10000,
+ burn: int = 2000,
+ thin: int = 10,
+ population: int | None = None,
+ sampler_kwargs: dict | None = None,
+ progress_callback: Callable[[dict], bool | None] | None = None,
+ abort_test: Callable[[], bool] | None = None,
+ ) -> dict:
+ """
+ Run Bayesian MCMC sampling using the BUMPS DREAM sampler.
+
+ Builds a BUMPS ``FitProblem`` from the current model and runs
+ the DREAM sampler. This is the public minimizer-level entry
+ point for Bayesian sampling; the higher-level
+ ``MultiFitter.mcmc_sample`` delegates to this method after
+ flattening multi-dataset arrays.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Flattened independent variable array.
+ y : np.ndarray
+ Flattened dependent variable array.
+ weights : np.ndarray
+ Flattened weight array.
+ samples : int, default=10000
+ Number of retained DREAM samples requested from BUMPS.
+ burn : int, default=2000
+ Burn-in steps.
+ thin : int, default=10
+ Thinning interval.
+ population : int | None, default=None
+ BUMPS DREAM population count (number of parallel chains).
+ sampler_kwargs : dict | None, default=None
+ Additional keyword arguments forwarded to
+ ``bumps.fitters.fit``.
+ progress_callback : Callable[[dict], bool | None] | None, default=None
+ Optional callback for progress updates during sampling. The
+ payload dict includes ``iteration`` (DREAM generation
+ number) and ``sampling: True``.
+ abort_test : Callable[[], bool] | None, default=None
+ Optional callback that returns ``True`` to signal that
+ sampling should be aborted. Called periodically during the
+ DREAM sampling loop.
+
+ Returns
+ -------
+ dict
+ Dictionary with keys ``'draws'``, ``'param_names'``,
+ ``'internal_bumps_object'``, and ``'logp'``.
+
+ Raises
+ ------
+ ValueError
+ If the input shapes or weights are invalid, or if
+ ``progress_callback`` is not callable.
+ FitError
+ If DREAM sampling was aborted by the user (via
+ ``abort_test``).
+ Exception
+ Re-raised from DREAM fitting if any unexpected error occurs
+ (parameter values are restored beforehand).
+ """
+ from bumps.fitters import DreamFit
+ from bumps.names import FitProblem
+
+ x, y, weights = np.asarray(x), np.asarray(y), np.asarray(weights)
+
+ if not isinstance(samples, int) or samples <= 0:
+ raise ValueError('samples must be a positive integer.')
+ if not isinstance(burn, int) or burn < 0:
+ raise ValueError('burn must be a non-negative integer.')
+ if not isinstance(thin, int) or thin < 1:
+ raise ValueError('thin must be a positive integer.')
+
+ if y.shape != x.shape:
+ raise ValueError('x and y must have the same shape.')
+
+ if not np.isfinite(x).all():
+ raise ValueError('x cannot contain NaN or infinite values.')
+ if not np.isfinite(y).all():
+ raise ValueError('y cannot contain NaN or infinite values.')
+
+ if weights.shape != x.shape:
+ raise ValueError('Weights must have the same shape as x and y.')
+
+ if not np.isfinite(weights).all():
+ raise ValueError('Weights cannot be NaN or infinite.')
+
+ if (weights <= 0).any():
+ raise ValueError('Weights must be strictly positive and non-zero.')
+
+ # Build the BUMPS Curve model using the minimizer's existing machinery
+ model_func = self._make_model()
+ curve = model_func(x, y, weights)
+ problem = FitProblem(curve)
+
+ # Build DREAM kwargs
+ dream_kwargs: dict = {'samples': samples, 'burn': burn, 'thin': thin}
+ if population is not None:
+ dream_kwargs['pop'] = population
+ if sampler_kwargs:
+ dream_kwargs.update(sampler_kwargs)
+
+ # Build monitors (same pattern as classical Bumps.fit())
+ monitors = []
+ if progress_callback is not None:
+ if not callable(progress_callback):
+ raise ValueError('progress_callback must be callable')
+ # Compute total DREAM steps for progress display (burn + sampling generations).
+ # BUMPS DREAM default population count is 10 when not specified by the user.
+ _dream_default_pop = 10
+ pop_val = population if population is not None else _dream_default_pop
+ _total_steps = burn + (samples + pop_val - 1) // pop_val
+ monitors.append(
+ BumpsProgressMonitor(
+ problem,
+ progress_callback,
+ lambda problem, iteration, point, nllf: {
+ **self._build_sample_progress_payload(problem, iteration, point, nllf),
+ 'total_steps': _total_steps,
+ },
+ )
+ )
+
+ driver = FitDriver(
+ fitclass=DreamFit,
+ problem=problem,
+ monitors=monitors,
+ abort_test=abort_test if abort_test is not None else (lambda: False),
+ **dream_kwargs,
+ )
+ driver.clip()
+
+ from easyscience import global_object
+
+ stack_status = global_object.stack.enabled
+ global_object.stack.enabled = False
+
+ try:
+ x_opt, fx = driver.fit()
+ result_state = getattr(driver.fitter, 'state', None)
+ if result_state is None:
+ raise FitError('Sampling aborted by user')
+ except Exception:
+ self._restore_parameter_values()
+ raise
+ finally:
+ global_object.stack.enabled = stack_status
+
+ draws = result_state.draw().points
+ param_names = [p.name[len(MINIMIZER_PARAMETER_PREFIX) :] for p in problem._parameters]
+ logp = getattr(result_state, 'logp', None)
+
+ return {
+ 'draws': draws,
+ 'param_names': param_names,
+ 'internal_bumps_object': result_state,
+ 'logp': logp,
+ }
+
+ def _build_sample_progress_payload(
+ self, problem, iteration: int, point: np.ndarray, nllf: float
+ ) -> dict:
+ """
+ Build a progress payload for Bayesian DREAM sampling steps.
+
+ Called by :class:`BumpsProgressMonitor` at each DREAM
+ generation. The payload includes ``sampling: True`` so
+ downstream consumers can distinguish sampling progress from
+ classical fitting progress.
+ """
+ payload = self._build_progress_payload(problem, iteration, point, nllf)
+ payload['sampling'] = True
+ return payload
+
def _set_parameter_fit_result(
self,
- fit_result,
+ fit_result: Any,
stack_status: bool,
- par_list: List[BumpsParameter],
- ):
- """Update parameters to their final values and assign a std
- error to them.
-
- :param fit_result: BUMPS OptimizeResult containing best-fit
- values and errors
- :param stack_status: Whether the undo stack was enabled
- :param par_list: List of BUMPS parameter objects
+ par_list: list[BumpsParameter],
+ ) -> None:
+ """
+ Update parameters to their final values and assign a std error
+ to them.
+
+ Parameters
+ ----------
+ fit_result : Any
+ BUMPS OptimizeResult containing best-fit values and errors.
+ stack_status : bool
+ Whether the undo stack was enabled.
+ par_list : list[BumpsParameter]
+ List of BUMPS parameter objects.
"""
from easyscience import global_object
@@ -368,20 +600,29 @@ def _set_parameter_fit_result(
def _gen_fit_results(
self,
- fit_results,
+ fit_results: Any,
max_evaluations: int | None = None,
tolerance: float | None = None,
- **kwargs,
+ **kwargs: Any,
) -> FitResults:
- """Convert fit results into the unified `FitResults` format.
-
- :param x_result: Optimized parameter values from FitDriver
- :param fx: Final objective function value
- :param driver: The FitDriver instance
- :param n_evaluations: Number of iterations completed
- :param max_evaluations: Maximum evaluations budget (if set)
- :return: fit results container
- :rtype: FitResults
+ """
+ Convert fit results into the unified ``FitResults`` format.
+
+ Parameters
+ ----------
+ fit_results : Any
+ Native BUMPS fit result object.
+ max_evaluations : int | None, default=None
+ Maximum evaluations budget (if set). By default, None.
+ tolerance : float | None, default=None
+ Requested optimizer tolerance. By default, None.
+ **kwargs : Any
+ Additional result attributes to copy onto ``FitResults``.
+
+ Returns
+ -------
+ FitResults
+ Fit results container.
"""
results = FitResults()
@@ -430,19 +671,19 @@ def _gen_fit_results(
f'objective evaluated {n_evaluations} times'
)
if stopped_on_budget:
+ from easyscience import global_object
+
if tolerance is None:
- warnings.warn(
+ global_object.log.getLogger('fitting.bumps').warning(
f'Fit did not converge within the maximum optimizer steps of {max_evaluations} '
f'({n_evaluations} objective evaluations). '
- 'Consider increasing the maximum number of evaluations or adjusting the tolerance.',
- UserWarning,
+ 'Consider increasing the maximum number of evaluations or adjusting the tolerance.'
)
else:
- warnings.warn(
+ global_object.log.getLogger('fitting.bumps').warning(
f'Fit did not reach the desired tolerance of {tolerance} within the maximum optimizer steps of {max_evaluations} '
f'({n_evaluations} objective evaluations). '
- 'Consider increasing the maximum number of evaluations or adjusting the tolerance.',
- UserWarning,
+ 'Consider increasing the maximum number of evaluations or adjusting the tolerance.'
)
# results.residual = results.y_obs - results.y_calc
diff --git a/src/easyscience/fitting/minimizers/minimizer_dfo.py b/src/easyscience/fitting/minimizers/minimizer_dfo.py
index e8543c40..319db849 100644
--- a/src/easyscience/fitting/minimizers/minimizer_dfo.py
+++ b/src/easyscience/fitting/minimizers/minimizer_dfo.py
@@ -1,8 +1,8 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
from dataclasses import dataclass
+from typing import Any
from typing import Callable
from typing import Dict
from typing import List
@@ -38,26 +38,29 @@ class DFOCallbackState:
class DFO(MinimizerBase):
"""
- This is a wrapper to Derivative Free Optimisation for Least Square: https://numericalalgorithmsgroup.github.io/dfols/
+ This is a wrapper to Derivative Free Optimisation for Least Square:
+ https://numericalalgorithmsgroup.github.io/dfols/.
"""
package = 'dfo'
def __init__(
self,
- obj, #: ObjBase,
+ obj: object, #: ObjBase,
fit_function: Callable,
minimizer_enum: AvailableMinimizers | None = None,
): # todo after constraint changes, add type hint: obj: ObjBase # noqa: E501
- """Initialize the fitting engine with a `ObjBase` and an
- arbitrary fitting function.
-
- :param obj: Object containing elements of the `Parameter` class
- :type obj: ObjBase
- :param fit_function: function that when called returns y values. 'x' must be the first
- and only positional argument. Additional values can be supplied by
- keyword/value pairs
- :type fit_function: Callable
+ """
+ Initialize the fitting engine.
+
+ Parameters
+ ----------
+ obj : object
+ Object containing the ``Parameter`` instances to fit.
+ fit_function : Callable
+ Callable returning model y values for the supplied x values.
+ minimizer_enum : AvailableMinimizers | None, default=None
+ Selected DFO minimizer configuration. By default, None.
"""
super().__init__(obj=obj, fit_function=fit_function, minimizer_enum=minimizer_enum)
self._p_0 = {}
@@ -84,26 +87,47 @@ def fit(
callback: Callable[[DFOCallbackState], None] | None = None,
**kwargs,
) -> FitResults:
- """Perform a fit using the DFO-ls engine.
-
- :param x: points to be calculated at
- :type x: np.ndarray
- :param y: measured points
- :type y: np.ndarray
- :param weights: Weights for supplied measured points.
- :type weights: np.ndarray
- :param model: Optional Model which is being fitted to
- :type model: lmModel
- :param parameters: Optional parameters for the fit
- :type parameters: List[bumpsParameter]
- :param kwargs: Additional arguments for the fitting function.
- :param method: Method for minimization
- :type method: str
- :return: Fit results
- :rtype: ModelResult For standard least squares, the weights
- should be 1/sigma, where sigma is the standard deviation of
- the measurement. For unweighted least squares, these should
- be 1.
+ """
+ Perform a fit using the DFO-ls engine.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Points to be calculated at.
+ y : np.ndarray
+ Measured points.
+ weights : np.ndarray
+ Weights for supplied measured points.
+ model : Callable | None, default=None
+ Optional Model which is being fitted to. By default, None.
+ parameters : List[Parameter] | None, default=None
+ Optional parameters for the fit. By default, None.
+ method : str | None, default=None
+ Method for minimization. By default, None.
+ tolerance : float | None, default=None
+ Requested optimizer tolerance. By default, None.
+ max_evaluations : int | None, default=None
+ Maximum number of evaluations. By default, None.
+ progress_callback : Callable[[dict], bool | None] | None, default=None
+ Optional callback receiving normalized progress payloads.
+ callback : Callable[[DFOCallbackState], None] | None, default=None
+ Optional native DFO callback.
+ **kwargs :
+ Additional arguments for the fitting function.
+
+ Returns
+ -------
+ FitResults
+ Fit results should be 1/sigma, where sigma is the standard
+ deviation of the measurement. For unweighted least squares,
+ these should be 1.
+
+ Raises
+ ------
+ FitError
+ If the DFO fit fails.
+ ValueError
+ If the input shapes, weights, or tolerance are invalid.
"""
x, y, weights = np.asarray(x), np.asarray(y), np.asarray(weights)
@@ -177,16 +201,27 @@ def _make_model(
parameters: List[Parameter] | None = None,
callback: Callable[[DFOCallbackState], None] | None = None,
) -> Callable:
- """Generate a model from the supplied `fit_function` and
+ """
+ Generate a model from the supplied ``fit_function`` and
parameters in the base object. Note that this makes a callable
as it needs to be initialized with *x*, *y*, *weights*
- :return: Callable model which returns residuals
- :rtype: Callable
+ Parameters
+ ----------
+ parameters : List[Parameter] | None, default=None
+ Optional parameter subset to include in the model.
+ callback : Callable[[DFOCallbackState], None] | None, default=None
+ Optional callback invoked on each objective evaluation.
+
+ Returns
+ -------
+ Callable
+ Callable model which returns residuals.
"""
fit_func = self._generate_fit_function()
def _outer(obj: DFO):
+
def _make_func(x, y, weights):
dfo_pars = {}
if not parameters:
@@ -269,12 +304,19 @@ def wrapped_model(pars_values: List[float]) -> np.ndarray:
def _make_progress_adapter(
progress_callback: Callable[[dict], bool | None],
) -> Callable[['DFOCallbackState'], None]:
- """Create a DFO callback that translates DFOCallbackState into
- the standard progress_callback dict format used by the GUI.
-
- :param progress_callback: Standard progress callback (dict ->
- bool|None)
- :return: DFO-compatible callback
+ """
+ Create a DFO callback that translates DFOCallbackState into the
+ standard progress_callback dict format used by the GUI.
+
+ Parameters
+ ----------
+ progress_callback : Callable[[dict], bool | None]
+ Standard progress callback (dict -> bool|None).
+
+ Returns
+ -------
+ Callable[['DFOCallbackState'], None]
+ DFO-compatible callback.
"""
def adapter(state: 'DFOCallbackState') -> None:
@@ -297,15 +339,22 @@ def adapter(state: 'DFOCallbackState') -> None:
return adapter
- def _set_parameter_fit_result(self, fit_result, stack_status, ci: float = 0.95) -> None:
- """Update parameters to their final values and assign a std
- error to them.
-
- :param fit_result: Fit object which contains info on the fit
- :param ci: Confidence interval for calculating errors. Default
- 95%
- :return: None
- :rtype: noneType
+ def _set_parameter_fit_result(
+ self, fit_result: Any, stack_status: bool, ci: float = 0.95
+ ) -> None:
+ """
+ Update parameters to their final values and assign a std error
+ to them.
+
+ Parameters
+ ----------
+ fit_result : Any
+ Fit object which contains info on the fit.
+ stack_status : bool
+ Whether the undo stack was enabled.
+ ci : float, default=0.95
+ Confidence interval for calculating errors. Default 95%. By
+ default, 0.95.
"""
from easyscience import global_object
@@ -323,15 +372,28 @@ def _set_parameter_fit_result(self, fit_result, stack_status, ci: float = 0.95)
if stack_status:
global_object.stack.endMacro()
- def _gen_fit_results(self, fit_results, weights, **kwargs) -> FitResults:
- """Convert fit results into the unified `FitResults` format.
-
- :param fit_result: Fit object which contains info on the fit
- :return: fit results container
- :rtype: FitResults
+ def _gen_fit_results(self, fit_results: Any, weights: np.ndarray, **kwargs: Any) -> FitResults:
+ """
+ Convert fit results into the unified ``FitResults`` format.
+
+ Parameters
+ ----------
+ fit_results : Any
+ Fit object which contains info on the fit.
+ weights : np.ndarray
+ Weights used during fitting.
+ **kwargs : Any
+ Additional result attributes to copy onto ``FitResults``.
+
+ Returns
+ -------
+ FitResults
+ Fit results container.
"""
results = FitResults()
+ from easyscience import global_object
+
for name, value in kwargs.items():
if getattr(results, name, False):
setattr(results, name, value)
@@ -339,7 +401,7 @@ def _gen_fit_results(self, fit_results, weights, **kwargs) -> FitResults:
# EXIT_SUCCESS is 0 and EXIT_MAXFUN_WARNING keeps a different flag value.
results.success = fit_results.flag == fit_results.EXIT_SUCCESS
if fit_results.flag == fit_results.EXIT_MAXFUN_WARNING:
- warnings.warn(str(fit_results.msg), UserWarning)
+ global_object.log.getLogger('fitting.dfo').warning(str(fit_results.msg))
pars = {}
for p_name, par in self._cached_pars.items():
@@ -358,7 +420,7 @@ def _gen_fit_results(self, fit_results, weights, **kwargs) -> FitResults:
results.message = str(fit_results.msg)
if not results.success:
warning_message = results.message or 'DFO fit did not succeed.'
- warnings.warn(warning_message, UserWarning, stacklevel=2)
+ global_object.log.getLogger('fitting.dfo').warning(warning_message)
# results.residual = results.y_obs - results.y_calc
# results.goodness_of_fit = fit_results.f
@@ -394,16 +456,30 @@ def _extract_iterations(fit_results) -> int | None:
def _dfo_fit(
pars: Dict[str, Parameter],
model: Callable,
- **kwargs,
- ):
- """Method to convert EasyScience styling to DFO-LS styling (yes,
+ **kwargs: Any,
+ ) -> Any:
+ """
+ Method to convert EasyScience styling to DFO-LS styling (yes,
again)
- :param model: Model which accepts f(x[0])
- :type model: Callable
- :param kwargs: Any additional arguments for dfols.solver
- :type kwargs: dict
- :return: dfols fit results container
+ Parameters
+ ----------
+ pars : Dict[str, Parameter]
+ Parameters to optimize.
+ model : Callable
+ Model which accepts f(x[0]).
+ **kwargs : Any
+ Any additional arguments for dfols.solver.
+
+ Returns
+ -------
+ Any
+ DFO-LS fit results container.
+
+ Raises
+ ------
+ FitError
+ If DFO-LS reports a failure.
"""
pars_values = np.array([par.value for par in pars.values()])
diff --git a/src/easyscience/fitting/minimizers/minimizer_lmfit.py b/src/easyscience/fitting/minimizers/minimizer_lmfit.py
index fbfd9e5b..31fb543f 100644
--- a/src/easyscience/fitting/minimizers/minimizer_lmfit.py
+++ b/src/easyscience/fitting/minimizers/minimizer_lmfit.py
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
+from typing import Any
from typing import Callable
from typing import List
@@ -24,28 +24,31 @@
class LMFit(MinimizerBase): # noqa: S101
"""
- This is a wrapper to the extended Levenberg-Marquardt Fit: https://lmfit.github.io/lmfit-py/
- It allows for the lmfit fitting engine to use parameters declared in an `EasyScience.base_classes.ObjBase`.
+ This is a wrapper to the extended Levenberg-Marquardt Fit:
+ https://lmfit.github.io/lmfit-py/ It allows for the lmfit fitting
+ engine to use parameters declared in an
+ ``EasyScience.base_classes.ObjBase``.
"""
package = 'lmfit'
def __init__(
self,
- obj, #: ObjBase,
+ obj: object, #: ObjBase,
fit_function: Callable,
minimizer_enum: AvailableMinimizers | None = None,
): # todo after constraint changes, add type hint: obj: ObjBase # noqa: E501
- """Initialize the minimizer with the `ObjBase` and the
- `fit_function` to be used.
-
- :param obj: Base object which contains the parameters to be
- fitted
- :type obj: ObjBase
- :param fit_function: Function which will be fitted to the data
- :type fit_function: Callable
- :param method: Method to be used by the minimizer
- :type method: str
+ """
+ Initialize the minimizer.
+
+ Parameters
+ ----------
+ obj : object
+ Object containing the ``Parameter`` instances to fit.
+ fit_function : Callable
+ Callable returning model y values for the supplied x values.
+ minimizer_enum : AvailableMinimizers | None, default=None
+ Selected LMFit minimizer configuration. By default, None.
"""
super().__init__(obj=obj, fit_function=fit_function, minimizer_enum=minimizer_enum)
self._last_iteration: int | None = None
@@ -92,29 +95,50 @@ def fit(
engine_kwargs: dict | None = None,
**kwargs,
) -> FitResults:
- """Perform a fit using the lmfit engine.
-
- :param method:
- :type method:
- :param x: points to be calculated at
- :type x: np.ndarray
- :param y: measured points
- :type y: np.ndarray
- :param weights: Weights for supplied measured points
- :type weights: np.ndarray
- :param model: Optional Model which is being fitted to
- :type model: LMModel
- :param parameters: Optional parameters for the fit
- :type parameters: LMParameters
- :param minimizer_kwargs: Arguments to be passed directly to the
- minimizer
- :type minimizer_kwargs: dict
- :param kwargs: Additional arguments for the fitting function.
- :return: Fit results
- :rtype: ModelResult For standard least squares, the weights
- should be 1/sigma, where sigma is the standard deviation of
- the measurement. For unweighted least squares, these should
- be 1.
+ """
+ Perform a fit using the lmfit engine.
+
+ Parameters
+ ----------
+ x : np.ndarray
+ Points to be calculated at.
+ y : np.ndarray
+ Measured points.
+ weights : np.ndarray, default=None
+ Weights for supplied measured points. By default, None.
+ model : LMModel | None, default=None
+ Optional Model which is being fitted to. By default, None.
+ parameters : LMParameters | None, default=None
+ Optional parameters for the fit. By default, None.
+ method : str | None, default=None
+ Minimizer method. By default, None.
+ tolerance : float | None, default=None
+ Requested optimizer tolerance. By default, None.
+ max_evaluations : int | None, default=None
+ Maximum number of function evaluations. By default, None.
+ progress_callback : Callable[[dict], bool | None] | None, default=None
+ Optional callback receiving normalized progress payloads.
+ minimizer_kwargs : dict | None, default=None
+ Additional keyword arguments passed to LMFit's minimizer. By
+ default, None.
+ engine_kwargs : dict | None, default=None
+ Additional engine keyword arguments. By default, None.
+ **kwargs :
+ Additional arguments for the fitting function.
+
+ Returns
+ -------
+ FitResults
+ Fit results should be 1/sigma, where sigma is the standard
+ deviation of the measurement. For unweighted least squares,
+ these should be 1.
+
+ Raises
+ ------
+ FitError
+ If the LMFit optimization fails.
+ ValueError
+ If the input shapes or weights are invalid.
"""
x, y, weights = np.asarray(x), np.asarray(y), np.asarray(weights)
@@ -172,6 +196,7 @@ def _create_iter_callback(
self,
progress_callback: Callable[[dict], bool | None] | None,
) -> Callable | None:
+
def iter_cb(params, iteration: int, residuals: np.ndarray, *args, **kwargs) -> bool:
if iteration >= 0:
self._last_iteration = int(iteration)
@@ -224,12 +249,20 @@ def _get_fit_kws(
return minimizer_kwargs
def convert_to_pars_obj(self, parameters: List[Parameter] | None = None) -> LMParameters:
- """Create an lmfit compatible container with the `Parameters`
+ """
+ Create an lmfit compatible container with the ``Parameters``
converted from the base object.
- :param parameters: If only a single/selection of parameter is
- required. Specify as a list
- :return: lmfit Parameters compatible object
+ Parameters
+ ----------
+ parameters : List[Parameter] | None, default=None
+ If only a single/selection of parameter is required. Specify
+ as a list. By default, None.
+
+ Returns
+ -------
+ LMParameters
+ Lmfit Parameters compatible object.
"""
if parameters is None:
# Assume that we have a ObjBase for which we can obtain a list
@@ -241,11 +274,19 @@ def convert_to_pars_obj(self, parameters: List[Parameter] | None = None) -> LMPa
@staticmethod
def convert_to_par_object(parameter: Parameter) -> LMParameter:
- """Convert an EasyScience Parameter object to a lmfit Parameter
+ """
+ Convert an EasyScience Parameter object to a lmfit Parameter
object.
- :return: lmfit Parameter compatible object.
- :rtype: LMParameter
+ Parameters
+ ----------
+ parameter : Parameter
+ EasyScience parameter to convert.
+
+ Returns
+ -------
+ LMParameter
+ Lmfit Parameter compatible object.
"""
value = parameter.value
@@ -260,11 +301,19 @@ def convert_to_par_object(parameter: Parameter) -> LMParameter:
)
def _make_model(self, pars: LMParameters | None = None) -> LMModel:
- """Generate a lmfit model from the supplied `fit_function` and
+ """
+ Generate a lmfit model from the supplied ``fit_function`` and
parameters in the base object.
- :return: Callable lmfit model
- :rtype: LMModel
+ Parameters
+ ----------
+ pars : LMParameters | None, default=None
+ Optional lmfit parameter container.
+
+ Returns
+ -------
+ LMModel
+ Callable lmfit model.
"""
# Generate the fitting function
fit_func = self._generate_fit_function()
@@ -297,13 +346,17 @@ def _make_model(self, pars: LMParameters | None = None) -> LMModel:
self._cached_model = model
return model
- def _set_parameter_fit_result(self, fit_result: ModelResult, stack_status: bool):
- """Update parameters to their final values and assign a std
- error to them.
-
- :param fit_result: Fit object which contains info on the fit
- :return: None
- :rtype: noneType
+ def _set_parameter_fit_result(self, fit_result: ModelResult, stack_status: bool) -> None:
+ """
+ Update parameters to their final values and assign a std error
+ to them.
+
+ Parameters
+ ----------
+ fit_result : ModelResult
+ Fit object which contains info on the fit.
+ stack_status : bool
+ Whether the undo stack was enabled.
"""
from easyscience import global_object
@@ -321,14 +374,24 @@ def _set_parameter_fit_result(self, fit_result: ModelResult, stack_status: bool)
if stack_status:
global_object.stack.endMacro()
- def _gen_fit_results(self, fit_results: ModelResult, **kwargs) -> FitResults:
+ def _gen_fit_results(self, fit_results: ModelResult, **kwargs: Any) -> FitResults:
"""
- Convert fit results into the unified `FitResults` format.
- See https://github.com/lmfit/lmfit-py/blob/480072b9f7834b31ff2ca66277a5ad31246843a4/lmfit/model.py#L1272
-
- :param fit_result: Fit object which contains info on the fit
- :return: fit results container
- :rtype: FitResults
+ Convert fit results into the unified ``FitResults`` format.
+
+ See
+ https://github.com/lmfit/lmfit-py/blob/480072b9f7834b31ff2ca66277a5ad31246843a4/lmfit/model.py#L1272
+
+ Parameters
+ ----------
+ fit_results : ModelResult
+ Fit object which contains info on the fit.
+ **kwargs : Any
+ Additional result attributes to copy onto ``FitResults``.
+
+ Returns
+ -------
+ FitResults
+ Fit results container.
"""
results = FitResults()
for name, value in kwargs.items():
@@ -349,7 +412,9 @@ def _gen_fit_results(self, fit_results: ModelResult, **kwargs) -> FitResults:
results.iterations = kwargs.get('iterations')
results.message = fit_results.message
if fit_results.success is False and fit_results.message:
- warnings.warn(str(fit_results.message), UserWarning)
+ from easyscience import global_object
+
+ global_object.log.getLogger('fitting.lmfit').warning(str(fit_results.message))
results.minimizer_engine = self.__class__
results.fit_args = None
diff --git a/src/easyscience/fitting/minimizers/utils.py b/src/easyscience/fitting/minimizers/utils.py
index 9f137e5c..8ac0a877 100644
--- a/src/easyscience/fitting/minimizers/utils.py
+++ b/src/easyscience/fitting/minimizers/utils.py
@@ -5,8 +5,9 @@
class FitResults:
- """At the moment this is just a dummy way of unifying the returned
- fit parameters.
+ """
+ At the moment this is just a dummy way of unifying the returned fit
+ parameters.
"""
__slots__ = [
diff --git a/src/easyscience/fitting/multi_fitter.py b/src/easyscience/fitting/multi_fitter.py
index f66cd173..39d73193 100644
--- a/src/easyscience/fitting/multi_fitter.py
+++ b/src/easyscience/fitting/multi_fitter.py
@@ -1,9 +1,9 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+from __future__ import annotations
+
from typing import Callable
-from typing import List
-from typing import Optional
import numpy as np
@@ -13,8 +13,8 @@
class MultiFitter(Fitter):
- """Extension of Fitter to enable multiple dataset/fit function
- fitting.
+ """
+ Extension of Fitter to enable multiple dataset/fit function fitting.
We can fit these types of data simultaneously:
- Multiple models on multiple datasets.
@@ -26,8 +26,8 @@ class MultiFitter(Fitter):
def __init__(
self,
- fit_objects: Optional[List] = None,
- fit_functions: Optional[List[Callable]] = None,
+ fit_objects: list | None = None,
+ fit_functions: list[Callable] | None = None,
):
# Create a dummy core object to hold all the fit objects.
self._fit_objects = CollectionBase('multi', *fit_objects)
@@ -36,14 +36,27 @@ def __init__(
# not possible to change the fitting engine.
super().__init__(self._fit_objects, self._fit_functions[0])
- def _fit_function_wrapper(self, real_x=None, flatten: bool = True) -> Callable:
- """Simple fit function which injects the N real X (independent)
+ def _fit_function_wrapper(
+ self, real_x: list[np.ndarray] | None = None, flatten: bool = True
+ ) -> Callable:
+ """
+ Simple fit function which injects the N real X (independent)
values into the optimizer function.
This will also flatten the results if needed.
- :param real_x: List of independent x parameters to be injected
- :param flatten: Should the result be a flat 1D array?
- :return: Wrapped optimizer function.
+
+ Parameters
+ ----------
+ real_x : list[np.ndarray] | None, default=None
+ List of independent x parameters to be injected. By default,
+ None.
+ flatten : bool, default=True
+ Should the result be a flat 1D array? By default, True.
+
+ Returns
+ -------
+ Callable
+ Wrapped optimizer function.
"""
# Extract of a list of callable functions
wrapped_fns = []
@@ -67,19 +80,34 @@ def wrapped_fun(x, **kwargs):
@staticmethod
def _precompute_reshaping(
- x: List[np.ndarray],
- y: List[np.ndarray],
- weights: Optional[List[np.ndarray]],
+ x: list[np.ndarray],
+ y: list[np.ndarray],
+ weights: list[np.ndarray] | None,
vectorized: bool,
- ):
- """Convert an array of X's and Y's to an acceptable shape for
+ ) -> tuple[np.ndarray, list[np.ndarray], np.ndarray, np.ndarray | None, list[tuple[int, ...]]]:
+ """
+ Convert an array of X's and Y's to an acceptable shape for
fitting.
- :param x: List of independent variables.
- :param y: List of dependent variables.
- :param vectorized: Is the fn input vectorized or point based?
- :param kwargs: Additional kwy words.
- :return: Variables for optimization
+ Parameters
+ ----------
+ x : list[np.ndarray]
+ List of independent variables.
+ y : list[np.ndarray]
+ List of dependent variables.
+ weights : list[np.ndarray] | None
+ Optional weights for each dataset.
+ vectorized : bool
+ When ``True``, each x array may be multi-dimensional (e.g.
+ an ``(N, M, 2)`` grid for a 2D model) and is left as-is.
+ When ``False`` (default), each x array is expected to be
+ 1-D.
+
+ Returns
+ -------
+ tuple[np.ndarray, list[np.ndarray], np.ndarray, np.ndarray | None, list[tuple[int, ...]]]
+ Reshaped x values, reshaped input data, flattened y values,
+ flattened weights, and stored dependent dimensions.
"""
if weights is None:
weights = [None] * len(x)
@@ -109,13 +137,25 @@ def _precompute_reshaping(
def _post_compute_reshaping(
self,
fit_result_obj: FitResults,
- x: List[np.ndarray],
- y: List[np.ndarray],
- ) -> List[FitResults]:
- """Take a fit results object and split it into n chuncks based
- on the size of the x, y inputs :param fit_result_obj: Result
- from a multifit :param x: List of X co-ords :param y: List of Y
- co-ords :return: List of fit results.
+ x: list[np.ndarray],
+ y: list[np.ndarray],
+ ) -> list[FitResults]:
+ """
+ Split a multi-fit result object back into per-dataset results.
+
+ Parameters
+ ----------
+ fit_result_obj : FitResults
+ Combined fit result returned by the minimizer.
+ x : list[np.ndarray]
+ Original x coordinates for each dataset.
+ y : list[np.ndarray]
+ Original y coordinates for each dataset.
+
+ Returns
+ -------
+ list[FitResults]
+ One fit result object per dataset.
"""
cls = fit_result_obj.__class__
diff --git a/src/easyscience/global_object/global_object.py b/src/easyscience/global_object/global_object.py
index dbaa994d..d128fe38 100644
--- a/src/easyscience/global_object/global_object.py
+++ b/src/easyscience/global_object/global_object.py
@@ -9,10 +9,11 @@
@singleton
class GlobalObject:
- """GlobalObject is the assimilated knowledge of `EasyScience`.
+ """
+ GlobalObject is the assimilated knowledge of ``EasyScience``.
- Every class based on `EasyScience` gets brought
- into the collective.
+ Every class based on ``EasyScience`` gets brought into the
+ collective.
"""
__log = Logger()
@@ -33,22 +34,30 @@ def __init__(self):
self.map: Map = self.__map
def instantiate_stack(self):
- """The undo/redo stack references the collective. Hence it has
- to be imported after initialization.
+ """
+ The undo/redo stack references the collective.
- :return: None
- :rtype: noneType
+ Hence it has to be imported after initialization.
"""
from easyscience.global_object.undo_redo import UndoStack
self.stack = UndoStack()
def generate_unique_name(self, name_prefix: str) -> str:
- """Generate a generic unique name for the object using the class
+ """
+ Generate a generic unique name for the object using the class
name and a global iterator. Names are in the format
- `name_prefix_0`, `name_prefix_1`, `name_prefix_2`, etc.
+ ``name_prefix_0``, ``name_prefix_1``, ``name_prefix_2``, etc.
+
+ Parameters
+ ----------
+ name_prefix : str
+ The prefix to be used for the name.
- :param name_prefix: The prefix to be used for the name
+ Returns
+ -------
+ str
+ Generated unique name.
"""
names_with_prefix = [
name for name in self.map.vertices() if name.startswith(name_prefix + '_')
diff --git a/src/easyscience/global_object/hugger/hugger.py b/src/easyscience/global_object/hugger/hugger.py
index 42bf4497..f4f405a0 100644
--- a/src/easyscience/global_object/hugger/hugger.py
+++ b/src/easyscience/global_object/hugger/hugger.py
@@ -92,9 +92,10 @@ def is_mutable(arg) -> bool:
@staticmethod
def _caller_name(skip: int = 2):
- """Get a name of a caller in the format module.class.method
- `skip` specifies how many levels of stack to skip while getting
- caller name.
+ """
+ Get a name of a caller in the format module.class.method
+ ``skip`` specifies how many levels of stack to skip while
+ getting caller name.
skip=1 means "who calls me", skip=2 "who calls my caller" etc.
An empty string is returned if skipped levels exceed stack
@@ -134,6 +135,7 @@ def stack_(frame):
return '.'.join(name)
def _append_args(self, *args, **kwargs):
+
def check(res):
return (
id(res) not in self._store.unique_rets
diff --git a/src/easyscience/global_object/hugger/property.py b/src/easyscience/global_object/hugger/property.py
index 2367d1fb..e36c52e5 100644
--- a/src/easyscience/global_object/hugger/property.py
+++ b/src/easyscience/global_object/hugger/property.py
@@ -1,6 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+import logging
import sys
from functools import wraps
from typing import Any
@@ -14,12 +15,13 @@
class LoggedProperty(property):
- """Pump up python properties.
+ """
+ Pump up python properties.
- In this case we can see who has called this property and
- then do something if a criteria is met. In this case if the caller is not a member of
- the `ObjBase` class. Note that all high level `EasyScience` objects should be built from
- `ObjBase`.
+ In this case we can see who has called this property and then do
+ something if a criteria is met. In this case if the caller is not a
+ member of the ``ObjBase`` class. Note that all high level
+ ``EasyScience`` objects should be built from ``ObjBase``.
"""
_global_object = global_object
@@ -32,6 +34,7 @@ def __init__(self, *args, get_id=None, my_self=None, test_class=None, **kwargs):
@staticmethod
def _caller_class(test_class, skip: int = 1):
+
def stack_(frame):
frame_list = []
while frame:
@@ -71,7 +74,9 @@ def result_item(item_to_be_resulted):
result_item(item)
Store().append_log(self.makeEntry('get', res))
if global_object.debug: # noqa: S1006
- print(f"I'm {self._my_self} and {self._get_id} has been called from the outside!")
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ "I'm %s and %s has been called from the outside!", self._my_self, self._get_id
+ )
return res
def __set__(self, instance, value):
@@ -81,8 +86,11 @@ def __set__(self, instance, value):
if not test and self._get_id is not None and self._my_self is not None:
Store().append_log(self.makeEntry('set', value))
if global_object.debug: # noqa: S1006
- print(
- f"I'm {self._my_self} and {self._get_id} has been set to {value} from the outside!"
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ "I'm %s and %s has been set to %s from the outside!",
+ self._my_self,
+ self._get_id,
+ value,
)
return super().__set__(instance, value)
@@ -129,7 +137,9 @@ def makeEntry(self, log_type, returns, *args, **kwargs) -> str:
var = '"' + var + '"'
temp += f'{var}'
else:
- print(f'{log_type} is not implemented yet. Sorry')
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ '%s is not implemented yet. Sorry', log_type
+ )
temp += '\n'
return temp
@@ -161,7 +171,9 @@ def patch(self):
func = getattr(self.property, key)
if func is not None:
if global_object.debug:
- print(f'Patching property {self.klass.__name__}.{self.prop_name}')
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ 'Patching property %s.%s', self.klass.__name__, self.prop_name
+ )
patch_function: Callable = item.get('patcher')
new_func = patch_function(func)
option[key] = new_func
@@ -169,15 +181,22 @@ def patch(self):
def restore(self):
if global_object.debug:
- print(f'Restoring property {self.klass.__name__}.{self.prop_name}')
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ 'Restoring property %s.%s', self.klass.__name__, self.prop_name
+ )
setattr(self.klass, self.prop_name, self.property)
def patch_get(self, func: Callable) -> Callable:
+
@wraps(func)
def inner(*args, **kwargs):
if global_object.debug:
- print(
- f'{self.klass.__name__}.{self.prop_name} has been called with {args[1:]}, {kwargs}'
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ '%s.%s has been called with %s, %s',
+ self.klass.__name__,
+ self.prop_name,
+ args[1:],
+ kwargs,
)
res = func(*args, **kwargs)
self._append_args(*args, **kwargs)
@@ -188,11 +207,16 @@ def inner(*args, **kwargs):
return inner
def patch_set(self, func: Callable) -> Callable:
+
@wraps(func)
def inner(*args, **kwargs):
if global_object.debug:
- print(
- f'{self.klass.__name__}.{self.prop_name} has been set with {args[1:]}, {kwargs}'
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ '%s.%s has been set with %s, %s',
+ self.klass.__name__,
+ self.prop_name,
+ args[1:],
+ kwargs,
)
self._append_args(*args, **kwargs)
self._append_log(self.makeEntry('set', None, *args, **kwargs))
@@ -201,10 +225,13 @@ def inner(*args, **kwargs):
return inner
def patch_del(self, func: Callable) -> Callable:
+
@wraps(func)
def inner(*args, **kwargs):
if global_object.debug:
- print(f'{self.klass.__name__}.{self.prop_name} has been deleted.')
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ '%s.%s has been deleted.', self.klass.__name__, self.prop_name
+ )
self._append_log(self.makeEntry('del', None, *args, **kwargs))
return func(*args, **kwargs)
@@ -247,6 +274,8 @@ def makeEntry(self, log_type, returns, *args, **kwargs) -> str:
var = '"' + var + '"'
temp += f'{var}'
else:
- print(f'{log_type} is not implemented yet. Sorry')
+ logging.getLogger('easyscience.global_object.hugger').debug(
+ '%s is not implemented yet. Sorry', log_type
+ )
temp += '\n'
return temp
diff --git a/src/easyscience/global_object/logger.py b/src/easyscience/global_object/logger.py
index 0400d524..c0c7f87c 100644
--- a/src/easyscience/global_object/logger.py
+++ b/src/easyscience/global_object/logger.py
@@ -1,31 +1,204 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+import contextlib
import logging
+import os
+from collections.abc import Generator
+
+PACKAGE_LOGGER_NAME = 'easyscience'
+_LOG_LEVEL_ENV_VAR = 'EASYSCIENCE_LOG_LEVEL'
+
+_LEVEL_NAME_MAP = {
+ 'DEBUG': logging.DEBUG,
+ 'INFO': logging.INFO,
+ 'WARNING': logging.WARNING,
+ 'ERROR': logging.ERROR,
+ 'CRITICAL': logging.CRITICAL,
+}
+
+
+def _parse_log_level(level: int | str) -> int:
+ """
+ Convert a level number or name into a numeric level, raising on an
+ unknown name.
+ """
+ if isinstance(level, str):
+ stripped = level.strip()
+ if stripped.isdigit():
+ return int(stripped)
+ upper = stripped.upper()
+ if upper in _LEVEL_NAME_MAP:
+ return _LEVEL_NAME_MAP[upper]
+ valid = ', '.join(sorted(_LEVEL_NAME_MAP))
+ raise ValueError(f'Unknown log level {level!r}. Expected an integer or one of: {valid}.')
+ # bool is a subclass of int, so reject it explicitly before accepting ints.
+ if isinstance(level, bool) or not isinstance(level, int):
+ raise TypeError(f'Log level must be int or str, not {type(level).__name__}')
+ return level
+
+
+def _env_log_level(raw: str | None, default: int) -> int:
+ """
+ Parse the EASYSCIENCE_LOG_LEVEL env var, falling back to *default*
+ on an unset/bad value.
+ """
+ if raw is None:
+ return default
+ try:
+ return _parse_log_level(raw)
+ except ValueError:
+ return default
class Logger:
- def __init__(self, log_level: int = logging.INFO):
- self.logger = logging.getLogger(__name__)
- self.level = log_level
- self.logger.setLevel(self.level)
-
- def getLogger(self, logger_name, color: str = '32', defaults: bool = True) -> logging:
- """Create a logger :param color:
-
- :param logger_name: logger name. Usually __name__ on creation
- :param defaults: Do you want to associate any current file
- loggers with this logger
- :return: A logger
- """
- logger = logging.getLogger(logger_name)
- logger.setLevel(self.level)
- # self.applyLevel(logger)
- # for handler_type in self._handlers:
- # for handler in self._handlers[handler_type]:
- # if handler_type == 'sys' or defaults:
- # handler.formatter._fmt = self._makeColorText(color)
- # logger.addHandler(handler)
- # logger.propagate = False
- # self._loggers.append(logger)
- return logger
+ """
+ Central logging controller for EasyScience.
+
+ Owns the package-root logger ``easyscience`` and provides a
+ convenience API to set its level. It never calls
+ ``logging.basicConfig`` nor attaches a handler, so the host
+ application keeps full control over where output goes.
+ """
+
+ def __init__(self, log_level: int = logging.WARNING):
+ """
+ Parameters
+ ----------
+ log_level : int, default=logging.WARNING
+ Default level for the package-root logger. Overridden by the
+ ``EASYSCIENCE_LOG_LEVEL`` environment variable when set.
+ """
+ effective_default = _env_log_level(os.environ.get(_LOG_LEVEL_ENV_VAR), default=log_level)
+ self.logger = logging.getLogger(PACKAGE_LOGGER_NAME)
+ self.logger.setLevel(effective_default)
+ self._level_before_suspend = effective_default
+
+ # -- convenience delegation methods (mirror logging module) ------------
+
+ def debug(self, msg: str, *args, **kwargs) -> None:
+ """Log a DEBUG-level message on the package-root logger."""
+ self.logger.debug(msg, *args, **kwargs)
+
+ def info(self, msg: str, *args, **kwargs) -> None:
+ """Log an INFO-level message on the package-root logger."""
+ self.logger.info(msg, *args, **kwargs)
+
+ def warning(self, msg: str, *args, **kwargs) -> None:
+ """Log a WARNING-level message on the package-root logger."""
+ self.logger.warning(msg, *args, **kwargs)
+
+ def error(self, msg: str, *args, **kwargs) -> None:
+ """Log an ERROR-level message on the package-root logger."""
+ self.logger.error(msg, *args, **kwargs)
+
+ def critical(self, msg: str, *args, **kwargs) -> None:
+ """Log a CRITICAL-level message on the package-root logger."""
+ self.logger.critical(msg, *args, **kwargs)
+
+ def exception(self, msg: str, *args, **kwargs) -> None:
+ """
+ Log an ERROR-level message with traceback on the package-root
+ logger.
+ """
+ self.logger.exception(msg, *args, **kwargs)
+
+ # -- public API -------------------------------------------------------
+
+ @property
+ def level(self) -> int:
+ """
+ Get the effective level of the package-root logger.
+
+ Returns
+ -------
+ int
+ Numeric logging level currently set on the ``easyscience``
+ package-root logger.
+ """
+ return self.logger.level
+
+ @level.setter
+ def level(self, value: int | str) -> None:
+ """
+ Set the level of the package-root logger.
+
+ Parameters
+ ----------
+ value : int | str
+ Logging level — a number (e.g. ``logging.WARNING``) or a
+ level name (e.g. ``'ERROR'``). A string that is not a
+ recognised level name or numeric string raises
+ ``ValueError``.
+ """
+ self.logger.setLevel(_parse_log_level(value))
+
+ def getLogger(self, logger_name: str) -> logging.Logger:
+ """
+ Create or retrieve a child logger under *easyscience*.
+
+ The returned logger is left at ``logging.NOTSET`` so it inherits
+ level and handler configuration from the package-root logger.
+
+ Parameters
+ ----------
+ logger_name : str
+ Logger name. Usually ``__name__`` of the calling module.
+
+ Returns
+ -------
+ logging.Logger
+ A child logger whose name is ``easyscience.``
+ when *logger_name* does not already start with *easyscience*
+ or a dot.
+ """
+ if not logger_name.startswith(PACKAGE_LOGGER_NAME) and not logger_name.startswith('.'):
+ logger_name = f'{PACKAGE_LOGGER_NAME}.{logger_name}'
+ return logging.getLogger(logger_name)
+
+ @contextlib.contextmanager
+ def at_level(self, level: int | str) -> Generator[None, None, None]:
+ """
+ Context manager that temporarily sets the package-root logger to
+ *level*, restoring the previous level on exit.
+
+ Parameters
+ ----------
+ level : int | str
+ Temporary level for the package-root logger — e.g.
+ ``logging.ERROR`` or ``'ERROR'``.
+
+ Yields
+ ------
+ None
+ Control is handed back to the ``with`` block with the
+ temporary level applied.
+
+ Examples
+ --------
+ Setting the log-level only within the context:
+
+ ```python
+ with global_object.log.at_level(logging.ERROR):
+ fitter.fit(x, y, weights) # no core messages below ERROR
+ ```
+ """
+ previous = self.logger.level
+ self.level = level
+ try:
+ yield
+ finally:
+ self.logger.setLevel(previous)
+
+ # -- deprecated helpers (compatibility shims) -------------------------
+
+ def suspend(self):
+ """Suppress all core log output (set level to CRITICAL+1)."""
+ self._level_before_suspend = self.logger.level
+ self.logger.setLevel(logging.CRITICAL + 1)
+
+ def resume(self):
+ """
+ Restore the level captured by the most recent suspend call.
+ """
+ self.level = self._level_before_suspend
diff --git a/src/easyscience/global_object/map.py b/src/easyscience/global_object/map.py
index c9172c09..c79fb9ac 100644
--- a/src/easyscience/global_object/map.py
+++ b/src/easyscience/global_object/map.py
@@ -74,7 +74,8 @@ def __init__(self):
self.__type_dict = {}
def _snapshot_items(self):
- """Return a stable snapshot of __type_dict items.
+ """
+ Return a stable snapshot of __type_dict items.
Some callers iterate over __type_dict while other threads or
weakref finalizers may modify it. Creating a list snapshot (with
@@ -89,7 +90,8 @@ def _snapshot_items(self):
continue
def vertices(self) -> List[str]:
- """Returns the vertices of a map.
+ """
+ Returns the vertices of a map.
Uses a retry loop to handle RuntimeError that can occur when the
WeakValueDictionary is modified during iteration (e.g., by
@@ -140,7 +142,8 @@ def get_item_by_key(self, item_id: str) -> object:
raise ValueError('Item not in map.')
def is_known(self, vertex: object) -> bool:
- """Check if a vertex is known in the map.
+ """
+ Check if a vertex is known in the map.
All objects should have a 'unique_name' attribute.
"""
@@ -187,7 +190,8 @@ def get_edges(self, start_obj) -> List[str]:
raise AttributeError
def __generate_edges(self) -> list:
- """A static method generating the edges of the map.
+ """
+ A static method generating the edges of the map.
Edges are represented as sets with one (a loop back to the
vertex) or two vertices
@@ -263,17 +267,25 @@ def find_all_paths(self, start_vertex: str, end_vertex: str, path=[]) -> list:
return paths
def reverse_route(self, end_vertex: str, start_vertex: Optional[str] = None) -> List:
- """In this case we have an object and want to know the
- connections to get to another in reverse.
+ """
+ In this case we have an object and want to know the connections
+ to get to another in reverse.
We might not know the start_object. In which case we follow the
shortest path to a base vertex.
- :param end_obj:
- :type end_obj:
- :param start_obj:
- :type start_obj:
- :return:
- :rtype:
+
+ Parameters
+ ----------
+ end_vertex : str
+ Final vertex in the path.
+ start_vertex : Optional[str], default=None
+ Starting vertex. If omitted, the shortest reverse route is
+ chosen automatically.
+
+ Returns
+ -------
+ List
+ Reverse path from ``end_vertex`` back to ``start_vertex``.
"""
path_length = sys.maxsize
optimum_path = []
@@ -312,7 +324,8 @@ def is_connected(self, vertices_encountered=None, start_vertex=None) -> bool:
return False
def _clear(self):
- """Reset the map to an empty state.
+ """
+ Reset the map to an empty state.
Only to be used for testing
"""
diff --git a/src/easyscience/global_object/undo_redo.py b/src/easyscience/global_object/undo_redo.py
index bb1e173c..141fc5e7 100644
--- a/src/easyscience/global_object/undo_redo.py
+++ b/src/easyscience/global_object/undo_redo.py
@@ -3,6 +3,7 @@
import abc
import functools
+import logging
from collections import UserDict
from collections import deque
from typing import Any
@@ -45,6 +46,7 @@ def text(self, text: str) -> NoReturn:
def dict_stack_deco(func: Callable) -> Callable:
+
def inner(obj, *args, **kwargs):
from easyscience import global_object # Local import to avoid circular dependency
@@ -61,7 +63,8 @@ def inner(obj, *args, **kwargs):
class NotarizedDict(UserDict):
- """A simple dict drop in for EasyScience group classes.
+ """
+ A simple dict drop in for EasyScience group classes.
This is used as it wraps the get/set methods
"""
@@ -95,8 +98,8 @@ def reorder(self, **kwargs):
class CommandHolder:
- """A holder for one or more commands which are added to the
- stack.
+ """
+ A holder for one or more commands which are added to the stack.
"""
def __init__(self, text: str = None):
@@ -196,12 +199,15 @@ def push(self, command: T_) -> NoReturn:
def pop(self) -> T_:
"""
- !! WARNING - TO BE USED WITH EXTREME CAUTION !!
- !! THIS IS PROBABLY NOT THE FN YOU'RE LOOKING FOR, IT CAN BREAK A LOT OF STUFF !!
- Sometimes you really don't want the last command. Remove it from the stack
-
- :return: None
- :rtype: None
+ !! WARNING - TO BE USED WITH EXTREME CAUTION !! !! THIS IS
+ PROBABLY NOT THE FN YOU'RE LOOKING FOR, IT CAN BREAK A LOT OF
+ STUFF !! Sometimes you really don't want the last command.
+ Remove it from the stack
+
+ Returns
+ -------
+ T_
+ None.
"""
pop_it = self._history.popleft()
popped = pop_it.pop()
@@ -228,12 +234,12 @@ def undo(self) -> NoReturn:
self._command_running = True
command.undo()
except Exception as e:
- print(e)
+ logging.getLogger('easyscience.global_object.undo_redo').warning(str(e))
finally:
self._command_running = False
def redo(self) -> NoReturn:
- """Redo the last `undo` command on the stack."""
+ """Redo the last ``undo`` command on the stack."""
if self.canRedo():
# Move from the future to the past
this_command_stack = self._future.popleft()
@@ -246,13 +252,14 @@ def redo(self) -> NoReturn:
self._command_running = True
command.redo()
except Exception as e:
- print(e)
+ logging.getLogger('easyscience.global_object.undo_redo').warning(str(e))
finally:
self._command_running = False
def beginMacro(self, text: str) -> NoReturn:
- """Start a bulk update i.e. multiple commands under one
- undo/redo command.
+ """
+ Start a bulk update i.e. multiple commands under one undo/redo
+ command.
"""
if self._macro_running:
raise AssertionError('Cannot start a macro when one is already running')
@@ -261,7 +268,8 @@ def beginMacro(self, text: str) -> NoReturn:
self._macro_running = True
def endMacro(self) -> NoReturn:
- """End a bulk update i.e. multiple commands under one undo/redo
+ """
+ End a bulk update i.e. multiple commands under one undo/redo
command.
"""
if not self._macro_running:
@@ -405,30 +413,24 @@ def redo(self) -> NoReturn:
def property_stack(arg: Union[str, Callable], begin_macro: bool = False) -> Callable:
"""
- Decorate a `property` setter with undo/redo functionality
- This decorator can be used as:
+ Decorate a ``property`` setter with undo/redo functionality This
+ decorator can be used as:
- @property_stack
- def func()
- ....
+ @property_stack def func() ....
or
- @property_stack("This is the undo/redo text)
- def func()
- ....
-
- In the latter case the argument is a string which might be evaluated.
- The possible markups for this string are;
+ @property_stack("This is the undo/redo text) def func() ....
- `obj` - The thing being operated on
- `func` - The function being called
- `name` - The name of the function being called.
- `old_value` - The pre-set value
- `new_value` - The post-set value
+ In the latter case the argument is a string which might be
+ evaluated. The possible markups for this string are;
- An example would be `Function {name}: Set from {old_value} to {new_value}`
+ ``obj`` - The thing being operated on ``func`` - The function being
+ called ``name`` - The name of the function being called.
+ ``old_value`` - The pre-set value ``new_value`` - The post-set value
+ An example would be ``Function {name}: Set from {old_value} to
+ {new_value}``
"""
def make_wrapper(func: Callable, name: str, **kwargs) -> Callable:
@@ -445,7 +447,9 @@ def wrapper(obj, *args) -> NoReturn:
return
if global_object.debug:
- print(f"I'm {obj} and have been set from {old_value} to {new_value}!")
+ logging.getLogger('easyscience.global_object.undo_redo').debug(
+ "I'm %s and have been set from %s to %s!", obj, old_value, new_value
+ )
global_object.stack.push(PropertyStack(obj, func, old_value, new_value, **kwargs))
diff --git a/src/easyscience/io/serializer_base.py b/src/easyscience/io/serializer_base.py
index 8bcf987a..5d9b0e51 100644
--- a/src/easyscience/io/serializer_base.py
+++ b/src/easyscience/io/serializer_base.py
@@ -27,24 +27,36 @@
class SerializerBase:
- """This is the base class for creating an encoder/decoder which can
+ """
+ This is the base class for creating an encoder/decoder which can
convert EasyScience objects.
- `encode` and `decode` are
- abstract methods to be implemented for each serializer. It is expected that the helper function `_convert_to_dict`
- will be used as a base for encoding (or the `SerializerDict` as it's more flexible).
+ ``encode`` and ``decode`` are abstract methods to be implemented for
+ each serializer. It is expected that the helper function
+ `_convert_to_dict` will be used as a base for encoding (or the
+ ``SerializerDict`` as it's more flexible).
"""
@abstractmethod
def encode(self, obj: SerializerComponent, skip: Optional[List[str]] = None, **kwargs) -> any:
- """Abstract implementation of an encoder.
-
- :param obj: Object to be encoded.
- :param skip: List of field names as strings to skip when forming
- the encoded object
- :param kwargs: Any additional key word arguments to be passed to
- the encoder
- :return: encoded object containing all information to reform an
+ """
+ Abstract implementation of an encoder.
+
+ Parameters
+ ----------
+ obj : SerializerComponent
+ Object to be encoded.
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ **kwargs :
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ any
+ Encoded object containing all information to reform an
EasyScience object.
"""
@@ -53,21 +65,37 @@ def encode(self, obj: SerializerComponent, skip: Optional[List[str]] = None, **k
@classmethod
@abstractmethod
def decode(cls, obj: Any) -> Any:
- """Re-create an EasyScience object from the output of an
- encoder. The default decoder is `SerializerDict`.
-
- :param obj: encoded EasyScience object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object from the output of an encoder.
+ The default decoder is ``SerializerDict``.
+
+ Parameters
+ ----------
+ obj : Any
+ Encoded EasyScience object.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
pass
@staticmethod
def get_arg_spec(func: Callable) -> Tuple[Any, List[str]]:
- """Get the full argument specification of a function (typically
- `__init__`)
-
- :param func: Function to be inspected
- :return: Tuple of argument spec and arguments
+ """
+ Get the full argument specification of a function (typically
+ ``__init__``)
+
+ Parameters
+ ----------
+ func : Callable
+ Function to be inspected.
+
+ Returns
+ -------
+ Tuple[Any, List[str]]
+ Tuple of argument spec and arguments.
"""
spec = getfullargspec(func)
@@ -76,12 +104,18 @@ def get_arg_spec(func: Callable) -> Tuple[Any, List[str]]:
@staticmethod
def _encode_objs(obj: Any) -> Dict[str, Any]:
- """A JSON serializable dict representation of an object.
+ """
+ A JSON serializable dict representation of an object.
- :param obj: any object to be encoded
- :param skip: List of field names as strings to skip when forming the encoded object
- :param kwargs: Key-words to pass to `SerializerBase`
- :return: JSON encoded dictionary
+ Parameters
+ ----------
+ obj : Any
+ Any object to be encoded.
+
+ Returns
+ -------
+ Dict[str, Any]
+ JSON encoded dictionary.
"""
if isinstance(obj, datetime.datetime):
@@ -224,12 +258,20 @@ def runner(o):
return d
@staticmethod
- def _convert_from_dict(d):
- """Recursive method to support decoding dicts and lists
- containing EasyScience objects.
-
- :param d: Dictionary containing JSONed EasyScience objects
- :return: Reformed EasyScience object
+ def _convert_from_dict(d: Any) -> Any:
+ """
+ Recursive method to support decoding dicts and lists containing
+ EasyScience objects.
+
+ Parameters
+ ----------
+ d : Any
+ Dictionary containing JSONed EasyScience objects.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
T_ = type(d)
if isinstance(d, dict):
@@ -267,12 +309,20 @@ def _convert_from_dict(d):
@staticmethod
def deserialize_dict(in_dict: Dict[str, Any]) -> Dict[str, Any]:
- """Deserialize a dictionary using from_dict for ES objects and
+ """
+ Deserialize a dictionary using from_dict for ES objects and
SerializerBase otherwise. This method processes constructor
arguments, skipping metadata keys starting with '@'.
- :param in_dict: dictionary to deserialize
- :return: deserialized dictionary with constructor arguments
+ Parameters
+ ----------
+ in_dict : Dict[str, Any]
+ Dictionary to deserialize.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Deserialized dictionary with constructor arguments.
"""
d = {
key: SerializerBase._deserialize_value(value)
@@ -283,11 +333,18 @@ def deserialize_dict(in_dict: Dict[str, Any]) -> Dict[str, Any]:
@staticmethod
def _deserialize_value(value: Any) -> Any:
- """Deserialize a single value, using specialized handling for ES
+ """
+ Deserialize a single value, using specialized handling for ES
objects.
- :param value:
- :return: deserialized value
+ Parameters
+ ----------
+ value : Any
+
+ Returns
+ -------
+ Any
+ Deserialized value.
"""
if not SerializerBase._is_serialized_easyscience_object(value):
return SerializerBase._convert_from_dict(value)
@@ -310,10 +367,17 @@ def _deserialize_value(value: Any) -> Any:
@staticmethod
def _is_serialized_easyscience_object(value: Any) -> bool:
- """Check if a value represents a serialized ES object.
+ """
+ Check if a value represents a serialized ES object.
- :param value:
- :return: True if this is a serialized ES object
+ Parameters
+ ----------
+ value : Any
+
+ Returns
+ -------
+ bool
+ True if this is a serialized ES object.
"""
return (
isinstance(value, dict)
@@ -323,14 +387,28 @@ def _is_serialized_easyscience_object(value: Any) -> bool:
)
@staticmethod
- def _import_class(module_name: str, class_name: str):
- """Import a class from a module name and class name.
-
- :param module_name: name of the module
- :param class_name: name of the class
- :return: the imported class
- :raises ImportError: if module cannot be imported
- :raises ValueError: if class is not found in module
+ def _import_class(module_name: str, class_name: str) -> Any:
+ """
+ Import a class from a module name and class name.
+
+ Parameters
+ ----------
+ module_name : str
+ Name of the module.
+ class_name : str
+ Name of the class.
+
+ Returns
+ -------
+ Any
+ The imported class.
+
+ Raises
+ ------
+ ImportError
+ If the module cannot be imported.
+ ValueError
+ If the class is not found in the module.
"""
try:
module = __import__(module_name, globals(), locals(), [class_name], 0)
diff --git a/src/easyscience/io/serializer_component.py b/src/easyscience/io/serializer_component.py
index 02938a29..10c5f7aa 100644
--- a/src/easyscience/io/serializer_component.py
+++ b/src/easyscience/io/serializer_component.py
@@ -16,10 +16,11 @@
class SerializerComponent:
- """This base class adds the capability of saving and loading
+ """
+ This base class adds the capability of saving and loading
(encoding/decoding, serializing/deserializing) easyscience objects
- via the `encode` and `decode` methods. The default encoder is
- `SerializerDict`, which converts the object to a dictionary.
+ via the ``encode`` and ``decode`` methods. The default encoder is
+ ``SerializerDict``, which converts the object to a dictionary.
Shortcuts for dictionary and encoding is also present.
"""
@@ -30,13 +31,27 @@ def __deepcopy__(self, memo):
def encode(
self, skip: Optional[List[str]] = None, encoder: Optional[SerializerBase] = None, **kwargs
) -> Any:
- """Use an encoder to covert an EasyScience object into another
- format. Default is to a dictionary using `SerializerDict`.
-
- :param skip: List of field names as strings to skip when forming the encoded object
- :param encoder: The encoder to be used for encoding the data. Default is `SerializerDict`
- :param kwargs: Any additional key word arguments to be passed to the encoder
- :return: encoded object containing all information to reform an EasyScience object.
+ """
+ Use an encoder to covert an EasyScience object into another
+ format. Default is to a dictionary using ``SerializerDict``.
+
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ encoder : Optional[SerializerBase], default=None
+ The encoder to be used for encoding the data. By default,
+ None.
+ **kwargs :
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ Any
+ Encoded object containing all information to reform an
+ EasyScience object.
"""
if encoder is None:
encoder = SerializerDict
@@ -45,13 +60,22 @@ def encode(
@classmethod
def decode(cls, obj: Any, decoder: Optional[SerializerBase] = None) -> Any:
- """Re-create an EasyScience object from the output of an
- encoder. The default decoder is `SerializerDict`.
-
- :param obj: encoded EasyScience object
- :param decoder: decoder to be used to reform the EasyScience
- object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object from the output of an encoder.
+ The default decoder is ``SerializerDict``.
+
+ Parameters
+ ----------
+ obj : Any
+ Encoded EasyScience object.
+ decoder : Optional[SerializerBase], default=None
+ Decoder to be used to reform the EasyScience object. By
+ default, None.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
if decoder is None:
@@ -59,25 +83,41 @@ def decode(cls, obj: Any, decoder: Optional[SerializerBase] = None) -> Any:
return decoder.decode(obj)
def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Convert an EasyScience object into a full dictionary using
- `SerializerDict`. This is a shortcut for
+ """
+ Convert an EasyScience object into a full dictionary using
+ ``SerializerDict``. This is a shortcut for
```obj.encode(encoder=SerializerDict)```
- :param skip: List of field names as strings to skip when forming
- the dictionary
- :return: encoded object containing all information to reform an
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming
+ the dictionary. By default, None.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Encoded object containing all information to reform an
EasyScience object.
"""
return self.encode(skip=skip, encoder=SerializerDict)
@classmethod
- def from_dict(cls, obj_dict: Dict[str, Any]) -> None:
- """Re-create an EasyScience object from a full encoded
- dictionary.
-
- :param obj_dict: dictionary containing the serialized contents (from `SerializerDict`) of an EasyScience object
- :return: Reformed EasyScience object
+ def from_dict(cls, obj_dict: Dict[str, Any]) -> Any:
+ """
+ Re-create an EasyScience object from a full encoded dictionary.
+
+ Parameters
+ ----------
+ obj_dict : Dict[str, Any]
+ Dictionary containing the serialized contents (from
+ ``SerializerDict``) of an EasyScience object.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
return cls.decode(obj_dict, decoder=SerializerDict)
diff --git a/src/easyscience/io/serializer_dict.py b/src/easyscience/io/serializer_dict.py
index 8dc73a63..af6c1e9d 100644
--- a/src/easyscience/io/serializer_dict.py
+++ b/src/easyscience/io/serializer_dict.py
@@ -8,6 +8,7 @@
from typing import TYPE_CHECKING
+from typing import Any
from typing import Dict
from typing import List
from typing import Optional
@@ -19,8 +20,9 @@
class SerializerDict(SerializerBase):
- """This is a serializer that can encode and decode EasyScience
- objects to and from a dictionary.
+ """
+ This is a serializer that can encode and decode EasyScience objects
+ to and from a dictionary.
"""
def encode(
@@ -28,30 +30,49 @@ def encode(
obj: SerializerComponent,
skip: Optional[List[str]] = None,
full_encode: bool = False,
- **kwargs,
- ):
- """Convert an EasyScience object to a dictionary.
-
- :param obj: Object to be encoded.
- :param skip: List of field names as strings to skip when forming
- the encoded object
- :param full_encode: Should the data also be encoded (default
- False)
- :param kwargs: Any additional key word arguments to be passed to
- the encoder
- :return: object encoded to dictionary containing all information
- to reform an EasyScience object.
+ **kwargs: Any,
+ ) -> Dict[str, Any]:
+ """
+ Convert an EasyScience object to a dictionary.
+
+ Parameters
+ ----------
+ obj : SerializerComponent
+ Object to be encoded.
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ full_encode : bool, default=False
+ Should the data also be encoded (default False). By default,
+ False.
+ **kwargs : Any
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Object encoded to dictionary containing all information to
+ reform an EasyScience object.
"""
return self._convert_to_dict(obj, skip=skip, full_encode=full_encode, **kwargs)
@classmethod
- def decode(cls, d: Dict) -> SerializerComponent:
- """Re-create an EasyScience object from the dictionary
+ def decode(cls, d: Dict[str, Any]) -> SerializerComponent:
+ """
+ Re-create an EasyScience object from the dictionary
representation.
- :param d: Dict representation of an EasyScience object.
- :return: EasyScience object.
+ Parameters
+ ----------
+ d : Dict[str, Any]
+ Dict representation of an EasyScience object.
+
+ Returns
+ -------
+ SerializerComponent
+ EasyScience object.
"""
return SerializerBase._convert_from_dict(d)
diff --git a/src/easyscience/job/analysis.py b/src/easyscience/job/analysis.py
index 448f1c3c..03686714 100644
--- a/src/easyscience/job/analysis.py
+++ b/src/easyscience/job/analysis.py
@@ -6,12 +6,13 @@
import numpy as np
-from ..base_classes.obj_base import ObjBase
from ..fitting.minimizers import MinimizerBase
+from ..legacy.obj_base import ObjBase
class AnalysisBase(ObjBase, metaclass=ABCMeta):
- """This virtual class allows for the creation of technique-specific
+ """
+ This virtual class allows for the creation of technique-specific
Analysis objects.
"""
diff --git a/src/easyscience/job/experiment.py b/src/easyscience/job/experiment.py
index 0f9577c3..b3e4daa9 100644
--- a/src/easyscience/job/experiment.py
+++ b/src/easyscience/job/experiment.py
@@ -1,11 +1,12 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-from ..base_classes.obj_base import ObjBase
+from ..legacy.obj_base import ObjBase
class ExperimentBase(ObjBase):
- """This virtual class allows for the creation of technique-specific
+ """
+ This virtual class allows for the creation of technique-specific
Experiment objects.
"""
diff --git a/src/easyscience/job/job.py b/src/easyscience/job/job.py
index b48cbb1d..bfed8bec 100644
--- a/src/easyscience/job/job.py
+++ b/src/easyscience/job/job.py
@@ -4,15 +4,16 @@
from abc import ABCMeta
from abc import abstractmethod
-from ..base_classes.obj_base import ObjBase
+from ..legacy.obj_base import ObjBase
from .analysis import AnalysisBase
from .experiment import ExperimentBase
from .theoreticalmodel import TheoreticalModelBase
class JobBase(ObjBase, metaclass=ABCMeta):
- """This virtual class allows for the creation of technique-specific
- Job objects.
+ """
+ This virtual class allows for the creation of technique-specific Job
+ objects.
"""
def __init__(self, name: str, *args, **kwargs):
diff --git a/src/easyscience/job/theoreticalmodel.py b/src/easyscience/job/theoreticalmodel.py
index 609f889e..3fa87e50 100644
--- a/src/easyscience/job/theoreticalmodel.py
+++ b/src/easyscience/job/theoreticalmodel.py
@@ -1,11 +1,12 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-from ..base_classes.obj_base import ObjBase
+from ..legacy.obj_base import ObjBase
class TheoreticalModelBase(ObjBase):
- """This virtual class allows for the creation of technique-specific
+ """
+ This virtual class allows for the creation of technique-specific
Theory objects.
"""
diff --git a/src/easyscience/legacy/__init__.py b/src/easyscience/legacy/__init__.py
new file mode 100644
index 00000000..482abc26
--- /dev/null
+++ b/src/easyscience/legacy/__init__.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+from .collection_base import CollectionBase # noqa: F401
+from .obj_base import ObjBase # noqa: F401
+
+__all__ = ['CollectionBase', 'ObjBase']
diff --git a/src/easyscience/legacy/collection_base.py b/src/easyscience/legacy/collection_base.py
new file mode 100644
index 00000000..5be3386c
--- /dev/null
+++ b/src/easyscience/legacy/collection_base.py
@@ -0,0 +1,338 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+from __future__ import annotations
+
+from collections.abc import MutableSequence
+from numbers import Number
+from typing import TYPE_CHECKING
+from typing import Any
+from typing import Callable
+from typing import List
+from typing import Optional
+from typing import Tuple
+from typing import Union
+
+from easyscience import global_object
+from easyscience.base_classes.new_base import NewBase
+from easyscience.global_object.undo_redo import NotarizedDict
+
+from ..base_classes.based_base import BasedBase
+from ..variable.descriptor_base import DescriptorBase
+
+if TYPE_CHECKING:
+ from ..fitting.calculators import InterfaceFactoryTemplate
+
+
+class CollectionBase(BasedBase, MutableSequence):
+ """
+ This is the base class for which all higher level classes are built
+ off of.
+
+ .. deprecated::
+ ``CollectionBase`` is deprecated and will be removed in a future version.
+ Please migrate to ``ModelBase`` or ``EasyList`` instead.
+
+ NOTE: This object is serializable only if parameters are supplied
+ as: ``ObjBase(a=value, b=value)``. For ``Parameter`` or
+ ``Descriptor`` objects we can cheat with
+ ``ObjBase(*[Descriptor(...), Parameter(...), ...])``.
+ """
+
+ def __init__(
+ self,
+ name: str,
+ *args: Union[BasedBase, DescriptorBase, NewBase],
+ interface: Optional[InterfaceFactoryTemplate] = None,
+ unique_name: Optional[str] = None,
+ **kwargs: Any,
+ ):
+ """
+ Set up the base collection class.
+
+ Parameters
+ ----------
+ name : str
+ Name of this object.
+ *args : Union[BasedBase, DescriptorBase, NewBase]
+ Initial EasyScience objects to include in the collection.
+ interface : Optional[InterfaceFactoryTemplate], default=None
+ Interface attached to contained objects. By default, None.
+ unique_name : Optional[str], default=None
+ Unique identifier for this collection. By default, None.
+ **kwargs : Any
+ Fields which this class should contain.
+
+ Raises
+ ------
+ AttributeError
+ If a provided item is not an EasyScience object or if a
+ keyword collides with an internal attribute.
+ """
+ global_object.log.getLogger('legacy').warning(
+ 'CollectionBase is deprecated and will be removed in a future version. '
+ 'Please migrate to ModelBase or EasyList.',
+ stacklevel=2,
+ )
+ BasedBase.__init__(self, name, unique_name=unique_name)
+ kwargs = {key: kwargs[key] for key in kwargs.keys() if kwargs[key] is not None}
+ _args = []
+ for item in args:
+ if not isinstance(item, list):
+ _args.append(item)
+ else:
+ _args += item
+ _kwargs = {}
+ for key, item in kwargs.items():
+ if isinstance(item, list) and len(item) > 0:
+ _args += item
+ else:
+ _kwargs[key] = item
+ kwargs = _kwargs
+ for item in list(kwargs.values()) + _args:
+ if not issubclass(type(item), (DescriptorBase, BasedBase, NewBase)):
+ raise AttributeError('A collection can only be formed from easyscience objects.')
+ args = _args
+ _kwargs = {}
+ for key, item in kwargs.items():
+ _kwargs[key] = item
+ for arg in args:
+ kwargs[arg.unique_name] = arg
+ _kwargs[arg.unique_name] = arg
+
+ # Set kwargs, also useful for serialization
+ self._kwargs = NotarizedDict(**_kwargs)
+
+ for key in kwargs.keys():
+ if key in self.__dict__.keys() or key in self.__slots__:
+ raise AttributeError(
+ f'Given kwarg: `{key}`, is an internal attribute. Please rename.'
+ )
+ if kwargs[key]: # Might be None (empty tuple or list)
+ self._global_object.map.add_edge(self, kwargs[key])
+ self._global_object.map.reset_type(kwargs[key], 'created_internal')
+ if interface is not None:
+ kwargs[key].interface = interface
+ # TODO wrap getter and setter in Logger
+ if interface is not None:
+ self.interface = interface
+ self._kwargs._stack_enabled = True
+
+ def insert(self, index: int, value: Union[DescriptorBase, BasedBase, NewBase]) -> None:
+ """
+ Insert an object into the collection at an index.
+
+ Parameters
+ ----------
+ index : int
+ Index for EasyScience object to be inserted.
+ value : Union[DescriptorBase, BasedBase, NewBase]
+ Object to be inserted.
+
+ Returns
+ -------
+ None
+ None.
+
+ Raises
+ ------
+ AttributeError
+ If ``value`` is not an EasyScience object.
+ """
+ t_ = type(value)
+ if issubclass(t_, (BasedBase, DescriptorBase, NewBase)):
+ update_key = list(self._kwargs.keys())
+ values = list(self._kwargs.values())
+ # Update the internal dict
+ new_key = value.unique_name
+ update_key.insert(index, new_key)
+ values.insert(index, value)
+ self._kwargs.reorder(**{k: v for k, v in zip(update_key, values)})
+ # ADD EDGE
+ self._global_object.map.add_edge(self, value)
+ self._global_object.map.reset_type(value, 'created_internal')
+ value.interface = self.interface
+ else:
+ raise AttributeError('Only EasyScience objects can be put into an EasyScience group')
+
+ def __getitem__(self, idx: Union[int, slice]) -> Union[DescriptorBase, BasedBase, NewBase]:
+ """
+ Get an item in the collection based on its index.
+
+ Parameters
+ ----------
+ idx : Union[int, slice]
+ Index or slice of the collection.
+
+ Returns
+ -------
+ Union[DescriptorBase, BasedBase, NewBase]
+ Object at index ``idx``.
+
+ Raises
+ ------
+ IndexError
+ If ``idx`` does not resolve to an element.
+ TypeError
+ If boolean indexing is attempted.
+ """
+ if isinstance(idx, slice):
+ start, stop, step = idx.indices(len(self))
+ return self.__class__(
+ getattr(self, 'name'), *[self[i] for i in range(start, stop, step)]
+ )
+ if str(idx) in self._kwargs.keys():
+ return self._kwargs[str(idx)]
+ if isinstance(idx, str):
+ idx = [index for index, item in enumerate(self) if item.name == idx]
+ noi = len(idx)
+ if noi == 0:
+ raise IndexError('Given index does not exist')
+ elif noi == 1:
+ idx = idx[0]
+ else:
+ return self.__class__(getattr(self, 'name'), *[self[i] for i in idx])
+ elif not isinstance(idx, int) or isinstance(idx, bool):
+ if isinstance(idx, bool):
+ raise TypeError('Boolean indexing is not supported at the moment')
+ try:
+ if idx > len(self):
+ raise IndexError(f'Given index {idx} is out of bounds')
+ except TypeError:
+ raise IndexError('Index must be of type `int`/`slice` or an item name (`str`)')
+ keys = list(self._kwargs.keys())
+ return self._kwargs[keys[idx]]
+
+ def __setitem__(self, key: int, value: Union[BasedBase, DescriptorBase, NewBase]) -> None:
+ """
+ Set an item via it's index.
+
+ Parameters
+ ----------
+ key : int
+ Index in self.
+ value : Union[BasedBase, DescriptorBase, NewBase]
+ Value which index key should be set to.
+
+ Raises
+ ------
+ NotImplementedError
+ If ``value`` is neither numeric nor an EasyScience object.
+ """
+ if isinstance(value, Number): # noqa: S3827
+ item = self.__getitem__(key)
+ item.value = value
+ elif issubclass(type(value), (BasedBase, DescriptorBase, NewBase)):
+ update_key = list(self._kwargs.keys())
+ values = list(self._kwargs.values())
+ old_item = values[key]
+ # Update the internal dict
+ update_dict = {update_key[key]: value}
+ self._kwargs.update(update_dict)
+ # ADD EDGE
+ self._global_object.map.add_edge(self, value)
+ self._global_object.map.reset_type(value, 'created_internal')
+ value.interface = self.interface
+ # REMOVE EDGE
+ self._global_object.map.prune_vertex_from_edge(self, old_item)
+ else:
+ raise NotImplementedError(
+ 'At the moment only numerical values or EasyScience objects can be set.'
+ )
+
+ def __delitem__(self, key: int) -> None:
+ """
+ Try to delete an idem by key.
+
+ Parameters
+ ----------
+ key : int
+
+ Returns
+ -------
+ None
+ """
+ keys = list(self._kwargs.keys())
+ item = self._kwargs[keys[key]]
+ self._global_object.map.prune_vertex_from_edge(self, item)
+ del self._kwargs[keys[key]]
+
+ def __len__(self) -> int:
+ """
+ Get the number of items in this collection.
+
+ Returns
+ -------
+ int
+ Number of items in this collection.
+ """
+ return len(self._kwargs.keys())
+
+ def _convert_to_dict(
+ self, in_dict: dict, encoder: Any, skip: List[str] = [], **kwargs: Any
+ ) -> dict:
+ """
+ Convert ones self into a serialized form.
+
+ Parameters
+ ----------
+ in_dict : dict
+ Dictionary being populated during serialization.
+ encoder : Any
+ Serializer used to encode child objects.
+ skip : List[str], default=[]
+ Field names to skip during serialization.
+ **kwargs : Any
+ Additional keyword arguments passed to the serializer.
+
+ Returns
+ -------
+ dict
+ Dictionary of ones self.
+ """
+ d = {}
+ if hasattr(self, '_modify_dict'):
+ # any extra keys defined on the inheriting class
+ d = self._modify_dict(skip=skip, **kwargs)
+ in_dict['data'] = [encoder._convert_to_dict(item, skip=skip, **kwargs) for item in self]
+ out_dict = {**in_dict, **d}
+ return out_dict
+
+ @property
+ def data(self) -> Tuple:
+ """
+ The data function returns a tuple of the keyword arguments
+ passed to the constructor. This is useful for when you need to
+ pass in a dictionary of data to other functions, such as with
+ matplotlib's plot function.
+
+ Returns
+ -------
+ Tuple
+ The values of the attributes in a tuple :doc-author:
+ Trelent.
+ """
+ return tuple(self._kwargs.values())
+
+ def __repr__(self) -> str:
+ return f'{self.__class__.__name__} `{getattr(self, "name")}` of length {len(self)}'
+
+ def sort(
+ self,
+ mapping: Callable[[Union[BasedBase, DescriptorBase, NewBase]], Any],
+ reverse: bool = False,
+ ) -> None:
+ """
+ Sort the collection according to the given mapping.
+
+ Parameters
+ ----------
+ mapping : Callable[[Union[BasedBase, DescriptorBase, NewBase]], Any]
+ Mapping function to sort the collection. i.e. lambda
+ parameter: parameter.value.
+ reverse : bool, default=False
+ Reverse the sorting. By default, False.
+ """
+ i = list(self._kwargs.items())
+ i.sort(key=lambda x: mapping(x[1]), reverse=reverse)
+ self._kwargs.reorder(**{k[0]: k[1] for k in i})
diff --git a/src/easyscience/legacy/dict.py b/src/easyscience/legacy/dict.py
index 72c57c1d..9b36c9f8 100644
--- a/src/easyscience/legacy/dict.py
+++ b/src/easyscience/legacy/dict.py
@@ -22,8 +22,9 @@
class DictSerializer(BaseEncoderDecoder):
- """This is a serializer that can encode and decode EasyScience
- objects to a JSON encoded dictionary.
+ """
+ This is a serializer that can encode and decode EasyScience objects
+ to a JSON encoded dictionary.
"""
def encode(
@@ -31,28 +32,48 @@ def encode(
obj: ComponentSerializer,
skip: Optional[List[str]] = None,
full_encode: bool = False,
- **kwargs,
- ):
- """Convert an EasyScience object to a JSON encoded dictionary.
-
- :param obj: Object to be encoded.
- :param skip: List of field names as strings to skip when forming
- the encoded object
- :param full_encode: Should the data also be JSON encoded
- (default False)
- :param kwargs: Any additional key word arguments to be passed to
- the encoder
- :return: object encoded to dictionary containing all information
- to reform an EasyScience object.
+ **kwargs: Any,
+ ) -> Dict[str, Any]:
+ """
+ Convert an EasyScience object to a JSON encoded dictionary.
+
+ Parameters
+ ----------
+ obj : ComponentSerializer
+ Object to be encoded.
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ full_encode : bool, default=False
+ Should the data also be JSON encoded (default False). By
+ default, False.
+ **kwargs : Any
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Object encoded to dictionary containing all information to
+ reform an EasyScience object.
"""
return self._convert_to_dict(obj, skip=skip, full_encode=full_encode, **kwargs)
@classmethod
- def decode(cls, d: Dict) -> ComponentSerializer:
+ def decode(cls, d: Dict[str, Any]) -> ComponentSerializer:
"""
- :param d: Dict representation.
- :return: ComponentSerializer class.
+ Decode function.
+
+ Parameters
+ ----------
+ d : Dict[str, Any]
+ Dict representation.
+
+ Returns
+ -------
+ ComponentSerializer
+ ComponentSerializer class.
"""
return BaseEncoderDecoder._convert_from_dict(d)
@@ -60,14 +81,24 @@ def decode(cls, d: Dict) -> ComponentSerializer:
@classmethod
def from_dict(cls, d: Dict[str, Any]) -> ComponentSerializer:
"""
- :param d: Dict representation.
- :return: ComponentSerializer class.
+ From dict.
+
+ Parameters
+ ----------
+ d : Dict[str, Any]
+ Dict representation.
+
+ Returns
+ -------
+ ComponentSerializer
+ ComponentSerializer class.
"""
return BaseEncoderDecoder._convert_from_dict(d)
class DataDictSerializer(DictSerializer):
- """This is a serializer that can encode the data in an EasyScience
+ """
+ This is a serializer that can encode the data in an EasyScience
object to a JSON encoded dictionary.
"""
@@ -76,19 +107,34 @@ def encode(
obj: ComponentSerializer,
skip: Optional[List[str]] = None,
full_encode: bool = False,
- **kwargs,
+ **kwargs: Any,
) -> Dict[str, Any]:
- """Convert an EasyScience object to a JSON encoded data
- dictionary.
-
- :param obj: Object to be encoded.
- :param skip: List of field names as strings to skip when forming
- the encoded object
- :param full_encode: Should the data also be JSON encoded
- (default False)
- :param kwargs: Any additional key word arguments to be passed to
- the encoder
- :return: object encoded to data dictionary.
+ """
+ Convert an EasyScience object to a JSON encoded data dictionary.
+
+ Parameters
+ ----------
+ obj : ComponentSerializer
+ Object to be encoded.
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ full_encode : bool, default=False
+ Should the data also be JSON encoded (default False). By
+ default, False.
+ **kwargs : Any
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Object encoded to data dictionary.
+
+ Raises
+ ------
+ ValueError
+ If ``skip`` is not a list of strings.
"""
if skip is None:
@@ -102,8 +148,9 @@ def encode(
@classmethod
def decode(cls, d: Dict[str, Any]) -> ComponentSerializer:
- """This function is not implemented as a data dictionary does
- not contain the necessary information to re-form an EasyScience
+ """
+ This function is not implemented as a data dictionary does not
+ contain the necessary information to re-form an EasyScience
object.
"""
diff --git a/src/easyscience/legacy/json.py b/src/easyscience/legacy/json.py
index 12a151e7..25833fbc 100644
--- a/src/easyscience/legacy/json.py
+++ b/src/easyscience/legacy/json.py
@@ -9,6 +9,8 @@
import json
from typing import TYPE_CHECKING
+from typing import Any
+from typing import Dict
from typing import List
from .template import BaseEncoderDecoder
@@ -19,8 +21,9 @@
class JsonSerializer(BaseEncoderDecoder):
def encode(self, obj: ComponentSerializer, skip: List[str] = []) -> str:
- """Returns a json string representation of the
- ComponentSerializer object.
+ """
+ Returns a json string representation of the ComponentSerializer
+ object.
"""
ENCODER = type(
JsonEncoderTemplate.__name__,
@@ -36,8 +39,9 @@ def decode(cls, data: str) -> ComponentSerializer:
class JsonDataSerializer(BaseEncoderDecoder):
def encode(self, obj: ComponentSerializer, skip: List[str] = []) -> str:
- """Returns a json string representation of the
- ComponentSerializer object.
+ """
+ Returns a json string representation of the ComponentSerializer
+ object.
"""
from .dict import DataDictSerializer
@@ -62,9 +66,10 @@ def decode(cls, data: str) -> ComponentSerializer:
class JsonEncoderTemplate(json.JSONEncoder):
- """A Json Encoder which supports the ComponentSerializer API, plus
- adds support for numpy arrays, datetime objects, bson ObjectIds
- (requires bson).
+ """
+ A Json Encoder which supports the ComponentSerializer API, plus adds
+ support for numpy arrays, datetime objects, bson ObjectIds (requires
+ bson).
Usage::
@@ -75,30 +80,38 @@ class JsonEncoderTemplate(json.JSONEncoder):
skip = []
_converter = BaseEncoderDecoder._convert_to_dict
- def default(self, o) -> dict: # pylint: disable=E0202
+ def default(self, o: Any) -> Dict[str, Any]: # pylint: disable=E0202
"""
- Overriding default method for JSON encoding. This method does two
- things: (a) If an object has a to_dict property, return the to_dict
- output. (b) If the @module and @class keys are not in the to_dict,
- add them to the output automatically. If the object has no to_dict
- property, the default Python json encoder default method is called.
-
- Args:
- o: Python object.
-
- Return:
- Python dict representation.
+ Overriding default method for JSON encoding.
+
+ This method does two things: (a) If an object has a to_dict
+ property, return the to_dict output. (b) If the @module and
+ @class keys are not in the to_dict, add them to the output
+ automatically. If the object has no to_dict property, the
+ default Python json encoder default method is called.
+
+ Parameters
+ ----------
+ o : Any
+ Python object.
+
+ Returns
+ -------
+ Dict[str, Any]
+ JSON-serializable dictionary representation of ``o``.
"""
return self._converter(o, self.skip, full_encode=True)
class JsonDecoderTemplate(json.JSONDecoder):
- """A Json Decoder which supports the ComponentSerializer API. By
- default, the decoder attempts to find a module and name associated
- with a dict. If found, the decoder will generate a Pymatgen as a
- priority. If that fails, the original decoded dictionary from the
- string is returned. Note that nested lists and dicts containing
- pymatgen object will be decoded correctly as well.
+ """
+ A Json Decoder which supports the ComponentSerializer API.
+
+ By default, the decoder attempts to find a module and name
+ associated with a dict. If found, the decoder will generate a
+ Pymatgen as a priority. If that fails, the original decoded
+ dictionary from the string is returned. Note that nested lists and
+ dicts containing pymatgen object will be decoded correctly as well.
Usage:
@@ -108,11 +121,19 @@ class JsonDecoderTemplate(json.JSONDecoder):
_converter = BaseEncoderDecoder._convert_from_dict
- def decode(self, s):
- """Overrides decode from JSONDecoder.
+ def decode(self, s: str) -> Any:
+ """
+ Overrides decode from JSONDecoder.
+
+ Parameters
+ ----------
+ s : str
+ JSON string representation.
- :param s: string
- :return: Object.
+ Returns
+ -------
+ Any
+ Decoded object.
"""
d = json.JSONDecoder.decode(self, s)
return self.__class__._converter(d)
diff --git a/src/easyscience/legacy/legacy_core.py b/src/easyscience/legacy/legacy_core.py
index 1fed4b86..40a5beac 100644
--- a/src/easyscience/legacy/legacy_core.py
+++ b/src/easyscience/legacy/legacy_core.py
@@ -21,9 +21,10 @@
class ComponentSerializer:
- """This is the base class for all EasyScience objects and deals with
- the data conversion to other formats via the `encode` and `decode`
- functions.
+ """
+ This is the base class for all EasyScience objects and deals with
+ the data conversion to other formats via the ``encode`` and
+ ``decode`` functions.
Shortcuts for dictionary and data dictionary encoding is also
present.
@@ -40,13 +41,27 @@ def encode(
encoder: Optional[BaseEncoderDecoder] = None,
**kwargs,
) -> Any:
- """Use an encoder to covert an EasyScience object into another
- format. Default is to a dictionary using `DictSerializer`.
-
- :param skip: List of field names as strings to skip when forming the encoded object
- :param encoder: The encoder to be used for encoding the data. Default is `DictSerializer`
- :param kwargs: Any additional key word arguments to be passed to the encoder
- :return: encoded object containing all information to reform an EasyScience object.
+ """
+ Use an encoder to covert an EasyScience object into another
+ format. Default is to a dictionary using ``DictSerializer``.
+
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ encoder : Optional[BaseEncoderDecoder], default=None
+ The encoder to be used for encoding the data. By default,
+ None.
+ **kwargs :
+ Any additional key word arguments to be passed to the
+ encoder.
+
+ Returns
+ -------
+ Any
+ Encoded object containing all information to reform an
+ EasyScience object.
"""
if encoder is None:
encoder = DictSerializer
@@ -55,13 +70,22 @@ def encode(
@classmethod
def decode(cls, obj: Any, decoder: Optional[BaseEncoderDecoder] = None) -> Any:
- """Re-create an EasyScience object from the output of an
- encoder. The default decoder is `DictSerializer`.
-
- :param obj: encoded EasyScience object
- :param decoder: decoder to be used to reform the EasyScience
- object
- :return: Reformed EasyScience object
+ """
+ Re-create an EasyScience object from the output of an encoder.
+ The default decoder is ``DictSerializer``.
+
+ Parameters
+ ----------
+ obj : Any
+ Encoded EasyScience object.
+ decoder : Optional[BaseEncoderDecoder], default=None
+ Decoder to be used to reform the EasyScience object. By
+ default, None.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
if decoder is None:
@@ -69,25 +93,41 @@ def decode(cls, obj: Any, decoder: Optional[BaseEncoderDecoder] = None) -> Any:
return decoder.decode(obj)
def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Convert an EasyScience object into a full dictionary using
- `DictSerializer`. This is a shortcut for
+ """
+ Convert an EasyScience object into a full dictionary using
+ ``DictSerializer``. This is a shortcut for
```obj.encode(encoder=DictSerializer)```
- :param skip: List of field names as strings to skip when forming
- the dictionary
- :return: encoded object containing all information to reform an
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming
+ the dictionary. By default, None.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Encoded object containing all information to reform an
EasyScience object.
"""
return self.encode(skip=skip, encoder=DictSerializer)
@classmethod
- def from_dict(cls, obj_dict: Dict[str, Any]) -> None:
- """Re-create an EasyScience object from a full encoded
- dictionary.
-
- :param obj_dict: dictionary containing the serialized contents (from `DictSerializer`) of an EasyScience object
- :return: Reformed EasyScience object
+ def from_dict(cls, obj_dict: Dict[str, Any]) -> Any:
+ """
+ Re-create an EasyScience object from a full encoded dictionary.
+
+ Parameters
+ ----------
+ obj_dict : Dict[str, Any]
+ Dictionary containing the serialized contents (from
+ ``DictSerializer``) of an EasyScience object.
+
+ Returns
+ -------
+ Any
+ Reformed EasyScience object.
"""
return cls.decode(obj_dict, decoder=DictSerializer)
@@ -98,13 +138,27 @@ def encode_data(
encoder: Optional[BaseEncoderDecoder] = None,
**kwargs,
) -> Any:
- """Returns just the data in an EasyScience object win the format
+ """
+ Returns just the data in an EasyScience object win the format
specified by an encoder.
- :param skip: List of field names as strings to skip when forming the dictionary
- :param encoder: The encoder to be used for encoding the data. Default is `DataDictSerializer`
- :param kwargs: Any additional keywords to pass to the encoder when encoding
- :return: encoded object containing just the data of an EasyScience object.
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ dictionary. By default, None.
+ encoder : Optional[BaseEncoderDecoder], default=None
+ The encoder to be used for encoding the data. By default,
+ None.
+ **kwargs :
+ Any additional keywords to pass to the encoder when
+ encoding.
+
+ Returns
+ -------
+ Any
+ Encoded object containing just the data of an EasyScience
+ object.
"""
if encoder is None:
@@ -112,19 +166,28 @@ def encode_data(
return self.encode(skip=skip, encoder=encoder, **kwargs)
def as_data_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Returns a dictionary containing just the data of an
- EasyScience object.
-
- :param skip: List of field names as strings to skip when forming
- the dictionary
- :return: dictionary containing just the data of an EasyScience
+ """
+ Returns a dictionary containing just the data of an EasyScience
+ object.
+
+ Parameters
+ ----------
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ dictionary. By default, None.
+
+ Returns
+ -------
+ Dict[str, Any]
+ Dictionary containing just the data of an EasyScience
object.
"""
return self.encode(skip=skip, encoder=DataDictSerializer)
def unsafe_hash(self) -> sha1:
- """Returns an hash of the current object.
+ """
+ Returns an hash of the current object.
This uses a generic but low performance method of converting the
object to a dictionary, flattening any nested keys, and then
diff --git a/src/easyscience/legacy/obj_base.py b/src/easyscience/legacy/obj_base.py
new file mode 100644
index 00000000..4a70de25
--- /dev/null
+++ b/src/easyscience/legacy/obj_base.py
@@ -0,0 +1,171 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+from typing import Callable
+from typing import Optional
+
+from easyscience import global_object
+
+from ..base_classes.based_base import BasedBase
+from ..utils.classTools import addLoggedProp
+from ..variable.descriptor_base import DescriptorBase
+
+if TYPE_CHECKING:
+ from ..io import SerializerComponent
+
+
+class ObjBase(BasedBase):
+ """
+ This is the base class for which all higher level classes are built
+ off of.
+
+ .. deprecated::
+ ``ObjBase`` is deprecated and will be removed in a future version.
+ Please migrate to ``ModelBase`` instead.
+
+ NOTE: This object is serializable only if parameters are supplied
+ as: ``ObjBase(a=value, b=value)``. For ``Parameter`` or
+ ``Descriptor`` objects we can cheat with
+ ``ObjBase(*[Descriptor(...), Parameter(...), ...])``.
+ """
+
+ def __init__(
+ self,
+ name: str,
+ unique_name: Optional[str] = None,
+ *args: Optional[SerializerComponent],
+ **kwargs: Optional[SerializerComponent],
+ ):
+ """
+ Set up the base class.
+
+ Parameters
+ ----------
+ name : str
+ Name of this object.
+ unique_name : Optional[str], default=None
+ Unique identifier for this object. By default, None.
+ *args : Optional[SerializerComponent]
+ Positional serializer components to attach to this object.
+ **kwargs : Optional[SerializerComponent]
+ Fields which this class should contain.
+
+ Raises
+ ------
+ AttributeError
+ If a keyword component name would overwrite an existing
+ class attribute.
+ """
+ global_object.log.getLogger('legacy').warning(
+ 'ObjBase is deprecated and will be removed in a future version. '
+ 'Please migrate to ModelBase.',
+ stacklevel=2,
+ )
+ super(ObjBase, self).__init__(name=name, unique_name=unique_name)
+ # If Parameter or Descriptor is given as arguments...
+ for arg in args:
+ if issubclass(type(arg), (ObjBase, DescriptorBase)):
+ kwargs[getattr(arg, 'name')] = arg
+ # Set kwargs, also useful for serialization
+ known_keys = self.__dict__.keys()
+ self._kwargs = kwargs
+ for key in kwargs.keys():
+ if key in known_keys:
+ raise AttributeError('Kwargs cannot overwrite class attributes in ObjBase.')
+ if issubclass(type(kwargs[key]), (BasedBase, DescriptorBase)) or 'CollectionBase' in [
+ c.__name__ for c in type(kwargs[key]).__bases__
+ ]:
+ self._global_object.map.add_edge(self, kwargs[key])
+ self._global_object.map.reset_type(kwargs[key], 'created_internal')
+ addLoggedProp(
+ self,
+ key,
+ self.__getter(key),
+ self.__setter(key),
+ get_id=key,
+ my_self=self,
+ test_class=ObjBase,
+ )
+
+ def _add_component(self, key: str, component: SerializerComponent) -> None:
+ """Dynamically add a component to the class. This is an internal
+ method, though can be called remotely. The recommended
+ alternative is to use typing, i.e.
+
+ .. code-block:: python
+
+ class Foo(Bar):
+ def __init__(self, foo: Parameter, bar: Parameter):
+ '''Init function.'''
+ super(Foo, self).__init__(bar=bar)
+ self._add_component('foo', foo)
+
+ :param key: Name of component to be added
+ :param component: Component to be added
+ :return: None
+ """
+ self._kwargs[key] = component
+ self._global_object.map.add_edge(self, component)
+ self._global_object.map.reset_type(component, 'created_internal')
+ addLoggedProp(
+ self,
+ key,
+ self.__getter(key),
+ self.__setter(key),
+ get_id=key,
+ my_self=self,
+ test_class=ObjBase,
+ )
+
+ def __setattr__(self, key: str, value: SerializerComponent) -> None:
+ # Assume that the annotation is a ClassVar
+ old_obj = None
+ if (
+ hasattr(self.__class__, '__annotations__')
+ and key in self.__class__.__annotations__
+ and hasattr(self.__class__.__annotations__[key], '__args__')
+ and issubclass(
+ getattr(value, '__old_class__', value.__class__),
+ self.__class__.__annotations__[key].__args__,
+ )
+ ):
+ if issubclass(type(getattr(self, key, None)), (BasedBase, DescriptorBase)):
+ old_obj = self.__getattribute__(key)
+ self._global_object.map.prune_vertex_from_edge(self, old_obj)
+ self._add_component(key, value)
+ else:
+ if hasattr(self, key) and issubclass(type(value), (BasedBase, DescriptorBase)):
+ old_obj = self.__getattribute__(key)
+ self._global_object.map.prune_vertex_from_edge(self, old_obj)
+ self._global_object.map.add_edge(self, value)
+ super(ObjBase, self).__setattr__(key, value)
+ # Update the interface bindings if something changed (BasedBase and Descriptor)
+ if old_obj is not None:
+ old_interface = getattr(self, 'interface', None)
+ if old_interface is not None:
+ self.generate_bindings()
+
+ def __repr__(self) -> str:
+ return f'{self.__class__.__name__} `{getattr(self, "name")}`'
+
+ @staticmethod
+ def __getter(key: str) -> Callable[[SerializerComponent], SerializerComponent]:
+ def getter(obj: SerializerComponent) -> SerializerComponent:
+ return obj._kwargs[key]
+
+ return getter
+
+ @staticmethod
+ def __setter(key: str) -> Callable[[SerializerComponent], None]:
+ def setter(obj: SerializerComponent, value: float) -> None:
+ if issubclass(obj._kwargs[key].__class__, (DescriptorBase)) and not issubclass(
+ value.__class__, (DescriptorBase)
+ ):
+ obj._kwargs[key].value = value
+ else:
+ obj._kwargs[key] = value
+
+ return setter
diff --git a/src/easyscience/legacy/xml.py b/src/easyscience/legacy/xml.py
index 7ec29950..da52ef65 100644
--- a/src/easyscience/legacy/xml.py
+++ b/src/easyscience/legacy/xml.py
@@ -13,6 +13,8 @@
import numpy as np
+from easyscience import global_object
+
from ..io.dict import DataDictSerializer
from ..io.dict import DictSerializer
from ..io.template import BaseEncoderDecoder
@@ -25,8 +27,9 @@
class XMLSerializer(BaseEncoderDecoder):
- """This is a serializer that can encode and decode EasyScience
- objects to a basic xml format.
+ """
+ This is a serializer that can encode and decode EasyScience objects
+ to a basic xml format.
"""
def encode(
@@ -38,21 +41,35 @@ def encode(
use_header: bool = False,
**kwargs,
) -> str:
- """Convert an EasyScience object to an XML encoded string. Note
- that for speed the `fast` setting can be changed to `True`. An
- XML document with initial block *data* is returned.
-
- :param obj: Object to be encoded.
- :param skip: List of field names as strings to skip when forming
- the encoded object
- :param data_only: Should only the object's data be encoded.
- :param fast: Should the returned string be pretty? This can be
- turned off for speed.
- :param use_header: Should a header of `'?xml version="1.0"
- encoding="UTF-8"?'` be included?
- :param kwargs: Any additional key-words to pass to the
- Dictionary Serializer.
- :return: string containing the XML encoded object
+ """
+ Convert an EasyScience object to an XML encoded string.
+
+ Note that for speed the ``fast`` setting can be changed to
+ ``True``. An XML document with initial block *data* is returned.
+
+ Parameters
+ ----------
+ obj : ComponentSerializer
+ Object to be encoded.
+ skip : Optional[List[str]], default=None
+ List of field names as strings to skip when forming the
+ encoded object. By default, None.
+ data_only : bool, default=False
+ Should only the object's data be encoded. By default, False.
+ fast : bool, default=False
+ Should the returned string be pretty? This can be turned off
+ for speed. By default, False.
+ use_header : bool, default=False
+ Should a header of ``'?xml version="1.0"
+ encoding="UTF-8"?'`` be included? By default, False.
+ **kwargs :
+ Any additional key-words to pass to the Dictionary
+ Serializer.
+
+ Returns
+ -------
+ str
+ String containing the XML encoded object.
"""
if skip is None:
@@ -77,11 +94,19 @@ def encode(
@classmethod
def decode(cls, data: str) -> ComponentSerializer:
- """Decode an EasyScience object which has been encoded in XML
+ """
+ Decode an EasyScience object which has been encoded in XML
format.
- :param data: String containing XML encoded data.
- :return: Reformed EasyScience object.
+ Parameters
+ ----------
+ data : str
+ String containing XML encoded data.
+
+ Returns
+ -------
+ ComponentSerializer
+ Reformed EasyScience object.
"""
data_xml = ET.XML(data)
@@ -136,8 +161,9 @@ def string_to_variable(in_string: str):
return value
def _check_class(self, element, key: str, value: Any, skip: Optional[List[str]] = None):
- """Add a value to an element or create a new element based on
- input type.
+ """
+ Add a value to an element or create a new element based on input
+ type.
"""
T_ = type(value)
if isinstance(value, dict):
@@ -167,5 +193,5 @@ def _check_class(self, element, key: str, value: Any, skip: Optional[List[str]]
elif issubclass(T_, np.ndarray):
element.text = str(value.tolist())
else:
- print(f'Cannot encode {T_} to XML')
+ global_object.log.getLogger('legacy.xml').error('Cannot encode %s to XML', T_)
raise NotImplementedError
diff --git a/src/easyscience/models/polynomial.py b/src/easyscience/models/polynomial.py
index 5cc4170b..49b4757e 100644
--- a/src/easyscience/models/polynomial.py
+++ b/src/easyscience/models/polynomial.py
@@ -14,14 +14,26 @@
class Polynomial(ObjBase):
- """A polynomial model.
+ """
+ A polynomial model.
+
+ Attributes
+ ----------
+ coefficients : ClassVar[CollectionBase]
+ Coefficients of the polynomial.
Parameters
----------
- name : str
+ name : str, default='polynomial'
The name of the model.
- degree : int
- The degree of the polynomial.
+ coefficients : Optional[Union[Iterable[Union[float, Parameter]], CollectionBase]], default=None
+ Coefficients used to populate ``self.coefficients``.
+
+ Raises
+ ------
+ TypeError
+ If ``coefficients`` is neither a ``CollectionBase`` nor an
+ iterable of floats or ``Parameter`` instances.
"""
coefficients: ClassVar[CollectionBase]
diff --git a/src/easyscience/utils/classUtils.py b/src/easyscience/utils/classUtils.py
index 6d56028a..8d158b65 100644
--- a/src/easyscience/utils/classUtils.py
+++ b/src/easyscience/utils/classUtils.py
@@ -2,16 +2,19 @@
# SPDX-License-Identifier: BSD-3-Clause
from functools import wraps
+from typing import Any
def singleton(cls):
- """This decorator can be used to create a singleton out of a class.
+ """
+ This decorator can be used to create a singleton out of a class.
Usage::
@singleton
class MySingleton:
def __init__():
+ '''Init function.'''
pass
"""
@@ -26,19 +29,21 @@ def get_instance():
def cached_class(klass):
- """Decorator to cache class instances by constructor arguments. This
- results in a class that behaves like a singleton for each set of
- constructor arguments, ensuring efficiency.
-
- Note that this should be used for *immutable classes only*. Having
- a cached mutable class makes very little sense. For efficiency,
- avoid using this decorator for situations where there are many
- constructor arguments permutations.
-
- The keywords argument dictionary is converted to a tuple because
- dicts are mutable; keywords themselves are strings and so are always
- hashable, but if any arguments (keyword or positional) are non-
- hashable, that set of arguments is not cached.
+ """
+ Decorator to cache class instances by constructor arguments.
+
+ This results in a class that behaves like a singleton for each
+ set of constructor arguments, ensuring efficiency.
+
+ Note that this should be used for *immutable classes only*.
+ Having a cached mutable class makes very little sense. For
+ efficiency, avoid using this decorator for situations where
+ there are many constructor arguments permutations.
+
+ The keywords argument dictionary is converted to a tuple because
+ dicts are mutable; keywords themselves are strings and so are
+ always hashable, but if any arguments (keyword or positional)
+ are non- hashable, that set of arguments is not cached.
"""
cache = {}
@@ -48,12 +53,21 @@ class _decorated(klass):
# isn't writable once the class is created
__doc__ = klass.__doc__
- def __new__(cls, *args, **kwargs):
- """Pass through...
-
- :param args:
- :param kwargs:
- :return:
+ def __new__(cls, *args: Any, **kwargs: Any) -> '_decorated':
+ """
+ Pass through.
+
+ Parameters
+ ----------
+ *args : Any
+ Positional constructor arguments.
+ **kwargs : Any
+ Keyword constructor arguments.
+
+ Returns
+ -------
+ '_decorated'
+ Cached instance for the provided constructor arguments.
"""
key = (cls,) + args + tuple(kwargs.items())
try:
diff --git a/src/easyscience/utils/decorators.py b/src/easyscience/utils/decorators.py
index 16457b48..fec9b0fa 100644
--- a/src/easyscience/utils/decorators.py
+++ b/src/easyscience/utils/decorators.py
@@ -3,14 +3,16 @@
import collections.abc
import functools
-import warnings
from time import time
+from typing import Any
+from typing import Callable
from easyscience import global_object
class memoized:
- """Decorator.
+ """
+ Decorator.
Caches a function's return value each time it is called. If called
later with the same arguments, the cached value is returned (not
@@ -41,10 +43,19 @@ def __get__(self, obj, objtype):
return functools.partial(self.__call__, obj)
-def counted(func):
- """Counts how many times a function has been called and adds a
- `func.calls` to it's properties :param func: Function to be counted
- :return: Results from function call.
+def counted(func: Callable[..., Any]) -> Callable[..., Any]:
+ """
+ Count how many times a function has been called.
+
+ Parameters
+ ----------
+ func : Callable[..., Any]
+ Function to be counted.
+
+ Returns
+ -------
+ Callable[..., Any]
+ Wrapped function with a ``n_calls`` counter attribute.
"""
@functools.wraps(func)
@@ -57,7 +68,8 @@ def wrapped(*args, **kwargs):
def time_it(func):
- """Times a function and reports the time either to the class' log or
+ """
+ Times a function and reports the time either to the class' log or
the base logger :param func: function to be timed :return: callable
function with timer.
"""
@@ -77,7 +89,8 @@ def _time_it(*args, **kwargs):
def deprecated(func):
- """This is a decorator which can be used to mark functions as
+ """
+ This is a decorator which can be used to mark functions as
deprecated.
It will result in a warning being emitted when the function is used.
@@ -85,11 +98,10 @@ def deprecated(func):
@functools.wraps(func)
def new_func(*args, **kwargs):
- warnings.warn_explicit(
- 'Call to deprecated function {}.'.format(func.__name__),
- category=DeprecationWarning,
- filename=func.__code__.co_filename,
- lineno=func.__code__.co_firstlineno + 1,
+ global_object.log.getLogger('deprecated').warning(
+ 'Call to deprecated function %s.',
+ func.__name__,
+ stacklevel=3,
)
return func(*args, **kwargs)
diff --git a/src/easyscience/utils/string.py b/src/easyscience/utils/string.py
index e8a2456d..43f9c4dc 100644
--- a/src/easyscience/utils/string.py
+++ b/src/easyscience/utils/string.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: BSD-3-Clause
from fractions import Fraction
+from typing import Any
"""
This module provides utility classes for string operations.
@@ -9,16 +10,36 @@
def transformation_to_string(
- matrix, translation_vec=(0, 0, 0), components=('x', 'y', 'z'), c='', delim=','
-):
- """Convenience method.
+ matrix: Any,
+ translation_vec: tuple[Any, Any, Any] = (0, 0, 0),
+ components: tuple[str, str, str] = ('x', 'y', 'z'),
+ c: str = '',
+ delim: str = ',',
+) -> str:
+ """
+ Convenience method.
Given matrix returns string, e.g. x+2y+1/4
- :param matrix : param translation_vec
- :param components: either ('x', 'y', 'z') or ('a', 'b', 'c')
- :param c: optional additional character to print (used for magmoms)
- :param delim: delimiter
- :return: xyz string
+
+ Parameters
+ ----------
+ matrix : Any
+ Transformation matrix.
+ translation_vec : tuple[Any, Any, Any], default=(0, 0, 0)
+ By default, (0, 0, 0).
+ components : tuple[str, str, str], default=('x', 'y', 'z')
+ Either ('x', 'y', 'z') or ('a', 'b', 'c'). By default, ('x',
+ 'y', 'z').
+ c : str, default=''
+ Optional additional character to print (used for magmoms). By
+ default, ''.
+ delim : str, default=','
+ Delimiter. By default, ','.
+
+ Returns
+ -------
+ str
+ Xyz string.
"""
parts = []
for i in range(3):
diff --git a/src/easyscience/variable/descriptor_any_type.py b/src/easyscience/variable/descriptor_any_type.py
index 6bdf7f39..157117d8 100644
--- a/src/easyscience/variable/descriptor_any_type.py
+++ b/src/easyscience/variable/descriptor_any_type.py
@@ -18,7 +18,8 @@
class DescriptorAnyType(DescriptorBase):
- """A `Descriptor` for any type that does not fit the other
+ """
+ A ``Descriptor`` for any type that does not fit the other
Descriptors.
Should be avoided when possible. It was created to hold the symmetry
@@ -35,15 +36,15 @@ def __init__(
display_name: Optional[str] = None,
parent: Optional[Any] = None,
):
- """Constructor for the DescriptorAnyType class.
-
- param name: Name of the descriptor
- param value: Value of the descriptor
- param description: Description of the descriptor
- param url: URL of the descriptor
- param display_name: Display name of the descriptor
- param parent: Parent of the descriptor
- .. note:: Undo/Redo functionality is implemented for the attributes `variance`, `error`, `unit` and `value`.
+ """
+ Constructor for the DescriptorAnyType class.
+
+ param name: Name of the descriptor param value: Value of the
+ descriptor param description: Description of the descriptor
+ param url: URL of the descriptor param display_name: Display
+ name of the descriptor param parent: Parent of the descriptor ..
+ note:: Undo/Redo functionality is implemented for the attributes
+ ``variance``, ``error``, ``unit`` and ``value``.
"""
self._value = value
@@ -59,18 +60,26 @@ def __init__(
@property
def value(self) -> numbers.Number:
- """Get the value.
+ """
+ Get the value.
- :return: Value of self.
+ Returns
+ -------
+ numbers.Number
+ Value of self.
"""
return self._value
@value.setter
@property_stack
def value(self, value: Union[list, np.ndarray]) -> None:
- """Set the value of self.
+ """
+ Set the value of self.
- :param value: New value for the DescriptorAnyType.
+ Parameters
+ ----------
+ value : Union[list, np.ndarray]
+ New value for the DescriptorAnyType.
"""
self._value = value
@@ -78,8 +87,9 @@ def __copy__(self) -> DescriptorAnyType:
return super().__copy__()
def __repr__(self) -> str:
- """Return a string representation of the DescriptorAnyType,
- showing its name and value.
+ """
+ Return a string representation of the DescriptorAnyType, showing
+ its name and value.
"""
if hasattr(self._value, '__repr__'):
diff --git a/src/easyscience/variable/descriptor_array.py b/src/easyscience/variable/descriptor_array.py
index aecc684a..35f1c022 100644
--- a/src/easyscience/variable/descriptor_array.py
+++ b/src/easyscience/variable/descriptor_array.py
@@ -26,7 +26,8 @@
class DescriptorArray(DescriptorBase):
- """A `Descriptor` for Array values with units.
+ """
+ A ``Descriptor`` for Array values with units.
The internal representation is a scipp array.
"""
@@ -44,18 +45,18 @@ def __init__(
parent: Optional[Any] = None,
dimensions: Optional[list] = None,
):
- """Constructor for the DescriptorArray class.
-
- param name: Name of the descriptor
- param value: List containing the values of the descriptor
- param unit: Unit of the descriptor
- param variance: Variances of the descriptor
- param description: Description of the descriptor
- param url: URL of the descriptor
- param display_name: Display name of the descriptor
- param parent: Parent of the descriptor
- param dimensions: List of dimensions to pass to scipp. Will be autogenerated if not supplied.
- .. note:: Undo/Redo functionality is implemented for the attributes `variance`, `error`, `unit` and `value`.
+ """
+ Constructor for the DescriptorArray class.
+
+ param name: Name of the descriptor param value: List containing
+ the values of the descriptor param unit: Unit of the descriptor
+ param variance: Variances of the descriptor param description:
+ Description of the descriptor param url: URL of the descriptor
+ param display_name: Display name of the descriptor param parent:
+ Parent of the descriptor param dimensions: List of dimensions to
+ pass to scipp. Will be autogenerated if not supplied. .. note::
+ Undo/Redo functionality is implemented for the attributes
+ ``variance``, ``error``, ``unit`` and ``value``.
"""
if not isinstance(value, (list, np.ndarray)):
@@ -111,13 +112,28 @@ def __init__(
self.convert_unit(self._base_unit())
@classmethod
- def from_scipp(cls, name: str, full_value: Variable, **kwargs) -> DescriptorArray:
- """Create a DescriptorArray from a scipp array.
-
- :param name: Name of the descriptor
- :param full_value: Value of the descriptor as a scipp variable
- :param kwargs: Additional parameters for the descriptor
- :return: DescriptorArray
+ def from_scipp(cls, name: str, full_value: Variable, **kwargs: Any) -> DescriptorArray:
+ """
+ Create a DescriptorArray from a scipp array.
+
+ Parameters
+ ----------
+ name : str
+ Name of the descriptor.
+ full_value : Variable
+ Value of the descriptor as a scipp variable.
+ **kwargs : Any
+ Additional parameters for the descriptor.
+
+ Returns
+ -------
+ DescriptorArray
+ DescriptorArray.
+
+ Raises
+ ------
+ TypeError
+ If ``full_value`` is not a scipp ``Variable``.
"""
if not isinstance(full_value, Variable):
raise TypeError(f'{full_value=} must be a scipp array')
@@ -132,10 +148,15 @@ def from_scipp(cls, name: str, full_value: Variable, **kwargs) -> DescriptorArra
@property
def full_value(self) -> Variable:
- """Get the value of self as a scipp array. This should be usable
- for most cases.
+ """
+ Get the value of self as a scipp array.
+
+ This should be usable for most cases.
- :return: Value of self with unit.
+ Returns
+ -------
+ Variable
+ Value of self with unit.
"""
return self._array
@@ -147,22 +168,40 @@ def full_value(self, full_value: Variable) -> None:
@property
def value(self) -> numbers.Number:
- """Get the value without units. The Scipp array can be obtained
- from `obj.full_value`.
+ """
+ Get the value without units.
+
+ The Scipp array can be obtained from ``obj.full_value``.
- :return: Value of self without unit.
+ Returns
+ -------
+ numbers.Number
+ Value of self without unit.
"""
return self._array.values
@value.setter
@property_stack
def value(self, value: Union[list, np.ndarray]) -> None:
- """Set the value of self. Ensures the input is an array and
- matches the shape of the existing array. The full value can be
- obtained from `obj.full_value`.
-
- :param value: New value for the DescriptorArray, must be a list
- or numpy array.
+ """
+ Set the value of self.
+
+ Ensures the input is an array and matches the shape of the
+ existing array. The full value can be obtained from
+ ``obj.full_value``.
+
+ Parameters
+ ----------
+ value : Union[list, np.ndarray]
+ New value for the DescriptorArray, must be a list or numpy
+ array.
+
+ Raises
+ ------
+ TypeError
+ If ``value`` is not a list or NumPy array.
+ ValueError
+ If ``value`` does not match the existing array shape.
"""
if not isinstance(value, (list, np.ndarray)):
raise TypeError(f'{value=} must be a list or numpy array.')
@@ -177,18 +216,36 @@ def value(self, value: Union[list, np.ndarray]) -> None:
@property
def dimensions(self) -> list:
- """Get the dimensions used for the underlying scipp array.
+ """
+ Get the dimensions used for the underlying scipp array.
- :return: dimensions of self.
+ Returns
+ -------
+ list
+ Dimensions of self.
"""
return self._dimensions
@dimensions.setter
- def dimensions(self, dimensions: Union[list]) -> None:
- """Set the dimensions of self. Ensures that the input has a
- shape compatible with self.full_value.
-
- :param value: list of dimensions.
+ def dimensions(self, dimensions: Union[list, np.ndarray]) -> None:
+ """
+ Set the dimensions of self.
+
+ Ensures that the input has a shape compatible with
+ self.full_value.
+
+ Parameters
+ ----------
+ dimensions : Union[list, np.ndarray]
+ List of dimensions.
+
+ Raises
+ ------
+ TypeError
+ If ``dimensions`` is not a list or NumPy array.
+ ValueError
+ If ``dimensions`` does not match the number of existing
+ dimensions.
"""
if not isinstance(dimensions, (list, np.ndarray)):
raise TypeError(f'{dimensions=} must be a list or numpy array.')
@@ -206,9 +263,13 @@ def dimensions(self, dimensions: Union[list]) -> None:
@property
def unit(self) -> str:
- """Get the unit.
+ """
+ Get the unit.
- :return: Unit as a string.
+ Returns
+ -------
+ str
+ Unit as a string.
"""
return str(self._array.unit)
@@ -223,20 +284,38 @@ def unit(self, unit_str: str) -> None:
@property
def variance(self) -> np.ndarray:
- """Get the variance as a Numpy ndarray.
+ """
+ Get the variance as a Numpy ndarray.
- :return: variance.
+ Returns
+ -------
+ np.ndarray
+ Variance.
"""
return self._array.variances
@variance.setter
@property_stack
def variance(self, variance: Union[list, np.ndarray]) -> None:
- """Set the variance of self. Ensures the input is an array and
- matches the shape of the existing values.
-
- :param variance: New variance for the DescriptorArray, must be a
- list or numpy array.
+ """
+ Set the variance of self.
+
+ Ensures the input is an array and matches the shape of the
+ existing values.
+
+ Parameters
+ ----------
+ variance : Union[list, np.ndarray]
+ New variance for the DescriptorArray, must be a list or
+ numpy array.
+
+ Raises
+ ------
+ TypeError
+ If ``variance`` is not a list or NumPy array.
+ ValueError
+ If ``variance`` has the wrong shape or contains negative
+ values.
"""
if variance is not None:
if not isinstance(variance, (list, np.ndarray)):
@@ -257,11 +336,15 @@ def variance(self, variance: Union[list, np.ndarray]) -> None:
@property
def error(self) -> Optional[np.ndarray]:
- """The standard deviations, calculated as the square root of
+ """
+ The standard deviations, calculated as the square root of
variances.
- :return: A numpy array of standard deviations, or None if
- variances are not set.
+ Returns
+ -------
+ Optional[np.ndarray]
+ A numpy array of standard deviations, or None if variances
+ are not set.
"""
if self._array.variances is None:
return None
@@ -270,10 +353,22 @@ def error(self) -> Optional[np.ndarray]:
@error.setter
@property_stack
def error(self, error: Union[list, np.ndarray]) -> None:
- """Set the standard deviation for the parameter, which updates
- the variances.
+ """
+ Set the standard deviation for the parameter, which updates the
+ variances.
- :param error: A list or numpy array of standard deviations.
+ Parameters
+ ----------
+ error : Union[list, np.ndarray]
+ A list or numpy array of standard deviations.
+
+ Raises
+ ------
+ TypeError
+ If ``error`` is not a list or NumPy array.
+ ValueError
+ If ``error`` has the wrong shape or contains negative
+ values.
"""
if error is not None:
if not isinstance(error, (list, np.ndarray)):
@@ -293,9 +388,20 @@ def error(self, error: Union[list, np.ndarray]) -> None:
self._array.variances = None
def convert_unit(self, unit_str: str) -> None:
- """Convert the value from one unit system to another.
-
- :param unit_str: New unit in string form
+ """
+ Convert the value from one unit system to another.
+
+ Parameters
+ ----------
+ unit_str : str
+ New unit in string form.
+
+ Raises
+ ------
+ TypeError
+ If ``unit_str`` is not a string.
+ UnitError
+ If the unit conversion fails.
"""
if not isinstance(unit_str, str):
raise TypeError(f'{unit_str=} must be a string representing a valid scipp unit')
@@ -329,8 +435,9 @@ def __copy__(self) -> DescriptorArray:
return super().__copy__()
def __repr__(self) -> str:
- """Return a string representation of the DescriptorArray,
- showing its name, value, variance, and unit.
+ """
+ Return a string representation of the DescriptorArray, showing
+ its name, value, variance, and unit.
Large arrays are summarized for brevity.
"""
@@ -366,7 +473,8 @@ def __repr__(self) -> str:
return string
def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Dict representation of the current DescriptorArray.
+ """
+ Dict representation of the current DescriptorArray.
The dict contains the value, unit and variances, in addition to
the properties of DescriptorBase.
@@ -384,16 +492,33 @@ def _apply_operation(
operation: Callable,
units_must_match: bool = True,
) -> DescriptorArray:
- """Perform element-wise operations with another
- DescriptorNumber, DescriptorArray, list, or number.
+ """
+ Perform element-wise operations with another DescriptorNumber,
+ DescriptorArray, list, or number.
- :param other: The object to operate on. Must be a
- DescriptorArray or DescriptorNumber with compatible units,
- or a list with the same shape if the DescriptorArray is
- dimensionless.
- :param operation: The operation to perform
- :return: A new DescriptorArray representing the result of the
+ Parameters
+ ----------
+ other : Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
+ The object to operate on. Must be a DescriptorArray or
+ DescriptorNumber with compatible units, or a list with the
+ same shape if the DescriptorArray is dimensionless.
+ operation : Callable
+ The operation to perform.
+ units_must_match : bool, default=True
+ Whether operands must have compatible units.
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
operation.
+
+ Raises
+ ------
+ UnitError
+ If the operands have incompatible units.
+ ValueError
+ If operand shapes are incompatible.
"""
if isinstance(other, numbers.Number):
# Does not need to be dimensionless for multiplication and division
@@ -476,10 +601,11 @@ def _rapply_operation(
operation: Callable,
units_must_match: bool = True,
) -> DescriptorArray:
- """Handle reverse operations for DescriptorArrays,
+ """
+ Handle reverse operations for DescriptorArrays,
DescriptorNumbers, lists, and scalars.
- Ensures unit compatibility when `other` is a DescriptorNumber.
+ Ensures unit compatibility when ``other`` is a DescriptorNumber.
"""
def reversed_operation(a, b):
@@ -508,20 +634,22 @@ def reversed_operation(a, b):
return self._apply_operation(other, reversed_operation, units_must_match)
def __array_ufunc__(self, ufunc, method, *inputs, **kwargs):
- """DescriptorArray does not generally support Numpy array
+ """
+ DescriptorArray does not generally support Numpy array
functions.
- For example, `np.argwhere(descriptorArray: DescriptorArray)`
+ For example, ``np.argwhere(descriptorArray: DescriptorArray)``
should fail. Modify this function if you want to add such
functionality.
"""
return NotImplemented
def __array_function__(self, func, types, args, kwargs):
- """DescriptorArray does not generally support Numpy array
+ """
+ DescriptorArray does not generally support Numpy array
functions.
- For example, `np.argwhere(descriptorArray: DescriptorArray)`
+ For example, ``np.argwhere(descriptorArray: DescriptorArray)``
should fail. Modify this function if you want to add such
functionality.
"""
@@ -530,36 +658,53 @@ def __array_function__(self, func, types, args, kwargs):
def __add__(
self, other: Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
) -> DescriptorArray:
- """Perform element-wise addition with another DescriptorNumber,
+ """
+ Perform element-wise addition with another DescriptorNumber,
DescriptorArray, list, or number.
- :param other: The object to add. Must be a DescriptorArray or
+ Parameters
+ ----------
+ other : Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
+ The object to add. Must be a DescriptorArray or
DescriptorNumber with compatible units, or a list with the
same shape if the DescriptorArray is dimensionless, or a
number.
- :return: A new DescriptorArray representing the result of the
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
addition.
"""
return self._apply_operation(other, operator.add)
def __radd__(self, other: Union[DescriptorNumber, list, numbers.Number]) -> DescriptorArray:
- """Handle reverse addition for DescriptorArrays,
- DescriptorNumbers, lists, and scalars.
+ """
+ Handle reverse addition for DescriptorArrays, DescriptorNumbers,
+ lists, and scalars.
- Ensures unit compatibility when `other` is a DescriptorNumber.
+ Ensures unit compatibility when ``other`` is a DescriptorNumber.
"""
return self._rapply_operation(other, operator.add)
def __sub__(
self, other: Union[DescriptorArray, list, np.ndarray, numbers.Number]
) -> DescriptorArray:
- """Perform element-wise subtraction with another
- DescriptorArray, list, or number.
-
- :param other: The object to subtract. Must be a DescriptorArray
- with compatible units, or a list with the same shape if the
+ """
+ Perform element-wise subtraction with another DescriptorArray,
+ list, or number.
+
+ Parameters
+ ----------
+ other : Union[DescriptorArray, list, np.ndarray, numbers.Number]
+ The object to subtract. Must be a DescriptorArray with
+ compatible units, or a list with the same shape if the
DescriptorArray is dimensionless.
- :return: A new DescriptorArray representing the result of the
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
subtraction.
"""
if isinstance(other, (DescriptorArray, DescriptorNumber, list, numbers.Number)):
@@ -574,13 +719,21 @@ def __sub__(
return NotImplemented
def __rsub__(self, other: Union[DescriptorNumber, list, numbers.Number]) -> DescriptorArray:
- """Perform element-wise subtraction with another
- DescriptorNumber, list, or number.
-
- :param other: The object to subtract. Must be a DescriptorArray
- with compatible units, or a list with the same shape if the
+ """
+ Perform element-wise subtraction with another DescriptorNumber,
+ list, or number.
+
+ Parameters
+ ----------
+ other : Union[DescriptorNumber, list, numbers.Number]
+ The object to subtract. Must be a DescriptorArray with
+ compatible units, or a list with the same shape if the
DescriptorArray is dimensionless.
- :return: A new DescriptorArray representing the result of the
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
subtraction.
"""
if isinstance(other, (DescriptorNumber, list, numbers.Number)):
@@ -596,13 +749,21 @@ def __rsub__(self, other: Union[DescriptorNumber, list, numbers.Number]) -> Desc
def __mul__(
self, other: Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
) -> DescriptorArray:
- """Perform element-wise multiplication with another
+ """
+ Perform element-wise multiplication with another
DescriptorNumber, DescriptorArray, list, or number.
- :param other: The object to multiply. Must be a DescriptorArray
- or DescriptorNumber with compatible units, or a list with
- the same shape if the DescriptorArray is dimensionless.
- :return: A new DescriptorArray representing the result of the
+ Parameters
+ ----------
+ other : Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
+ The object to multiply. Must be a DescriptorArray or
+ DescriptorNumber with compatible units, or a list with the
+ same shape if the DescriptorArray is dimensionless.
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
addition.
"""
if not isinstance(other, (DescriptorArray, DescriptorNumber, list, numbers.Number)):
@@ -610,10 +771,11 @@ def __mul__(
return self._apply_operation(other, operator.mul, units_must_match=False)
def __rmul__(self, other: Union[DescriptorNumber, list, numbers.Number]) -> DescriptorArray:
- """Handle reverse multiplication for DescriptorNumbers, lists,
- and scalars.
+ """
+ Handle reverse multiplication for DescriptorNumbers, lists, and
+ scalars.
- Ensures unit compatibility when `other` is a DescriptorNumber.
+ Ensures unit compatibility when ``other`` is a DescriptorNumber.
"""
if not isinstance(other, (DescriptorNumber, list, numbers.Number)):
return NotImplemented
@@ -622,15 +784,28 @@ def __rmul__(self, other: Union[DescriptorNumber, list, numbers.Number]) -> Desc
def __truediv__(
self, other: Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
) -> DescriptorArray:
- """Perform element-wise division with another DescriptorNumber,
+ """
+ Perform element-wise division with another DescriptorNumber,
DescriptorArray, list, or number.
- :param other: The object to use as a denominator. Must be a
+ Parameters
+ ----------
+ other : Union[DescriptorArray, DescriptorNumber, list, numbers.Number]
+ The object to use as a denominator. Must be a
DescriptorArray or DescriptorNumber with compatible units,
or a list with the same shape if the DescriptorArray is
dimensionless.
- :return: A new DescriptorArray representing the result of the
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
addition.
+
+ Raises
+ ------
+ ZeroDivisionError
+ If any denominator element is zero.
"""
if not isinstance(other, (DescriptorArray, DescriptorNumber, list, numbers.Number)):
return NotImplemented
@@ -649,10 +824,11 @@ def __truediv__(
def __rtruediv__(
self, other: Union[DescriptorNumber, list, numbers.Number]
) -> DescriptorArray:
- """Handle reverse division for DescriptorNumbers, lists, and
+ """
+ Handle reverse division for DescriptorNumbers, lists, and
scalars.
- Ensures unit compatibility when `other` is a DescriptorNumber.
+ Ensures unit compatibility when ``other`` is a DescriptorNumber.
"""
if not isinstance(other, (DescriptorNumber, list, numbers.Number)):
return NotImplemented
@@ -666,13 +842,31 @@ def __rtruediv__(
return inverse_result
def __pow__(self, other: Union[DescriptorNumber, numbers.Number]) -> DescriptorArray:
- """Perform element-wise exponentiation with another
+ """
+ Perform element-wise exponentiation with another
DescriptorNumber or number.
- :param other: The object to use as a denominator. Must be a
- number or DescriptorNumber with no unit or variance.
- :return: A new DescriptorArray representing the result of the
+ Parameters
+ ----------
+ other : Union[DescriptorNumber, numbers.Number]
+ The object to use as a denominator. Must be a number or
+ DescriptorNumber with no unit or variance.
+
+ Returns
+ -------
+ DescriptorArray
+ A new DescriptorArray representing the result of the
addition.
+
+ Raises
+ ------
+ Exception
+ If exponentiation fails inside scipp.
+ UnitError
+ If the exponent has units.
+ ValueError
+ If the exponent has variance or if the result is not a
+ number.
"""
if not isinstance(other, (numbers.Number, DescriptorNumber)):
return NotImplemented
@@ -698,7 +892,8 @@ def __pow__(self, other: Union[DescriptorNumber, numbers.Number]) -> DescriptorA
return descriptor_number
def __rpow__(self, other: numbers.Number):
- """Defers reverse pow with a descriptor array, `a ** array`.
+ """
+ Defers reverse pow with a descriptor array, ``a ** array``.
Exponentiation with regards to an array does not make sense, and
is not implemented.
@@ -713,8 +908,9 @@ def __neg__(self) -> DescriptorArray:
return descriptor_array
def __abs__(self) -> DescriptorArray:
- """Replace all elements in the DescriptorArray with their
- absolute values.
+ """
+ Replace all elements in the DescriptorArray with their absolute
+ values.
Note that this is different from the norm of the
DescriptorArray.
@@ -725,7 +921,8 @@ def __abs__(self) -> DescriptorArray:
return descriptor_array
def __getitem__(self, a) -> DescriptorArray:
- """Slice using scipp syntax.
+ """
+ Slice using scipp syntax.
Defer slicing to scipp.
"""
@@ -736,14 +933,16 @@ def __getitem__(self, a) -> DescriptorArray:
return descriptor
def __delitem__(self, a):
- """Defer slicing to scipp.
+ """
+ Defer slicing to scipp.
This should fail, since scipp does not support __delitem__.
"""
return self.full_value.__delitem__(a)
def __setitem__(self, a, b: Union[numbers.Number, list, DescriptorNumber, DescriptorArray]):
- """__setitem via slice is not allowed, since we currently do not
+ """
+ __setitem via slice is not allowed, since we currently do not
give back a view to the DescriptorArray upon calling
__getitem__.
"""
@@ -756,13 +955,32 @@ def __setitem__(self, a, b: Union[numbers.Number, list, DescriptorNumber, Descri
def trace(
self, dimension1: Optional[str] = None, dimension2: Optional[str] = None
) -> Union[DescriptorArray, DescriptorNumber]:
- """Computes the trace over the descriptor array. The submatrix
- defined `dimension1` and `dimension2` must be square. For a rank
- `k` tensor, the trace will run over the firs two dimensions,
- resulting in a rank `k-2` tensor.
-
- :param dimension1, dimension2: First and second dimension to perform trace over. Must be in `self.dimensions`.
- If not defined, the trace will be taken over the first two dimensions.
+ """
+ Computes the trace over the descriptor array.
+
+ The submatrix defined ``dimension1`` and ``dimension2`` must be
+ square. For a rank ``k`` tensor, the trace will run over the
+ firs two dimensions, resulting in a rank ``k-2`` tensor.
+
+ Parameters
+ ----------
+ dimension1 : Optional[str], default=None
+ First dimension to perform trace over. If not provided, the
+ trace uses the first two dimensions.
+ dimension2 : Optional[str], default=None
+ Second dimension to perform trace over. If not provided, the
+ trace uses the first two dimensions.
+
+ Returns
+ -------
+ Union[DescriptorArray, DescriptorNumber]
+ Descriptor representing the trace result.
+
+ Raises
+ ------
+ ValueError
+ If exactly one dimension is provided, if the dimensions are
+ identical, or if a requested dimension does not exist.
"""
if (dimension1 is not None and dimension2 is None) or (
dimension1 is None and dimension2 is not None
@@ -816,9 +1034,19 @@ def trace(
def sum(
self, dim: Optional[Union[str, list]] = None
) -> Union[DescriptorArray, DescriptorNumber]:
- """Uses scipp to sum over the requested dims.
-
- :param dim: The dim(s) in the scipp array to sum over. If `None`, will sum over all dims.
+ """
+ Uses scipp to sum over the requested dims.
+
+ Parameters
+ ----------
+ dim : Optional[Union[str, list]], default=None
+ The dim(s) in the scipp array to sum over. If ``None``, will
+ sum over all dims. By default, None.
+
+ Returns
+ -------
+ Union[DescriptorArray, DescriptorNumber]
+ Descriptor representing the summed data.
"""
new_full_value = self.full_value.sum(dim=dim)
@@ -858,9 +1086,10 @@ def sum(
# new_full_value = operation(self._array, other) # Let scipp handle operation for uncertainty propagation
def _base_unit(self) -> str:
- """Returns the base unit of the current array.
+ """
+ Returns the base unit of the current array.
- For example, if the unit is `100m`, returns `m`.
+ For example, if the unit is ``100m``, returns ``m``.
"""
string = str(self._array.unit)
for i, letter in enumerate(string):
diff --git a/src/easyscience/variable/descriptor_base.py b/src/easyscience/variable/descriptor_base.py
index 07b4aaa1..ba7198bc 100644
--- a/src/easyscience/variable/descriptor_base.py
+++ b/src/easyscience/variable/descriptor_base.py
@@ -13,15 +13,18 @@
class DescriptorBase(SerializerComponent, metaclass=abc.ABCMeta):
- """This is the base of all variable descriptions for models. It
- contains all information to describe a single unique property of an
- object. This description includes a name and value as well as
+ """
+ This is the base of all variable descriptions for models.
+
+ It contains all information to describe a single unique property of
+ an object. This description includes a name and value as well as
optionally a unit, description and url (for reference material).
Also implemented is a callback so that the value can be read/set
from a linked library object.
- A `Descriptor` is typically something which describes part of a model and is non-fittable and generally changes the
- state of an object.
+ A ``Descriptor`` is typically something which describes part of a
+ model and is non-fittable and generally changes the state of an
+ object.
"""
_global_object = global_object
@@ -37,21 +40,38 @@ def __init__(
display_name: Optional[str] = None,
parent: Optional[Any] = None,
):
- """This is the base of variables for models. It contains all
- information to describe a single unique property of an object.
- This description includes a name, description and url (for
- reference material).
-
- A `Descriptor` is typically something which describes part of a model and is non-fittable and generally changes
- the state of an object.
-
- :param name: Name of this object
- :param description: A brief summary of what this object is
- :param url: Lookup url for documentation/information
- :param display_name: A pretty name for the object
- :param parent: The object which this descriptor is attached to
-
- .. note:: Undo/Redo functionality is implemented for the attributes `name` and `display name`.
+ """
+ This is the base of variables for models.
+
+ It contains all information to describe a single unique property
+ of an object. This description includes a name, description and
+ url (for reference material).
+
+ A ``Descriptor`` is typically something which describes part of
+ a model and is non-fittable and generally changes the state of
+ an object.
+
+ Parameters
+ ----------
+ name : str
+ Name of this object.
+ unique_name : Optional[str], default=None
+ Unique identifier for this object. By default, None.
+ description : Optional[str], default=None
+ A brief summary of what this object is. By default, None.
+ url : Optional[str], default=None
+ Lookup url for documentation/information. By default, None.
+ display_name : Optional[str], default=None
+ A pretty name for the object. By default, None.
+ parent : Optional[Any], default=None
+ The object which this descriptor is attached to. By default,
+ None.
+
+ Raises
+ ------
+ TypeError
+ If ``name`` is not a string or if any optional string field
+ has an invalid type.
"""
if unique_name is None:
@@ -87,18 +107,31 @@ def __init__(
@property
def name(self) -> str:
- """Get the name of the object.
+ """
+ Get the name of the object.
- :return: name of the object.
+ Returns
+ -------
+ str
+ Name of the object.
"""
return self._name
@name.setter
@property_stack
def name(self, new_name: str) -> None:
- """Set the name.
+ """
+ Set the name.
+
+ Parameters
+ ----------
+ new_name : str
+ Name of the object.
- :param new_name: name of the object.
+ Raises
+ ------
+ TypeError
+ If ``new_name`` is not a string.
"""
if not isinstance(new_name, str):
raise TypeError('Name must be a string')
@@ -106,9 +139,13 @@ def name(self, new_name: str) -> None:
@property
def display_name(self) -> str:
- """Get a pretty display name.
+ """
+ Get a pretty display name.
- :return: The pretty display name.
+ Returns
+ -------
+ str
+ The pretty display name.
"""
display_name = self._display_name
if display_name is None:
@@ -117,10 +154,19 @@ def display_name(self) -> str:
@display_name.setter
@property_stack
- def display_name(self, name: str) -> None:
- """Set the pretty display name.
+ def display_name(self, name: Optional[str]) -> None:
+ """
+ Set the pretty display name.
- :param name: Pretty display name of the object.
+ Parameters
+ ----------
+ name : Optional[str]
+ Pretty display name of the object.
+
+ Raises
+ ------
+ TypeError
+ If ``name`` is neither a string nor ``None``.
"""
if name is not None and not isinstance(name, str):
raise TypeError('Display name must be a string or None')
@@ -128,17 +174,30 @@ def display_name(self, name: str) -> None:
@property
def description(self) -> str:
- """Get the description of the object.
+ """
+ Get the description of the object.
- :return: description of the object.
+ Returns
+ -------
+ str
+ Description of the object.
"""
return self._description
@description.setter
- def description(self, description: str) -> None:
- """Set the description of the object.
+ def description(self, description: Optional[str]) -> None:
+ """
+ Set the description of the object.
- :param description: description of the object.
+ Parameters
+ ----------
+ description : Optional[str]
+ Description of the object.
+
+ Raises
+ ------
+ TypeError
+ If ``description`` is neither a string nor ``None``.
"""
if description is not None and not isinstance(description, str):
raise TypeError('Description must be a string or None')
@@ -146,17 +205,30 @@ def description(self, description: str) -> None:
@property
def url(self) -> str:
- """Get the url of the object.
+ """
+ Get the url of the object.
- :return: url of the object.
+ Returns
+ -------
+ str
+ Url of the object.
"""
return self._url
@url.setter
- def url(self, url: str) -> None:
- """Set the url of the object.
+ def url(self, url: Optional[str]) -> None:
+ """
+ Set the url of the object.
- :param url: url of the object.
+ Parameters
+ ----------
+ url : Optional[str]
+ Url of the object.
+
+ Raises
+ ------
+ TypeError
+ If ``url`` is neither a string nor ``None``.
"""
if url is not None and not isinstance(url, str):
raise TypeError('url must be a string')
@@ -164,18 +236,32 @@ def url(self, url: str) -> None:
@property
def unique_name(self) -> str:
- """Get the unique name of this object.
+ """
+ Get the unique name of this object.
- :return: Unique name of this object
+ Returns
+ -------
+ str
+ Unique name of this object.
"""
return self._unique_name
@unique_name.setter
def unique_name(self, new_unique_name: str):
- """Set a new unique name for the object. The old name is still
- kept in the map.
+ """
+ Set a new unique name for the object.
+
+ The old name is still kept in the map.
+
+ Parameters
+ ----------
+ new_unique_name : str
+ New unique name for the object.
- :param new_unique_name: New unique name for the object
+ Raises
+ ------
+ TypeError
+ If ``new_unique_name`` is not a string.
"""
if not isinstance(new_unique_name, str):
raise TypeError('Unique name has to be a string.')
diff --git a/src/easyscience/variable/descriptor_bool.py b/src/easyscience/variable/descriptor_bool.py
index 88135d61..05a09d9d 100644
--- a/src/easyscience/variable/descriptor_bool.py
+++ b/src/easyscience/variable/descriptor_bool.py
@@ -12,7 +12,7 @@
class DescriptorBool(DescriptorBase):
- """A `Descriptor` for boolean values."""
+ """A ``Descriptor`` for boolean values."""
def __init__(
self,
@@ -40,19 +40,36 @@ def __init__(
@property
def value(self) -> bool:
- """Get the value of self.
+ """
+ Get the value of self.
- :return: Value of self
+ Returns
+ -------
+ bool
+ Value of self.
"""
return self._bool_value
@value.setter
@property_stack
def value(self, value: bool) -> None:
- """Set the value of self.
+ """
+ Set the value of self.
+
+ Parameters
+ ----------
+ value : bool
+ New value of self.
+
+ Returns
+ -------
+ None
+ None.
- :param value: New value of self
- :return: None
+ Raises
+ ------
+ TypeError
+ If ``value`` is not a boolean.
"""
if not isinstance(value, bool):
raise TypeError(f'{value=} must be type bool')
diff --git a/src/easyscience/variable/descriptor_number.py b/src/easyscience/variable/descriptor_number.py
index b526afbf..5bcbcb0d 100644
--- a/src/easyscience/variable/descriptor_number.py
+++ b/src/easyscience/variable/descriptor_number.py
@@ -6,6 +6,7 @@
import numbers
import uuid
from typing import Any
+from typing import Callable
from typing import Dict
from typing import List
from typing import Optional
@@ -24,11 +25,19 @@
# Why is this a decorator? Because otherwise we would need a flag on the convert_unit method to avoid
# infinite recursion. This is a bit cleaner as it avoids the need for a internal only flag on a user method.
-def notify_observers(func):
- """Decorator to notify observers of a change in the descriptor.
+def notify_observers(func: Callable[..., Any]) -> Callable[..., Any]:
+ """
+ Decorator to notify observers of a change in the descriptor.
+
+ Parameters
+ ----------
+ func : Callable[..., Any]
+ Function to be decorated.
- :param func: Function to be decorated
- :return: Decorated function
+ Returns
+ -------
+ Callable[..., Any]
+ Decorated function.
"""
def wrapper(self, *args, **kwargs):
@@ -40,7 +49,8 @@ def wrapper(self, *args, **kwargs):
class DescriptorNumber(DescriptorBase):
- """A `Descriptor` for Number values with units.
+ """
+ A ``Descriptor`` for Number values with units.
The internal representation is a scipp scalar.
"""
@@ -58,17 +68,16 @@ def __init__(
parent: Optional[Any] = None,
**kwargs: Any, # Additional keyword arguments (used for (de)serialization)
):
- """Constructor for the DescriptorNumber class.
-
- param name: Name of the descriptor
- param value: Value of the descriptor
- param unit: Unit of the descriptor
- param variance: Variance of the descriptor
- param description: Description of the descriptor
- param url: URL of the descriptor
- param display_name: Display name of the descriptor
- param parent: Parent of the descriptor
- .. note:: Undo/Redo functionality is implemented for the attributes `variance`, `error`, `unit` and `value`.
+ """
+ Constructor for the DescriptorNumber class.
+
+ param name: Name of the descriptor param value: Value of the
+ descriptor param unit: Unit of the descriptor param variance:
+ Variance of the descriptor param description: Description of the
+ descriptor param url: URL of the descriptor param display_name:
+ Display name of the descriptor param parent: Parent of the
+ descriptor .. note:: Undo/Redo functionality is implemented for
+ the attributes ``variance``, ``error``, ``unit`` and ``value``.
"""
self._observers: List[DescriptorNumber] = []
@@ -106,13 +115,28 @@ def __init__(
self._convert_unit(self._base_unit())
@classmethod
- def from_scipp(cls, name: str, full_value: Variable, **kwargs) -> DescriptorNumber:
- """Create a DescriptorNumber from a scipp constant.
-
- :param name: Name of the descriptor
- :param value: Value of the descriptor as a scipp scalar
- :param kwargs: Additional parameters for the descriptor
- :return: DescriptorNumber
+ def from_scipp(cls, name: str, full_value: Variable, **kwargs: Any) -> DescriptorNumber:
+ """
+ Create a DescriptorNumber from a scipp constant.
+
+ Parameters
+ ----------
+ name : str
+ Name of the descriptor.
+ full_value : Variable
+ Value of the descriptor as a scipp scalar.
+ **kwargs : Any
+ Additional parameters for the descriptor.
+
+ Returns
+ -------
+ DescriptorNumber
+ DescriptorNumber.
+
+ Raises
+ ------
+ TypeError
+ If ``full_value`` is not a scalar scipp ``Variable``.
"""
if not isinstance(full_value, Variable):
raise TypeError(f'{full_value=} must be a scipp scalar')
@@ -143,12 +167,21 @@ def _notify_observers(self) -> None:
for observer in self._observers:
observer._update()
- def _validate_dependencies(self, origin=None) -> None:
- """Ping all observers to check if any cyclic dependencies have
- been introduced.
-
- :param origin: Unique_name of the origin of this validation
- check. Used to avoid cyclic depenencies.
+ def _validate_dependencies(self, origin: Optional[str] = None) -> None:
+ """
+ Ping all observers to check if any cyclic dependencies have been
+ introduced.
+
+ Parameters
+ ----------
+ origin : Optional[str], default=None
+ Unique_name of the origin of this validation check. Used to
+ avoid cyclic depenencies. By default, None.
+
+ Raises
+ ------
+ RuntimeError
+ If a cyclic dependency is detected.
"""
if origin == self.unique_name:
raise RuntimeError(
@@ -163,10 +196,15 @@ def _validate_dependencies(self, origin=None) -> None:
@property
def full_value(self) -> Variable:
- """Get the value of self as a scipp scalar. This is should be
- usable for most cases.
+ """
+ Get the value of self as a scipp scalar.
+
+ This is should be usable for most cases.
- :return: Value of self with unit.
+ Returns
+ -------
+ Variable
+ Value of self with unit.
"""
return self._scalar
@@ -178,10 +216,16 @@ def full_value(self, full_value: Variable) -> None:
@property
def value(self) -> numbers.Number:
- """Get the value. This should be usable for most cases. The full
- value can be obtained from `obj.full_value`.
+ """
+ Get the value.
+
+ This should be usable for most cases. The full value can be
+ obtained from ``obj.full_value``.
- :return: Value of self with unit.
+ Returns
+ -------
+ numbers.Number
+ Value of self with unit.
"""
return self._scalar.value
@@ -189,10 +233,21 @@ def value(self) -> numbers.Number:
@notify_observers
@property_stack
def value(self, value: numbers.Number) -> None:
- """Set the value of self. This should be usable for most cases.
- The full value can be obtained from `obj.full_value`.
+ """
+ Set the value of self.
- :param value: New value of self
+ This should be usable for most cases. The full value can be
+ obtained from ``obj.full_value``.
+
+ Parameters
+ ----------
+ value : numbers.Number
+ New value of self.
+
+ Raises
+ ------
+ TypeError
+ If ``value`` is not a number.
"""
if not isinstance(value, numbers.Number) or isinstance(value, bool):
raise TypeError(f'{value=} must be a number')
@@ -200,9 +255,13 @@ def value(self, value: numbers.Number) -> None:
@property
def unit(self) -> str:
- """Get the unit.
+ """
+ Get the unit.
- :return: Unit as a string.
+ Returns
+ -------
+ str
+ Unit as a string.
"""
return str(self._scalar.unit)
@@ -217,9 +276,13 @@ def unit(self, unit_str: str) -> None:
@property
def variance(self) -> float:
- """Get the variance.
+ """
+ Get the variance.
- :return: variance.
+ Returns
+ -------
+ float
+ Variance.
"""
return self._scalar.variance
@@ -227,9 +290,20 @@ def variance(self) -> float:
@notify_observers
@property_stack
def variance(self, variance_float: float) -> None:
- """Set the variance.
-
- :param variance_float: Variance as a float
+ """
+ Set the variance.
+
+ Parameters
+ ----------
+ variance_float : float
+ Variance as a float.
+
+ Raises
+ ------
+ TypeError
+ If ``variance_float`` is not numeric.
+ ValueError
+ If ``variance_float`` is negative.
"""
if variance_float is not None:
if not isinstance(variance_float, numbers.Number):
@@ -241,9 +315,13 @@ def variance(self, variance_float: float) -> None:
@property
def error(self) -> float:
- """The standard deviation for the parameter.
+ """
+ The standard deviation for the parameter.
- :return: Error associated with parameter
+ Returns
+ -------
+ float
+ Error associated with parameter.
"""
if self._scalar.variance is None:
return None
@@ -253,9 +331,20 @@ def error(self) -> float:
@notify_observers
@property_stack
def error(self, value: float) -> None:
- """Set the standard deviation for the parameter.
-
- :param value: New error value
+ """
+ Set the standard deviation for the parameter.
+
+ Parameters
+ ----------
+ value : float
+ New error value.
+
+ Raises
+ ------
+ TypeError
+ If ``value`` is not numeric.
+ ValueError
+ If ``value`` is negative.
"""
if value is not None:
if not isinstance(value, numbers.Number):
@@ -270,9 +359,20 @@ def error(self, value: float) -> None:
# When we convert units internally, we dont want to notify observers as this can cause infinite recursion.
# Therefore the convert_unit method is split into two methods, a private internal method and a public method.
def _convert_unit(self, unit_str: str) -> None:
- """Convert the value from one unit system to another.
-
- :param unit_str: New unit in string form
+ """
+ Convert the value from one unit system to another.
+
+ Parameters
+ ----------
+ unit_str : str
+ New unit in string form.
+
+ Raises
+ ------
+ TypeError
+ If ``unit_str`` is not a string.
+ UnitError
+ If the unit conversion fails.
"""
if not isinstance(unit_str, str):
raise TypeError(f'{unit_str=} must be a string representing a valid scipp unit')
@@ -304,9 +404,13 @@ def set_scalar(obj, scalar):
# When the user calls convert_unit, we want to notify observers of the change to propagate the change.
@notify_observers
def convert_unit(self, unit_str: str) -> None:
- """Convert the value from one unit system to another.
+ """
+ Convert the value from one unit system to another.
- :param unit_str: New unit in string form
+ Parameters
+ ----------
+ unit_str : str
+ New unit in string form.
"""
self._convert_unit(unit_str)
@@ -506,8 +610,9 @@ def __abs__(self) -> DescriptorNumber:
return descriptor_number
def _base_unit(self) -> str:
- """Extract the base unit from the unit string by removing
- numeric components and scientific notation.
+ """
+ Extract the base unit from the unit string by removing numeric
+ components and scientific notation.
"""
string = str(self._scalar.unit)
for i, letter in enumerate(string):
diff --git a/src/easyscience/variable/descriptor_str.py b/src/easyscience/variable/descriptor_str.py
index c6e26f9c..5e74e786 100644
--- a/src/easyscience/variable/descriptor_str.py
+++ b/src/easyscience/variable/descriptor_str.py
@@ -12,7 +12,7 @@
class DescriptorStr(DescriptorBase):
- """A `Descriptor` for string values."""
+ """A ``Descriptor`` for string values."""
def __init__(
self,
@@ -38,19 +38,36 @@ def __init__(
@property
def value(self) -> str:
- """Get the value of self.
+ """
+ Get the value of self.
- :return: Value of self with unit.
+ Returns
+ -------
+ str
+ Value of self with unit.
"""
return self._string
@value.setter
@property_stack
def value(self, value: str) -> None:
- """Set the value of self.
+ """
+ Set the value of self.
+
+ Parameters
+ ----------
+ value : str
+ New value of self.
+
+ Returns
+ -------
+ None
+ None.
- :param value: New value of self
- :return: None
+ Raises
+ ------
+ ValueError
+ If ``value`` is not a string.
"""
if not isinstance(value, str):
raise ValueError(f'{value=} must be type str')
diff --git a/src/easyscience/variable/parameter.py b/src/easyscience/variable/parameter.py
index 36e2c7a3..04cbbd66 100644
--- a/src/easyscience/variable/parameter.py
+++ b/src/easyscience/variable/parameter.py
@@ -6,7 +6,6 @@
import copy
import numbers
import re
-import warnings
import weakref
from typing import Any
from typing import Dict
@@ -28,7 +27,8 @@
class Parameter(DescriptorNumber):
- """A Parameter is a DescriptorNumber which can be used in fitting.
+ """
+ A Parameter is a DescriptorNumber which can be used in fitting.
It has additional fields to facilitate this.
"""
@@ -55,26 +55,63 @@ def __init__(
parent: Optional[Any] = None,
**kwargs: Any, # Additional keyword arguments (used for (de)serialization)
):
- """This class is an extension of a `DescriptorNumber`. Where the
- descriptor was for static objects, a `Parameter` is for dynamic
- objects. A parameter has the ability to be used in fitting and
- has additional fields to facilitate this.
-
- :param name: Name of this object
- :param value: Value of this object
- :param unit: This object can have a physical unit associated with it
- :param variance: The variance of the value
- :param min: The minimum value for fitting
- :param max: The maximum value for fitting
- :param fixed: If the parameter is free to vary during fitting
- :param description: A brief summary of what this object is
- :param url: Lookup url for documentation/information
- :param display_name: The name of the object as it should be displayed
- :param parent: The object which is the parent to this one
-
- Note:
- Undo/Redo functionality is implemented for the attributes `value`, `variance`, `error`, `min`, `max`, `bounds`, `fixed`, `unit`
- """ # noqa: E501
+ """
+ This class is an extension of a ``DescriptorNumber``.
+
+ Where the descriptor was for static objects, a ``Parameter`` is
+ for dynamic objects. A parameter has the ability to be used in
+ fitting and has additional fields to facilitate this.
+
+ Parameters
+ ----------
+ name : str
+ Name of this object.
+ value : numbers.Number
+ Value of this object.
+ unit : Optional[Union[str, sc.Unit]], default=''
+ This object can have a physical unit associated with it. By
+ default, ''.
+ variance : Optional[numbers.Number], default=0.0
+ The variance of the value. By default, 0.0.
+ min : Optional[numbers.Number], default=-np.inf
+ The minimum value for fitting. By default, -np.inf.
+ max : Optional[numbers.Number], default=np.inf
+ The maximum value for fitting. By default, np.inf.
+ fixed : Optional[bool], default=False
+ If the parameter is free to vary during fitting. By default,
+ False.
+ unique_name : Optional[str], default=None
+ Unique identifier for this object. By default, None.
+ description : Optional[str], default=None
+ A brief summary of what this object is. By default, None.
+ url : Optional[str], default=None
+ Lookup url for documentation/information. By default, None.
+ display_name : Optional[str], default=None
+ The name of the object as it should be displayed. By
+ default, None.
+ callback : property, default=property()
+ Callback used to synchronize the parameter with an external
+ model.
+ parent : Optional[Any], default=None
+ The object which is the parent to this one. By default,
+ None.
+ **kwargs : Any
+ Additional keyword arguments used during serialization.
+
+ Raises
+ ------
+ TypeError
+ If any numeric or boolean input has the wrong type.
+ ValueError
+ If ``value`` falls outside the provided bounds or if the
+ bounds are invalid.
+
+ Notes
+ -----
+ Undo/Redo functionality is implemented for the attributes
+ ``value``, ``variance``, ``error``, ``min``, ``max``,
+ ``bounds``, ``fixed``, ``unit``
+ """
# Extract and ignore serialization-specific fields from kwargs
kwargs.pop('_dependency_string', None)
kwargs.pop('_dependency_map_serializer_ids', None)
@@ -128,24 +165,35 @@ def from_dependency(
dependency_expression: str,
dependency_map: Optional[dict] = None,
desired_unit: str | sc.Unit | None = None,
- **kwargs,
+ **kwargs: Any,
) -> Parameter: # noqa: E501
- """Create a dependent Parameter directly from a dependency
+ """
+ Create a dependent Parameter directly from a dependency
expression.
- :param name: The name of the parameter
- :param dependency_expression: The dependency expression to
- evaluate. This should be a string which can be evaluated by
- the ASTEval interpreter.
- :param dependency_map: A dictionary of dependency expression
- symbol name and dependency object pairs. This is inserted
- into the asteval interpreter to resolve dependencies.
- :param desired_unit: The desired unit of the dependent
- parameter.
- :param kwargs: Additional keyword arguments to pass to the
- Parameter constructor.
- :return: A new dependent Parameter object.
- """ # noqa: E501
+ Parameters
+ ----------
+ name : str
+ The name of the parameter.
+ dependency_expression : str
+ The dependency expression to evaluate. This should be a
+ string which can be evaluated by the ASTEval interpreter.
+ dependency_map : Optional[dict], default=None
+ A dictionary of dependency expression symbol name and
+ dependency object pairs. This is inserted into the asteval
+ interpreter to resolve dependencies. By default, None.
+ desired_unit : str | sc.Unit | None, default=None
+ The desired unit of the dependent parameter. By default,
+ None.
+ **kwargs : Any
+ Additional keyword arguments to pass to the Parameter
+ constructor.
+
+ Returns
+ -------
+ Parameter
+ A new dependent Parameter object.
+ """
# Set default values for required parameters for the constructor, they get overwritten by the dependency anyways
default_kwargs = {'value': 0.0, 'variance': 0.0, 'min': -np.inf, 'max': np.inf}
# Update with user-provided kwargs, to avoid errors.
@@ -159,7 +207,8 @@ def from_dependency(
return parameter
def _update(self) -> None:
- """Update the parameter.
+ """
+ Update the parameter.
This is called by the DescriptorNumbers/Parameters who have this
Parameter as a dependency.
@@ -188,7 +237,9 @@ def _update(self) -> None:
self._notify_observers()
else:
- warnings.warn('This parameter is not dependent. It cannot be updated.')
+ global_object.log.getLogger('variable').warning(
+ 'This parameter is not dependent. It cannot be updated.'
+ )
def make_dependent_on(
self,
@@ -196,29 +247,55 @@ def make_dependent_on(
dependency_map: Optional[dict] = None,
desired_unit: str | sc.Unit | None = None,
) -> None:
- """Make this parameter dependent on another parameter. This will
- overwrite the current value, unit, variance, min and max.
-
- How to use the dependency map:
- If a parameter c has a dependency expression of 'a + b', where a and b are parameters belonging to the model class,
- then the dependency map needs to have the form {'a': model.a, 'b': model.b}, where model is the model class.
- I.e. the values are the actual objects, whereas the keys are how they are represented in the dependency expression.
-
- The dependency map is not needed if the dependency expression uses the unique names of the parameters.
- Unique names in dependency expressions are defined by quotes, e.g. 'Parameter_0' or "Parameter_0" depending on
- the quotes used for the expression.
-
- :param dependency_expression:
- The dependency expression to evaluate. This should be a string which
- can be evaluated by a python interpreter.
-
- :param dependency_map:
- A dictionary of dependency expression symbol name and dependency object pairs.
- This is inserted into the asteval interpreter to resolve dependencies.
+ """
+ Make this parameter dependent on another parameter.
+
+ This will overwrite the current value, unit, variance, min and
+ max.
+
+ How to use the dependency map: If a parameter c has a dependency
+ expression of 'a + b', where a and b are parameters belonging to
+ the model class, then the dependency map needs to have the form
+ {'a': model.a, 'b': model.b}, where model is the model class.
+ I.e. the values are the actual objects, whereas the keys are how
+ they are represented in the dependency expression.
+
+ The dependency map is not needed if the dependency expression
+ uses the unique names of the parameters. Unique names in
+ dependency expressions are defined by quotes, e.g. 'Parameter_0'
+ or "Parameter_0" depending on the quotes used for the
+ expression.
- :param desired_unit:
- The desired unit of the dependent parameter. If None, the default unit of the dependency expression result is used.
- """ # noqa: E501
+ Parameters
+ ----------
+ dependency_expression : str
+ The dependency expression to evaluate. This should be a
+ string which can be evaluated by a python interpreter.
+ dependency_map : Optional[dict], default=None
+ A dictionary of dependency expression symbol name and
+ dependency object pairs. This is inserted into the asteval
+ interpreter to resolve dependencies. By default, None.
+ desired_unit : str | sc.Unit | None, default=None
+ The desired unit of the dependent parameter. If None, the
+ default unit of the dependency expression result is used. By
+ default, None.
+
+ Raises
+ ------
+ NameError
+ If the dependency expression references unresolved names.
+ RuntimeError
+ If the dependency introduces a cyclic dependency.
+ SyntaxError
+ If the dependency expression is invalid.
+ TypeError
+ If the dependency inputs have invalid types.
+ UnitError
+ If converting the dependency result to the desired unit
+ fails.
+ ValueError
+ If the dependency expression or dependency map is invalid.
+ """
if not isinstance(dependency_expression, str):
raise TypeError(
'`dependency_expression` must be a string representing a valid dependency expression.'
@@ -348,11 +425,21 @@ def make_dependent_on(
self._update()
def make_independent(self) -> None:
- """Make this parameter independent. This will remove the
- dependency expression, the dependency map and the dependency
- interpreter.
+ """
+ Make this parameter independent.
+
+ This will remove the dependency expression, the dependency map
+ and the dependency interpreter.
- :return: None
+ Returns
+ -------
+ None
+ None.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is already independent.
"""
if not self._independent:
for dependency in self._dependency_map.values():
@@ -368,9 +455,13 @@ def make_independent(self) -> None:
@property
def independent(self) -> bool:
- """Is the parameter independent?
+ """
+ Is the parameter independent?
- :return: True = independent, False = dependent
+ Returns
+ -------
+ bool
+ True = independent, False = dependent.
"""
return self._independent
@@ -382,9 +473,18 @@ def independent(self, value: bool) -> None:
@property
def dependency_expression(self) -> str:
- """Get the dependency expression of this parameter.
+ """
+ Get the dependency expression of this parameter.
+
+ Returns
+ -------
+ str
+ The dependency expression of this parameter.
- :return: The dependency expression of this parameter.
+ Raises
+ ------
+ AttributeError
+ If the parameter is independent.
"""
if not self._independent:
return self._dependency_string
@@ -399,9 +499,18 @@ def dependency_expression(self, new_expression: str) -> None:
@property
def dependency_map(self) -> Dict[str, DescriptorNumber]:
- """Get the dependency map of this parameter.
+ """
+ Get the dependency map of this parameter.
- :return: The dependency map of this parameter.
+ Returns
+ -------
+ Dict[str, DescriptorNumber]
+ The dependency map of this parameter.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is independent.
"""
if not self._independent:
return self._dependency_map
@@ -416,19 +525,29 @@ def dependency_map(self, new_map: Dict[str, DescriptorNumber]) -> None:
@property
def value_no_call_back(self) -> numbers.Number:
- """Get the currently hold value of self suppressing call back.
+ """
+ Get the currently hold value of self suppressing call back.
- :return: Value of self without unit.
+ Returns
+ -------
+ numbers.Number
+ Value of self without unit.
"""
return self._scalar.value
@property
def full_value(self) -> Variable:
- """Get the value of self as a scipp scalar. This is should be
- usable for most cases. If a scipp scalar is not acceptable then
- the raw value can be obtained through `obj.value`.
+ """
+ Get the value of self as a scipp scalar.
- :return: Value of self with unit and variance.
+ This is should be usable for most cases. If a scipp scalar is
+ not acceptable then the raw value can be obtained through
+ ``obj.value``.
+
+ Returns
+ -------
+ Variable
+ Value of self with unit and variance.
"""
return self._scalar
@@ -440,9 +559,13 @@ def full_value(self, scalar: Variable) -> None:
@property
def value(self) -> numbers.Number:
- """Get the value of self as a Number.
+ """
+ Get the value of self as a Number.
- :return: Value of self without unit.
+ Returns
+ -------
+ numbers.Number
+ Value of self without unit.
"""
if self._callback.fget is not None:
existing_value = self._callback.fget()
@@ -453,10 +576,22 @@ def value(self) -> numbers.Number:
@value.setter
@property_stack
def value(self, value: numbers.Number) -> None:
- """Set the value of self. This only updates the value of the
- scipp scalar.
+ """
+ Set the value of self.
- :param value: New value of self
+ This only updates the value of the scipp scalar.
+
+ Parameters
+ ----------
+ value : numbers.Number
+ New value of self.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
+ TypeError
+ If ``value`` is not numeric.
"""
if self._independent:
if not isinstance(value, numbers.Number):
@@ -482,9 +617,18 @@ def value(self, value: numbers.Number) -> None:
@DescriptorNumber.variance.setter
def variance(self, variance_float: float) -> None:
- """Set the variance.
+ """
+ Set the variance.
+
+ Parameters
+ ----------
+ variance_float : float
+ Variance as a float.
- :param variance_float: Variance as a float
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
"""
if self._independent:
DescriptorNumber.variance.fset(self, variance_float)
@@ -495,9 +639,18 @@ def variance(self, variance_float: float) -> None:
@DescriptorNumber.error.setter
def error(self, value: float) -> None:
- """Set the standard deviation for the parameter.
+ """
+ Set the standard deviation for the parameter.
+
+ Parameters
+ ----------
+ value : float
+ New error value.
- :param value: New error value
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
"""
if self._independent:
DescriptorNumber.error.fset(self, value)
@@ -507,11 +660,15 @@ def error(self, value: float) -> None:
)
def _convert_unit(self, unit_str: str) -> None:
- """Perform unit conversion. The value, max and min can change on
- unit change.
+ """
+ Perform unit conversion.
- :param new_unit: new unit
- :return: None
+ The value, max and min can change on unit change.
+
+ Parameters
+ ----------
+ unit_str : str
+ New unit.
"""
super()._convert_unit(unit_str=unit_str)
new_unit = sc.Unit(unit_str) # unit_str is tested in super method
@@ -520,19 +677,37 @@ def _convert_unit(self, unit_str: str) -> None:
@notify_observers
def convert_unit(self, unit_str: str) -> None:
- """Perform unit conversion. The value, max and min can change on
- unit change.
+ """
+ Perform unit conversion.
+
+ The value, max and min can change on unit change.
- :param new_unit: new unit
- :return: None
+ Parameters
+ ----------
+ unit_str : str
+ New unit.
"""
self._convert_unit(unit_str)
def set_desired_unit(self, unit_str: str | sc.Unit | None) -> None:
- """Set the desired unit for a dependent Parameter. This will
- convert the parameter to the desired unit.
-
- :param unit_str: The desired unit as a string.
+ """
+ Set the desired unit for a dependent Parameter.
+
+ This will convert the parameter to the desired unit.
+
+ Parameters
+ ----------
+ unit_str : str | sc.Unit | None
+ The desired unit as a string.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is independent.
+ TypeError
+ If ``unit_str`` has an invalid type.
+ UnitError
+ If converting to the desired unit fails.
"""
if self._independent:
@@ -556,9 +731,13 @@ def set_desired_unit(self, unit_str: str | sc.Unit | None) -> None:
@property
def min(self) -> numbers.Number:
- """Get the minimum value for fitting.
+ """
+ Get the minimum value for fitting.
- :return: minimum value
+ Returns
+ -------
+ numbers.Number
+ Minimum value.
"""
return self._min.value
@@ -567,10 +746,28 @@ def min(self) -> numbers.Number:
def min(self, min_value: numbers.Number) -> None:
"""
Set the minimum value for fitting.
+
- implements undo/redo functionality.
- :param min_value: new minimum value
- :return: None
+ Parameters
+ ----------
+ min_value : numbers.Number
+ New minimum value.
+
+ Returns
+ -------
+ None
+ None.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
+ TypeError
+ If ``min_value`` is not numeric.
+ ValueError
+ If ``min_value`` conflicts with the current value or upper
+ bound.
"""
if self._independent:
if not isinstance(min_value, numbers.Number):
@@ -593,9 +790,13 @@ def min(self, min_value: numbers.Number) -> None:
@property
def max(self) -> numbers.Number:
- """Get the maximum value for fitting.
+ """
+ Get the maximum value for fitting.
- :return: maximum value
+ Returns
+ -------
+ numbers.Number
+ Maximum value.
"""
return self._max.value
@@ -604,10 +805,28 @@ def max(self) -> numbers.Number:
def max(self, max_value: numbers.Number) -> None:
"""
Get the maximum value for fitting.
+
- implements undo/redo functionality.
- :param max_value: new maximum value
- :return: None
+ Parameters
+ ----------
+ max_value : numbers.Number
+ New maximum value.
+
+ Returns
+ -------
+ None
+ None.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
+ TypeError
+ If ``max_value`` is not numeric.
+ ValueError
+ If ``max_value`` conflicts with the current value or lower
+ bound.
"""
if self._independent:
if not isinstance(max_value, numbers.Number):
@@ -630,9 +849,13 @@ def max(self, max_value: numbers.Number) -> None:
@property
def fixed(self) -> bool:
- """Can the parameter vary while fitting?
+ """
+ Can the parameter vary while fitting?
- :return: True = fixed, False = can vary
+ Returns
+ -------
+ bool
+ True = fixed, False = can vary.
"""
return self._fixed
@@ -641,9 +864,20 @@ def fixed(self) -> bool:
def fixed(self, fixed: bool) -> None:
"""
Change the parameter vary while fitting state.
+
- implements undo/redo functionality.
- :param fixed: True = fixed, False = can vary
+ Parameters
+ ----------
+ fixed : bool
+ True = fixed, False = can vary.
+
+ Raises
+ ------
+ AttributeError
+ If the parameter is dependent.
+ ValueError
+ If ``fixed`` is not a boolean.
"""
if not isinstance(fixed, bool):
raise ValueError(f'{fixed=} must be a boolean. Got {type(fixed)}')
@@ -667,8 +901,8 @@ def free(self, value: bool) -> None:
self.fixed = not value
def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
- """Overwrite the as_dict method to handle dependency
- information.
+ """
+ Overwrite the as_dict method to handle dependency information.
"""
raw_dict = super().as_dict(skip=skip)
@@ -693,7 +927,8 @@ def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
return raw_dict
def _revert_dependency(self, skip_detach=False) -> None:
- """Revert the dependency to the old dependency.
+ """
+ Revert the dependency to the old dependency.
This is used when an error is raised during setting the
dependency.
@@ -712,11 +947,20 @@ def _revert_dependency(self, skip_detach=False) -> None:
del self._previous_independent
def _process_dependency_unique_names(self, dependency_expression: str):
- """Add the unique names of the parameters to the ASTEval
+ """
+ Add the unique names of the parameters to the ASTEval
interpreter. This is used to evaluate the dependency expression.
- :param dependency_expression: The dependency expression to be
- evaluated
+ Parameters
+ ----------
+ dependency_expression : str
+ The dependency expression to be evaluated.
+
+ Raises
+ ------
+ ValueError
+ If a referenced unique name does not exist or does not map
+ to a supported dependency type.
"""
# Get the unique_names from the expression string regardless of the quotes used
inputted_unique_names = re.findall("('.+?')", dependency_expression)
@@ -746,7 +990,8 @@ def _process_dependency_unique_names(self, dependency_expression: str):
@classmethod
def from_dict(cls, obj_dict: dict) -> 'Parameter':
- """Custom deserialization to handle parameter dependencies.
+ """
+ Custom deserialization to handle parameter dependencies.
Override the parent method to handle dependency information.
"""
@@ -1173,7 +1418,8 @@ def __abs__(self) -> Parameter:
return parameter
def resolve_pending_dependencies(self) -> None:
- """Resolve pending dependencies after deserialization.
+ """
+ Resolve pending dependencies after deserialization.
This method should be called after all parameters have been
deserialized to establish dependency relationships using
@@ -1212,8 +1458,9 @@ def resolve_pending_dependencies(self) -> None:
delattr(self, '_pending_desired_unit')
def _find_parameter_by_serializer_id(self, serializer_id: str) -> Optional['DescriptorNumber']:
- """Find a parameter by its serializer_id from all parameters in
- the global map.
+ """
+ Find a parameter by its serializer_id from all parameters in the
+ global map.
"""
for obj in self._global_object.map._store.values():
if isinstance(obj, DescriptorNumber) and hasattr(
diff --git a/src/easyscience/variable/parameter_dependency_resolver.py b/src/easyscience/variable/parameter_dependency_resolver.py
index a4a21732..d231dcd2 100644
--- a/src/easyscience/variable/parameter_dependency_resolver.py
+++ b/src/easyscience/variable/parameter_dependency_resolver.py
@@ -7,19 +7,30 @@
from typing import Dict
from typing import List
+from easyscience import global_object
+
from .parameter import Parameter
def resolve_all_parameter_dependencies(obj: Any) -> None:
- """Recursively find all Parameter objects in an object hierarchy and
+ """
+ Recursively find all Parameter objects in an object hierarchy and
resolve their pending dependencies.
This function should be called after deserializing a complex object
that contains Parameters with dependencies to ensure all dependency
relationships are properly established.
- :param obj: The object to search for Parameters (can be a single
- Parameter, list, dict, or complex object)
+ Parameters
+ ----------
+ obj : Any
+ The object to search for Parameters (can be a single Parameter,
+ list, dict, or complex object).
+
+ Raises
+ ------
+ ValueError
+ If one or more pending dependencies cannot be resolved.
"""
def _collect_parameters(item: Any, parameters: List[Parameter]) -> None:
@@ -47,8 +58,9 @@ def _collect_parameters(item: Any, parameters: List[Parameter]) -> None:
attr_value = getattr(item, attr_name)
_collect_parameters(attr_value, parameters)
except (AttributeError, Exception):
- # log the exception
- print(f"Error accessing property '{attr_name}' of {item}")
+ global_object.log.getLogger('variable.dependencies').debug(
+ "Error accessing property '%s' of %s", attr_name, item
+ )
# Skip properties that can't be accessed
continue
@@ -76,7 +88,9 @@ def _collect_parameters(item: Any, parameters: List[Parameter]) -> None:
# Report results
if resolved_count > 0:
- print(f'Successfully resolved dependencies for {resolved_count} parameter(s).')
+ global_object.log.getLogger('variable.dependencies').debug(
+ 'Successfully resolved dependencies for %d parameter(s).', resolved_count
+ )
if error_count > 0:
error_message = (
@@ -86,16 +100,25 @@ def _collect_parameters(item: Any, parameters: List[Parameter]) -> None:
def get_parameters_with_pending_dependencies(obj: Any) -> List[Parameter]:
- """Find all Parameter objects in an object hierarchy that have
- pending dependencies.
+ """
+ Find all Parameter objects in an object hierarchy that have pending
+ dependencies.
+
+ Parameters
+ ----------
+ obj : Any
+ The object to search for Parameters.
- :param obj: The object to search for Parameters
- :return: List of Parameters with pending dependencies
+ Returns
+ -------
+ List[Parameter]
+ List of Parameters with pending dependencies.
"""
parameters_with_pending = []
def _collect_pending_parameters(item: Any) -> None:
- """Recursively collect all Parameter objects with pending
+ """
+ Recursively collect all Parameter objects with pending
dependencies.
"""
if isinstance(item, Parameter):
@@ -122,8 +145,9 @@ def _collect_pending_parameters(item: Any) -> None:
attr_value = getattr(item, attr_name)
_collect_pending_parameters(attr_value)
except (AttributeError, Exception):
- # log the exception
- print(f"Error accessing property '{attr_name}' of {item}")
+ global_object.log.getLogger('variable.dependencies').debug(
+ "Error accessing property '%s' of %s", attr_name, item
+ )
# Skip properties that can't be accessed
continue
@@ -134,16 +158,23 @@ def _collect_pending_parameters(item: Any) -> None:
def deserialize_and_resolve_parameters(
params_data: Dict[str, Dict[str, Any]],
) -> Dict[str, Parameter]:
- """Deserialize parameters from a dictionary and resolve their
+ """
+ Deserialize parameters from a dictionary and resolve their
dependencies.
This is a convenience function that combines Parameter.from_dict()
deserialization with dependency resolution in a single call.
- :param params_data: Dictionary mapping parameter names to their
- serialized data
- :return: Dictionary mapping parameter names to deserialized
- Parameters with resolved dependencies
+ Parameters
+ ----------
+ params_data : Dict[str, Dict[str, Any]]
+ Dictionary mapping parameter names to their serialized data.
+
+ Returns
+ -------
+ Dict[str, Parameter]
+ Dictionary mapping parameter names to deserialized Parameters
+ with resolved dependencies.
"""
# Deserialize all parameters first
new_params = {}
diff --git a/tests/functional/test_smoke.py b/tests/functional/test_smoke.py
new file mode 100644
index 00000000..23323fc9
--- /dev/null
+++ b/tests/functional/test_smoke.py
@@ -0,0 +1,20 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+import numpy as np
+import pytest
+
+from easyscience import global_object
+from easyscience.models.polynomial import Polynomial
+
+
+@pytest.mark.fast
+def test_polynomial_smoke() -> None:
+ """Exercise a minimal user-facing model workflow."""
+ global_object.map._clear()
+
+ model = Polynomial(name='smoke', coefficients=[1.0, 2.0, 3.0])
+ x = np.array([0.0, 1.0, 2.0])
+
+ assert [coefficient.name for coefficient in model.coefficients] == ['c0', 'c1', 'c2']
+ assert np.allclose(model(x), np.polyval([1.0, 2.0, 3.0], x))
diff --git a/tests/integration/fitting/test_fitter.py b/tests/integration/fitting/test_fitter.py
index 9f97b54a..0fb9b327 100644
--- a/tests/integration/fitting/test_fitter.py
+++ b/tests/integration/fitting/test_fitter.py
@@ -125,7 +125,7 @@ def test_basic_fit(fit_engine: AvailableMinimizers):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
result = f.fit(x=x, y=y, weights=weights)
@@ -173,7 +173,7 @@ def test_fit_result(fit_engine):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
result = f.fit(x, y, weights=weights)
check_fit_results(result, sp_sin, ref_sin, x, sp_ref1=sp_ref1, sp_ref2=sp_ref2)
@@ -205,7 +205,7 @@ def test_basic_max_evaluations(fit_engine):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
f.max_evaluations = 3
result = f.fit(x=x, y=y, weights=weights)
# Result should not be the same as the reference
@@ -240,7 +240,7 @@ def test_max_evaluations_populates_fit_result_fields(fit_engine):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
f.max_evaluations = 3
result = f.fit(x=x, y=y, weights=weights)
@@ -268,7 +268,7 @@ def test_bumps_max_evaluations_counts_objective_calls() -> None:
try:
f.switch_minimizer(AvailableMinimizers.Bumps)
except AttributeError:
- pytest.skip(msg=f'{AvailableMinimizers.Bumps} is not installed')
+ pytest.skip(reason=f'{AvailableMinimizers.Bumps} is not installed')
f.max_evaluations = 3
result = f.fit(x=x, y=y, weights=weights)
@@ -306,7 +306,7 @@ def test_basic_tolerance(fit_engine, tolerance):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
f.tolerance = tolerance
result = f.fit(x=x, y=y, weights=weights)
# Result should not be the same as the reference
@@ -377,7 +377,7 @@ def test_dependent_parameter(fit_engine):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
result = f.fit(x, y, weights=weights)
check_fit_results(result, sp_sin, ref_sin, x)
@@ -405,12 +405,12 @@ def test_2D_vectorized(fit_engine):
try:
ff.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
try:
result = ff.fit(x=XY, y=mm(XY), weights=weights, vectorized=True)
except FitError as e:
if 'Unable to allocate' in str(e):
- pytest.skip(msg='MemoryError - Matrix too large')
+ pytest.skip(reason='MemoryError - Matrix too large')
else:
raise e
assert result.n_pars == len(m2.get_fit_parameters())
@@ -444,12 +444,12 @@ def test_2D_non_vectorized(fit_engine):
try:
ff.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
try:
result = ff.fit(x=XY, y=mm(XY.reshape(-1, 2)), weights=weights, vectorized=False)
except FitError as e:
if 'Unable to allocate' in str(e):
- pytest.skip(msg='MemoryError - Matrix too large')
+ pytest.skip(reason='MemoryError - Matrix too large')
else:
raise e
assert result.n_pars == len(m2.get_fit_parameters())
@@ -492,7 +492,7 @@ def test_fixed_parameter_does_not_change(fit_engine):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
result = f.fit(x=x, y=y, weights=weights)
@@ -567,7 +567,7 @@ def run_fit(weights):
try:
f.switch_minimizer(fit_engine)
except AttributeError:
- pytest.skip(msg=f'{fit_engine} is not installed')
+ pytest.skip(reason=f'{fit_engine} is not installed')
f.fit(x=x, y=y, weights=weights)
return model.offset.value, model.phase.value
diff --git a/tests/integration/fitting/test_multi_fitter.py b/tests/integration/fitting/test_multi_fitter.py
index 7e2d02d1..e4b87ea1 100644
--- a/tests/integration/fitting/test_multi_fitter.py
+++ b/tests/integration/fitting/test_multi_fitter.py
@@ -286,3 +286,215 @@ def test_multi_fit_1D_2D(fit_engine):
assert result.success
assert np.all(result.x == X[idx])
assert np.all(result.y_obs == Y[idx])
+
+
+# ---------------------------------------------------------------------------
+# Tests for MultiFitter.mcmc_sample (Bayesian MCMC via BUMPS DREAM)
+# ---------------------------------------------------------------------------
+
+
+class TestMultiFitterMcmcSample:
+ """Integration tests for ``MultiFitter.mcmc_sample``."""
+
+ def test_raises_runtime_error_when_not_bumps(self):
+ """mcmc_sample() must raise RuntimeError if the minimizer is not a BUMPS instance."""
+ sp = AbsSin(0.354, 3.05)
+ f = MultiFitter([sp], [sp])
+
+ x = np.linspace(0, 5, 50)
+ y = np.sin(x)
+ weights = np.ones_like(x)
+
+ with pytest.raises(RuntimeError, match='Bayesian sampling requires a BUMPS minimizer'):
+ f.mcmc_sample(x=[x], y=[y], weights=[weights], samples=10, burn=5, thin=1)
+
+ @pytest.mark.filterwarnings('ignore::UserWarning')
+ def test_returns_expected_keys_and_shapes(self):
+ """mcmc_sample() with BUMPS should return draws, param_names, state, logp."""
+ ref_sin = AbsSin(0.2, np.pi)
+ sp = AbsSin(0.354, 3.05)
+
+ x = np.linspace(0, 5, 50)
+ y = ref_sin(x)
+ weights = np.ones_like(x)
+
+ sp.offset.fixed = False
+ sp.phase.fixed = False
+
+ f = MultiFitter([sp], [sp])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ result = f.mcmc_sample(x=[x], y=[y], weights=[weights], samples=100, burn=20, thin=2)
+
+ assert isinstance(result, dict)
+ assert 'draws' in result
+ assert 'param_names' in result
+ assert 'internal_bumps_object' in result
+ assert 'logp' in result
+
+ # draws shape: (retained_samples, n_params)
+ assert result['draws'].ndim == 2
+ assert result['draws'].shape[1] == len(result['param_names'])
+
+ # param_names should match the model's fit parameters
+ expected_pars = {p.unique_name for p in sp.get_fit_parameters()}
+ assert set(result['param_names']) == expected_pars
+
+ @pytest.mark.filterwarnings('ignore::UserWarning')
+ def test_multi_dataset_returns_consistent_param_names(self):
+ """mcmc_sample() with multiple datasets should have correct param_names across all."""
+ ref_sin_1 = AbsSin(0.2, np.pi)
+ sp_sin_1 = AbsSin(0.354, 3.05)
+ sp_line = Line(0.43, 6.1)
+
+ # Link a parameter across models
+ sp_line.m.make_dependent_on(
+ dependency_expression='sp_sin1', dependency_map={'sp_sin1': sp_sin_1.offset}
+ )
+
+ x1 = np.linspace(0, 5, 50)
+ y1 = ref_sin_1(x1)
+ x2 = np.copy(x1)
+ y2 = Line(1, 4.6)(x2)
+ weights = np.ones_like(x1)
+
+ sp_sin_1.offset.fixed = False
+ sp_sin_1.phase.fixed = False
+ sp_line.c.fixed = False
+
+ f = MultiFitter([sp_sin_1, sp_line], [sp_sin_1, sp_line])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ result = f.mcmc_sample(
+ x=[x1, x2], y=[y1, y2], weights=[weights, weights], samples=100, burn=20, thin=2
+ )
+
+ # All parameters across both models should appear
+ all_params = {p.unique_name for p in sp_sin_1.get_fit_parameters()}
+ all_params |= {p.unique_name for p in sp_line.get_fit_parameters()}
+ assert set(result['param_names']) == all_params
+
+ def test_population_param_controls_chain_count(self):
+ """Passing population should succeed and produce valid draws."""
+ sp = AbsSin(0.354, 3.05)
+ sp.offset.fixed = False
+ sp.phase.fixed = False
+ f = MultiFitter([sp], [sp])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ x = np.linspace(0, 5, 50)
+ y = np.sin(x)
+ weights = np.ones_like(x)
+
+ result = f.mcmc_sample(
+ x=[x], y=[y], weights=[weights], samples=100, burn=20, thin=2, population=5
+ )
+ assert 'draws' in result
+
+ @pytest.mark.filterwarnings('ignore::UserWarning')
+ def test_vectorized_2d_input_produces_valid_draws(self):
+ """mcmc_sample() with vectorized=True and 2D input should produce valid draws."""
+ sp = AbsSin2D(0.1, 1.75)
+
+ x = np.linspace(0, 5, 50)
+ X, Y = np.meshgrid(x, x)
+ x2D = np.stack((X, Y), axis=2)
+ y2D = np.abs(np.sin(X)) * np.abs(np.sin(Y))
+ weights = np.ones_like(y2D)
+
+ sp.offset.fixed = False
+ sp.phase.fixed = False
+
+ f = MultiFitter([sp], [sp])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ result = f.mcmc_sample(
+ x=[x2D], y=[y2D], weights=[weights], samples=100, burn=20, thin=2, vectorized=True
+ )
+
+ assert result['draws'].ndim == 2
+ assert result['draws'].shape[0] > 0
+ assert result['draws'].shape[1] == len(result['param_names'])
+
+ def test_fit_function_restored_after_runtime_error(self):
+ """fit_function must be restored to its original value even when mcmc_sample() raises."""
+ sp = AbsSin(0.354, 3.05)
+ f = MultiFitter([sp], [sp])
+
+ x = np.linspace(0, 5, 50)
+ y = np.sin(x)
+ weights = np.ones_like(x)
+
+ original_func = f.fit_function
+
+ with pytest.raises(RuntimeError):
+ f.mcmc_sample(x=[x], y=[y], weights=[weights], samples=10, burn=5, thin=1)
+
+ assert f.fit_function is original_func
+
+ @pytest.mark.filterwarnings('ignore::UserWarning')
+ def test_fit_function_restored_after_successful_sample(self):
+ """fit_function must be restored to its original value after a successful mcmc_sample()."""
+ ref_sin = AbsSin(0.2, np.pi)
+ sp = AbsSin(0.354, 3.05)
+
+ x = np.linspace(0, 5, 50)
+ y = ref_sin(x)
+ weights = np.ones_like(x)
+
+ sp.offset.fixed = False
+ sp.phase.fixed = False
+
+ f = MultiFitter([sp], [sp])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ original_func = f.fit_function
+ f.mcmc_sample(x=[x], y=[y], weights=[weights], samples=100, burn=20, thin=2)
+ assert f.fit_function is original_func
+
+ @pytest.mark.filterwarnings('ignore::UserWarning')
+ def test_sampler_kwargs_forwarded(self):
+ """sampler_kwargs dict is forwarded to the BUMPS DREAM sampler."""
+ ref_sin = AbsSin(0.2, np.pi)
+ sp = AbsSin(0.354, 3.05)
+
+ x = np.linspace(0, 5, 50)
+ y = ref_sin(x)
+ weights = np.ones_like(x)
+
+ sp.offset.fixed = False
+ sp.phase.fixed = False
+
+ f = MultiFitter([sp], [sp])
+ try:
+ f.switch_minimizer('Bumps')
+ except AttributeError:
+ pytest.skip('BUMPS is not installed')
+
+ result = f.mcmc_sample(
+ x=[x],
+ y=[y],
+ weights=[weights],
+ samples=100,
+ burn=20,
+ thin=2,
+ sampler_kwargs={'init': 'random'},
+ )
+
+ assert result['draws'].ndim == 2
+ assert result['draws'].shape[0] > 0
diff --git a/tests/unit/base_classes/test_deprecated_wrappers.py b/tests/unit/base_classes/test_deprecated_wrappers.py
new file mode 100644
index 00000000..492fc387
--- /dev/null
+++ b/tests/unit/base_classes/test_deprecated_wrappers.py
@@ -0,0 +1,87 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+"""Tests for the deprecated wrapper modules in easyscience.base_classes.
+
+These modules now only emit log warnings and re-export from
+easyscience.legacy. We test that the log messages are raised and that
+the classes are still usable.
+"""
+
+import importlib
+import logging
+
+import pytest
+
+from easyscience import global_object
+
+
+@pytest.fixture(autouse=True)
+def _clear_map():
+ """Clear the global object map before and after each test."""
+ global_object.map._clear()
+ yield
+ global_object.map._clear()
+
+
+# ---------------------------------------------------------------------------
+# Deprecated wrapper: easyscience.base_classes.collection_base
+# ---------------------------------------------------------------------------
+
+
+def test_import_collection_base_warns(caplog: 'pytest.LogCaptureFixture'):
+ """Importing easyscience.base_classes.collection_base logs a WARNING."""
+ import easyscience.base_classes.collection_base
+
+ with caplog.at_level(logging.WARNING, logger='easyscience'):
+ importlib.reload(easyscience.base_classes.collection_base)
+
+ assert len(caplog.records) >= 1, 'Expected at least one log record'
+ messages = [r.message for r in caplog.records]
+ combined = ' '.join(messages)
+ assert 'deprecated' in combined.lower()
+ assert 'legacy.collection_base' in combined
+
+
+def test_collection_base_still_works_from_deprecated(caplog: 'pytest.LogCaptureFixture'):
+ """The class imported from the deprecated wrapper still works."""
+ with caplog.at_level(logging.ERROR, logger='easyscience'):
+ from easyscience.base_classes.collection_base import CollectionBase # noqa: F811
+
+ from easyscience import Parameter
+
+ p = Parameter('p1', 1.0)
+ coll = CollectionBase('test', p)
+ assert len(coll) == 1
+ assert coll[0].name == 'p1'
+
+
+# ---------------------------------------------------------------------------
+# Deprecated wrapper: easyscience.base_classes.obj_base
+# ---------------------------------------------------------------------------
+
+
+def test_import_obj_base_warns(caplog: 'pytest.LogCaptureFixture'):
+ """Importing easyscience.base_classes.obj_base logs a WARNING."""
+ import easyscience.base_classes.obj_base
+
+ with caplog.at_level(logging.WARNING, logger='easyscience'):
+ importlib.reload(easyscience.base_classes.obj_base)
+
+ assert len(caplog.records) >= 1, 'Expected at least one log record'
+ messages = [r.message for r in caplog.records]
+ combined = ' '.join(messages)
+ assert 'deprecated' in combined.lower()
+ assert 'legacy.obj_base' in combined
+
+
+def test_obj_base_still_works_from_deprecated(caplog: 'pytest.LogCaptureFixture'):
+ """The class imported from the deprecated wrapper still works."""
+ with caplog.at_level(logging.ERROR, logger='easyscience'):
+ from easyscience.base_classes.obj_base import ObjBase # noqa: F811
+
+ from easyscience import Parameter
+
+ p = Parameter('p1', 1.0)
+ obj = ObjBase('test', p1=p)
+ assert obj.p1.value == 1.0
diff --git a/tests/unit/base_classes/test_easy_list.py b/tests/unit/base_classes/test_easy_list.py
index 32f6a60b..69b9bf6e 100644
--- a/tests/unit/base_classes/test_easy_list.py
+++ b/tests/unit/base_classes/test_easy_list.py
@@ -1,13 +1,16 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
+import logging
import pytest
from easyscience import global_object
from easyscience.base_classes.easy_list import EasyList
+from easyscience.base_classes.model_base import ModelBase
from easyscience.base_classes.new_base import NewBase
+from easyscience.variable import DescriptorNumber
+from easyscience.variable import Parameter
class Alpha(NewBase):
@@ -24,6 +27,52 @@ def __init__(self, unique_name=None, display_name=None):
super().__init__(unique_name=unique_name, display_name=display_name)
+class MockModel(ModelBase):
+ """A ModelBase subclass with a Parameter and a DescriptorNumber for testing get_all_variables."""
+
+ def __init__(self, unique_name=None, display_name=None, temperature=25, volume=1.0):
+ super().__init__(unique_name=unique_name, display_name=display_name)
+ self._temperature = Parameter(name='temperature', value=temperature)
+ self._volume = DescriptorNumber(name='volume', value=volume)
+
+ @property
+ def temperature(self):
+ return self._temperature
+
+ @temperature.setter
+ def temperature(self, value):
+ self._temperature.value = value
+
+ @property
+ def volume(self):
+ return self._volume
+
+ @volume.setter
+ def volume(self, value):
+ self._volume.value = value
+
+
+class MockModelNested(ModelBase):
+ """A ModelBase subclass that contains another ModelBase to test nested variable collection."""
+
+ def __init__(self, unique_name=None, display_name=None, component=None, pressure=0):
+ super().__init__(unique_name=unique_name, display_name=display_name)
+ self._pressure = Parameter(name='pressure', value=pressure)
+ self._component = component or MockModel(unique_name='inner', temperature=30, volume=2.0)
+
+ @property
+ def pressure(self):
+ return self._pressure
+
+ @pressure.setter
+ def pressure(self, value):
+ self._pressure.value = value
+
+ @property
+ def component(self):
+ return self._component
+
+
class TestEasyList:
@pytest.fixture(autouse=True)
def clear(self):
@@ -170,27 +219,25 @@ def test_setitem_slice(self):
assert el[0].unique_name == 'a3'
assert el[1].unique_name == 'a4'
- def test_setitem_self_replacement_int(self):
+ def test_setitem_self_replacement_int(self, caplog: 'pytest.LogCaptureFixture'):
"""e[0] = e[0] should work without warning."""
a1 = Alpha(unique_name='a1')
a2 = Alpha(unique_name='a2')
el = EasyList(a1, a2, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el[0] = el[0]
- assert len(w) == 0
+ assert len(caplog.records) == 0
assert el[0].unique_name == 'a1'
assert len(el) == 2
- def test_setitem_self_replacement_slice(self):
+ def test_setitem_self_replacement_slice(self, caplog: 'pytest.LogCaptureFixture'):
"""e[0:2] = e[0:2] should work without warning."""
a1 = Alpha(unique_name='a1')
a2 = Alpha(unique_name='a2')
el = EasyList(a1, a2, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el[0:2] = [el[0], el[1]]
- assert len(w) == 0
+ assert len(caplog.records) == 0
assert el[0].unique_name == 'a1'
assert el[1].unique_name == 'a2'
@@ -257,49 +304,45 @@ def test_delitem_invalid_type(self, populated_list):
# --- Uniqueness ---
- def test_append_duplicate_warns(self):
+ def test_append_duplicate_warns(self, caplog: 'pytest.LogCaptureFixture'):
a1 = Alpha(unique_name='a1')
el = EasyList(a1, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el.append(a1)
- assert len(w) == 1
- assert 'already in EasyList' in str(w[0].message)
+ assert len(caplog.records) == 1
+ assert 'already in EasyList' in caplog.records[0].message
assert len(el) == 1
- def test_insert_duplicate_warns(self):
+ def test_insert_duplicate_warns(self, caplog: 'pytest.LogCaptureFixture'):
a1 = Alpha(unique_name='a1')
el = EasyList(a1, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el.insert(0, a1)
- assert len(w) == 1
- assert 'already in EasyList' in str(w[0].message)
+ assert len(caplog.records) == 1
+ assert 'already in EasyList' in caplog.records[0].message
assert len(el) == 1
- def test_setitem_duplicate_warns(self):
+ def test_setitem_duplicate_warns(self, caplog: 'pytest.LogCaptureFixture'):
a1 = Alpha(unique_name='a1')
a2 = Alpha(unique_name='a2')
el = EasyList(a1, a2, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el[0] = a2 # a2 already at index 1
- assert len(w) == 1
- assert 'already in EasyList' in str(w[0].message)
+ assert len(caplog.records) == 1
+ assert 'already in EasyList' in caplog.records[0].message
# Original value should remain unchanged
assert el[0].unique_name == 'a1'
- def test_setitem_slice_duplicate_warns(self):
+ def test_setitem_slice_duplicate_warns(self, caplog: 'pytest.LogCaptureFixture'):
a1 = Alpha(unique_name='a1')
a2 = Alpha(unique_name='a2')
a3 = Alpha(unique_name='a3')
a4 = Alpha(unique_name='a4')
el = EasyList(a1, a2, a3, protected_types=Alpha)
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.base_classes'):
el[0:3] = [a1, a3, a4] # a3 already at index 2
- assert len(w) == 1
- assert 'already in EasyList' in str(w[0].message)
+ assert len(caplog.records) == 1
+ assert 'already in EasyList' in caplog.records[0].message
assert el[0].unique_name == 'a1'
assert el[1].unique_name == 'a2' # a3 should not replace a2 because it's a duplicate
assert el[2].unique_name == 'a4'
@@ -524,3 +567,111 @@ def test_from_dict_round_trip(self):
assert el2[0].unique_name == 'a1'
assert el2[1].unique_name == 'a2'
assert d == el2.to_dict() # The dicts should be the same after round trip
+
+ # --- get_all_variables ---
+
+ def test_get_all_variables_empty_list(self):
+ """An empty EasyList should return an empty list of variables."""
+ el = EasyList(protected_types=ModelBase)
+ assert el.get_all_variables() == []
+
+ def test_get_all_variables_no_modelbase_elements(self):
+ """An EasyList with only plain NewBase elements (not ModelBase) should return an empty list."""
+ a1 = Alpha(unique_name='a1')
+ a2 = NewBase(unique_name='nb1')
+ el = EasyList(a1, a2)
+ assert el.get_all_variables() == []
+
+ def test_get_all_variables_single_modelbase(self):
+ """A single ModelBase element should return its Parameter and DescriptorNumber."""
+ m1 = MockModel(unique_name='m1', temperature=10, volume=5.0)
+ el = EasyList(m1, protected_types=ModelBase)
+ vars = el.get_all_variables()
+ assert len(vars) == 2
+ names = {v.name for v in vars}
+ assert 'temperature' in names
+ assert 'volume' in names
+ # Verify specific values
+ temp_var = next(v for v in vars if v.name == 'temperature')
+ assert temp_var.value == 10
+ vol_var = next(v for v in vars if v.name == 'volume')
+ assert vol_var.value == 5.0
+
+ def test_get_all_variables_multiple_modelbase(self):
+ """Multiple ModelBase elements should return all their combined variables."""
+ m1 = MockModel(unique_name='m1', temperature=10, volume=5.0)
+ m2 = MockModel(unique_name='m2', temperature=99, volume=1.5)
+ el = EasyList(m1, m2, protected_types=ModelBase)
+ vars = el.get_all_variables()
+ assert len(vars) == 4
+ names = {v.name for v in vars}
+ assert names == {'temperature', 'volume'}
+
+ def test_get_all_variables_mixed_elements(self):
+ """Only ModelBase-derived elements contribute variables; plain NewBase elements are skipped."""
+ m1 = MockModel(unique_name='m1', temperature=10, volume=5.0)
+ a1 = Alpha(unique_name='a1')
+ el = EasyList(m1, a1)
+ vars = el.get_all_variables()
+ assert len(vars) == 2
+ names = {v.name for v in vars}
+ assert names == {'temperature', 'volume'}
+
+ def test_get_all_variables_nested_model(self):
+ """A ModelBase containing another ModelBase should recursively collect all variables."""
+ inner = MockModel(unique_name='inner', temperature=30, volume=2.0)
+ parent = MockModelNested(unique_name='parent', component=inner, pressure=100)
+ el = EasyList(parent, protected_types=ModelBase)
+ vars = el.get_all_variables()
+ # parent: pressure (Parameter), inner: temperature (Parameter), volume (DescriptorNumber)
+ assert len(vars) == 3
+ names = {v.name for v in vars}
+ assert names == {'pressure', 'temperature', 'volume'}
+
+ def test_get_all_variables_returns_descriptorbase_instances(self):
+ """All returned items should be instances of DescriptorBase."""
+ m1 = MockModel(unique_name='m1', temperature=10, volume=5.0)
+ m2 = MockModel(unique_name='m2', temperature=99, volume=1.5)
+ el = EasyList(m1, m2, protected_types=ModelBase)
+ for v in el.get_all_variables():
+ from easyscience.variable.descriptor_base import DescriptorBase
+
+ assert isinstance(v, DescriptorBase)
+
+ def test_get_all_variables_nested_easylist(self):
+ """An EasyList containing another EasyList with mixed NewBase/ModelBase elements
+ should collect variables from the inner EasyList's ModelBase items,
+ skipping plain NewBase items."""
+ inner_model = MockModel(unique_name='inner_m', temperature=50, volume=3.0)
+ inner_plain = Alpha(unique_name='inner_a')
+ inner_list = EasyList(inner_model, inner_plain)
+ outer_model = MockModel(unique_name='outer_m', temperature=70, volume=4.0)
+ outer_list = EasyList(inner_list, outer_model)
+
+ # --- outer_list structure ---
+ assert len(outer_list) == 2
+ assert outer_list[0] is inner_list
+ assert outer_list[1] is outer_model
+
+ # --- inner_list structure ---
+ assert len(inner_list) == 2
+ assert inner_list[0] is inner_model
+ assert inner_list[1] is inner_plain
+ # inner_list own get_all_variables should only see inner_model (skip Alpha)
+ inner_vars = inner_list.get_all_variables()
+ assert len(inner_vars) == 2
+
+ # --- outer_list.get_all_variables ---
+ vars = outer_list.get_all_variables()
+ # inner_model: temperature (50), volume (3.0); outer_model: temperature (70), volume (4.0)
+ assert len(vars) == 4
+
+ # Verify all returned items are DescriptorBase instances
+ for v in vars:
+ assert isinstance(v, DescriptorNumber)
+
+ # Collect temperatures and volumes from both models
+ temps = {v.value for v in vars if v.name == 'temperature'}
+ vols = {v.value for v in vars if v.name == 'volume'}
+ assert temps == {50, 70}
+ assert vols == {3.0, 4.0}
diff --git a/tests/unit/base_classes/test_obj_base.py b/tests/unit/base_classes/test_obj_base.py
index 357aa4f1..5eb1b2ea 100644
--- a/tests/unit/base_classes/test_obj_base.py
+++ b/tests/unit/base_classes/test_obj_base.py
@@ -148,7 +148,7 @@ def test_ObjBase_as_dict(clear, setup_pars: dict):
obtained = obj.as_dict()
assert isinstance(obtained, dict)
expected = {
- '@module': 'easyscience.base_classes.obj_base',
+ '@module': 'easyscience.legacy.obj_base',
'@class': 'ObjBase',
'@version': easyscience.__version__,
'name': 'test',
diff --git a/tests/unit/fitting/calculators/test_interface_factory.py b/tests/unit/fitting/calculators/test_interface_factory.py
index cab3b30f..ce5bb17a 100644
--- a/tests/unit/fitting/calculators/test_interface_factory.py
+++ b/tests/unit/fitting/calculators/test_interface_factory.py
@@ -1,6 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+import logging
from unittest.mock import MagicMock
import pytest
@@ -204,7 +205,9 @@ def test_switch_with_fitter_having_generate_bindings(self, factory_single_interf
# Then
mock_fitter.generate_bindings.assert_called_once()
- def test_switch_with_fitter_exception_handling(self, factory_single_interface, capsys):
+ def test_switch_with_fitter_exception_handling(
+ self, factory_single_interface, caplog: 'pytest.LogCaptureFixture'
+ ):
"""Test switch handles exceptions in fitter binding updates gracefully"""
# Given
mock_fit_object = MagicMock()
@@ -213,12 +216,12 @@ def test_switch_with_fitter_exception_handling(self, factory_single_interface, c
mock_fitter._fit_object = mock_fit_object
# When
- factory_single_interface.switch('MockInterface1', fitter=mock_fitter)
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.calculators'):
+ factory_single_interface.switch('MockInterface1', fitter=mock_fitter)
# Then
- captured = capsys.readouterr()
- assert 'Unable to auto generate bindings' in captured.out
- assert 'Test exception' in captured.out
+ assert 'Unable to auto generate bindings' in caplog.text
+ assert 'Test exception' in caplog.text
def test_fit_func_property_returns_callable(self, factory_single_interface):
"""Test fit_func property returns a callable"""
@@ -363,7 +366,7 @@ def test_return_name_static_method_without_name_attribute(self, mock_interface1)
assert name == 'MockInterface1'
def test_switch_with_fitter_generate_bindings_exception(
- self, factory_single_interface, capsys
+ self, factory_single_interface, caplog: 'pytest.LogCaptureFixture'
):
"""Test switch handles exceptions in fitter.generate_bindings gracefully"""
# Given
@@ -374,12 +377,12 @@ def test_switch_with_fitter_generate_bindings_exception(
del mock_fitter._fit_object
# When
- factory_single_interface.switch('MockInterface1', fitter=mock_fitter)
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.calculators'):
+ factory_single_interface.switch('MockInterface1', fitter=mock_fitter)
# Then
- captured = capsys.readouterr()
- assert 'Unable to auto generate bindings' in captured.out
- assert 'Generate bindings test exception' in captured.out
+ assert 'Unable to auto generate bindings' in caplog.text
+ assert 'Generate bindings test exception' in caplog.text
def test_generate_bindings_with_property_without_value_no_call_back(
self, factory_single_interface
diff --git a/tests/unit/fitting/minimizers/test_minimizer_bumps.py b/tests/unit/fitting/minimizers/test_minimizer_bumps.py
index 6b587dd7..09ed68fc 100644
--- a/tests/unit/fitting/minimizers/test_minimizer_bumps.py
+++ b/tests/unit/fitting/minimizers/test_minimizer_bumps.py
@@ -1,6 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
+import logging
from unittest.mock import ANY
from unittest.mock import MagicMock
from unittest.mock import patch
@@ -194,7 +195,9 @@ def test_set_parameter_fit_result_no_stack_status(self, minimizer: Bumps):
assert minimizer._cached_pars['b'].value == 2.0
assert minimizer._cached_pars['b'].error == 0.2
- def test_gen_fit_results(self, minimizer: Bumps, monkeypatch):
+ def test_gen_fit_results(
+ self, minimizer: Bumps, monkeypatch, caplog: 'pytest.LogCaptureFixture'
+ ):
# When
mock_domain_fit_results = MagicMock()
mock_FitResults = MagicMock(return_value=mock_domain_fit_results)
@@ -224,12 +227,13 @@ def test_gen_fit_results(self, minimizer: Bumps, monkeypatch):
minimizer.evaluate = MagicMock(return_value='evaluate')
# Then
- with pytest.warns(UserWarning, match='maximum optimizer steps of 3'):
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.bumps'):
domain_fit_results = minimizer._gen_fit_results(
mock_fit_result,
max_evaluations=3,
**{'kwargs_set_key': 'kwargs_set_val'},
)
+ assert 'maximum optimizer steps of 3' in caplog.text
# Expect
assert domain_fit_results == mock_domain_fit_results
@@ -636,7 +640,9 @@ def test_fit_exception_restores_values(self, minimizer: Bumps, monkeypatch) -> N
assert parameter.value == 1.0
- def test_gen_fit_results_uses_nit_for_budget_check(self, minimizer: Bumps, monkeypatch):
+ def test_gen_fit_results_uses_nit_for_budget_check(
+ self, minimizer: Bumps, monkeypatch, caplog: 'pytest.LogCaptureFixture'
+ ):
mock_domain_fit_results = MagicMock()
mock_FitResults = MagicMock(return_value=mock_domain_fit_results)
monkeypatch.setattr(
@@ -662,9 +668,11 @@ def test_gen_fit_results_uses_nit_for_budget_check(self, minimizer: Bumps, monke
minimizer._eval_counter = MagicMock(count=2)
minimizer.evaluate = MagicMock(return_value='evaluate')
- with pytest.warns(UserWarning, match='maximum optimizer steps of 3'):
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.bumps'):
domain_fit_results = minimizer._gen_fit_results(mock_fit_result, max_evaluations=3)
+ assert 'maximum optimizer steps of 3' in caplog.text
+
assert domain_fit_results.success == False
assert domain_fit_results.n_evaluations == 2
assert domain_fit_results.iterations == 100
@@ -672,3 +680,390 @@ def test_gen_fit_results_uses_nit_for_budget_check(self, minimizer: Bumps, monke
domain_fit_results.message
== 'Fit stopped: reached maximum optimizer steps (3); objective evaluated 2 times'
)
+
+
+# ===================================================================
+# Bumps.mcmc_sample() — Bayesian DREAM sampling
+# ===================================================================
+
+
+class TestBumpsSample:
+ """Tests for the ``Bumps.mcmc_sample()`` method and its helpers."""
+
+ # Sentinel value to signal "set fitter.state = None" in _setup_driver_mock
+ ABORT = object()
+
+ @pytest.fixture
+ def minimizer(self) -> Bumps:
+ return Bumps(
+ obj='obj',
+ fit_function='fit_function',
+ minimizer_enum=MagicMock(package='bumps', method='amoeba'),
+ )
+
+ @pytest.fixture(autouse=True)
+ def _mock_bumps_internals(self, monkeypatch):
+ """Prevent sample() from constructing real BUMPS objects.
+
+ ``sample()`` imports ``DreamFit`` and ``FitProblem`` from the real
+ ``bumps`` package internally, which would try to build real model
+ objects. We redirect those to mocks and also mock ``FitDriver``
+ (which *is* a module-level import) so the whole flow stays under
+ test control.
+
+ Also mock ``_make_model`` on the class so that the ``minimizer``
+ fixture (which uses ``obj='obj'``) doesn't fail inside ``sample()``.
+ """
+ import bumps.fitters
+ import bumps.names
+
+ monkeypatch.setattr(bumps.fitters, 'DreamFit', MagicMock())
+ monkeypatch.setattr(bumps.names, 'FitProblem', MagicMock(return_value=MagicMock()))
+ monkeypatch.setattr(
+ Bumps, '_make_model', MagicMock(return_value=MagicMock(return_value=MagicMock()))
+ )
+
+ def _setup_driver_mock(
+ self, monkeypatch, fitter_state_value=None, fit_result=None, fit_side_effect=None
+ ):
+ """Helper to create a mocked FitDriver with configurable behavior.
+
+ :param fitter_state_value: If ``None``, ``driver.fitter.state`` will be
+ a regular MagicMock (non-None). Pass ``ABORT`` to set it to ``None``
+ and simulate user abort.
+ """
+ from easyscience import global_object
+
+ global_object.stack.enabled = False
+
+ mock_driver = MagicMock()
+ mock_driver.clip = MagicMock()
+
+ if fit_side_effect is not None:
+ mock_driver.fit.side_effect = fit_side_effect
+ else:
+ mock_driver.fit.return_value = fit_result or (np.array([1.0]), 0.0)
+
+ mock_driver.stderr = MagicMock(return_value=np.array([0.1]))
+
+ if fitter_state_value is TestBumpsSample.ABORT:
+ mock_driver.fitter.state = None
+ else:
+ mock_state = MagicMock()
+ mock_state.draw.return_value.points = np.array([[1.0]])
+ mock_state.logp = None
+ mock_driver.fitter.state = mock_state
+
+ mock_FitDriver = MagicMock(return_value=mock_driver)
+ monkeypatch.setattr(
+ easyscience.fitting.minimizers.minimizer_bumps, 'FitDriver', mock_FitDriver
+ )
+ return mock_FitDriver, mock_driver
+
+ def test_sample_basic(self, minimizer: Bumps, monkeypatch) -> None:
+ """Verify that mcmc_sample() returns a dict with expected keys."""
+ mock_FitDriver, _ = self._setup_driver_mock(monkeypatch)
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+
+ result = minimizer.mcmc_sample(
+ x=np.array([1.0, 2.0]),
+ y=np.array([0.1, 0.2]),
+ weights=np.array([1.0, 1.0]),
+ samples=100,
+ burn=20,
+ thin=2,
+ population=5,
+ )
+
+ assert isinstance(result, dict)
+ assert 'draws' in result
+ assert 'param_names' in result
+ assert 'internal_bumps_object' in result
+ assert 'logp' in result
+ mock_FitDriver.assert_called_once()
+
+ def test_sample_with_progress_callback(self, minimizer: Bumps, monkeypatch) -> None:
+ """Verify progress callback is wired up as a monitor."""
+ mock_FitDriver, _ = self._setup_driver_mock(monkeypatch)
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+ progress_callback = MagicMock()
+
+ result = minimizer.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ samples=10,
+ burn=5,
+ thin=1,
+ progress_callback=progress_callback,
+ )
+
+ assert result is not None
+ call_kwargs = mock_FitDriver.call_args.kwargs
+ assert 'monitors' in call_kwargs
+ assert len(call_kwargs['monitors']) == 1
+ assert isinstance(call_kwargs['monitors'][0], BumpsProgressMonitor)
+
+ def test_sample_aborted_by_user_raises_fit_error(self, minimizer: Bumps, monkeypatch) -> None:
+ """Verify that sampling abortion raises FitError."""
+ self._setup_driver_mock(monkeypatch, fitter_state_value=TestBumpsSample.ABORT)
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+
+ with pytest.raises(FitError, match='Sampling aborted by user'):
+ minimizer.mcmc_sample(x=np.array([1.0]), y=np.array([0.1]), weights=np.array([1.0]))
+
+ def test_sample_driver_exception_restores_parameters(
+ self, minimizer: Bumps, monkeypatch
+ ) -> None:
+ """Verify that a driver exception during sampling restores parameter values."""
+ self._setup_driver_mock(monkeypatch, fit_side_effect=RuntimeError('driver failed'))
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+ minimizer._restore_parameter_values = MagicMock()
+
+ with pytest.raises(RuntimeError, match='driver failed'):
+ minimizer.mcmc_sample(x=np.array([1.0]), y=np.array([0.1]), weights=np.array([1.0]))
+
+ minimizer._restore_parameter_values.assert_called_once()
+
+ def test_sample_population_param(self, minimizer: Bumps, monkeypatch) -> None:
+ """population kwarg is forwarded to DREAM as pop."""
+ mock_FitDriver, _ = self._setup_driver_mock(monkeypatch)
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+
+ minimizer.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ samples=10,
+ burn=0,
+ thin=1,
+ population=7,
+ )
+
+ call_kwargs = mock_FitDriver.call_args.kwargs
+ assert call_kwargs['pop'] == 7
+
+ def test_sample_rejects_non_callable_callback(self, minimizer: Bumps, monkeypatch) -> None:
+ import bumps.names
+
+ monkeypatch.setattr(bumps.names, 'FitProblem', MagicMock(return_value=MagicMock()))
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+
+ with pytest.raises(ValueError, match='progress_callback must be callable'):
+ minimizer.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ samples=10,
+ burn=5,
+ thin=1,
+ progress_callback='not-callable',
+ )
+
+
+# ===================================================================
+# _build_sample_progress_payload
+# ===================================================================
+
+
+class TestBuildSampleProgressPayload:
+ @pytest.fixture
+ def minimizer(self) -> Bumps:
+ return Bumps(
+ obj='obj',
+ fit_function='fit_function',
+ minimizer_enum=MagicMock(package='bumps', method='amoeba'),
+ )
+
+ def test_payload_structure_and_sampling_flag(self, minimizer: Bumps) -> None:
+ b = minimizer
+
+ mock_problem = MagicMock()
+ mock_problem.chisq.side_effect = [25.0, 12.5]
+ mock_problem.labels.return_value = ['palpha']
+ mock_problem.getp.return_value = np.array([1.0])
+ b._cached_pars = {'alpha': MagicMock(value=1.0)}
+
+ payload = b._build_sample_progress_payload(mock_problem, 7, np.array([1.0]), 12.5)
+
+ assert payload['iteration'] == 7
+ assert payload['chi2'] == 25.0
+ assert payload['reduced_chi2'] == 12.5
+ assert payload['parameter_values'] == {'alpha': 1.0}
+ assert payload['sampling'] is True
+ assert payload['finished'] is False
+ assert payload['refresh_plots'] is False
+
+ def test_payload_keys(self, minimizer: Bumps) -> None:
+ b = minimizer
+ mock_problem = MagicMock()
+ mock_problem.chisq.side_effect = [10.0, 5.0]
+ mock_problem.labels.return_value = ['pa']
+ mock_problem.getp.return_value = np.array([5.0])
+ b._cached_pars = {'a': MagicMock(value=5.0)}
+
+ payload = b._build_sample_progress_payload(mock_problem, 1, np.array([5.0]), nllf=5.0)
+
+ expected_keys = {
+ 'iteration',
+ 'chi2',
+ 'reduced_chi2',
+ 'parameter_values',
+ 'refresh_plots',
+ 'finished',
+ 'sampling',
+ }
+ assert set(payload.keys()) == expected_keys
+
+ def test_delegates_to_build_progress_payload(self, minimizer: Bumps) -> None:
+ """_build_sample_progress_payload calls _build_progress_payload and adds sampling."""
+ mock_problem = MagicMock()
+
+ # Patch _build_progress_payload to track calls
+ base_payload = {
+ 'iteration': 3,
+ 'chi2': 42.0,
+ 'reduced_chi2': 21.0,
+ 'parameter_values': {'x': 7.0},
+ 'refresh_plots': False,
+ 'finished': False,
+ }
+ with patch.object(
+ minimizer, '_build_progress_payload', return_value=base_payload
+ ) as mock_bpp:
+ result = minimizer._build_sample_progress_payload(
+ mock_problem, 3, np.array([7.0]), 21.0
+ )
+
+ mock_bpp.assert_called_once_with(mock_problem, 3, np.array([7.0]), 21.0)
+ assert result == {**base_payload, 'sampling': True}
+
+
+# ===================================================================
+# _set_parameter_fit_result with stack_status=True
+# ===================================================================
+
+
+class TestSetParameterFitResultWithStack:
+ @pytest.fixture
+ def minimizer(self) -> Bumps:
+ return Bumps(
+ obj='obj',
+ fit_function='fit_function',
+ minimizer_enum=MagicMock(package='bumps', method='amoeba'),
+ )
+
+ def test_stack_status_true_calls_begin_end_macro(self, minimizer: Bumps) -> None:
+ from easyscience import global_object
+
+ global_object.stack.enabled = False
+
+ minimizer._cached_pars = {'a': MagicMock(), 'b': MagicMock()}
+ minimizer._cached_pars['a'].value = 'old_a'
+ minimizer._cached_pars['b'].value = 'old_b'
+ minimizer._restore_parameter_values = MagicMock()
+
+ mock_fit_result = MagicMock()
+ mock_fit_result.x = np.array([1.0, 2.0])
+ mock_fit_result.dx = np.array([0.1, 0.2])
+
+ mock_par_a = MagicMock()
+ mock_par_a.name = 'pa'
+ mock_par_b = MagicMock()
+ mock_par_b.name = 'pb'
+ par_list = [mock_par_a, mock_par_b]
+
+ minimizer._set_parameter_fit_result(mock_fit_result, True, par_list)
+
+ assert minimizer._cached_pars['a'].value == 1.0
+ assert minimizer._cached_pars['a'].error == 0.1
+ assert minimizer._cached_pars['b'].value == 2.0
+ assert minimizer._cached_pars['b'].error == 0.2
+ minimizer._restore_parameter_values.assert_called_once()
+
+
+# ===================================================================
+# convert_to_par_object
+# ===================================================================
+
+
+class TestConvertToParObject:
+ def test_convert_parameter_object(self) -> None:
+ from easyscience.variable import Parameter
+
+ param = Parameter('thickness', 42.0, min=0.0, max=100.0)
+ param.fixed = False
+
+ result = Bumps.convert_to_par_object(param)
+
+ # convert_to_par_object uses obj.unique_name which is auto-assigned
+ assert result.name.startswith('p')
+ assert result.value == 42.0
+ assert result.bounds == (0.0, 100.0)
+ assert result.fixed is False
+
+ def test_convert_fixed_parameter(self) -> None:
+ from easyscience.variable import Parameter
+
+ param = Parameter('roughness', 5.0, min=0.0, max=20.0)
+ param.fixed = True
+
+ result = Bumps.convert_to_par_object(param)
+
+ assert result.name.startswith('p')
+ assert result.fixed is True
+
+
+# ===================================================================
+# fit() with abort_test
+# ===================================================================
+
+
+class TestFitWithAbortTest:
+ @pytest.fixture
+ def minimizer(self) -> Bumps:
+ return Bumps(
+ obj='obj',
+ fit_function='fit_function',
+ minimizer_enum=MagicMock(package='bumps', method='amoeba'),
+ )
+
+ def test_abort_test_passed_to_fit_driver(self, minimizer: Bumps, monkeypatch) -> None:
+ from easyscience import global_object
+
+ global_object.stack.enabled = False
+
+ mock_driver = MagicMock()
+ mock_driver.clip = MagicMock()
+ mock_driver.fit = MagicMock(return_value=(np.array([42.0]), 0.0))
+ mock_driver.stderr = MagicMock(return_value=np.array([0.1]))
+ mock_driver.monitor_runner.history.step = [0]
+ mock_FitDriver = MagicMock(return_value=mock_driver)
+ monkeypatch.setattr(
+ easyscience.fitting.minimizers.minimizer_bumps, 'FitDriver', mock_FitDriver
+ )
+
+ mock_problem = MagicMock()
+ mock_problem._parameters = []
+ monkeypatch.setattr(
+ easyscience.fitting.minimizers.minimizer_bumps,
+ 'FitProblem',
+ MagicMock(return_value=mock_problem),
+ )
+
+ minimizer._make_model = MagicMock(return_value=MagicMock(return_value=MagicMock()))
+ minimizer._gen_fit_results = MagicMock(return_value='result')
+ minimizer._resolve_fitclass = MagicMock(return_value=MagicMock(id='amoeba'))
+ minimizer._set_parameter_fit_result = MagicMock()
+ minimizer._cached_pars = {'a': MagicMock(value=1.0)}
+ minimizer._cached_pars_vals = {'a': (1.0, 0.0)}
+
+ abort_test = MagicMock(return_value=False)
+
+ minimizer.fit(
+ x=np.array([1.0]), y=np.array([2.0]), weights=np.array([1.0]), abort_test=abort_test
+ )
+
+ call_kwargs = mock_FitDriver.call_args.kwargs
+ assert callable(call_kwargs['abort_test'])
+ assert call_kwargs['abort_test'] is not (lambda: False)
diff --git a/tests/unit/fitting/minimizers/test_minimizer_dfo.py b/tests/unit/fitting/minimizers/test_minimizer_dfo.py
index 37c9b2ef..823dcce5 100644
--- a/tests/unit/fitting/minimizers/test_minimizer_dfo.py
+++ b/tests/unit/fitting/minimizers/test_minimizer_dfo.py
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
+import logging
from unittest.mock import MagicMock
import numpy as np
@@ -386,7 +386,7 @@ def test_gen_fit_results(self, minimizer: DFO, monkeypatch):
)
def test_gen_fit_results_maxfun_warning_sets_success_false_and_warns(
- self, minimizer: DFO, monkeypatch
+ self, minimizer: DFO, monkeypatch, caplog: 'pytest.LogCaptureFixture'
):
"""When DFO returns EXIT_MAXFUN_WARNING, _gen_fit_results must warn and set success=False."""
mock_domain_fit_results = MagicMock()
@@ -413,20 +413,18 @@ def test_gen_fit_results_maxfun_warning_sets_success_false_and_warns(
minimizer._p_0 = 'p_0'
minimizer.evaluate = MagicMock(return_value='evaluate')
- with pytest.warns(UserWarning, match='Objective has been called MAXFUN times'):
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.dfo'):
domain_fit_results = minimizer._gen_fit_results(mock_fit_result, np.array([1.0]))
- assert domain_fit_results.success == False
- assert domain_fit_results.n_evaluations == 50
- assert domain_fit_results.message == 'Objective has been called MAXFUN times'
-
- def test_extract_iterations_from_diagnostic_dict(self) -> None:
+ assert 'Objective has been called MAXFUN times' in caplog.text
fit_results = MagicMock()
fit_results.diagnostic_info = {'iters_total': [1, 2, 5]}
assert DFO._extract_iterations(fit_results) == 5
- def test_gen_fit_results_success_does_not_warn(self, minimizer: DFO, monkeypatch):
+ def test_gen_fit_results_success_does_not_warn(
+ self, minimizer: DFO, monkeypatch, caplog: 'pytest.LogCaptureFixture'
+ ):
mock_domain_fit_results = MagicMock()
mock_FitResults = MagicMock(return_value=mock_domain_fit_results)
monkeypatch.setattr(
@@ -451,9 +449,10 @@ def test_gen_fit_results_success_does_not_warn(self, minimizer: DFO, monkeypatch
minimizer._p_0 = 'p_0'
minimizer.evaluate = MagicMock(return_value='evaluate')
- with pytest.warns(UserWarning, match='Objective has been called MAXFUN times'):
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.dfo'):
domain_fit_results = minimizer._gen_fit_results(mock_fit_result, np.array([1.0]))
+ assert 'Objective has been called MAXFUN times' in caplog.text
assert domain_fit_results.success == False
assert domain_fit_results.n_evaluations == 50
assert domain_fit_results.message == 'Objective has been called MAXFUN times'
@@ -469,7 +468,9 @@ def test_dfo_fit_allows_maxfun_warning(self, minimizer: DFO, monkeypatch) -> Non
easyscience.fitting.minimizers.minimizer_dfo.dfols, 'solve', mock_solve
)
- def test_gen_fit_results_success_does_not_warn(self, minimizer: DFO, monkeypatch):
+ def test_gen_fit_results_success_does_not_warn(
+ self, minimizer: DFO, monkeypatch, caplog: 'pytest.LogCaptureFixture'
+ ):
mock_domain_fit_results = MagicMock()
mock_FitResults = MagicMock(return_value=mock_domain_fit_results)
monkeypatch.setattr(
@@ -494,11 +495,10 @@ def test_gen_fit_results_success_does_not_warn(self, minimizer: DFO, monkeypatch
minimizer._p_0 = 'p_0'
minimizer.evaluate = MagicMock(return_value='evaluate')
- with warnings.catch_warnings(record=True) as record:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.dfo'):
domain_fit_results = minimizer._gen_fit_results(mock_fit_result, np.array([1.0]))
- assert len(record) == 0
+ assert len(caplog.records) == 0
assert domain_fit_results.success == True
def test_dfo_fit_allows_maxfun_warning(self, minimizer: DFO, monkeypatch) -> None:
diff --git a/tests/unit/fitting/minimizers/test_minimizer_lmfit.py b/tests/unit/fitting/minimizers/test_minimizer_lmfit.py
index e4ca2627..781893d9 100644
--- a/tests/unit/fitting/minimizers/test_minimizer_lmfit.py
+++ b/tests/unit/fitting/minimizers/test_minimizer_lmfit.py
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2026 EasyScience contributors
# SPDX-License-Identifier: BSD-3-Clause
-import warnings
+import logging
from unittest.mock import ANY
from unittest.mock import MagicMock
@@ -340,7 +340,9 @@ def test_fit_exception(self, minimizer: LMFit) -> None:
with pytest.raises(FitError):
minimizer.fit(x=1.0, y=2.0, weights=1)
- def test_gen_fit_results_populates_evaluation_metadata(self, minimizer: LMFit) -> None:
+ def test_gen_fit_results_populates_evaluation_metadata(
+ self, minimizer: LMFit, caplog: 'pytest.LogCaptureFixture'
+ ) -> None:
fit_results = MagicMock()
fit_results.success = False
fit_results.data = 'data'
@@ -352,16 +354,20 @@ def test_gen_fit_results_populates_evaluation_metadata(self, minimizer: LMFit) -
fit_results.nfev = 9
fit_results.message = 'max evaluations reached'
- with pytest.warns(UserWarning, match='max evaluations reached'):
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.lmfit'):
result = minimizer._gen_fit_results(fit_results, iterations=4)
+ assert 'max evaluations reached' in caplog.text
+
assert result.success is False
assert result.n_evaluations == 9
assert result.iterations == 4
assert result.message == 'max evaluations reached'
assert result.engine_result == fit_results
- def test_gen_fit_results_success_does_not_warn(self, minimizer: LMFit) -> None:
+ def test_gen_fit_results_success_does_not_warn(
+ self, minimizer: LMFit, caplog: 'pytest.LogCaptureFixture'
+ ) -> None:
fit_results = MagicMock()
fit_results.success = True
fit_results.data = 'data'
@@ -373,11 +379,10 @@ def test_gen_fit_results_success_does_not_warn(self, minimizer: LMFit) -> None:
fit_results.nfev = 3
fit_results.message = 'success'
- with warnings.catch_warnings(record=True) as record:
- warnings.simplefilter('always')
+ with caplog.at_level(logging.WARNING, logger='easyscience.fitting.lmfit'):
result = minimizer._gen_fit_results(fit_results)
- assert len(record) == 0
+ assert len(caplog.records) == 0
assert result.success is True
def test_convert_to_pars_obj(self, minimizer: LMFit, monkeypatch) -> None:
diff --git a/tests/unit/fitting/test_fitter.py b/tests/unit/fitting/test_fitter.py
index 702f5e59..634492c5 100644
--- a/tests/unit/fitting/test_fitter.py
+++ b/tests/unit/fitting/test_fitter.py
@@ -258,3 +258,156 @@ def test_post_compute_reshaping(self, fitter: Fitter):
# TODO
# def test_fit_function_wrapper()
# def test_precompute_reshaping()
+
+
+# ===================================================================
+# Fitter.mcmc_sample() — Bayesian DREAM sampling
+# ===================================================================
+
+
+class TestFitterMcmcSample:
+ @pytest.fixture
+ def fitter(self, monkeypatch):
+ monkeypatch.setattr(Fitter, '_update_minimizer', MagicMock())
+ return Fitter(MagicMock(), MagicMock())
+
+ def test_basic(self, fitter: Fitter):
+ """mcmc_sample() calls minimizer.mcmc_sample() and returns its result."""
+ fitter._precompute_reshaping = MagicMock(
+ return_value=('x_fit', 'x_new', 'y_new', 'w_new', 'dims')
+ )
+ fitter._fit_function_wrapper = MagicMock(return_value='wrapped')
+ fitter._minimizer = MagicMock()
+ fitter._minimizer.package = 'bumps'
+ expected = {
+ 'draws': np.array([[1.0]]),
+ 'param_names': ['a'],
+ 'internal_bumps_object': 'stub',
+ 'logp': None,
+ }
+ fitter._minimizer.mcmc_sample = MagicMock(return_value=expected)
+
+ result = fitter.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ samples=100,
+ burn=20,
+ thin=2,
+ population=5,
+ )
+
+ assert result == expected
+ fitter._precompute_reshaping.assert_called_once_with(
+ np.array([1.0]), np.array([0.1]), np.array([1.0]), False
+ )
+ fitter._fit_function_wrapper.assert_called_once_with('x_new', flatten=True)
+ fitter._minimizer.mcmc_sample.assert_called_once()
+ kw = fitter._minimizer.mcmc_sample.call_args.kwargs
+ assert kw['x'] == 'x_fit'
+ assert kw['y'] == 'y_new'
+ assert kw['weights'] == 'w_new'
+ assert kw['samples'] == 100
+ assert kw['burn'] == 20
+ assert kw['thin'] == 2
+ assert kw['population'] == 5
+ assert kw['progress_callback'] is None
+ assert fitter._dependent_dims == 'dims'
+
+ def test_raises_if_not_bumps(self, fitter: Fitter):
+ """RuntimeError raised when the active minimizer is not BUMPS."""
+ fitter._precompute_reshaping = MagicMock(
+ return_value=('x_fit', 'x_new', 'y_new', 'w_new', 'dims')
+ )
+ fitter._fit_function_wrapper = MagicMock(return_value='wrapped')
+ fitter._minimizer = MagicMock()
+ fitter._minimizer.package = 'lmfit'
+
+ with pytest.raises(RuntimeError, match='Bayesian sampling requires a BUMPS minimizer'):
+ fitter.mcmc_sample(x=np.array([1.0]), y=np.array([0.1]), weights=np.array([1.0]))
+
+ def test_progress_callback_forwarded(self, fitter: Fitter):
+ """progress_callback is forwarded to minimizer.mcmc_sample()."""
+ fitter._precompute_reshaping = MagicMock(
+ return_value=('x_fit', 'x_new', 'y_new', 'w_new', 'dims')
+ )
+ fitter._fit_function_wrapper = MagicMock(return_value='wrapped')
+ fitter._minimizer = MagicMock()
+ fitter._minimizer.package = 'bumps'
+ fitter._minimizer.mcmc_sample = MagicMock(
+ return_value={
+ 'draws': [],
+ 'param_names': [],
+ 'internal_bumps_object': None,
+ 'logp': None,
+ }
+ )
+ cb = MagicMock()
+
+ fitter.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ progress_callback=cb,
+ )
+
+ assert fitter._minimizer.mcmc_sample.call_args.kwargs['progress_callback'] is cb
+
+ def test_fit_function_restored_on_success(self, fitter: Fitter):
+ """Original fit function is restored after a successful call."""
+ fitter._precompute_reshaping = MagicMock(
+ return_value=('x_fit', 'x_new', 'y_new', 'w_new', 'dims')
+ )
+ fitter._fit_function_wrapper = MagicMock(return_value='wrapped')
+ fitter._minimizer = MagicMock()
+ fitter._minimizer.package = 'bumps'
+ fitter._minimizer.mcmc_sample = MagicMock(
+ return_value={
+ 'draws': [],
+ 'param_names': [],
+ 'internal_bumps_object': None,
+ 'logp': None,
+ }
+ )
+ original = fitter._fit_function
+
+ fitter.mcmc_sample(x=np.array([1.0]), y=np.array([0.1]), weights=np.array([1.0]))
+
+ assert fitter._fit_function is original
+
+ def test_fit_function_restored_on_error(self, fitter: Fitter):
+ """Original fit function is restored even when minimizer raises."""
+ fitter._precompute_reshaping = MagicMock(
+ return_value=('x_fit', 'x_new', 'y_new', 'w_new', 'dims')
+ )
+ fitter._fit_function_wrapper = MagicMock(return_value='wrapped')
+ fitter._minimizer = MagicMock()
+ fitter._minimizer.package = 'bumps'
+ fitter._minimizer.mcmc_sample = MagicMock(side_effect=RuntimeError('boom'))
+ original = fitter._fit_function
+
+ with pytest.raises(RuntimeError):
+ fitter.mcmc_sample(x=np.array([1.0]), y=np.array([0.1]), weights=np.array([1.0]))
+
+ assert fitter._fit_function is original
+
+ @pytest.mark.parametrize(
+ 'kwargs, match',
+ [
+ ({'samples': 0}, 'samples must be a positive integer'),
+ ({'samples': -1}, 'samples must be a positive integer'),
+ ({'burn': -1}, 'burn must be a non-negative integer'),
+ ({'thin': 0}, 'thin must be a positive integer'),
+ ],
+ )
+ def test_invalid_args_raise(self, fitter: Fitter, kwargs, match):
+ """Invalid samples/burn/thin values raise ValueError before any I/O."""
+ with pytest.raises(ValueError, match=match):
+ fitter.mcmc_sample(
+ x=np.array([1.0]),
+ y=np.array([0.1]),
+ weights=np.array([1.0]),
+ samples=kwargs.get('samples', 10),
+ burn=kwargs.get('burn', 0),
+ thin=kwargs.get('thin', 1),
+ )
diff --git a/tests/unit/fitting/test_multi_fitter.py b/tests/unit/fitting/test_multi_fitter.py
index a54a927b..ac897653 100644
--- a/tests/unit/fitting/test_multi_fitter.py
+++ b/tests/unit/fitting/test_multi_fitter.py
@@ -3,6 +3,7 @@
from unittest.mock import MagicMock
+import numpy as np
import pytest
from easyscience import ObjBase
@@ -61,3 +62,106 @@ def test_fit_progress_callback(self, multi_fitter: MultiFitter):
max_evaluations=None,
progress_callback=progress_callback,
)
+
+
+# ===================================================================
+# MultiFitter._post_compute_reshaping
+# ===================================================================
+
+
+class TestPostComputeReshaping:
+ def test_splits_single_result_into_two(self):
+ """Verify _post_compute_reshaping splits combined result by dataset."""
+ import numpy as np
+
+ from easyscience.fitting.minimizers import FitResults
+
+ fit_objects = [Line(1.0, 0.5), Line(2.0, 1.5)]
+ mf = MultiFitter(fit_objects, fit_objects)
+
+ # Simulate a combined result
+ combined = FitResults()
+ combined.success = True
+ combined.x = np.array([0, 1, 2])
+ combined.y_obs = np.array([0.5, 1.0, 1.5])
+ combined.y_calc = np.array([0.51, 0.99, 1.51])
+ combined.y_err = np.array([0.01, 0.02, 0.03])
+ combined.p = {'pm': 1.0, 'pc': 0.5}
+ combined.p0 = {'pm': 0.0, 'pc': 0.0}
+ combined.n_evaluations = 100
+ combined.iterations = 50
+ combined.message = 'success'
+ combined.minimizer_engine = 'bumps'
+ combined.engine_result = 'engine_result'
+
+ # Set dependent_dims as _precompute_reshaping would
+ mf._dependent_dims = [(2,), (1,)]
+
+ x_input = [np.array([0.0, 1.0]), np.array([2.0])]
+ y_input = [np.array([0.5, 1.0]), np.array([1.5])]
+
+ results = mf._post_compute_reshaping(combined, x_input, y_input)
+
+ assert len(results) == 2
+ assert results[0].success is True
+ assert results[1].success is True
+ assert len(results[0].y_obs) == 2
+ assert len(results[1].y_obs) == 1
+ assert results[0].total_results is combined
+ assert results[1].total_results is combined
+ assert np.allclose(results[0].y_calc, [0.51, 0.99])
+
+ def test_handles_single_dataset(self):
+ import numpy as np
+
+ from easyscience.fitting.minimizers import FitResults
+
+ fit_objects = [Line(1.0, 0.5)]
+ mf = MultiFitter(fit_objects, fit_objects)
+
+ combined = FitResults()
+ combined.success = True
+ combined.y_obs = np.array([1.0, 2.0, 3.0])
+ combined.y_calc = np.array([1.1, 2.1, 3.1])
+ combined.y_err = np.array([0.1, 0.1, 0.1])
+ combined.p = {'pm': 1.0}
+ combined.p0 = {'pm': 0.0}
+ combined.n_evaluations = 50
+ combined.iterations = 25
+ combined.message = 'ok'
+ combined.minimizer_engine = 'bumps'
+ combined.engine_result = 'er'
+
+ mf._dependent_dims = [(3,)]
+ x_input = [np.array([0.0, 1.0, 2.0])]
+ y_input = [np.array([1.0, 2.0, 3.0])]
+
+ results = mf._post_compute_reshaping(combined, x_input, y_input)
+
+ assert len(results) == 1
+ assert np.allclose(results[0].y_calc, [1.1, 2.1, 3.1])
+
+
+# ===================================================================
+# MultiFitter._precompute_reshaping with weights=None
+# ===================================================================
+
+
+class TestPrecomputeReshaping:
+ def test_weights_all_none_returns_none(self):
+ """When all weights are None, _precompute_reshaping should return None for weights."""
+ import numpy as np
+
+ fit_objects = [Line(1.0, 0.5), Line(2.0, 1.5)]
+ mf = MultiFitter(fit_objects, fit_objects)
+
+ x = [np.array([1.0, 2.0]), np.array([3.0])]
+ y = [np.array([1.5, 2.5]), np.array([4.5])]
+ weights = [None, None]
+
+ x_fit, x_new, y_new, w_new, dims = MultiFitter._precompute_reshaping(
+ x, y, weights, vectorized=False
+ )
+
+ assert w_new is None
+ assert len(dims) == 2
diff --git a/tests/unit/global_object/test_logger.py b/tests/unit/global_object/test_logger.py
new file mode 100644
index 00000000..c78395bf
--- /dev/null
+++ b/tests/unit/global_object/test_logger.py
@@ -0,0 +1,370 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+"""Tests for easyscience.global_object.logger.
+
+Covers the module-level parsing helpers and the public surface of the
+``Logger`` class: the ``level`` property, ``getLogger``, the convenience
+delegation methods, the ``at_level`` context manager and the
+``suspend``/``resume`` shims.
+"""
+
+import logging
+
+import pytest
+
+from easyscience.global_object.logger import _LOG_LEVEL_ENV_VAR
+from easyscience.global_object.logger import PACKAGE_LOGGER_NAME
+from easyscience.global_object.logger import Logger
+from easyscience.global_object.logger import _env_log_level
+from easyscience.global_object.logger import _parse_log_level
+
+
+@pytest.fixture(autouse=True)
+def _restore_package_logger_level():
+ """Snapshot and restore the package-root logger level around each test.
+
+ ``Logger`` operates on the process-wide ``easyscience`` logger, so a
+ test that changes its level would otherwise leak into other tests.
+ """
+ package_logger = logging.getLogger(PACKAGE_LOGGER_NAME)
+ previous = package_logger.level
+ yield
+ package_logger.setLevel(previous)
+
+
+# ---------------------------------------------------------------------------
+# _parse_log_level
+# ---------------------------------------------------------------------------
+
+
+class TestParseLogLevel:
+ def test_int_passthrough(self):
+ # When Then
+ assert _parse_log_level(logging.ERROR) == logging.ERROR
+ assert _parse_log_level(42) == 42
+
+ @pytest.mark.parametrize(
+ 'name, expected',
+ [
+ ('DEBUG', logging.DEBUG),
+ ('INFO', logging.INFO),
+ ('WARNING', logging.WARNING),
+ ('ERROR', logging.ERROR),
+ ('CRITICAL', logging.CRITICAL),
+ ],
+ )
+ def test_level_names(self, name, expected):
+ # When Then
+ assert _parse_log_level(name) == expected
+
+ def test_name_is_case_insensitive_and_stripped(self):
+ # When Then
+ assert _parse_log_level(' error ') == logging.ERROR
+ assert _parse_log_level('Warning') == logging.WARNING
+
+ def test_numeric_string(self):
+ # When Then
+ assert _parse_log_level('40') == 40
+ assert _parse_log_level(' 10 ') == 10
+
+ def test_unknown_name_raises_value_error(self):
+ # When Then
+ with pytest.raises(ValueError) as exc:
+ _parse_log_level('VERBOSE')
+ # Expect the message to name the offending value and list valid options
+ assert 'VERBOSE' in str(exc.value)
+ assert 'WARNING' in str(exc.value)
+
+ @pytest.mark.parametrize('value', [True, False])
+ def test_bool_raises_type_error(self, value):
+ # bool is a subclass of int but must not be treated as a level number
+ with pytest.raises(TypeError) as exc:
+ _parse_log_level(value)
+ assert 'bool' in str(exc.value)
+
+ @pytest.mark.parametrize('value', [10.0, None, ['INFO'], (logging.INFO,)])
+ def test_non_int_non_str_raises_type_error(self, value):
+ # When Then — anything that is neither int nor str is rejected
+ with pytest.raises(TypeError) as exc:
+ _parse_log_level(value)
+ assert type(value).__name__ in str(exc.value)
+
+
+# ---------------------------------------------------------------------------
+# _env_log_level
+# ---------------------------------------------------------------------------
+
+
+class TestEnvLogLevel:
+ def test_none_returns_default(self):
+ # When Then
+ assert _env_log_level(None, default=logging.WARNING) == logging.WARNING
+
+ def test_valid_value_is_parsed(self):
+ # When Then
+ assert _env_log_level('ERROR', default=logging.WARNING) == logging.ERROR
+ assert _env_log_level('10', default=logging.WARNING) == 10
+
+ def test_bad_value_falls_back_to_default(self):
+ # When Then — a typo must not raise, it falls back to the default
+ assert _env_log_level('NOPE', default=logging.INFO) == logging.INFO
+
+
+# ---------------------------------------------------------------------------
+# Logger.__init__
+# ---------------------------------------------------------------------------
+
+
+class TestLoggerInit:
+ def test_default_level_is_warning(self, monkeypatch):
+ # Given no env var set
+ monkeypatch.delenv(_LOG_LEVEL_ENV_VAR, raising=False)
+
+ # When
+ log = Logger()
+
+ # Then
+ assert log.level == logging.WARNING
+ assert log.logger.name == PACKAGE_LOGGER_NAME
+
+ def test_custom_default_level(self, monkeypatch):
+ # Given
+ monkeypatch.delenv(_LOG_LEVEL_ENV_VAR, raising=False)
+
+ # When
+ log = Logger(log_level=logging.DEBUG)
+
+ # Then
+ assert log.level == logging.DEBUG
+
+ def test_env_var_overrides_default(self, monkeypatch):
+ # Given the env var requests ERROR
+ monkeypatch.setenv(_LOG_LEVEL_ENV_VAR, 'ERROR')
+
+ # When the default would have been WARNING
+ log = Logger(log_level=logging.WARNING)
+
+ # Then the env var wins
+ assert log.level == logging.ERROR
+
+ def test_invalid_env_var_falls_back_to_default(self, monkeypatch):
+ # Given a typo'd env var
+ monkeypatch.setenv(_LOG_LEVEL_ENV_VAR, 'NONSENSE')
+
+ # When
+ log = Logger(log_level=logging.INFO)
+
+ # Then import does not crash and the default is used
+ assert log.level == logging.INFO
+
+
+# ---------------------------------------------------------------------------
+# Logger.level property
+# ---------------------------------------------------------------------------
+
+
+class TestLevelProperty:
+ def test_getter_reflects_underlying_logger(self):
+ # Given
+ log = Logger()
+ log.logger.setLevel(logging.CRITICAL)
+
+ # When Then
+ assert log.level == logging.CRITICAL
+
+ def test_setter_accepts_int(self):
+ # Given
+ log = Logger()
+
+ # When
+ log.level = logging.DEBUG
+
+ # Then
+ assert log.logger.level == logging.DEBUG
+
+ def test_setter_accepts_level_name(self):
+ # Given
+ log = Logger()
+
+ # When
+ log.level = 'ERROR'
+
+ # Then
+ assert log.logger.level == logging.ERROR
+
+ def test_setter_raises_on_unknown_name(self):
+ # Given
+ log = Logger()
+
+ # When Then — the public API must be strict
+ with pytest.raises(ValueError):
+ log.level = 'LOUD'
+
+
+# ---------------------------------------------------------------------------
+# Logger.getLogger
+# ---------------------------------------------------------------------------
+
+
+class TestGetLogger:
+ def test_prefixes_with_package_name(self):
+ # Given
+ log = Logger()
+
+ # When
+ child = log.getLogger('fitting')
+
+ # Then
+ assert child.name == f'{PACKAGE_LOGGER_NAME}.fitting'
+
+ def test_does_not_double_prefix(self):
+ # Given a name that already starts with the package name
+ log = Logger()
+
+ # When
+ child = log.getLogger(f'{PACKAGE_LOGGER_NAME}.fitting.bumps')
+
+ # Then
+ assert child.name == f'{PACKAGE_LOGGER_NAME}.fitting.bumps'
+
+ def test_child_is_left_at_notset_to_inherit(self):
+ # Given
+ log = Logger()
+
+ # When
+ child = log.getLogger('some_unique_subsystem')
+
+ # Then it inherits configuration from the package root
+ assert child.level == logging.NOTSET
+
+
+# ---------------------------------------------------------------------------
+# Convenience delegation methods
+# ---------------------------------------------------------------------------
+
+
+class TestConvenienceMethods:
+ @pytest.mark.parametrize(
+ 'method, level',
+ [
+ ('debug', logging.DEBUG),
+ ('info', logging.INFO),
+ ('warning', logging.WARNING),
+ ('error', logging.ERROR),
+ ('critical', logging.CRITICAL),
+ ],
+ )
+ def test_methods_emit_at_expected_level(self, caplog, method, level):
+ # Given
+ log = Logger()
+ log.level = logging.DEBUG
+
+ # When
+ with caplog.at_level(logging.DEBUG, logger=PACKAGE_LOGGER_NAME):
+ getattr(log, method)('hello %s', 'world')
+
+ # Then
+ records = [r for r in caplog.records if r.name == PACKAGE_LOGGER_NAME]
+ assert len(records) == 1
+ assert records[0].levelno == level
+ assert records[0].getMessage() == 'hello world'
+
+ def test_exception_logs_at_error_with_traceback(self, caplog):
+ # Given
+ log = Logger()
+ log.level = logging.DEBUG
+
+ # When
+ with caplog.at_level(logging.DEBUG, logger=PACKAGE_LOGGER_NAME):
+ try:
+ raise RuntimeError('boom')
+ except RuntimeError:
+ log.exception('caught it')
+
+ # Then
+ records = [r for r in caplog.records if r.name == PACKAGE_LOGGER_NAME]
+ assert len(records) == 1
+ assert records[0].levelno == logging.ERROR
+ assert records[0].exc_info is not None
+
+
+# ---------------------------------------------------------------------------
+# Logger.at_level context manager
+# ---------------------------------------------------------------------------
+
+
+class TestAtLevel:
+ def test_temporarily_sets_and_restores_level(self):
+ # Given
+ log = Logger()
+ log.level = logging.WARNING
+
+ # When
+ with log.at_level(logging.ERROR):
+ # Then inside the context the temporary level applies
+ assert log.level == logging.ERROR
+
+ # Then the previous level is restored on exit
+ assert log.level == logging.WARNING
+
+ def test_accepts_level_name(self):
+ # Given
+ log = Logger()
+ log.level = logging.INFO
+
+ # When
+ with log.at_level('CRITICAL'):
+ assert log.level == logging.CRITICAL
+
+ # Then
+ assert log.level == logging.INFO
+
+ def test_restores_level_on_exception(self):
+ # Given
+ log = Logger()
+ log.level = logging.WARNING
+
+ # When an exception escapes the context
+ with pytest.raises(RuntimeError):
+ with log.at_level(logging.ERROR):
+ raise RuntimeError('boom')
+
+ # Then the previous level is still restored
+ assert log.level == logging.WARNING
+
+
+# ---------------------------------------------------------------------------
+# suspend / resume shims
+# ---------------------------------------------------------------------------
+
+
+class TestSuspendResume:
+ def test_suspend_silences_then_resume_restores(self):
+ # Given
+ log = Logger()
+ log.level = logging.INFO
+
+ # When
+ log.suspend()
+
+ # Then nothing below CRITICAL gets through
+ assert log.level > logging.CRITICAL
+
+ # When
+ log.resume()
+
+ # Then the pre-suspend level is restored
+ assert log.level == logging.INFO
+
+ def test_resume_uses_level_captured_at_suspend(self):
+ # Given a level set before suspending
+ log = Logger()
+ log.level = logging.ERROR
+ log.suspend()
+
+ # When
+ log.resume()
+
+ # Then
+ assert log.level == logging.ERROR
diff --git a/tests/unit/legacy/test_collection_base.py b/tests/unit/legacy/test_collection_base.py
new file mode 100644
index 00000000..152a0a37
--- /dev/null
+++ b/tests/unit/legacy/test_collection_base.py
@@ -0,0 +1,155 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+"""Tests for easyscience.legacy.collection_base.CollectionBase.
+
+These tests cover methods not exercised by the existing
+tests/unit/base_classes/test_collection_base.py suite.
+"""
+
+import logging
+
+import pytest
+
+from easyscience import DescriptorNumber
+from easyscience import Parameter
+from easyscience import global_object
+from easyscience.legacy.collection_base import CollectionBase
+
+
+@pytest.fixture(autouse=True)
+def _clear_map():
+ global_object.map._clear()
+ yield
+ global_object.map._clear()
+
+
+@pytest.fixture
+def setup_pars():
+ return {
+ 'name': 'test',
+ 'par1': Parameter('p1', 0.1, fixed=True),
+ 'des1': DescriptorNumber('d1', 0.1),
+ 'par2': Parameter('p2', 0.2),
+ 'des2': DescriptorNumber('d2', 0.2),
+ 'par3': Parameter('p3', 0.3),
+ }
+
+
+# ---------------------------------------------------------------------------
+# Deprecation warning on instantiation
+# ---------------------------------------------------------------------------
+
+def test_instantiation_emits_deprecation_warning(caplog: "pytest.LogCaptureFixture"):
+ """Instantiating CollectionBase should log a deprecation warning."""
+ with caplog.at_level(logging.WARNING, logger='easyscience.legacy'):
+ CollectionBase('test')
+ assert len(caplog.records) >= 1
+ messages = [r.message for r in caplog.records]
+ combined = ' '.join(messages)
+ assert 'deprecated' in combined.lower()
+
+
+# ---------------------------------------------------------------------------
+# sort
+# ---------------------------------------------------------------------------
+
+def test_sort_ascending(setup_pars):
+ """Sort by parameter value in ascending order."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+ coll.sort(mapping=lambda item: item.value, reverse=False)
+ values = [item.value for item in coll]
+ assert values == sorted(values)
+
+
+def test_sort_descending(setup_pars):
+ """Sort by parameter value in descending order."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+ coll.sort(mapping=lambda item: item.value, reverse=True)
+ values = [item.value for item in coll]
+ assert values == sorted(values, reverse=True)
+
+
+# ---------------------------------------------------------------------------
+# data property
+# ---------------------------------------------------------------------------
+
+def test_data_property(setup_pars):
+ """The data property returns a tuple of stored items."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+ d = coll.data
+ assert isinstance(d, tuple)
+ assert len(d) == 5
+ # Items should be the same objects
+ for item_from_data, item_from_iter in zip(d, coll):
+ assert item_from_data is item_from_iter
+
+
+# ---------------------------------------------------------------------------
+# __setitem__ with an EasyScience object (not a Number)
+# ---------------------------------------------------------------------------
+
+def test_setitem_with_easyscience_object(setup_pars):
+ """Replace an item at an index with another EasyScience object."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+
+ n_before = len(coll)
+ old_item = coll[0]
+ new_item = Parameter('replacement', 99.0)
+
+ coll[0] = new_item
+
+ assert len(coll) == n_before
+ assert coll[0].name == 'replacement'
+ assert coll[0].value == 99.0
+ # Old item should be removed from the graph
+ assert old_item.unique_name not in global_object.map.get_edges(coll)
+
+
+# ---------------------------------------------------------------------------
+# __getitem__ with duplicate names returns a new CollectionBase
+# ---------------------------------------------------------------------------
+
+def test_getitem_duplicate_names_returns_collection(setup_pars):
+ """When multiple items share the same name, __getitem__ returns a sub-collection."""
+ name = setup_pars.pop('name')
+ # Add two items with the same display name
+ p1 = Parameter('same_name', 1.0)
+ p2 = Parameter('same_name', 2.0)
+ coll = CollectionBase(name, p1, p2)
+
+ result = coll['same_name']
+ assert isinstance(result, CollectionBase)
+ assert len(result) == 2
+
+
+def test_getitem_nonexistent_name_raises(setup_pars):
+ """Looking up a nonexistent name raises IndexError."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+
+ with pytest.raises(IndexError, match='Given index does not exist'):
+ _ = coll['nonexistent']
+
+
+# ---------------------------------------------------------------------------
+# insert method (called by MutableSequence.append, but test edge case)
+# ---------------------------------------------------------------------------
+
+def test_insert_at_specific_index(setup_pars):
+ """Insert an item at a specific index (not just via append)."""
+ name = setup_pars.pop('name')
+ coll = CollectionBase(name, **setup_pars)
+
+ n_before = len(coll)
+ new_item = Parameter('inserted', 42.0)
+
+ coll.insert(2, new_item)
+
+ assert len(coll) == n_before + 1
+ assert coll[2].name == 'inserted'
+ assert coll[2].value == 42.0
diff --git a/tests/unit/legacy/test_obj_base.py b/tests/unit/legacy/test_obj_base.py
new file mode 100644
index 00000000..fc33c424
--- /dev/null
+++ b/tests/unit/legacy/test_obj_base.py
@@ -0,0 +1,119 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
+
+"""Tests for easyscience.legacy.obj_base.ObjBase.
+
+These tests cover methods not exercised by the existing
+tests/unit/base_classes/test_obj_base.py suite.
+"""
+
+import logging
+from typing import ClassVar
+
+import pytest
+
+from easyscience import Parameter
+from easyscience import global_object
+from easyscience.legacy.obj_base import ObjBase
+
+
+@pytest.fixture(autouse=True)
+def _clear_map():
+ global_object.map._clear()
+ yield
+ global_object.map._clear()
+
+
+# ---------------------------------------------------------------------------
+# Deprecation warning on instantiation
+# ---------------------------------------------------------------------------
+
+def test_instantiation_emits_deprecation_warning(caplog: "pytest.LogCaptureFixture"):
+ """Instantiating ObjBase should log a deprecation warning."""
+ with caplog.at_level(logging.WARNING, logger='easyscience.legacy'):
+ ObjBase('test')
+ assert len(caplog.records) >= 1
+ messages = [r.message for r in caplog.records]
+ combined = ' '.join(messages)
+ assert 'deprecated' in combined.lower()
+
+
+# ---------------------------------------------------------------------------
+# __repr__
+# ---------------------------------------------------------------------------
+
+def test_repr():
+ """Verify __repr__ returns the expected format."""
+ obj = ObjBase('my_name')
+ r = repr(obj)
+ assert "ObjBase" in r
+ assert "my_name" in r
+
+
+# ---------------------------------------------------------------------------
+# __setattr__ with interface bindings regeneration
+# ---------------------------------------------------------------------------
+
+def test_setattr_with_interface_calls_generate_bindings():
+ """When replacing an attribute that has an interface, generate_bindings is called."""
+ from unittest.mock import Mock
+
+ class A(ObjBase):
+ a: ClassVar[Parameter]
+
+ def __init__(self, a: Parameter):
+ super().__init__('A', a=a)
+
+ p1 = Parameter('a', 1.0)
+ a = A(p1)
+
+ # Attach a mock interface
+ mock_iface = Mock()
+ a.interface = mock_iface
+
+ # Replace the parameter — should trigger generate_bindings via __setattr__
+ p2 = Parameter('a', 2.0)
+ a.a = p2
+
+ mock_iface.generate_bindings.assert_called()
+
+
+# ---------------------------------------------------------------------------
+# __setattr__ without annotation (the else branch)
+# ---------------------------------------------------------------------------
+
+def test_setattr_without_annotation():
+ """Setting a non-annotated BasedBase/DescriptorBase attribute updates graph."""
+
+ class A(ObjBase):
+ def __init__(self, p: Parameter):
+ super().__init__('A', p=p)
+
+ p1 = Parameter('p', 1.0)
+ a = A(p1)
+
+ graph = global_object.map
+ edges_before = set(graph.get_edges(a))
+
+ # Replace the parameter with a new one
+ p2 = Parameter('p', 2.0)
+ a.p = p2
+
+ edges_after = set(graph.get_edges(a))
+ assert edges_before != edges_after
+ assert p2.unique_name in edges_after
+ assert p1.unique_name not in edges_after
+
+
+# ---------------------------------------------------------------------------
+# __setter with DescriptorBase path
+# ---------------------------------------------------------------------------
+
+def test_setter_sets_descriptor_value():
+ """When setting a Descriptor via the logged property, the descriptor's value is updated."""
+ from easyscience import DescriptorNumber
+
+ d = DescriptorNumber('d1', 0.5)
+ obj = ObjBase('test', d1=d)
+ obj.d1 = 3.14
+ assert obj.d1.value == 3.14
diff --git a/tools/add_spdx.py b/tools/add_spdx.py
deleted file mode 100644
index 295a7e0d..00000000
--- a/tools/add_spdx.py
+++ /dev/null
@@ -1,149 +0,0 @@
-"""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_spdx.py b/tools/check_spdx.py
deleted file mode 100644
index 80555ab1..00000000
--- a/tools/check_spdx.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""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..f276ca1b
--- /dev/null
+++ b/tools/license_headers.py
@@ -0,0 +1,321 @@
+# 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_spdx.py b/tools/remove_spdx.py
deleted file mode 100644
index 50e547a7..00000000
--- a/tools/remove_spdx.py
+++ /dev/null
@@ -1,39 +0,0 @@
-"""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())
diff --git a/tools/test_scripts.py b/tools/test_scripts.py
deleted file mode 100644
index 2d347579..00000000
--- a/tools/test_scripts.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""Test runner for tutorial scripts in the 'tutorials' directory.
-
-This test discovers and executes all Python scripts located under the
-'tutorials' directory to ensure they run without errors.
-
-Important: each script must be executed in a fresh Python process.
-Running many tutorials in-process (e.g. via runpy) leaks global state
-between scripts (notably cached calculator dictionaries keyed only by
-model/experiment names), which can cause false failures.
-"""
-
-import os
-import subprocess # noqa: S404
-import sys
-from pathlib import Path
-
-import pytest
-
-_repo_root = Path(__file__).resolve().parents[1]
-_src_root = _repo_root / 'src'
-
-# Discover tutorial scripts, excluding temporary checkpoint files
-TUTORIALS = [
- p for p in Path('docs/docs/tutorials').rglob('*.py') if '.ipynb_checkpoints' not in p.parts
-]
-
-
-@pytest.mark.parametrize('script_path', TUTORIALS)
-def test_script_runs(script_path: Path):
- """Execute a tutorial script and fail if it raises an exception.
-
- Each script is run in the context of __main__ to mimic standalone
- execution.
- """
- env = os.environ.copy()
- if _src_root.exists():
- existing = env.get('PYTHONPATH', '')
- env['PYTHONPATH'] = (
- str(_src_root) if not existing else str(_src_root) + os.pathsep + existing
- )
-
- # This is a test harness executing repo-local tutorial scripts.
- # We intentionally use subprocess isolation to prevent cross-test
- # global state leaks (e.g. calculator caches) that can cause false
- # failures when running tutorials in a shared interpreter.
- result = subprocess.run( # noqa: S603
- [sys.executable, str(script_path)],
- cwd=str(_repo_root),
- env=env,
- capture_output=True,
- text=True,
- )
- if result.returncode != 0:
- details = (result.stdout or '') + (result.stderr or '')
- pytest.fail(f'{script_path}\n{details.strip()}')
diff --git a/tools/update_github_labels.py b/tools/update_github_labels.py
index 8ec8c2d7..84de575e 100644
--- a/tools/update_github_labels.py
+++ b/tools/update_github_labels.py
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: 2026 EasyScience contributors
+# SPDX-License-Identifier: BSD-3-Clause
"""Set/update GitHub labels for current or specified easyscience
repository.
@@ -17,7 +19,7 @@
import argparse
import json
import shlex
-import subprocess
+import subprocess # noqa: S404
import sys
from dataclasses import dataclass