From 56b046c0413928f3d59ec8fdb4b799a58daf91bf Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Fri, 16 Oct 2026 20:28:32 +1000 Subject: [PATCH 1/2] Channel maintenance moves here: staging copy and prefix.dev -> anaconda.org mirror From RoboStack/robostack.github.io: tools/copy_staging_packages.py (was scripts/copy-to-distro-specific-channel.py) copies humble's and noetic's packages from robostack-staging on to their own channels, hourly as before; tools/mirror_to_anaconda.py (from RoboStack/robostack.github.io#205) uploads what a prefix.dev channel has and its old anaconda.org channel doesn't, started by hand until the prefix.dev channels exist. A job without its token secret is skipped, so nothing fails before the secrets are set here. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/copy-staging-packages.yaml | 41 + .github/workflows/mirror-to-anaconda.yaml | 53 + README.md | 8 +- pixi.lock | 3993 ++++++++++++++++-- pixi.toml | 4 + tools/copy_staging_packages.py | 212 + tools/mirror_to_anaconda.py | 114 + tools/tests/test_copy_staging_packages.py | 53 + tools/tests/test_mirror_to_anaconda.py | 36 + 9 files changed, 4264 insertions(+), 250 deletions(-) create mode 100644 .github/workflows/copy-staging-packages.yaml create mode 100644 .github/workflows/mirror-to-anaconda.yaml create mode 100644 tools/copy_staging_packages.py create mode 100644 tools/mirror_to_anaconda.py create mode 100644 tools/tests/test_copy_staging_packages.py create mode 100644 tools/tests/test_mirror_to_anaconda.py diff --git a/.github/workflows/copy-staging-packages.yaml b/.github/workflows/copy-staging-packages.yaml new file mode 100644 index 00000000..6a911a8b --- /dev/null +++ b/.github/workflows/copy-staging-packages.yaml @@ -0,0 +1,41 @@ +# humble and noetic upload to robostack-staging: copy their packages on to +# robostack-humble / robostack-noetic (tools/copy_staging_packages.py). Moved here from +# RoboStack/robostack.github.io. A job without its token secret is skipped. +name: Copy staging packages + +on: + workflow_dispatch: + schedule: + - cron: "42 * * * *" + +permissions: + contents: read + +jobs: + copy: + strategy: + fail-fast: false + matrix: + include: + - { distro: noetic, token: ROBOSTACK_NOETIC_ANACONDA_API_TOKEN } + - { distro: humble, token: ROBOSTACK_HUMBLE_ANACONDA_API_TOKEN } + name: copy ${{ matrix.distro }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Disable git auto-maintenance + run: git config --global maintenance.auto false && git config --global gc.auto 0 + - uses: prefix-dev/setup-pixi@v0.11.0 + with: + locked: true + pixi-version: v0.81.0 + cache-write: false + - name: Copy the packages built since 2025-01-01 + env: + ANACONDA_API_TOKEN: ${{ secrets[matrix.token] }} + DISTRO: ${{ matrix.distro }} + run: | + if [ -z "$ANACONDA_API_TOKEN" ]; then echo "::notice::no ${{ matrix.token }} secret: skipped"; exit 0; fi + pixi run python tools/copy_staging_packages.py "$DISTRO" 2025-01-01 diff --git a/.github/workflows/mirror-to-anaconda.yaml b/.github/workflows/mirror-to-anaconda.yaml new file mode 100644 index 00000000..c2d701a1 --- /dev/null +++ b/.github/workflows/mirror-to-anaconda.yaml @@ -0,0 +1,53 @@ +# The distributions upload to prefix.dev; this keeps the old anaconda.org channels that +# users still install from up to date (tools/mirror_to_anaconda.py). Channels that are +# empty on anaconda.org (robostack-rolling, robostack-lyrical) stay empty. +# +# Only started by hand until the distributions' own prefix.dev channels are set up: +# today prefix.dev's robostack-staging and robostack-jazzy are mirrors *of* anaconda.org, +# and mirroring them back would re-upload packages that were removed there. Add a +# schedule (e.g. cron "12 * * * *") and set the source channels once they are (#54). +name: Mirror prefix.dev channels to anaconda.org + +on: + workflow_dispatch: + inputs: + dry_run: + description: Only list the packages that would be uploaded + type: boolean + default: true + +permissions: + contents: read + +jobs: + mirror: + strategy: + fail-fast: false + matrix: + include: + # humble goes to robostack-staging; copy-staging-packages.yaml copies it on to + # robostack-humble as before + - { source: robostack-humble, destination: robostack-staging, token: ROBOSTACK_STAGING_ANACONDA_API_TOKEN } + - { source: robostack-jazzy, destination: robostack-jazzy, token: ROBOSTACK_JAZZY_ANACONDA_API_TOKEN } + name: mirror ${{ matrix.source }} -> ${{ matrix.destination }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - name: Disable git auto-maintenance + run: git config --global maintenance.auto false && git config --global gc.auto 0 + - uses: prefix-dev/setup-pixi@v0.11.0 + with: + locked: true + pixi-version: v0.81.0 + cache-write: false + - name: Mirror + env: + ANACONDA_API_TOKEN: ${{ secrets[matrix.token] }} + SOURCE: ${{ matrix.source }} + DESTINATION: ${{ matrix.destination }} + DRY_RUN: ${{ inputs.dry_run && '--dry-run' || '' }} + run: | + if [ -z "$ANACONDA_API_TOKEN" ] && [ -z "$DRY_RUN" ]; then echo "::notice::no ${{ matrix.token }} secret: skipped"; exit 0; fi + pixi run python tools/mirror_to_anaconda.py "$SOURCE" "$DESTINATION" $DRY_RUN diff --git a/README.md b/README.md index e7969631..91c4872c 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,9 @@ tools/robostack.py `pixi run rs ...`: every task, for one distribution o tools/maintenance.py checks and robostack-bot commands tools/import_distro.py (re)import a distribution from its own repository tools/*.py check_patches_clean_apply, check_dependency_compat, build_gap_report, ... +tools/copy_staging_packages.py, mirror_to_anaconda.py channel maintenance (workflows below) .scripts/ staged build scripts (build_unix.sh, build_win.bat) -.github/workflows/ testpr.yaml, main.yaml (staged build branches), bot.yaml +.github/workflows/ testpr.yaml, main.yaml (staged build branches), bot.yaml, channel maintenance .claude/skills/ procedures for agents (debug a build, patches, versions/rebuilds, package selection) pixi.toml one environment for all distributions (one vinca, one rattler-build) ``` @@ -127,6 +128,11 @@ label doesn't start one by itself. Nothing has to be reset before merging. The app needs repository permissions Contents, Pull requests, Issues and Workflows (read and write), with its webhook inactive. +- **Channel maintenance:** + - `copy-staging-packages.yaml` (hourly): copies humble's and noetic's packages from `robostack-staging` on to `robostack-humble` / `robostack-noetic` (`anaconda copy`). Secrets `ROBOSTACK_HUMBLE_ANACONDA_API_TOKEN`, `ROBOSTACK_NOETIC_ANACONDA_API_TOKEN`. + - `mirror-to-anaconda.yaml` (started by hand for now, dry run by default): uploads what a prefix.dev channel has and its old anaconda.org channel doesn't (humble → `robostack-staging`, jazzy → `robostack-jazzy`). Secrets `ROBOSTACK_STAGING_ANACONDA_API_TOKEN`, `ROBOSTACK_JAZZY_ANACONDA_API_TOKEN`. + - A job without its secret is skipped. + ### robostack-bot `.github/workflows/bot.yaml` runs `tools/maintenance.py`: diff --git a/pixi.lock b/pixi.lock index 51ff7b8a..08ac8529 100644 --- a/pixi.lock +++ b/pixi.lock @@ -37,141 +37,328 @@ environments: packages: linux-64-glibc-2-17: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.2.0-py314hcd2bdb6_4.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cffi-2.1.1-py314h8d76f0c_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/charset-normalizer-3.5.2-h1114479_0.conda - conda: https://prefix.dev/conda-forge/linux-64/cmake-3.31.8-hc85cc9f_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cryptography-50.0.2-py311hc91d8b8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda - conda: https://prefix.dev/conda-forge/linux-64/gh-2.102.0-hfc2019e_0.conda - conda: https://prefix.dev/conda-forge/linux-64/git-lfs-3.8.0-h2c09266_0.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/jh2-5.0.15-py314h7e8cd81_0.conda - conda: https://prefix.dev/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_3.conda - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libev-4.33-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + - conda: https://prefix.dev/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.59-h922cc85_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libpython-3.14.7-hdc7f604_106_cp314.conda - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.53.4-h0737f62_102.conda - conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_7.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.4-heb1ab33_2.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda - conda: https://prefix.dev/conda-forge/linux-64/patchelf-0.19.2-hee9eb32_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/pillow-12.3.0-py314h50bfbbb_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + - conda: https://prefix.dev/conda-forge/linux-64/py-rattler-0.27.1-py311hc91d8b8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pydantic-core-2.50.1-py314h7e8cd81_0.conda - conda: https://prefix.dev/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/qh3-1.9.4-py314haf003cf_0.conda - conda: https://prefix.dev/conda-forge/linux-64/rattler-build-0.76.1-hf01adef_0.conda - conda: https://prefix.dev/conda-forge/linux-64/rattler-index-0.31.5-h10a7753_0.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda - conda: https://prefix.dev/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/rpds-py-2026.9.1-py314h7e8cd81_0.conda - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/zlib-ng-2.3.3-hce19668_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda + - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + - conda: https://prefix.dev/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyha804496_0.conda + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/secretstorage-3.5.0-pyhc9edb4d_3.conda + - conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=3d552f4001634fd26376b2bf5fe37fe81ef3dc22#3d552f4001634fd26376b2bf5fe37fe81ef3dc22 - - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/63/327d25d91af32209b394abe5626706c4b7ad5a4812cc464a4e3a2be6916f/rospkg-1.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/32/91/30151a39f7570f448ed84529390628a651d7f27c87d73c9b887f8189695e/docutils-0.23-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/79/5e2cffa1c77432f11cd93a5351f30732c997a239d3a3090856a72d6d8ba7/ruamel.yaml-0.17.40-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/95/88ed47cb7da88569a78b7d6fb9420298df7e99997810c844a924d96d3c08/empy-3.3.4.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/53/b5e80bac66d0db921ddbbe3c8d37198455c19302a29da1a434708c35c79d/catkin_pkg-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-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/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/db/d7282caf7ab03af44d5d6fdbaa019b35c7d7f1c90588b839c07cba640d6a/markupsafe-3.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.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/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.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 linux-aarch64-glibc-2-17: - conda: https://prefix.dev/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/brotli-python-1.2.0-py314hd574b5f_4.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_10.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/c-ares-1.34.8-h29ee22c_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/cffi-2.1.1-py314h65cb5ac_3.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/cmake-3.31.8-hc9d863e_0.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/cryptography-50.0.2-py311h9269228_0.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/dbus-1.16.2-h71d469a_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/gh-2.102.0-h22914b5_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/git-lfs-3.8.0-hcf061c0_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/icu-78.3-py311h3512406_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/jh2-5.0.15-py314h231d840_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/keyutils-1.6.3-h5bc82ec_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/krb5-1.22.2-h095d8e5_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/lcms2-2.19.1-h137c43b_3.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/lerc-4.2.0-h52b7260_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libcurl-8.22.0-h86273da_0.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libdeflate-1.25-hfa851ae_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321hc48eb74_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libev-4.33-h80f16a2_3.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libexpat-2.8.5-h4154aff_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libffi-3.7.0-hdaad0be_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libfreetype6-2.14.3-h9cc7050_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libgcc-16.2.0-h205dda4_7.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libglib-2.90.1-h3584fe5_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libgomp-16.2.0-h8acb6b2_7.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libiconv-1.18-h1ea5142_3.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libnghttp2-1.68.1-ha4b982d_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libpng-1.6.59-hf9b7768_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libpsl-0.23.1-hb8431ed_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libpython-3.14.7-hc71fabe_106_cp314.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libsqlite-3.53.4-hd26f1b6_102.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libssh2-1.11.1-h7572e3e_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libstdcxx-16.2.0-hef695bb_7.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libtiff-4.7.2-h45f9f85_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libuuid-2.42.4-hd6fdeab_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libuv-1.52.1-h80f16a2_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/libxcb-1.17.0-h3f04742_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_3.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/ncurses-6.6-h2b6f883_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/openjpeg-2.5.4-h504851f_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/openssl-3.6.5-he6ad1d5_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/patchelf-0.19.2-hfb11796_0.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/pcre2-10.47-he574923_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/pillow-12.3.0-py314h3cc5072_4.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/pthread-stubs-0.4-h5bc82ec_1004.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/py-rattler-0.27.1-py311h40f29f8_0.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/pydantic-core-2.50.1-py314h231d840_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/python-3.14.7-hbec3b18_106_cp314.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/qh3-1.9.4-py314hf779a1a_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/rattler-build-0.76.1-hc342849_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/rattler-index-0.31.5-hf75afee_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/readline-8.3-ha7194a6_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/rhash-1.4.6-he30d5cf_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/rpds-py-2026.9.1-py314h231d840_0.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/tk-8.6.13-noxft_hf03c496_4.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h5bc82ec_2.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h5bc82ec_2.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/yaml-0.2.5-h29ee22c_3.conda + - conda: https://prefix.dev/conda-forge/linux-aarch64/zlib-ng-2.3.3-h1024f78_1.conda - conda: https://prefix.dev/conda-forge/linux-aarch64/zstd-1.5.7-h9d15635_7.conda + - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.5.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + - conda: https://prefix.dev/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyha804496_0.conda + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/secretstorage-3.5.0-pyhc9edb4d_3.conda + - conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=3d552f4001634fd26376b2bf5fe37fe81ef3dc22#3d552f4001634fd26376b2bf5fe37fe81ef3dc22 - - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/63/327d25d91af32209b394abe5626706c4b7ad5a4812cc464a4e3a2be6916f/rospkg-1.6.3-py3-none-any.whl @@ -180,71 +367,155 @@ environments: - pypi: https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/95/88ed47cb7da88569a78b7d6fb9420298df7e99997810c844a924d96d3c08/empy-3.3.4.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/53/b5e80bac66d0db921ddbbe3c8d37198455c19302a29da1a434708c35c79d/catkin_pkg-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-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/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/72/9c5e7707b57c8ddfa9ddf7b0b1d009d7fbab9e9e887d5b721060f37e307d/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/a8/73a81135e85ba66217f5af7facb03bbb386807e1a729ab64532e4c802652/markupsafe-3.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.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/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.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 osx-64: + - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + - conda: https://prefix.dev/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyh534df25_0.conda + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.2.0-py314h21a1a37_4.conda - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.8-had63097_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/cffi-2.1.1-py314h0656537_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/charset-normalizer-3.5.2-hd77389f_0.conda - conda: https://prefix.dev/conda-forge/osx-64/cmake-3.31.8-h29fc008_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/cryptography-50.0.2-py311hc027f23_0.conda - conda: https://prefix.dev/conda-forge/osx-64/gh-2.102.0-h5839d16_0.conda - conda: https://prefix.dev/conda-forge/osx-64/git-lfs-3.8.0-hb8084c2_0.conda - conda: https://prefix.dev/conda-forge/osx-64/icu-78.3-py313hbf1d544_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/jh2-5.0.15-py314h3cfb53e_0.conda - conda: https://prefix.dev/conda-forge/osx-64/krb5-1.22.2-h69064fd_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/lcms2-2.19.1-h4e6bd4b_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/lerc-4.2.0-h35c7297_0.conda - conda: https://prefix.dev/conda-forge/osx-64/libcurl-8.22.0-h5318221_0.conda - conda: https://prefix.dev/conda-forge/osx-64/libcxx-23.1.2-h19cb2f5_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libdeflate-1.25-h7ad9622_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libedit-3.1.20250104-pl5321hba2e2ab_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libev-4.33-ha3d0635_3.conda - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.8.5-h6e061ac_0.conda - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.7.0-h6b3a05b_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libfreetype6-2.14.3-h8afe040_2.conda - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h4ae439b_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/libjpeg-turbo-3.2.0-ha1e9b39_1.conda - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-ha1e9b39_2.conda - conda: https://prefix.dev/conda-forge/osx-64/libnghttp2-1.68.1-h1e30255_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libpng-1.6.59-h4382c61_0.conda - conda: https://prefix.dev/conda-forge/osx-64/libpsl-0.23.1-h7ff43d8_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libpython-3.14.7-hfe304d0_106_cp314.conda - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.53.4-ha5db789_102.conda - conda: https://prefix.dev/conda-forge/osx-64/libssh2-1.11.1-hd53bb72_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtiff-4.7.2-h01c3a8c_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.52.1-ha3d0635_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libwebp-base-1.6.0-hb276fe9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxcb-1.17.0-h2478c6c_1.conda - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/openjpeg-2.5.4-he4eae51_1.conda - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.6.5-h332eb6d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pillow-12.3.0-py314h909093e_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/pthread-stubs-0.4-hd115831_1004.conda + - conda: https://prefix.dev/conda-forge/osx-64/py-rattler-0.27.1-py311h2a8a194_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pydantic-core-2.50.1-py314h3cfb53e_0.conda - conda: https://prefix.dev/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.3-py314h10d0514_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/qh3-1.9.4-py314h7d911d6_0.conda - conda: https://prefix.dev/conda-forge/osx-64/rattler-build-0.76.1-h1311731_0.conda - conda: https://prefix.dev/conda-forge/osx-64/rattler-index-0.31.5-hca43645_0.conda - conda: https://prefix.dev/conda-forge/osx-64/readline-8.3-h000c2f7_1.conda - conda: https://prefix.dev/conda-forge/osx-64/rhash-1.4.6-ha1e9b39_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/rpds-py-2026.9.1-py314h3cfb53e_0.conda - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/xorg-libxau-1.0.12-hd115831_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/xorg-libxdmcp-1.1.5-hd115831_2.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-had63097_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/zlib-ng-2.3.3-h646e873_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=3d552f4001634fd26376b2bf5fe37fe81ef3dc22#3d552f4001634fd26376b2bf5fe37fe81ef3dc22 - - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/63/327d25d91af32209b394abe5626706c4b7ad5a4812cc464a4e3a2be6916f/rospkg-1.6.3-py3-none-any.whl @@ -254,70 +525,154 @@ environments: - pypi: https://files.pythonhosted.org/packages/3b/95/88ed47cb7da88569a78b7d6fb9420298df7e99997810c844a924d96d3c08/empy-3.3.4.tar.gz - pypi: https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3f/53/b5e80bac66d0db921ddbbe3c8d37198455c19302a29da1a434708c35c79d/catkin_pkg-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-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/6c/ab/2f8488f0f817a39fca068d2b17daf446bf5cdb3eae28c3720af534d873b4/markupsafe-3.0.4-cp314-cp314-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.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/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.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 osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.5.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + - conda: https://prefix.dev/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyh534df25_0.conda + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.2.0-py314hee34562_4.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.8-h74c22ad_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-2.1.1-py314h618e29d_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/cmake-3.31.8-h54ad630_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cryptography-50.0.2-py311hc28ac56_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/gh-2.102.0-hf76c51c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/git-lfs-3.8.0-h7021a9e_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jh2-5.0.15-py314hc05cd11_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.19.1-hce41798_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.2.0-h1eee2c3_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.22.0-h6651222_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-23.1.2-h55c6f16_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.25-he7e0567_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321h26f1114_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h1a92334_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libfreetype6-2.14.3-h2ed5691_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.2.0-h84a0fba_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.68.1-h435687b_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.59-hf5e6511_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libpsl-0.23.1-hdb0c161_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libpython-3.14.7-h4311e70_106_cp314.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.53.4-h34a968b_102.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-hbf2880b_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.2-hf67920b_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.52.1-h1a92334_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.6.0-h202fb40_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libxcb-1.17.0-hbffa61f_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.4-h4d1e80c_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pillow-12.3.0-py314h709c99d_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pthread-stubs-0.4-hb001647_1004.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/py-rattler-0.27.1-py311hfcb3ee1_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pydantic-core-2.50.1-py314hc05cd11_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.3-py314h6e9b3f0_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/qh3-1.9.4-py314h548cc06_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/rattler-build-0.76.1-h74d5219_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/rattler-index-0.31.5-h7b803a5_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/rhash-1.4.6-h84a0fba_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/rpds-py-2026.9.1-py314hc05cd11_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxau-1.0.12-hb001647_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hb001647_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h74c22ad_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zlib-ng-2.3.3-h31dac16_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=3d552f4001634fd26376b2bf5fe37fe81ef3dc22#3d552f4001634fd26376b2bf5fe37fe81ef3dc22 - - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/63/327d25d91af32209b394abe5626706c4b7ad5a4812cc464a4e3a2be6916f/rospkg-1.6.3-py3-none-any.whl @@ -326,71 +681,154 @@ environments: - pypi: https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/95/88ed47cb7da88569a78b7d6fb9420298df7e99997810c844a924d96d3c08/empy-3.3.4.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/53/b5e80bac66d0db921ddbbe3c8d37198455c19302a29da1a434708c35c79d/catkin_pkg-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-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/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ad/40/e2d117b048d47282ade906fbfd92814cbee5647afc13fda88a3406039372/markupsafe-3.0.4-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.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/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.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 win-64: + - conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + - conda: https://prefix.dev/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyh7428d3b_0.conda - conda: https://prefix.dev/conda-forge/noarch/m2-msys2-runtime-3.6.1.4-hc364b38_6.conda - conda: https://prefix.dev/conda-forge/noarch/m2-patch-2.7.6.3-hc364b38_6.conda + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyh6be1c34_0.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.2.0-py314h85cf176_4.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda + - conda: https://prefix.dev/conda-forge/win-64/cffi-2.1.1-py314h5a2d7ad_3.conda + - conda: https://prefix.dev/conda-forge/win-64/charset-normalizer-3.5.2-h308a848_0.conda - conda: https://prefix.dev/conda-forge/win-64/cmake-3.31.8-hdcbee5b_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cryptography-50.0.2-py311h67a9792_0.conda - conda: https://prefix.dev/conda-forge/win-64/gh-2.102.0-h11686cb_0.conda - conda: https://prefix.dev/conda-forge/win-64/git-2.56.0-h57928b3_0.conda - conda: https://prefix.dev/conda-forge/win-64/git-lfs-3.8.0-ha70c05e_0.conda - conda: https://prefix.dev/conda-forge/win-64/icu-78.3-h5112557_2.conda + - conda: https://prefix.dev/conda-forge/win-64/jh2-5.0.15-py314h9f07db2_0.conda - conda: https://prefix.dev/conda-forge/win-64/krb5-1.22.2-h719d79b_2.conda + - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_3.conda + - conda: https://prefix.dev/conda-forge/win-64/lerc-4.2.0-hd936e49_0.conda - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.22.0-hdb0ef4a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.25-h1a1d4e4_1.conda - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda - conda: https://prefix.dev/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libfreetype-2.14.3-h57928b3_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_2.conda - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_3.conda + - conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_1.conda - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-hfd05255_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.59-hdc8cecf_0.conda - conda: https://prefix.dev/conda-forge/win-64/libpsl-0.23.1-h9b16d47_1.conda - conda: https://prefix.dev/conda-forge/win-64/libpython-3.14.7-h4f90d01_106_cp314.conda - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.53.4-hf5d6505_102.conda - conda: https://prefix.dev/conda-forge/win-64/libssh2-1.11.1-h734d217_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libtiff-4.7.2-h8f73337_1.conda - conda: https://prefix.dev/conda-forge/win-64/libuv-1.52.1-h6a83c73_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_1.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - conda: https://prefix.dev/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda + - conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.4-h90fa87c_2.conda - conda: https://prefix.dev/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pillow-12.3.0-py314h6acc0e1_4.conda + - conda: https://prefix.dev/conda-forge/win-64/py-rattler-0.27.1-py311h66afae6_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pydantic-core-2.50.1-py314h9f07db2_0.conda - conda: https://prefix.dev/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda + - conda: https://prefix.dev/conda-forge/win-64/pywin32-312-py314hf700ef7_2.conda + - conda: https://prefix.dev/conda-forge/win-64/pywin32-ctypes-0.2.3-py314h86ab7b2_4.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://prefix.dev/conda-forge/win-64/qh3-1.9.4-py314h8a07082_0.conda - conda: https://prefix.dev/conda-forge/win-64/rattler-build-0.76.1-he94b42d_0.conda - conda: https://prefix.dev/conda-forge/win-64/rattler-index-0.31.5-h91801bb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/rpds-py-2026.9.1-py314h9f07db2_0.conda - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - conda: https://prefix.dev/conda-forge/win-64/vc-14.5-ha367084_41.conda - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - pypi: git+https://github.com/RoboStack/vinca.git?rev=3d552f4001634fd26376b2bf5fe37fe81ef3dc22#3d552f4001634fd26376b2bf5fe37fe81ef3dc22 - - pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/63/327d25d91af32209b394abe5626706c4b7ad5a4812cc464a4e3a2be6916f/rospkg-1.6.3-py3-none-any.whl @@ -400,20 +838,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3b/95/88ed47cb7da88569a78b7d6fb9420298df7e99997810c844a924d96d3c08/empy-3.3.4.tar.gz - pypi: https://files.pythonhosted.org/packages/3f/53/b5e80bac66d0db921ddbbe3c8d37198455c19302a29da1a434708c35c79d/catkin_pkg-1.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-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/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/f0/5792ff768a410f93ee3f84fc19345295ffc352d2c936b424cb37e514714c/markupsafe-3.0.4-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/40/791891d4c0c4dab4c5e187c17261cedc26285fd41541577f900470a45a4d/license_expression-30.4.4-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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.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/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.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 packages: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -432,6 +861,24 @@ packages: - _openmp_mutex >=4.5 size: 28948 timestamp: 1770939786096 +- conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.2.0-py314hcd2bdb6_4.conda + sha256: e9cc0891a0dc5c3fa8c71dd2224491b6658c069af7a49ce4443158730990b6fd + md5: d9aabceecc99b3b8b0eb7090c5776af4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 h39a168f_4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 367567 + timestamp: 1788480533506 - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda sha256: 1a0d382c515ebf55f8ee1f38c8b81bc95af5c2acc42ad53b66bc5df932032f96 md5: e675fabcf81499adc7edf58124fb1e01 @@ -460,6 +907,40 @@ packages: - c-ares >=1.34.8,<2.0a0 size: 228700 timestamp: 1787169971173 +- conda: https://prefix.dev/conda-forge/linux-64/cffi-2.1.1-py314h8d76f0c_3.conda + sha256: 15e38176fa2173e063a19dad3d55746ac4c757b028813380d7f22c42781af4c4 + md5: ee66d46f7693fdcbaa1761fb8a4f6c3d + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 307262 + timestamp: 1788485305536 +- conda: https://prefix.dev/conda-forge/linux-64/charset-normalizer-3.5.2-h1114479_0.conda + noarch: python + sha256: e4f04b45d68716fcc47c808aeacbf165f6f295fb91bd20b91aa38942b8d2cdc6 + md5: 78d5c6112c9320a1a797935cecfec7c2 + depends: + - python + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - _python_abi3_support 1.* + - cpython >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + run_exports: {} + size: 217200 + timestamp: 1790766086110 - conda: https://prefix.dev/conda-forge/linux-64/cmake-3.31.8-hc85cc9f_0.conda sha256: 10660ed21b9d591f8306028bd36212467b94f23bc2f78faec76524f6ee592613 md5: 057e16a12847eea846ecf99710d3591b @@ -482,6 +963,43 @@ packages: run_exports: {} size: 20991288 timestamp: 1757877168657 +- conda: https://prefix.dev/conda-forge/linux-64/cryptography-50.0.2-py311hc91d8b8_0.conda + noarch: python + sha256: d1956b37648b45d54e884d765223974fe6e26d4e7ea248cd08c625ba8cd823ab + md5: e9af843b1d7656fd6bdbe9aa69e95579 + depends: + - python + - cffi >=2.0 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - _python_abi3_support 1.* + - cpython >=3.11 + - openssl >=3.5.8,<4.0a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + purls: + - pkg:pypi/cryptography?source=compressed-mapping + run_exports: {} + size: 1830947 + timestamp: 1790790516832 +- conda: https://prefix.dev/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda + sha256: 87a0a42d4ccc527597eff3234509dfb03e0d9bf67d5e2b6fc758e2ef389d8abe + md5: a6eb37b51be1a9a654dc3a8aca039b1a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libexpat >=2.8.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - libglib >=2.88.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + run_exports: + weak: + - dbus >=1.16.2,<2.0a0 + size: 449564 + timestamp: 1788197922783 - conda: https://prefix.dev/conda-forge/linux-64/gh-2.102.0-hfc2019e_0.conda sha256: 7c7d9b68063b4a3588190fd82efba2c81a13d361250f4e09e57888ae2ea2cb6f md5: d933d1442248e72f2559c7dc6df70e30 @@ -515,6 +1033,23 @@ packages: - icu >=78.3,<79.0a0 size: 14459115 timestamp: 1786545741408 +- conda: https://prefix.dev/conda-forge/linux-64/jh2-5.0.15-py314h7e8cd81_0.conda + sha256: fc220db7307d31b810a9be9d8db9ae0920b5d3bb24ba18ab53b3b8032d55d118 + md5: a9cec6e4c04ca0e47af9646c4c155570 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jh2?source=compressed-mapping + run_exports: {} + size: 493396 + timestamp: 1790144357521 - conda: https://prefix.dev/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda sha256: dd053c96dcb0dcfd59422aefea9d2fe937a190167f34fba7893ec1e10a7e8963 md5: ba55d1b89fd7775e67de8291029b4059 @@ -547,6 +1082,22 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1394333 timestamp: 1786762112514 +- conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.19.1-h9073bf1_3.conda + sha256: 03e675b9adaf235aab880e4133c72f4830e87bc7da2df59d6194771612239b22 + md5: 596464faa06e0b656b35416188ef9bba + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 254292 + timestamp: 1789051947923 - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda sha256: 27d83f1188cd19bcb7754a078b3fa7f4cfb8527f8eb2fde54dd01fc529d1adec md5: 449500f2c089da11c40f5c21312e3e07 @@ -561,6 +1112,21 @@ packages: run_exports: {} size: 745303 timestamp: 1784214507189 +- conda: https://prefix.dev/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda + sha256: bf9fdebf55d8bc99d83531cdffda00703f4dc5f93a1a956768c147362c72feda + md5: fb9d356b1a57d6d54768be7ebd5fce09 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 271158 + timestamp: 1785036167977 - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda sha256: 483b7eb97f56fbb3a9cb7190d33012dfa0a5aaed99ede61465563cd97dd82504 md5: e617deee7af8eb0c04f6296d12b54157 @@ -582,6 +1148,20 @@ packages: - libcurl >=8.22.0,<9.0a0 size: 499651 timestamp: 1788340719230 +- conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda + sha256: 82e134c8a08b1eed9a2ed8ab578b89aa1730dcde3dea8dd87645ed0637878e54 + md5: 40f9b31aa9cf007789867df0decd0492 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 73710 + timestamp: 1785908694612 - conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda sha256: 6473eb8caf2aae830f37caa93db9b26dddf7ac84b63229e8bf7fc0e5c3ab95b0 md5: 50708d3b951d0f8e2d7f2df5b5edc040 @@ -640,6 +1220,31 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 68004 timestamp: 1787753412298 +- conda: https://prefix.dev/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + sha256: fb12ecb46c30d18d928c0e8fc346ab13b5f6fc8a9cacae4f2f4bb188782586f5 + md5: f8054e759d0ddddaf34a5c8fedc900a1 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8407 + timestamp: 1786641007099 +- conda: https://prefix.dev/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda + sha256: ec607dd5445dd17ff6bf8b7fe6832e5504c226dd91d3aaea7ba83569808b0ce4 + md5: b72a266a9317036fd0464cb98b027cd0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 387671 + timestamp: 1786641006460 - conda: https://prefix.dev/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda sha256: e031634c3a928f9594eba868bc46ef5230d6571a364a0c63215b06c4563bfcea md5: 735629b400b70eeab21a2ba8f5b1c2ce @@ -655,6 +1260,25 @@ packages: run_exports: {} size: 1058444 timestamp: 1790303109576 +- conda: https://prefix.dev/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda + sha256: 9e688e046550415c030c3d08ed9a3fd13a51d7bc56295283b858b6c3070bb9f8 + md5: c85e9539551f1fd21104e518d940c244 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libglib >=2.90.0,<3.0a0 + size: 4819130 + timestamp: 1789478025196 - conda: https://prefix.dev/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda sha256: 92a0bb350c7be6a4eedcb4e111c60aefd176018e6b1c009a6e025dbe9bbcd758 md5: d904c7ddd95e026254b4b80808ee9e12 @@ -681,6 +1305,21 @@ packages: - libiconv >=1.18,<2.0a0 size: 789471 timestamp: 1787033836207 +- conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda + sha256: bba8538e6538ed58a8479b332337b96986561f975d06cfa2039a016c2d246ee4 + md5: 898d1c9793eaa52efc4727bd84d2e39a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 650434 + timestamp: 1785896381946 - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 @@ -728,6 +1367,20 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 649974 timestamp: 1787177490105 +- conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.59-h922cc85_0.conda + sha256: c7381be8ef713501f6cd2f5ad473e401f2edeaec3c46788296b8dbf0de165e15 + md5: 8c9caf742a485ac688ffa88bbadbf0be + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 316872 + timestamp: 1790805159503 - conda: https://prefix.dev/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda sha256: 09e8effdc89bc5d021349318d32b85594f5b8d8e3ab8f90a85b81f8fe695a566 md5: 77be60417aa572afcb48cbe0f967401d @@ -801,6 +1454,27 @@ packages: run_exports: {} size: 6615436 timestamp: 1790303132935 +- conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda + sha256: 10e125da82ca93e09191e66e5a94d566b2cf8d4024e2a0db3a9114297447e0d9 + md5: 0907d876f460ebc941ae590338b6102f + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libstdcxx >=15 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 459753 + timestamp: 1787755584172 - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda sha256: f34b8d1de9a2bf62476d8608057d9b8a918d97444236dc53a47128f2fae79041 md5: 54a948337e66706380ff24d6b5fde63f @@ -829,6 +1503,39 @@ packages: - libuv >=1.52.1,<2.0a0 size: 420040 timestamp: 1785914567661 +- conda: https://prefix.dev/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + sha256: 8415001414f488c85b72b9d8cc2071dfb3981a47bc3c8eb56ef91a57d12eae7f + md5: 9332b53d0ea93c5d39e33be03a0c611a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 428430 + timestamp: 1785954557217 +- conda: https://prefix.dev/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda + sha256: 7b49e6fd2a584b7f072943e6adf4149677af5121246975278804782d37752837 + md5: 61f0ffba9161cbb3a77722869b21e4bb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 395120 + timestamp: 1787885788278 - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 md5: 0de0122d9570a8ab637c6b73db268389 @@ -857,6 +1564,24 @@ packages: - ncurses >=6.6,<7.0a0 size: 911196 timestamp: 1786355078102 +- conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.4-heb1ab33_2.conda + sha256: 131688a88bea8da92fe418c4558c5073435e2848911bc4c836c3a9dd5994b4aa + md5: a3f3ac7a68d01c198e276dbb99e62032 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libtiff >=4.7.2,<4.8.0a0 + - libzlib >=1.3.2,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 391242 + timestamp: 1788425045145 - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda sha256: 9c1533f1cf784f0e250919c0c9762d0b0e6bc727a79290ffb7cea1ceca1d038c md5: 5a51a2ea653f120240b1a9bf76e0aae9 @@ -885,6 +1610,99 @@ packages: run_exports: {} size: 152126 timestamp: 1790866799280 +- conda: https://prefix.dev/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + sha256: 9ebb10a4eb3be51ae67d85c679f5a7a50cb040ed25c783e6331a225ea09991d4 + md5: 06f6113cf1ff4a54b65f87ead132a5f1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 1218833 + timestamp: 1787294571916 +- conda: https://prefix.dev/conda-forge/linux-64/pillow-12.3.0-py314h50bfbbb_4.conda + sha256: d662d735be70bea19172bb9fc8eade16ec88a82459ee9c9497788bd0d52c468e + md5: 2180323126daa9971a80cc679cf12f46 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libwebp-base >=1.6.0,<2.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - python_abi 3.14.* *_cp314 + - lcms2 >=2.19.1,<3.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - libxcb >=1.17.0,<2.0a0 + - tk >=8.6.13,<8.7.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + run_exports: {} + size: 1104065 + timestamp: 1789122647267 +- conda: https://prefix.dev/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + sha256: 4a44fd00ea73b79ca2c89b0727b9ccf61c506ead71e67a9abfa4c590042b5a4a + md5: bb66b610707b811e3c65181a6431e7a8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 9630 + timestamp: 1788381877753 +- conda: https://prefix.dev/conda-forge/linux-64/py-rattler-0.27.1-py311hc91d8b8_0.conda + noarch: python + sha256: 09317610a3890ec2c20656796dddadcc4cd0ccfd8505a9a680c6f321cfe8e351 + md5: 2df095938c42939a1eaeb6a09d8165bb + depends: + - python + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - openssl >=3.5.9,<4.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + constrains: + - __glibc >=2.17 + extra_depends: + networkx: + - networkx + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/py-rattler?source=hash-mapping + run_exports: {} + size: 14910705 + timestamp: 1791293341801 +- conda: https://prefix.dev/conda-forge/linux-64/pydantic-core-2.50.1-py314h7e8cd81_0.conda + sha256: 384f6e54bc5bbb402036ed9d950169d62251a5004631943c2bfc07f62bcefd81 + md5: 53d0b2617f490f2eff996b94fbbd6443 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + run_exports: {} + size: 1985108 + timestamp: 1791753924034 - conda: https://prefix.dev/conda-forge/linux-64/python-3.14.7-hcd007b5_106_cp314.conda build_number: 106 sha256: 4cd05407d6b07d00fd5b6cc78bd2f60ae5e21f777eb26ead82be2e3751c610a1 @@ -935,6 +1753,24 @@ packages: run_exports: {} size: 202391 timestamp: 1770223462836 +- conda: https://prefix.dev/conda-forge/linux-64/qh3-1.9.4-py314haf003cf_0.conda + sha256: cc10452bfcd768a8df5193c85af501d2c4698c54c6cb2569d39a22ab7b1d1d47 + md5: c44cf26b641fae8dde45a8644510b6dc + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qh3?source=hash-mapping + run_exports: {} + size: 2194668 + timestamp: 1784169677703 - conda: https://prefix.dev/conda-forge/linux-64/rattler-build-0.76.1-hf01adef_0.conda sha256: d9476ee6237db525d4f2bb49e67f4e68719644a6adb754994118192e8d3cc920 md5: a721700e8181fb5e4c1b371987f7c0eb @@ -997,6 +1833,23 @@ packages: - rhash >=1.4.6,<2.0a0 size: 194994 timestamp: 1786731436520 +- conda: https://prefix.dev/conda-forge/linux-64/rpds-py-2026.9.1-py314h7e8cd81_0.conda + sha256: 831c47efcbbd77e60462a41ee610b553d38bb7b3830a17f09472836c6a7cc0d4 + md5: 2bf437da5f8d248f328f28efb27f297f + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 302823 + timestamp: 1791202484532 - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda build_number: 104 sha256: a1a241d172c1ccab067ba245206dd048bc3c2d1b84504b53c9468e99adfc16a1 @@ -1014,6 +1867,34 @@ packages: - tk >=8.6.13,<8.7.0a0 size: 3566806 timestamp: 1787272857910 +- conda: https://prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + sha256: 3ec065b94554dc48a4ca582a960a5484bc166b26e83ce0954653e08d17e8bd53 + md5: da33efee1a93603d92e06d4a2b68def6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 18793 + timestamp: 1788960512381 +- conda: https://prefix.dev/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda + sha256: 8a095df9bc1d2e50f2504ce8858a047ae29ea634aad6cc0b43298c63361da6d9 + md5: eabfc45786244de252090cf8d55128a8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 22606 + timestamp: 1789676943335 - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda sha256: d164dfa75ecd538f6fd68765defcc06aa875bc697b9b215362d79a2a73125dd0 md5: e741576fb8f89821ac7c1c537322a33d @@ -1028,6 +1909,21 @@ packages: - yaml >=0.2.5,<0.3.0a0 size: 84936 timestamp: 1787228426393 +- conda: https://prefix.dev/conda-forge/linux-64/zlib-ng-2.3.3-hce19668_1.conda + sha256: 8b786bb4380fa69a718b08a400040b865bc9207eda337e0a1955717c3c3a9403 + md5: 1726acec19beeed1c764385cd8622405 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 123959 + timestamp: 1786736890973 - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda sha256: 47d682b9f6d6ec9eb1a6e6c3e75ea6273e899e78fb7fc59f81d39745009fbc60 md5: aa459086047c0e5e27023ab19f8cb86a @@ -1058,14 +1954,31 @@ packages: - _openmp_mutex >=4.5 size: 28926 timestamp: 1770939656741 -- conda: https://prefix.dev/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_10.conda - sha256: 24eacc8a20fd7c4616566178562bef7f9344eb4a8700cfc3180fa75a6ff9d39f - md5: fd544ef1c672d645bf78e5819cbb8f91 +- conda: https://prefix.dev/conda-forge/linux-aarch64/brotli-python-1.2.0-py314hd574b5f_4.conda + sha256: 4f9bde7ae13d9ea2c8de5785d41f1dba971415436c7f03bb80dc4a5cde21a068 + md5: a5a3243f32602f80ecd044e3b7088344 depends: - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - purls: [] + - libgcc >=15 + - libstdcxx >=15 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 h384ecca_4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 365961 + timestamp: 1788480448998 +- conda: https://prefix.dev/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_10.conda + sha256: 24eacc8a20fd7c4616566178562bef7f9344eb4a8700cfc3180fa75a6ff9d39f + md5: fd544ef1c672d645bf78e5819cbb8f91 + depends: + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] run_exports: weak: - bzip2 >=1.0.8,<2.0a0 @@ -1084,6 +1997,22 @@ packages: - c-ares >=1.34.8,<2.0a0 size: 241210 timestamp: 1787169968125 +- conda: https://prefix.dev/conda-forge/linux-aarch64/cffi-2.1.1-py314h65cb5ac_3.conda + sha256: cc2a7c807182bd18e07a6e255c98dc8a8feec2310ad2e801d296adebb8f2d9ea + md5: 30b36a0c4239d65f98209664afb3485b + depends: + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 329121 + timestamp: 1788485263944 - conda: https://prefix.dev/conda-forge/linux-aarch64/cmake-3.31.8-hc9d863e_0.conda sha256: 91cbfd13132b7253a6ef001292f5cf59deac38d2cbc86d6c1ad6ebf344cd998c md5: 855e698fd08794a573cd6104be8da4d0 @@ -1105,6 +2034,41 @@ packages: run_exports: {} size: 20216587 timestamp: 1757877248575 +- conda: https://prefix.dev/conda-forge/linux-aarch64/cryptography-50.0.2-py311h9269228_0.conda + noarch: python + sha256: 3636b61361abb09454348da5c32e6e3bbe62248547cd4255ce471469d671883a + md5: 98a1febddc9e9d0fae8341302bde57a2 + depends: + - python + - cffi >=2.0 + - libgcc >=15 + - _python_abi3_support 1.* + - cpython >=3.11 + - openssl >=3.5.8,<4.0a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + purls: + - pkg:pypi/cryptography?source=compressed-mapping + run_exports: {} + size: 1795185 + timestamp: 1790790512228 +- conda: https://prefix.dev/conda-forge/linux-aarch64/dbus-1.16.2-h71d469a_2.conda + sha256: d35726cb8b091a239c96d631bdf4286455393e3274266f7102109a68c69c12f9 + md5: 2d4de8dd159984989d47c03fb5543a9f + depends: + - libstdcxx >=15 + - libgcc >=15 + - libexpat >=2.8.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - libglib >=2.88.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + run_exports: + weak: + - dbus >=1.16.2,<2.0a0 + size: 482209 + timestamp: 1788197942246 - conda: https://prefix.dev/conda-forge/linux-aarch64/gh-2.102.0-h22914b5_0.conda sha256: df3d569bf607a455acd22f84c10685b308f8d232e941ce732f83ddbeac2d1159 md5: a81254c263bec3c65036831215c361c3 @@ -1137,6 +2101,22 @@ packages: - icu >=78.3,<79.0a0 size: 14688525 timestamp: 1786545779464 +- conda: https://prefix.dev/conda-forge/linux-aarch64/jh2-5.0.15-py314h231d840_0.conda + sha256: b094581f798e6f4a81b599c9343313a4b3631fdfb4af02e8d77c2afe891678b6 + md5: 9f607469ce833dca0cffa1e9caa2220b + depends: + - python + - libgcc >=15 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jh2?source=compressed-mapping + run_exports: {} + size: 491399 + timestamp: 1790144346901 - conda: https://prefix.dev/conda-forge/linux-aarch64/keyutils-1.6.3-h5bc82ec_1.conda sha256: 3999b1472f1e549a0b766428e2823abf20626aac5314b474c9b76bf6eb679def md5: 6d9be306ecb8dfc9ff46f02cb367d5c2 @@ -1167,6 +2147,21 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1538590 timestamp: 1786762058856 +- conda: https://prefix.dev/conda-forge/linux-aarch64/lcms2-2.19.1-h137c43b_3.conda + sha256: 1f9f5f1e9a2c0e83dae98b02c32b9b0363c9786cda2ef9aefd37139fa8aef5f0 + md5: 0f79b6b1426395c3063a2729a41f3d0b + depends: + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 302445 + timestamp: 1789052119126 - conda: https://prefix.dev/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda sha256: 2c4901f4227b0850328ed0c69f958b30ad2cd18982f7a31c7c1f911827004d08 md5: 489444d0acb2a579d2a002d85a08c059 @@ -1180,6 +2175,20 @@ packages: run_exports: {} size: 905305 timestamp: 1784214534868 +- conda: https://prefix.dev/conda-forge/linux-aarch64/lerc-4.2.0-h52b7260_0.conda + sha256: 0176a71d64fcb5aec43c9e8ab4ae72faa6c6b0b1cda8f40b65e19429ce13c84d + md5: 9fcfe6be4f752b72be7abc69842ca396 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 244850 + timestamp: 1785038308130 - conda: https://prefix.dev/conda-forge/linux-aarch64/libcurl-8.22.0-h86273da_0.conda sha256: 8634a43ca7161d49b94098d8d27f32040ccf19b5227b37d05826ec8b5729b3c4 md5: d79a5b16c3aaff5269f9118aa1d9f1ba @@ -1200,6 +2209,19 @@ packages: - libcurl >=8.22.0,<9.0a0 size: 524318 timestamp: 1788340661060 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libdeflate-1.25-hfa851ae_1.conda + sha256: 4cb3da1d4ce7540604219d2a016253777da66c1a710c41557bc708aae7f54a75 + md5: 8cdf7f7e4908c9b2cf50c58966f2ff64 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 71628 + timestamp: 1785908730449 - conda: https://prefix.dev/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321hc48eb74_1.conda sha256: 2d7218da06f1121619335bff25a2669df810dee90d2eb65b17f8b2e6b1c0d372 md5: 6e06eb2c9fda76721699bcdd759b9c60 @@ -1254,6 +2276,30 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 63137 timestamp: 1787753382033 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_2.conda + sha256: 1e6ba895a397ee4fc1646f21000903ad13d93e9e6d9a7fb4dcef1baa837970bf + md5: 9d7e520ae06d08185ef2d500ff116d30 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8409 + timestamp: 1786640943558 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libfreetype6-2.14.3-h9cc7050_2.conda + sha256: d29eac57042f2362d4e45c63a4a78d64a30e5284b1da29b99e0c1526671dd4c3 + md5: f7ee9de31f98281a3e451e496fbee3b5 + depends: + - libgcc >=15 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 445035 + timestamp: 1786640942903 - conda: https://prefix.dev/conda-forge/linux-aarch64/libgcc-16.2.0-h205dda4_7.conda sha256: eae7a3449d5a3b5351c5427137c076cc3fc826645c7bfc42dc10772b783826f1 md5: 489d5c9dc62265b3f6a57f9a106f1caf @@ -1268,6 +2314,24 @@ packages: run_exports: {} size: 627793 timestamp: 1790302345214 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libglib-2.90.1-h3584fe5_0.conda + sha256: d47ad408d845e32fc6692961f2e1c8e4ce72c86a0769cba340a8b02af638b7e0 + md5: c6c4abdcc2d525b5989c88f55f01ef5d + depends: + - libgcc >=15 + - libffi >=3.7.0,<3.8.0a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libglib >=2.90.1,<3.0a0 + size: 4927714 + timestamp: 1791383970778 - conda: https://prefix.dev/conda-forge/linux-aarch64/libgomp-16.2.0-h8acb6b2_7.conda sha256: 4406fd67c5beeb99b9372f9bf07aa3e40ca141e337eceebac3ff64aa72799494 md5: 259ded79ac497cfbcf5434540e8b81b6 @@ -1291,6 +2355,20 @@ packages: - libiconv >=1.18,<2.0a0 size: 785924 timestamp: 1787033793216 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_1.conda + sha256: c5626ea672be2e59784f9be20dc8ceb7961b8ab0053651ded2dffec64e4b8245 + md5: 8730e25aa7eab80ca86dfb9a6bedf1ba + depends: + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 716519 + timestamp: 1785896318334 - conda: https://prefix.dev/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_1.conda sha256: f760669fd1cea27f689f411c0d5488e26ce50e382c9b63e4ad348f959850124a md5: e0e6411a60d00186eec7c73f4118ab67 @@ -1335,6 +2413,19 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 734829 timestamp: 1787177407983 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libpng-1.6.59-hf9b7768_0.conda + sha256: 11a8f519c148e9ce968b78ee718965a1166af135321e1803941ee6f92bd5862c + md5: 233277975364a1c4c79ca15daaa0f49f + depends: + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 333207 + timestamp: 1790805159124 - conda: https://prefix.dev/conda-forge/linux-aarch64/libpsl-0.23.1-hb8431ed_1.conda sha256: 757f79c182ac3080cf416acd91c7643b8074b8b2e5c1eba0ffc5a16897feb84b md5: 5ab41e5e70b78eb00ef62cdaa35cd86f @@ -1403,6 +2494,26 @@ packages: run_exports: {} size: 6236630 timestamp: 1790302364054 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libtiff-4.7.2-h45f9f85_1.conda + sha256: fa6daf2301dee912def3e74344fae792a8fc2bbbf7880dedee0e93ee8fb98fc5 + md5: c6f35f8f9695623b9055341bc280a642 + depends: + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libstdcxx >=15 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 529726 + timestamp: 1787755625893 - conda: https://prefix.dev/conda-forge/linux-aarch64/libuuid-2.42.4-hd6fdeab_0.conda sha256: 4d94770cc7c47eb4a0d7b92f16d7a450506d1a82406d63c987d6208ab2fb8a16 md5: 9d63e86dc027166aaaeb0c99a0a90fd7 @@ -1429,6 +2540,37 @@ packages: - libuv >=1.52.1,<2.0a0 size: 457209 timestamp: 1785914582944 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_1.conda + sha256: 4c64e6843d64876d054a28ecbab70abdf145da3c2cbdaa4a43db26cdf0fd760b + md5: 548943c39851543734ce0d20eeb469b0 + depends: + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 357551 + timestamp: 1785956962809 +- conda: https://prefix.dev/conda-forge/linux-aarch64/libxcb-1.17.0-h3f04742_2.conda + sha256: bb1d9aaa885de73c504bd887e1841ad8e9d5b8432bd370b02eaf33067a001dc3 + md5: fa9fad28d04af5225221613038388d95 + depends: + - libgcc >=15 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 401562 + timestamp: 1787885741304 - conda: https://prefix.dev/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_3.conda sha256: 76efa6cc9d7e6f5ee3bbca0939f64054af2bdfb3c3632531f8e633cf6c2ea41e md5: bd534c2fbe56d8c2ea3b2d8f5e12bca8 @@ -1454,6 +2596,23 @@ packages: - ncurses >=6.6,<7.0a0 size: 955422 timestamp: 1786355019431 +- conda: https://prefix.dev/conda-forge/linux-aarch64/openjpeg-2.5.4-h504851f_2.conda + sha256: d07b190935acda11419bef754a96c2fcdc0171df8c5a34ce81c7883dc195b115 + md5: 0aa78cf1350df254c6b19bee89d6ce2b + depends: + - libgcc >=15 + - libstdcxx >=15 + - libtiff >=4.7.2,<4.8.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 450421 + timestamp: 1788425080615 - conda: https://prefix.dev/conda-forge/linux-aarch64/openssl-3.6.5-he6ad1d5_0.conda sha256: 238136f1df197ecd89bafd728a34d0642176f3170423d13d8276746d675a9485 md5: 92aec5ec417d2ce9ae109e6c5ad377ff @@ -1480,6 +2639,94 @@ packages: run_exports: {} size: 155583 timestamp: 1790866789930 +- conda: https://prefix.dev/conda-forge/linux-aarch64/pcre2-10.47-he574923_1.conda + sha256: 16e5bee11686028d60a495004f99a10c613ada44cc27e330bee18a1b67fb184c + md5: c98763518d0a4c9895e515190afb7dec + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 1199286 + timestamp: 1787294520352 +- conda: https://prefix.dev/conda-forge/linux-aarch64/pillow-12.3.0-py314h3cc5072_4.conda + sha256: 0d62432fac9dce15cd176cf5a51a08271495134f97921f81d5308475a20f7877 + md5: 34f8393b896d9987fbfc32fff2236164 + depends: + - python + - libgcc >=15 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - python_abi 3.14.* *_cp314 + - tk >=8.6.13,<8.7.0a0 + - lcms2 >=2.19.1,<3.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - openjpeg >=2.5.4,<3.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + run_exports: {} + size: 1059761 + timestamp: 1789122640466 +- conda: https://prefix.dev/conda-forge/linux-aarch64/pthread-stubs-0.4-h5bc82ec_1004.conda + sha256: c66ea2c8f64b815b24344340a8a9d62152359dbf48a6151b1f282fdf35204d83 + md5: ac6610f5c63c18f5a3df229aa5f7ba37 + depends: + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 9592 + timestamp: 1788383332468 +- conda: https://prefix.dev/conda-forge/linux-aarch64/py-rattler-0.27.1-py311h40f29f8_0.conda + noarch: python + sha256: 018c28979947d128735915f1803baf47de21c3cf8ee29706f4ed610e3bbb6c24 + md5: c0a2d05971ac59235880ecaea28f87a0 + depends: + - python + - libgcc >=15 + - _python_abi3_support 1.* + - cpython >=3.11 + - openssl >=3.5.9,<4.0a0 + constrains: + - __glibc >=2.17 + extra_depends: + networkx: + - networkx + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/py-rattler?source=hash-mapping + run_exports: {} + size: 14608764 + timestamp: 1791293344675 +- conda: https://prefix.dev/conda-forge/linux-aarch64/pydantic-core-2.50.1-py314h231d840_0.conda + sha256: dff9ccb73c286bfa8bcb1e33205d82894bdf7be70a124a068ac85693f7e6eec5 + md5: 3fc20ac80c813daaf0beddb6b94ccdb0 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - libgcc >=15 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + run_exports: {} + size: 1863005 + timestamp: 1791753922258 - conda: https://prefix.dev/conda-forge/linux-aarch64/python-3.14.7-hbec3b18_106_cp314.conda build_number: 106 sha256: 39af053b358d0a6d53549c8cb7fa33b03da4f8a39e966e12a84d1235bdc7023f @@ -1529,6 +2776,23 @@ packages: run_exports: {} size: 195678 timestamp: 1770223441816 +- conda: https://prefix.dev/conda-forge/linux-aarch64/qh3-1.9.4-py314hf779a1a_0.conda + sha256: c220d58a584ad0aebbf611a9b9e5f83ed54b1fc87d8585db3e235050b87aa12a + md5: be2611f33c763d8ff7afaab0beed0d2f + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qh3?source=hash-mapping + run_exports: {} + size: 2101033 + timestamp: 1784169679580 - conda: https://prefix.dev/conda-forge/linux-aarch64/rattler-build-0.76.1-hc342849_0.conda sha256: 45a7837ba1b33d2b8ab4f66cf396a985b9d49e25a8f221bdc5e4452a0059abf8 md5: 2b315913f52f71b0b0cafe30c1c5c2df @@ -1587,6 +2851,22 @@ packages: - rhash >=1.4.6,<2.0a0 size: 211434 timestamp: 1786731457243 +- conda: https://prefix.dev/conda-forge/linux-aarch64/rpds-py-2026.9.1-py314h231d840_0.conda + sha256: 00e7cf5897d3e9b4f500f371a1addb2d31850296c232218f9c0386ca5a2b6c88 + md5: a455ff00559c2d980cb20b8013141015 + depends: + - python + - libgcc >=15 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 297482 + timestamp: 1791202301155 - conda: https://prefix.dev/conda-forge/linux-aarch64/tk-8.6.13-noxft_hf03c496_4.conda build_number: 104 sha256: a1aa0d0f0b3d539644ff992e6dd0facf950c79df58fc37590ce5be84ff5e3f22 @@ -1603,6 +2883,32 @@ packages: - tk >=8.6.13,<8.7.0a0 size: 3664220 timestamp: 1787272859143 +- conda: https://prefix.dev/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h5bc82ec_2.conda + sha256: 6b22ffc0137003b41d44db995a3536737e2a2c854c8ed55c8a4eb6377d502abf + md5: 2f53d3d55e1d8855a89218d7afe19d07 + depends: + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 19649 + timestamp: 1788962171600 +- conda: https://prefix.dev/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h5bc82ec_2.conda + sha256: db2b37227a888d23269855409a9b2179e493c59f2ec9ee2071bf3fd198767ffd + md5: bfd0b70add0a8cff1ee035532b0deaa5 + depends: + - libgcc >=15 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 23110 + timestamp: 1789678433513 - conda: https://prefix.dev/conda-forge/linux-aarch64/yaml-0.2.5-h29ee22c_3.conda sha256: 97e0fbe447c8f8bb1789047f37448062ebecda29bd264fcdf6129b8d08f174c9 md5: 6c97c1f44a81be1b4d5ba15a06153256 @@ -1616,6 +2922,20 @@ packages: - yaml >=0.2.5,<0.3.0a0 size: 88597 timestamp: 1787228457350 +- conda: https://prefix.dev/conda-forge/linux-aarch64/zlib-ng-2.3.3-h1024f78_1.conda + sha256: a37f07056ac10c7e901cb54241e67af93205c25b84566ad1bce3b19a8088fd69 + md5: 09f81cb51dfb56946193f30225976b70 + depends: + - libgcc >=15 + - libstdcxx >=15 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 125444 + timestamp: 1786736924421 - conda: https://prefix.dev/conda-forge/linux-aarch64/zstd-1.5.7-h9d15635_7.conda sha256: 427fd14bcb3b8659796fecc682716617409350fb5a98e5b7b47558a10d1a2fc7 md5: d942e34ac3920ba83f8b2d0169570187 @@ -1629,50 +2949,456 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 615477 timestamp: 1786599613561 -- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda - sha256: 95e8e74062a5fe5f870ac8c90302b6e89945165fdaed7810606e84ddee6aac12 - md5: e27d2ac27b096dc51fedfcf775a53f9b - depends: - - __win - license: ISC - purls: [] - run_exports: {} - size: 132136 - timestamp: 1784754918886 -- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - sha256: 0a0544cf95f64394fe4959286f5c71f5444ad58feb0602e53becb27448d24da6 - md5: 0f51e2391ade309db462a55611263e9c +- conda: https://prefix.dev/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + sha256: 2a7204314663eeda5dec482a956f0e2eaf289bd5b9953eaaaad0e81aa64638f2 + md5: 3845f3d75991bae0fb90884662f4327c depends: - - __unix - license: ISC + - cpython + - python-gil + license: MIT + license_family: MIT purls: [] run_exports: {} - size: 131780 - timestamp: 1784754889428 -- conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 - md5: 962b9857ee8e7018c22f2776ffa0b2d7 - depends: - - python >=3.9 + size: 8144 + timestamp: 1784221492234 +- conda: https://prefix.dev/conda-forge/noarch/anaconda-auth-0.15.3-pyhd8ed1ab_0.conda + sha256: 716c49bff4925a99e1026cc2a4c9119557b10c0de4cf218a985368f5b1c172d0 + md5: ab4f25feabb575beca1f40e7f6a0f1be + depends: + - anaconda-cli-base >=0.8.1 + - cryptography >=3.4.0 + - httpx + - keyring + - pkce + - pydantic + - pyjwt + - python >=3.11 + - python-dotenv + - requests + - semver <4 + constrains: + - anaconda-cloud-auth >=0.8 + - conda >=23.9.0 + - conda-token >=0.7.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/colorama?source=hash-mapping + - pkg:pypi/anaconda-auth?source=compressed-mapping run_exports: {} - size: 27011 - timestamp: 1733218222191 -- conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 - md5: 8e662bd460bda79b1ea39194e3c4c9ab + size: 54857 + timestamp: 1789060090642 +- conda: https://prefix.dev/conda-forge/noarch/anaconda-cli-base-0.9.1-pyhc364b38_0.conda + sha256: c84ed0d698b077056c501b18650831d854b82342f5759e64026bf3b1c7618dc9 + md5: 25648dad301813ab2a823d4d2bf1585f depends: - python >=3.10 - - typing_extensions >=4.6.0 - license: MIT and PSF-2.0 + - click + - readchar + - rich + - typer >=0.17 + - pydantic >=2.12 + - pydantic-settings >=2.3 + - tomli + - packaging >=23.0 + - tomlkit + - python + constrains: + - anaconda-auth >=0.12.0 + - anaconda-client >=1.13.0 + - anaconda-cloud-cli >=0.3.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/anaconda-cli-base?source=hash-mapping + run_exports: {} + size: 37069 + timestamp: 1792090747754 +- conda: https://prefix.dev/conda-forge/noarch/anaconda-client-1.14.1-pyhcf101f3_0.conda + sha256: 15f36a27ba72fcce0cc19023d55c2bc23cfa78940622df8e0d8d75c6c14b671a + md5: 69a7f22cff99ab4b87aa2c5b729b00f8 + depends: + - anaconda-cli-base >=0.7.0 + - anaconda-auth >=0.12.3 + - conda-package-handling >=1.7.3 + - conda-package-streaming >=0.9.0 + - defusedxml >=0.7.1 + - nbformat >=4.4.0 + - platformdirs >=3.10.0,<5.0 + - python >=3.10 + - python-dateutil >=2.6.1 + - pytz >=2021.3 + - pyyaml >=3.12 + - requests >=2.20.0 + - requests-toolbelt >=0.9.1 + - setuptools >=58.0.4 + - tqdm >=4.56.0 + - urllib3 >=1.26.4 + - pillow >=8.2 + - packaging + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/anaconda-client?source=hash-mapping + run_exports: {} + size: 82696 + timestamp: 1770211941226 +- conda: https://prefix.dev/conda-forge/noarch/annotated-doc-0.0.5-pyhcf101f3_0.conda + sha256: a0a320c709fded9b5178108dedebf81a1f5a5d9c7720e3af50c1ab058dadd296 + md5: d68ec17cb915cab4642357417ec0a104 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-doc?source=hash-mapping + run_exports: {} + size: 16785 + timestamp: 1785335690199 +- conda: https://prefix.dev/conda-forge/noarch/annotated-types-0.8.0-pyhd8ed1ab_0.conda + sha256: b8fcb994134d3918d1c64a9d62f4168ff85d5bfb89e698102fe4ed679fe0df24 + md5: 108c928d2a8551832dbc762b535e90bb + depends: + - python >=3.10 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-types?source=hash-mapping + run_exports: {} + size: 19461 + timestamp: 1784935220549 +- conda: https://prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda + sha256: fc25a84c9c1ad4b48c136ad2363100e8b0faa3b0ab8985e61c9c8fa0b3431945 + md5: 33cdc5ba7c481b371f08f88e6c048c55 + depends: + - idna >=2.8 + - python >=3.11 + - typing_extensions >=4.16.0 + - python + constrains: + - trio >=0.32.0 + - uvloop >=0.22.1 + - winloop >=0.2.3 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + run_exports: {} + size: 175600 + timestamp: 1788612816954 +- conda: https://prefix.dev/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 + run_exports: {} + size: 64927 + timestamp: 1773935801332 +- conda: https://prefix.dev/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + sha256: e1c3dc8b5aa6e12145423fed262b4754d70fec601339896b9ccf483178f690a6 + md5: 767d508c1a67e02ae8f50e44cacfadb2 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 7069 + timestamp: 1733218168786 +- conda: https://prefix.dev/conda-forge/noarch/backports.tarfile-1.2.0-pyhcf101f3_2.conda + sha256: 25abdb37e186f0d6ac3b774a63c81c5bc4bf554b5096b51343fa5e7c381193b1 + md5: bea46844deb274b2cc2a3a941745fa73 + depends: + - python >=3.10 + - backports + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + run_exports: {} + size: 35739 + timestamp: 1767290467820 +- conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.8.0-py314h680f03e_0.conda + noarch: generic + sha256: 8567ada5e3db2edf644ea87fdd2e8bedbadb8989c4daac53a15b0ebfcb9ebd1a + md5: 5d5df669855f081b1c05f547f77925c6 + depends: + - python >=3.14 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=compressed-mapping + run_exports: {} + size: 7550 + timestamp: 1791654819263 +- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda + sha256: 95e8e74062a5fe5f870ac8c90302b6e89945165fdaed7810606e84ddee6aac12 + md5: e27d2ac27b096dc51fedfcf775a53f9b + depends: + - __win + license: ISC + purls: [] + run_exports: {} + size: 132136 + timestamp: 1784754918886 +- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + sha256: 0a0544cf95f64394fe4959286f5c71f5444ad58feb0602e53becb27448d24da6 + md5: 0f51e2391ade309db462a55611263e9c + depends: + - __unix + license: ISC + purls: [] + run_exports: {} + size: 131780 + timestamp: 1784754889428 +- conda: https://prefix.dev/conda-forge/noarch/certifi-2026.7.22-pyhd8ed1ab_0.conda + sha256: fb167de4388e64e52aa3907ed099afab944c1fa6e5f74b281a312dae1bcf7f3b + md5: 37e13edbe3b48f1095a9d085ef9cd83b + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + run_exports: {} + size: 137015 + timestamp: 1784717699092 +- conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.5.1-pyhd8ed1ab_0.conda + sha256: cb60ef3e0631c8bacb4f7057196dee4496091a22baa3bb4b9bccb12c7e1c921b + md5: e0ac3accc64e23e40969d660e5f58ac8 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + run_exports: {} + size: 64487 + timestamp: 1786835648298 +- conda: https://prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda + sha256: 9afb0c2c089330321a219c7ee5a25313bd574d4024be606cbb33e7a5735df662 + md5: dea5b13a211bbf99876deb980b408a66 + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=compressed-mapping + run_exports: {} + size: 112341 + timestamp: 1788802215348 +- conda: https://prefix.dev/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 + run_exports: {} + size: 27011 + timestamp: 1733218222191 +- conda: https://prefix.dev/conda-forge/noarch/conda-package-handling-2.6.0-pyh5ded981_0.conda + sha256: 34b3c276e8426d851c62b905014ef4c05cfcc090f052d7ec4da1dda53e10bc57 + md5: 412f13a9700d4455dfca5c5e23be9404 + depends: + - python >=3.11 + - conda-package-streaming >=0.13.0 + - backports.zstd >=1.1.0 + - requests + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda-package-handling?source=hash-mapping + run_exports: {} + size: 257896 + timestamp: 1788438543851 +- conda: https://prefix.dev/conda-forge/noarch/conda-package-streaming-0.13.0-pyhd8ed1ab_0.conda + sha256: af3b666ea6043a146901cd151d6201126bbe19af8307b58fb175015e3710064c + md5: b4e3dcace82b486f69bc693f30120205 + depends: + - backports.zstd + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/conda-package-streaming?source=hash-mapping + run_exports: {} + size: 23954 + timestamp: 1781293054998 +- conda: https://prefix.dev/conda-forge/noarch/cpython-3.14.8-py314hd8ed1ab_102.conda + noarch: generic + sha256: bf062db3f461ebb91b77ab4cea6841049dbe9d13c513a9ca2a101fa8ddea76a2 + md5: 54ecbe8d03ac833af969b3543bf116ef + depends: + - python >=3.14,<3.15.0a0 + - python_abi * *_cp314 + license: Python-2.0 + purls: [] + run_exports: {} + size: 51745 + timestamp: 1791826571351 +- conda: https://prefix.dev/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 + run_exports: {} + size: 24062 + timestamp: 1615232388757 +- conda: https://prefix.dev/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 run_exports: {} size: 21333 timestamp: 1763918099466 +- conda: https://prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb + md5: b8993c19b0c32a2f7b66cbb58ca27069 + depends: + - python >=3.10 + - typing_extensions + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + run_exports: {} + size: 39069 + timestamp: 1767729720872 +- conda: https://prefix.dev/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda + sha256: 307dd6ec90140c3cf4171071b0e5e870abec314f4565c1edd5bc433e942cdcc0 + md5: e652ac7756069c456d0da2a922cd7df5 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.2,<5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + run_exports: {} + size: 100789 + timestamp: 1785796355216 +- conda: https://prefix.dev/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + sha256: fdcea5d7cb314485d3907192ef024c704311548c5b0cbeb390cd1951051e29d2 + md5: b395909221b9bd1df066e5930e18855b + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + run_exports: {} + size: 32884 + timestamp: 1782283986153 +- conda: https://prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb + depends: + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 + - certifi + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + run_exports: {} + size: 49483 + timestamp: 1745602916758 +- conda: https://prefix.dev/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + run_exports: {} + size: 63082 + timestamp: 1733663449209 +- conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 17397 + timestamp: 1737618427549 +- conda: https://prefix.dev/conda-forge/noarch/idna-3.20-pyh5ded981_0.conda + sha256: e044b1ec829e2e24f971fa3f3408eb26f1db836e521a58f08b0fd9a03fee47be + md5: ee73be987f9de9ea5c2fdaeefa7b6491 + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=compressed-mapping + run_exports: {} + size: 178572 + timestamp: 1790020377150 +- conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + sha256: 95a074a7d3f58b3494c068d4789c364dcb591c56b70ca6b12f149a540f9aeea4 + md5: 77ec68e0aa61c3fff9ecbf840f93d64e + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=compressed-mapping + run_exports: {} + size: 34920 + timestamp: 1787943971257 +- conda: https://prefix.dev/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + depends: + - python >=3.10 + - zipp >=3.1.0 + constrains: + - importlib-resources >=7.1.0,<7.1.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + run_exports: {} + size: 34809 + timestamp: 1776068839274 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 md5: 9614359868482abba1bd15ce465e3c42 @@ -1685,6 +3411,185 @@ packages: run_exports: {} size: 13387 timestamp: 1760831448842 +- conda: https://prefix.dev/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + sha256: 3cc991f0f09dfd00d2626e745ba68da03e4f1dcbb7b36dd20f7a7373643cd5d5 + md5: d59568bad316413c89831456e691de29 + depends: + - python >=3.10 + - more-itertools + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + run_exports: {} + size: 14831 + timestamp: 1767294269456 +- conda: https://prefix.dev/conda-forge/noarch/jaraco.context-6.1.2-pyhcf101f3_0.conda + sha256: 108b3919db8ef81b5585b38a3fedbe9eeccdf8fa576c250a13559a1188f597cc + md5: b9d2b1ffa307961f6bb7d83c8ba8a8be + depends: + - python >=3.10 + - backports.tarfile + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + run_exports: {} + size: 16222 + timestamp: 1776862415793 +- conda: https://prefix.dev/conda-forge/noarch/jaraco.functools-4.6.0-pyhcf101f3_0.conda + sha256: d23b9e8e8d5968699ec2bc9f8d182598e86e494dbe8a3a71b4a53b1be9a3cb16 + md5: 8665b873062a31a90b563bf493f9fb2c + depends: + - python >=3.10 + - more-itertools + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + run_exports: {} + size: 18997 + timestamp: 1784015600777 +- conda: https://prefix.dev/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + sha256: 00d37d85ca856431c67c8f6e890251e7cc9e5ef3724a0302b8d4a101f22aa27f + md5: b4b91eb14fbe2f850dd2c5fc20676c0d + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 40015 + timestamp: 1740828380668 +- conda: https://prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_1.conda + sha256: 328756a4555941d57af4a5f553e5d8598e9f3b37db028f557e30f9f0b3086db6 + md5: 204b5ca91eba7738790ecc333facbbbe + 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 + run_exports: {} + size: 82084 + timestamp: 1787579299493 +- conda: https://prefix.dev/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 + run_exports: {} + size: 19236 + timestamp: 1757335715225 +- conda: https://prefix.dev/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 + run_exports: {} + size: 64679 + timestamp: 1760643889625 +- conda: https://prefix.dev/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 + run_exports: {} + size: 65503 + timestamp: 1760643864586 +- conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyh534df25_0.conda + sha256: 9def5c6fb3b3b4952a4f6b55a019b5c7065b592682b84710229de5a0b73f6364 + md5: c88f9579d08eb4031159f03640714ce3 + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + run_exports: {} + size: 37924 + timestamp: 1763320995459 +- conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyh7428d3b_0.conda + sha256: ed76a29fd1dbaf1bb24058191386618315ab9e35da9ef9a76da232cd6885165b + md5: e91b0f2040c580527ccc54665aa7cdba + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.10 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + run_exports: {} + size: 38153 + timestamp: 1763320939579 +- conda: https://prefix.dev/conda-forge/noarch/keyring-25.7.0-pyha804496_0.conda + sha256: 010718b1b1a35ce72782d38e6d6b9495d8d7d0dbea9a3e42901d030ff2189545 + md5: 9eeb0eaf04fa934808d3e070eebbe630 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.10 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + run_exports: {} + size: 37717 + timestamp: 1763320674488 - conda: https://prefix.dev/conda-forge/noarch/m2-msys2-runtime-3.6.1.4-hc364b38_6.conda sha256: 1f797d055ad856def2399d5c1c21d7a479fa68159ce5448f07b7c6cf4b9641d7 md5: fb7de65144b11c4c7284a00e3170c797 @@ -1708,6 +3613,77 @@ packages: run_exports: {} size: 125917 timestamp: 1748281166711 +- conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f + md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 + depends: + - mdurl >=0.1,<1 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + run_exports: {} + size: 69017 + timestamp: 1778169663339 +- conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + run_exports: {} + size: 14465 + timestamp: 1733255681319 +- conda: https://prefix.dev/conda-forge/noarch/more-itertools-11.2.1-pyh5ded981_0.conda + sha256: eac70c03e56f47de5003a76b74f55f8c7e6ed721ca71cc7e5ad5fd231cc5257a + md5: c927a046b5b46ae73c42c82869e9d4b1 + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + run_exports: {} + size: 73182 + timestamp: 1792042780319 +- conda: https://prefix.dev/conda-forge/noarch/nbformat-5.11.1-pyhcf101f3_0.conda + sha256: d85d76827ff732e1639f50f45e4d7d3387a27abd857b194dcbb5bb4166c2a7c2 + md5: 2fbbf92e1173ae024f0b12759c1e64a1 + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.10 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping + run_exports: {} + size: 107750 + timestamp: 1787133512599 +- conda: https://prefix.dev/conda-forge/noarch/niquests-3.21.2-pyh5ded981_0.conda + sha256: 1c717c3773edc07f8581d2e9d81e238cc4a49e3d61c56eeb09fcb14d9ece00e7 + md5: 48ef952873b92ea14113c2670c02807a + depends: + - python >=3.11 + - charset-normalizer >=2,<4 + - wassima >=1.0.1,<3 + - urllib3-future <3,>=2.13.903 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/niquests?source=compressed-mapping + run_exports: {} + size: 157288 + timestamp: 1790216203086 - conda: https://prefix.dev/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda sha256: c432626b16768b8dab228bfb706f7060c2d462a21c516d240f68f2f902b5a044 md5: 936687ed80f295a1f5dbcf8bd34c252c @@ -1721,6 +3697,30 @@ packages: run_exports: {} size: 116363 timestamp: 1785888127370 +- conda: https://prefix.dev/conda-forge/noarch/pkce-1.0.3-pyhd8ed1ab_1.conda + sha256: 5bf8d0d2c8db333abcd8455f06dbc01d60ffe2aac5fe6ff3d31bab69a5185a1e + md5: 26080682305b698406b4086210b9c237 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pkce?source=hash-mapping + run_exports: {} + size: 9126 + timestamp: 1736219305828 +- conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.13.3-pyh5ded981_0.conda + sha256: 0cc3be633856ea43a4c17e8d5009b07979e35d6e399f86b85afd63058df25162 + md5: 26e0daf33cd13bca0dbdfb971dcb3e25 + depends: + - python >=3.11 + - python + license: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + run_exports: {} + size: 33944 + timestamp: 1792152866708 - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e md5: d7585b6550ad04c8c5e21097ada2888e @@ -1734,6 +3734,53 @@ packages: run_exports: {} size: 25877 timestamp: 1764896838868 +- conda: https://prefix.dev/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + sha256: 99af7c6061d7aa73cfcef615500ddf3e9f4a58c844646b7d7ce58147fb5758d7 + md5: 3cd164745122ab557cc30879390089e8 + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=compressed-mapping + run_exports: {} + size: 58624 + timestamp: 1791592610066 +- conda: https://prefix.dev/conda-forge/noarch/pydantic-2.14.1-pyh5ded981_0.conda + sha256: d7cbe20d76f3803e7c36cf6fb42f1a8ce7c74b89f4e9efd678b5353685602621 + md5: 0e25c99148247bf3f89625f06eb18bee + depends: + - typing-inspection >=0.4.4 + - typing_extensions >=4.16.0 + - python >=3.11 + - annotated-types >=0.6.0 + - pydantic-core ==2.50.1 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic?source=compressed-mapping + run_exports: {} + size: 358514 + timestamp: 1791761552444 +- conda: https://prefix.dev/conda-forge/noarch/pydantic-settings-2.16.0-pyh5ded981_0.conda + sha256: 0ddbc1a8d3fa4a50d5213b0e631a46c47b96497890669708d917255837e79e64 + md5: 3ffdbcefaa4e2a087696c44e390b9695 + depends: + - typing-inspection >=0.4.0 + - python >=3.11 + - pydantic >=2.7.0 + - python-dotenv >=1.2.2 + - typing_extensions >=4.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-settings?source=hash-mapping + run_exports: {} + size: 69536 + timestamp: 1792000612449 - conda: https://prefix.dev/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda sha256: f5f015ff1bc3e1b7fc08eee096b1865234189ae0b82bebdb86a5369116e42fa0 md5: 2882dee445dfa45b0c5afce3ffb7730a @@ -1743,44 +3790,255 @@ packages: license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/pygments?source=compressed-mapping + - pkg:pypi/pygments?source=compressed-mapping + run_exports: {} + size: 959376 + timestamp: 1786995678795 +- conda: https://prefix.dev/conda-forge/noarch/pyjwt-2.15.1-pyh5ded981_0.conda + sha256: aac9df67e9c6a8f092c46d1eeea393f6d6de756e0c0deac038b79ab68c485fb8 + md5: ceb86f6237588761137d5b3387e049ca + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyjwt?source=compressed-mapping + run_exports: {} + size: 35770 + timestamp: 1790640138515 +- conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca + md5: e2fd202833c4a981ce8a65974fe4abd1 + depends: + - __win + - python >=3.9 + - win_inet_pton + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + run_exports: {} + size: 21784 + timestamp: 1733217448189 +- conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + run_exports: {} + size: 21085 + timestamp: 1733217331982 +- conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 + md5: 64c98a12c4e23eb238bf66bbecafdf3c + depends: + - colorama + - pygments >=2.7.2 + - python >=3.10 + - iniconfig >=1.0.1 + - packaging >=22 + - pluggy >=1.5,<2 + - tomli >=1 + - exceptiongroup >=1 + - python + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + run_exports: {} + size: 306724 + timestamp: 1782127176429 +- conda: https://prefix.dev/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 + run_exports: {} + size: 233310 + timestamp: 1751104122689 +- conda: https://prefix.dev/conda-forge/noarch/python-dotenv-1.2.4-pyh5ded981_0.conda + sha256: ee736376b63cd25e99cc0433d24372eb8b6726293bf5ec2fb49078c839db68d0 + md5: 394d85ce305a5405cebcb6caa443137b + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/python-dotenv?source=compressed-mapping + run_exports: {} + size: 28844 + timestamp: 1790859080558 +- conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.22.2-pyhcf101f3_0.conda + sha256: fc4a704822df22defce49d0fb811fdc036a1fd3b579aeaa601228e9cfd198b3d + md5: aa75b7f096d17621bc307b3025b29461 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping + run_exports: {} + size: 254446 + timestamp: 1786892280524 +- conda: https://prefix.dev/conda-forge/noarch/python-gil-3.14.8-h4df99d1_102.conda + sha256: 96b092a54bc4187149726b121febef3142d21f3c9e69387f6029ee5f4e57ff85 + md5: 556734568e49dfd7cab8c0341ca1e67b + depends: + - cpython 3.14.8.* + - python_abi * *_cp314 + license: Python-2.0 + purls: [] + run_exports: {} + size: 51714 + timestamp: 1791826718684 +- conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda + build_number: 9 + sha256: e7f8e965bbfb98e08feb2365cacdad8bb218fa5b5a0a2752f747287f425f213c + md5: 350d89b50d7de805abf2e63e29dee451 + constrains: + - python 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 6791 + timestamp: 1788302824440 +- conda: https://prefix.dev/conda-forge/noarch/pytz-2026.5-pyh5ded981_0.conda + sha256: 553084a7bbaad42224dc70376d3acfcc57165751f08e54951b1bd21b605e3510 + md5: c5e97ff094d2214da824ccc08ebc5499 + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=compressed-mapping + run_exports: {} + size: 202211 + timestamp: 1791103834633 +- conda: https://prefix.dev/conda-forge/noarch/readchar-4.2.2-pyhcf101f3_0.conda + sha256: ea85cacf3cc5bcd472622e58592a1966fdb196fe62facb7de9a30133dec46ff6 + md5: b71e7f9e2ba9425275f7318f4461877f + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/readchar?source=hash-mapping + run_exports: {} + size: 15624 + timestamp: 1775509908875 +- conda: https://prefix.dev/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 + run_exports: {} + size: 51788 + timestamp: 1760379115194 +- conda: https://prefix.dev/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da + md5: 4a85203c1d80c1059086ae860836ffb9 + depends: + - python >=3.10 + - certifi >=2023.5.7 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - urllib3 >=1.26,<3 + - python + constrains: + - chardet >=3.0.2,<8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=hash-mapping + run_exports: {} + size: 68709 + timestamp: 1778851103479 +- conda: https://prefix.dev/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + sha256: c0b815e72bb3f08b67d60d5e02251bbb0164905b5f72942ff5b6d2a339640630 + md5: 66de8645e324fda0ea6ef28c2f99a2ab + depends: + - python >=3.9 + - requests >=2.0.1,<3.0.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests-toolbelt?source=hash-mapping run_exports: {} - size: 959376 - timestamp: 1786995678795 -- conda: https://prefix.dev/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 - md5: 64c98a12c4e23eb238bf66bbecafdf3c - depends: - - colorama - - pygments >=2.7.2 + size: 44285 + timestamp: 1733734886897 +- conda: https://prefix.dev/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda + sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a + md5: 0242025a3c804966bf71aa04eee82f66 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 - python >=3.10 - - iniconfig >=1.0.1 - - packaging >=22 - - pluggy >=1.5,<2 - - tomli >=1 - - exceptiongroup >=1 + - typing_extensions >=4.0.0,<5.0.0 - python - constrains: - - pytest-faulthandler >=2 license: MIT license_family: MIT purls: - - pkg:pypi/pytest?source=hash-mapping + - pkg:pypi/rich?source=hash-mapping run_exports: {} - size: 306724 - timestamp: 1782127176429 -- conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-9_cp314.conda - build_number: 9 - sha256: e7f8e965bbfb98e08feb2365cacdad8bb218fa5b5a0a2752f747287f425f213c - md5: 350d89b50d7de805abf2e63e29dee451 - constrains: - - python 3.14.* *_cp314 + size: 208577 + timestamp: 1775991661559 +- conda: https://prefix.dev/conda-forge/noarch/secretstorage-3.5.0-pyhc9edb4d_3.conda + sha256: 8737d5470befc491447e8ec9f8d9eb486cee3c536190609f71dcfc38d07304b1 + md5: 0792c92f542eaa716b6f2331e25f0027 + depends: + - __linux + - cryptography >=2.0 + - dbus + - jeepney >=0.6 + - python >=3.11 + - python license: BSD-3-Clause license_family: BSD - purls: [] + purls: + - pkg:pypi/secretstorage?source=compressed-mapping run_exports: {} - size: 6791 - timestamp: 1788302824440 + size: 20124 + timestamp: 1790028131640 +- conda: https://prefix.dev/conda-forge/noarch/semver-3.1.0-pyh5ded981_0.conda + sha256: 982fe22d9c84d32fd0c87f6651b4013917ad381b640e93376a5c311b84c0dd7c + md5: 82ad3c5449650f22625ee569fe61c518 + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/semver?source=compressed-mapping + run_exports: {} + size: 23394 + timestamp: 1789890356943 - conda: https://prefix.dev/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda sha256: 6ecf738d5590bf228f09c4ecd1ea91d811f8e0bd9acdef341bc4d6c36beb13a3 md5: d629a398d7bf872f9ed7b27ab959de15 @@ -1793,6 +4051,43 @@ packages: run_exports: {} size: 676888 timestamp: 1770456470072 +- conda: https://prefix.dev/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + sha256: 1d6534df8e7924d9087bd388fbac5bd868c5bf8971c36885f9f016da0657d22b + md5: 83ea3a2ddb7a75c1b09cea582aa4f106 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + run_exports: {} + size: 15018 + timestamp: 1762858315311 +- conda: https://prefix.dev/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 + run_exports: {} + size: 18455 + timestamp: 1753199211006 +- conda: https://prefix.dev/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad + md5: 03fe290994c5e4ec17293cfb6bdce520 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + run_exports: {} + size: 15698 + timestamp: 1762941572482 - conda: https://prefix.dev/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda sha256: 93b6f517fb7adff00b62be02b798d384a1b34d0e368fdb576fb248bcb3bb9ec7 md5: 36d6a162326c52d6339c8b606f43932d @@ -1806,6 +4101,106 @@ packages: run_exports: {} size: 21687 timestamp: 1791394576814 +- conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.15.2-pyh5ded981_0.conda + sha256: e6aa9e1c4d4e229280ef5446ebbc99e7b65c874deb47f83be6a751ba20332cc8 + md5: eadfe340211fea481536d602af9ace99 + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=compressed-mapping + run_exports: {} + size: 51412 + timestamp: 1792143573427 +- conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyh6be1c34_0.conda + sha256: 8221a7b1cf63171db3a81fddd1d9e58502dc65c6938e64901c01815f63fe4210 + md5: 09073bfb6fbb3e1c7d0528b4d91e9508 + depends: + - python >=3.11 + - colorama + - __win + - python + constrains: + - envwrap >=0.2 + - ipywidgets >=6.0 + license: MPL-2.0 and MIT + purls: + - pkg:pypi/tqdm?source=compressed-mapping + run_exports: {} + size: 95465 + timestamp: 1789187329737 +- conda: https://prefix.dev/conda-forge/noarch/tqdm-4.70.1-pyhfa0c392_0.conda + sha256: 7c40c84de3de3624c2a753496122dbb880903c796d183e9d4be6c15c310c4bab + md5: ffc91f29264eeb8d3ba96fdc897316c3 + depends: + - python >=3.11 + - __unix + - python + constrains: + - envwrap >=0.2 + - ipywidgets >=6.0 + license: MPL-2.0 and MIT + purls: + - pkg:pypi/tqdm?source=compressed-mapping + run_exports: {} + size: 95977 + timestamp: 1789187326570 +- conda: https://prefix.dev/conda-forge/noarch/traitlets-5.16.1-pyhcf101f3_0.conda + sha256: 03dba5917f944c6684ab44c81daacac1624cd148e4b2cae215dcec594a210c48 + md5: a79bf97561232a31447b6246c2153ab5 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + run_exports: {} + size: 116935 + timestamp: 1785761789772 +- conda: https://prefix.dev/conda-forge/noarch/typer-0.27.3-pyh5ded981_0.conda + sha256: 50cef25b46782fbb8291427459ed60c701165b0b70bdb3aebae2503e9915f66a + md5: 3251bd81ef66ec6432b3159944c70d57 + depends: + - annotated-doc >=0.0.2 + - colorama + - python >=3.11 + - rich >=13.8.0 + - shellingham >=1.3.0 + - python + license: MIT AND BSD-3-Clause + purls: + - pkg:pypi/typer?source=compressed-mapping + run_exports: {} + size: 188981 + timestamp: 1791331739467 +- conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + sha256: b141933ece3518f6d7b75dfb59451e2f26b405a44c18e2518a83e9a02e09315c + md5: c680b5747e8c4c8f23dca0bb7042a8fc + depends: + - typing_extensions ==4.16.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: [] + run_exports: {} + size: 94080 + timestamp: 1783002732887 +- conda: https://prefix.dev/conda-forge/noarch/typing-inspection-0.4.4-pyhcf101f3_0.conda + sha256: 293c66b208468d186a94ff486c2ffbf67859a2bde8c88e965fc9d06c517191b2 + md5: 880e91eac5d926568ef278e20554148e + depends: + - python >=3.10 + - typing_extensions >=4.15.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/typing-inspection?source=compressed-mapping + run_exports: {} + size: 21070 + timestamp: 1786818918217 - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda sha256: 2d888f90af0686044882c74193ec80a90ec1943145d94a7b1b048958acda1848 md5: c70ad746c22219b9700931707482992c @@ -1827,6 +4222,92 @@ packages: run_exports: {} size: 118849 timestamp: 1784250406640 +- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + sha256: c5511c190ab55168ca412f3c54592fbf677ae6250784cb72b227a7cf3f538f7d + md5: 407a3d3778570bae8e8fcf554e803e43 + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.11 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=compressed-mapping + run_exports: {} + size: 107485 + timestamp: 1789566710244 +- conda: https://prefix.dev/conda-forge/noarch/urllib3-future-2.25.902-pyh5ded981_0.conda + sha256: e8eec29711daac5adc396f6c9c3b2913696cd5dcec1c8b68a45d15a27336990b + md5: 583b479828c3393369fc462e754ee6e1 + depends: + - python >=3.11 + - qh3 >=1.5.4,<2.0.0 + - h11 >=0.11.0,<1.0.0 + - jh2 >=5.0.3,<6.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3-future?source=compressed-mapping + run_exports: {} + size: 262002 + timestamp: 1791122379554 +- conda: https://prefix.dev/conda-forge/noarch/wassima-2.1.4-pyhcf101f3_0.conda + sha256: effa446b287ab00b4d0a03df334558c78478746930a40842e0dd05b6157dd674 + md5: c360ddb001e67d7c564dd3668f103ee9 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/wassima?source=hash-mapping + run_exports: {} + size: 137275 + timestamp: 1788549669686 +- conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f + md5: 46e441ba871f524e2b067929da3051c2 + depends: + - __win + - python >=3.9 + license: LicenseRef-Public-Domain + purls: + - pkg:pypi/win-inet-pton?source=hash-mapping + size: 9555 + timestamp: 1733130678956 +- conda: https://prefix.dev/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + sha256: 3aa601ef121f42dcb79400375e72f833ddc68bc6243f3e5535168b2d69cc9c70 + md5: 6cad4d2cec9b7b64538c225ac91d2e8a + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=compressed-mapping + run_exports: {} + size: 24839 + timestamp: 1791091060207 +- conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.2.0-py314h21a1a37_4.conda + sha256: 570a882ba11eb866748748e74af8879330a708cc294b047de0f6df083649bec7 + md5: 57d98707f84a3f87488f622c03d2f4a9 + depends: + - __osx >=11.0 + - libcxx >=21 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 he0616a4_4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 386591 + timestamp: 1788481512572 - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda sha256: 4ed83961876dc8844a6f0df49c07b408efbaea275ffb0b37133e24c006990b3a md5: 9d9a39212a876e4bb751c1cc3927b678 @@ -1853,6 +4334,38 @@ packages: - c-ares >=1.34.8,<2.0a0 size: 205559 timestamp: 1787170041830 +- conda: https://prefix.dev/conda-forge/osx-64/cffi-2.1.1-py314h0656537_3.conda + sha256: 493eb10ddcd00cf42151f1a6303b5b08a3641172861583fe2e128e9bbc1db3e2 + md5: 5502c80a2761fbc926dc5847b69b7f53 + depends: + - __osx >=11.0 + - libffi >=3.7.0,<3.8.0a0 + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 292318 + timestamp: 1788485600231 +- conda: https://prefix.dev/conda-forge/osx-64/charset-normalizer-3.5.2-hd77389f_0.conda + noarch: python + sha256: c472de27f59dfc9ad7fcf59b0bb560f284764153defa73869882b10fd78b32b4 + md5: 26eaacf697e8bbc4ebbc94db3bb0ab67 + depends: + - python + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + run_exports: {} + size: 191387 + timestamp: 1790766173038 - conda: https://prefix.dev/conda-forge/osx-64/cmake-3.31.8-h29fc008_0.conda sha256: 01510ee9bf44567b8168f1038cc5f99a26f257f343923e71e300b7244090f658 md5: 715f84ec3b115f0d6a9858f33a5e595d @@ -1874,6 +4387,25 @@ packages: run_exports: {} size: 17816621 timestamp: 1757878263595 +- conda: https://prefix.dev/conda-forge/osx-64/cryptography-50.0.2-py311hc027f23_0.conda + noarch: python + sha256: 99c82adba610df83bf0f47491adf6ced7ea7eafc703011a230ddfcfc89118081 + md5: 1d4e7183556210fc49be37acdca44076 + depends: + - python + - cffi >=2.0 + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.11 + - openssl >=3.5.8,<4.0a0 + constrains: + - __osx >=11.0 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + purls: + - pkg:pypi/cryptography?source=compressed-mapping + run_exports: {} + size: 1819278 + timestamp: 1790790581781 - conda: https://prefix.dev/conda-forge/osx-64/gh-2.102.0-h5839d16_0.conda sha256: b176af4f4a5206d7ee54411a64fc0c920f212f5047e4fb46d88ffe7c2b387a5d md5: 7c9d65d29932dae4dc5f36f4c30e643d @@ -1909,6 +4441,22 @@ packages: - icu >=78.3,<79.0a0 size: 14223209 timestamp: 1786545868538 +- conda: https://prefix.dev/conda-forge/osx-64/jh2-5.0.15-py314h3cfb53e_0.conda + sha256: 6e8ab1742b24b0edcb331cb2d86a90cb1fb68eecda13295e971b3f556f1d180a + md5: 5b7055044433ca197b1837d0db30b72d + depends: + - python + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jh2?source=compressed-mapping + run_exports: {} + size: 468361 + timestamp: 1790144639114 - conda: https://prefix.dev/conda-forge/osx-64/krb5-1.22.2-h69064fd_2.conda sha256: f41875ab241c4862b6bdb8316e5f4268ee8ff9e9115770d3d30a02028957c7c1 md5: da54bd0f3b96eb0d7663b3db01862a19 @@ -1926,6 +4474,35 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1199337 timestamp: 1786762832264 +- conda: https://prefix.dev/conda-forge/osx-64/lcms2-2.19.1-h4e6bd4b_3.conda + sha256: 3cad2aa6ee744240e5012f6647fcfa95bb4375e718983d65ce154297357b1321 + md5: 9ed90c2008c0a13710a9bdf3ca6f4674 + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 226401 + timestamp: 1789052227954 +- conda: https://prefix.dev/conda-forge/osx-64/lerc-4.2.0-h35c7297_0.conda + sha256: 5ae9e18ec7f8134a009765bd1454687d5057482fbe9a4c661a672746d4a29b0b + md5: 09e24eb1868a9ffc04130730e7a34a59 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 217900 + timestamp: 1785036771895 - conda: https://prefix.dev/conda-forge/osx-64/libcurl-8.22.0-h5318221_0.conda sha256: 5625672a0a27c58c1c3c5849927c226eb65c88900e778262284e843dcce9c8f8 md5: 0ba721f8549bac02c48fc646fffe0c4d @@ -1957,6 +4534,19 @@ packages: run_exports: {} size: 576040 timestamp: 1790163953924 +- conda: https://prefix.dev/conda-forge/osx-64/libdeflate-1.25-h7ad9622_1.conda + sha256: 210ee1d6a5aa201cf6d02b10edd02738cc35a4e8fb0866e4fb425010d6dd2c49 + md5: 371a45a962d740d8191d46dd225e23df + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 71148 + timestamp: 1785909042684 - conda: https://prefix.dev/conda-forge/osx-64/libedit-3.1.20250104-pl5321hba2e2ab_1.conda sha256: 4aa5161db41602af1abff73f5af415902135a47855d02c1ac05681a36320bd4b md5: 17532a8cca2c887fa24fbdcd5336c3af @@ -2011,6 +4601,30 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 60786 timestamp: 1787754056669 +- conda: https://prefix.dev/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_2.conda + sha256: cabaa404fde84dcf154c3394f7a86cbaa7cff1ce32e3951b0b6aad567c457e3f + md5: d2538644f6f7f8b9ce10bdffaa7d3d17 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8384 + timestamp: 1786641705015 +- conda: https://prefix.dev/conda-forge/osx-64/libfreetype6-2.14.3-h8afe040_2.conda + sha256: 9c81d42ca311a1283fb8f79d05dae5659d86cf20f4e5d146a97836456537ccff + md5: cb777bcdd21bcfcfdaf76ebe1e1e0488 + depends: + - __osx >=11.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 366001 + timestamp: 1786641701324 - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h4ae439b_3.conda sha256: 2389e03a58ed0f5e8f2469eb4d4ba80d0af378b38854ae5eee65e5b641244082 md5: 9fd2f77288f43e462ccc6b0e5f018c89 @@ -2023,6 +4637,20 @@ packages: - libiconv >=1.18,<2.0a0 size: 736150 timestamp: 1787034707041 +- conda: https://prefix.dev/conda-forge/osx-64/libjpeg-turbo-3.2.0-ha1e9b39_1.conda + sha256: 0792824360a9e59802c9464157c1098c3d84330dcab5dbde762abaca16f580a8 + md5: c864512172ac7b820637f6731287936c + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 614315 + timestamp: 1785896908505 - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda sha256: 7915dac7c71c208e40e716e2f6d3eff41a8d5584e0e7c2d46f9bf9bd5f9aa739 md5: daf49067580fbfeae3ac7f9535400494 @@ -2067,6 +4695,19 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 598607 timestamp: 1787178086085 +- conda: https://prefix.dev/conda-forge/osx-64/libpng-1.6.59-h4382c61_0.conda + sha256: 4576bdf533292672b4aa955a43029343e25dcffaf8048d255b88e66b0860e602 + md5: ee02f407bc1a367df25d0cee798198de + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 298908 + timestamp: 1790805250755 - conda: https://prefix.dev/conda-forge/osx-64/libpsl-0.23.1-h7ff43d8_1.conda sha256: 6ee1849c23ddd4de76bacdcf88d4d16dc28fc10aa7c3431f859ef392da6936b8 md5: 4cd9cae1ac1aa63d8f760fe127b42685 @@ -2112,29 +4753,80 @@ packages: md5: cb57b979974ef5b8a4526a8e5c8195b9 depends: - __osx >=11.0 - - libzlib >=1.3.2,<2.0a0 - - openssl >=3.5.7,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 286497 + timestamp: 1786713428677 +- conda: https://prefix.dev/conda-forge/osx-64/libtiff-4.7.2-h01c3a8c_1.conda + sha256: 661b0befbb6e2300e0d25d9aac8f66be7003297c757fbb3e016985bf43a72638 + md5: ee440bf7977466b7661370804a9a26dc + depends: + - __osx >=11.0 + - lerc >=4.2.0,<5.0a0 + - libcxx >=21 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 409602 + timestamp: 1787755925896 +- conda: https://prefix.dev/conda-forge/osx-64/libuv-1.52.1-ha3d0635_1.conda + sha256: 4aacf651487bf2cd4dcfab49ea98a00a34305919ff3a09b66b7ddaa97d8b316f + md5: 17b0d6c818992264752f1a720be711fc + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libuv >=1.52.1,<2.0a0 + size: 128560 + timestamp: 1785914631885 +- conda: https://prefix.dev/conda-forge/osx-64/libwebp-base-1.6.0-hb276fe9_1.conda + sha256: 96263e9134164b6ca015a8cfba3a4cac9ca2429ddfebd25c120817fa608d2fdc + md5: abc3595bd7aab5df201b76ecef123583 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 license: BSD-3-Clause license_family: BSD purls: [] run_exports: weak: - - libssh2 >=1.11.1,<2.0a0 - size: 286497 - timestamp: 1786713428677 -- conda: https://prefix.dev/conda-forge/osx-64/libuv-1.52.1-ha3d0635_1.conda - sha256: 4aacf651487bf2cd4dcfab49ea98a00a34305919ff3a09b66b7ddaa97d8b316f - md5: 17b0d6c818992264752f1a720be711fc + - libwebp-base >=1.6.0,<2.0a0 + size: 364823 + timestamp: 1785954881871 +- conda: https://prefix.dev/conda-forge/osx-64/libxcb-1.17.0-h2478c6c_1.conda + sha256: f19550d311365ea8541424daafcad13a5d0259e905a1faad3caeae1eb659d271 + md5: f964ec5d9d2aee3639c5797b0f801164 depends: - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 license: MIT license_family: MIT purls: [] run_exports: weak: - - libuv >=1.52.1,<2.0a0 - size: 128560 - timestamp: 1785914631885 + - libxcb >=1.17.0,<2.0a0 + size: 325124 + timestamp: 1787078047035 - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda sha256: b2dba286dd6632292b12296e761193b5ef9fb0eaeecaa481f5ba9af72c0c18e1 md5: 7d3fa28263bb7f8ea32db11f570a5bb6 @@ -2162,6 +4854,23 @@ packages: - ncurses >=6.6,<7.0a0 size: 834865 timestamp: 1786356957789 +- conda: https://prefix.dev/conda-forge/osx-64/openjpeg-2.5.4-he4eae51_1.conda + sha256: 2d9eef746dc20c5e829b0b10de6731c5c5ab01c55160364ecf05a1bfaea0cca6 + md5: c4bd1f22c5f2fcefa2f41c81942df622 + depends: + - __osx >=11.0 + - libcxx >=21 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 333801 + timestamp: 1788252699539 - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.6.5-h332eb6d_0.conda sha256: d992d27aec2f1beac81f792c85b449546c030f06937b5b3ea7cf58431861dde4 md5: 615ac6cff316565b442cd1af8b94837f @@ -2176,6 +4885,78 @@ packages: - openssl >=3.6.5,<4.0a0 size: 2786968 timestamp: 1791099439455 +- conda: https://prefix.dev/conda-forge/osx-64/pillow-12.3.0-py314h909093e_4.conda + sha256: f282bbe759b8209b80864928c5bebff3e1d8ba525f4faa3c87305e9bf06078e5 + md5: 3d7abb23d1f52c2fb99125c6ab41e86c + depends: + - python + - __osx >=11.0 + - libxcb >=1.17.0,<2.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - python_abi 3.14.* *_cp314 + - openjpeg >=2.5.4,<3.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - lcms2 >=2.19.1,<3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + run_exports: {} + size: 1030211 + timestamp: 1789122814028 +- conda: https://prefix.dev/conda-forge/osx-64/pthread-stubs-0.4-hd115831_1004.conda + sha256: 8b8f86a3735a8e5141de0e9bc654daf381812def91cbd2f3de6ef47891a2d1b0 + md5: cf87bd0e4c376d95cce9a15461299dc6 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 9640 + timestamp: 1788382451919 +- conda: https://prefix.dev/conda-forge/osx-64/py-rattler-0.27.1-py311h2a8a194_0.conda + noarch: python + sha256: f1485e795436f9a09e8a2c800241f93fbbed9f05399bd836ea38de6c8d55134f + md5: fba607a88caab23aad7686ef8e5bc56f + depends: + - python + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.11 + constrains: + - __osx >=11.0 + extra_depends: + networkx: + - networkx + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/py-rattler?source=hash-mapping + run_exports: {} + size: 14588029 + timestamp: 1791293396246 +- conda: https://prefix.dev/conda-forge/osx-64/pydantic-core-2.50.1-py314h3cfb53e_0.conda + sha256: a72479f577747ec1caa39aff778cd28a46e503c3d14e626479658e231ee0b419 + md5: bd08994a9ea0a097f0f04c66ba5a2500 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + run_exports: {} + size: 1985605 + timestamp: 1791753984253 - conda: https://prefix.dev/conda-forge/osx-64/python-3.14.7-hafa0b4b_106_cp314.conda build_number: 106 sha256: 74e72b101d4985b9919fcf01fec55ff9c82e862377d6be23b99bfe5562ffc207 @@ -2222,6 +5003,24 @@ packages: run_exports: {} size: 191947 timestamp: 1770226344240 +- conda: https://prefix.dev/conda-forge/osx-64/qh3-1.9.4-py314h7d911d6_0.conda + sha256: 7631628935d25131418721ea4bca526224f7630278c1cd6c5cd4f25f89764658 + md5: 9e368ac7060cf38dd78c2bd72df39d1c + depends: + - python + - __osx >=11.0 + - libcxx >=19 + - python_abi 3.14.* *_cp314 + - openssl >=3.5.7,<4.0a0 + constrains: + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qh3?source=hash-mapping + run_exports: {} + size: 2158169 + timestamp: 1784169859958 - conda: https://prefix.dev/conda-forge/osx-64/rattler-build-0.76.1-h1311731_0.conda sha256: 1e1c90835f13bc2225502e1d18bb124b73fcbf80d8c339932496a47e9acb75df md5: 5a5b03d4e292a0dd303f190dd9fc909b @@ -2278,6 +5077,22 @@ packages: - rhash >=1.4.6,<2.0a0 size: 186416 timestamp: 1786732023380 +- conda: https://prefix.dev/conda-forge/osx-64/rpds-py-2026.9.1-py314h3cfb53e_0.conda + sha256: de979ff36d1946a1728e3bb61f10dd353514b1fa8724447d35018b6a6d2c989f + md5: 8d50f16e18f7bc1f0008a9a38a918db9 + depends: + - python + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 302047 + timestamp: 1791202491493 - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-ha6c374e_4.conda sha256: 74e5fabcaf6ca0db052c645646ea04ded98a5eb7540483217f8101a819eb3107 md5: 71c9f1f0267f2639523e898c6b50a4dc @@ -2291,6 +5106,32 @@ packages: - tk >=8.6.13,<8.7.0a0 size: 3512384 timestamp: 1787272935349 +- conda: https://prefix.dev/conda-forge/osx-64/xorg-libxau-1.0.12-hd115831_2.conda + sha256: 73a6f8cc76ecd16d4ac7fd5879e51a55485c993251409680238fcba09ff7e6eb + md5: e784f58fa2e09f5c2852eb959b6e65a3 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 17029 + timestamp: 1788961003088 +- conda: https://prefix.dev/conda-forge/osx-64/xorg-libxdmcp-1.1.5-hd115831_2.conda + sha256: d641d1c22e772914d3bcfcb8a4974e01f4a5bfb72a195b99ca01ff45bb5b1a21 + md5: c3a5f1c212422f6ce0b8a1cbed9f7462 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 21105 + timestamp: 1789677280207 - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-had63097_3.conda sha256: b63a29a5e4968b28c8403525549fd662de8ff5863e6287f89cfaac7d1d688ea0 md5: 9b30f8e851965211d981aca9c9bd1196 @@ -2304,6 +5145,20 @@ packages: - yaml >=0.2.5,<0.3.0a0 size: 75645 timestamp: 1787228502493 +- conda: https://prefix.dev/conda-forge/osx-64/zlib-ng-2.3.3-h646e873_1.conda + sha256: b4f5e79fd045acce419a6d6cdfd3e50b7c0964edc3948573d4852432917a5f62 + md5: bd3ea0561628325241a9058fa70ec00e + depends: + - __osx >=11.0 + - libcxx >=21 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 124006 + timestamp: 1786737561498 - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda sha256: 5277886d9704a624dc9b79ac985861e1e431bdb39a57c082507ab577a138ec6c md5: c1d11f04327e40537ffe6cad5b131019 @@ -2318,6 +5173,23 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 528228 timestamp: 1786599702092 +- conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.2.0-py314hee34562_4.conda + sha256: bafd111884ad0f5bb75286fd457999536cbeb5e0308ecbb4c5fb49b79d31e304 + md5: cfaec5b3d3d1f4877c1ebd84f8e1dfa6 + depends: + - __osx >=11.0 + - libcxx >=21 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - libbrotlicommon 1.2.0 h1dcdb26_4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 365544 + timestamp: 1788480454684 - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda sha256: 8ec22f0ba25cbfc2e64d70cf29459eccd7ffdf6436f6a6ff15bbfef799f7d4f6 md5: b50612e7d190b8061ab4e7dc119cf4d5 @@ -2344,6 +5216,22 @@ packages: - c-ares >=1.34.8,<2.0a0 size: 197819 timestamp: 1787169996553 +- conda: https://prefix.dev/conda-forge/osx-arm64/cffi-2.1.1-py314h618e29d_3.conda + sha256: 172fcb9649244b38083d3242550841e9b24fafeb5530ea125b44f364172f4e9d + md5: 1177738698334efc54d4e9a2f108c469 + depends: + - __osx >=11.0 + - libffi >=3.7.0,<3.8.0a0 + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + run_exports: {} + size: 292373 + timestamp: 1788485305495 - conda: https://prefix.dev/conda-forge/osx-arm64/cmake-3.31.8-h54ad630_0.conda sha256: 55f8adaa565e9494aca45cf9b75689354479a179efe088522be345f0c5acca3b md5: 7a61882f98f88aee01bae8a76d5990ba @@ -2365,6 +5253,25 @@ packages: run_exports: {} size: 16632236 timestamp: 1757877846468 +- conda: https://prefix.dev/conda-forge/osx-arm64/cryptography-50.0.2-py311hc28ac56_0.conda + noarch: python + sha256: 0c681f12351d4942decede4ef431f4d4f27720da76c49f0a43f351275eca0bca + md5: db8c959446b5085b7ae417e0d34ddc38 + depends: + - python + - cffi >=2.0 + - __osx >=11.0 + - openssl >=3.5.8,<4.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + constrains: + - __osx >=11.0 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + purls: + - pkg:pypi/cryptography?source=compressed-mapping + run_exports: {} + size: 1770710 + timestamp: 1790790523277 - conda: https://prefix.dev/conda-forge/osx-arm64/gh-2.102.0-hf76c51c_0.conda sha256: 77908dbe0e0f02feacacb1c34ec4cc65a9414bb7c0809ab83ddec26603b6d214 md5: 37fbfe69ee3d410a7a53433ef640dec5 @@ -2396,6 +5303,22 @@ packages: - icu >=78.3,<79.0a0 size: 14070242 timestamp: 1786545847761 +- conda: https://prefix.dev/conda-forge/osx-arm64/jh2-5.0.15-py314hc05cd11_0.conda + sha256: 3466e4832e982ba9a04b7ecb3c05cf23ce47061af79030209436261e69abe972 + md5: 0aae9b3aa8059f219412f1310eedcd02 + depends: + - python + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jh2?source=compressed-mapping + run_exports: {} + size: 458797 + timestamp: 1790144411689 - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda sha256: aaea1d42b07769920db2af7471ece9399d2613448863da64ad8272998db5db34 md5: 15235dd10450d67bc25ccafd5b46d2bc @@ -2413,6 +5336,35 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1165740 timestamp: 1786762145768 +- conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.19.1-hce41798_3.conda + sha256: 5f9b511f918e13dfddb8495c1764aec894b66c5a88359737aa302b8899ae25fa + md5: 4eed1ee02ef1992c046f2e81d5606633 + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 212689 + timestamp: 1789052560432 +- conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.2.0-h1eee2c3_0.conda + sha256: c97aa17d16d2ac332ba9f184e82ce8f72dcb10e9a10c5f299030be2d44e191b9 + md5: e429aec4037d5cb8fd34ded9f5dadd39 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 166477 + timestamp: 1785036480092 - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.22.0-h6651222_0.conda sha256: 46def32ec20d4dc6bce75d90fe5f2465a71cc22acef608c5ba37cc392e80e01d md5: a7234b8d8e19a089dcb1eaaa18de1045 @@ -2444,6 +5396,19 @@ packages: run_exports: {} size: 579372 timestamp: 1790163402114 +- conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.25-he7e0567_1.conda + sha256: d896f4aa4ce4c590c2838678cb1917356fdb461d2a189991c0280c818c362172 + md5: 78650d671cb56909bb3e5c13bce310f9 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 55727 + timestamp: 1785909153744 - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321h26f1114_1.conda sha256: 257c926f19e32bdb981fc674c76966049b6fc73f706bae58e9fed8757ad1da70 md5: 843ef89082f368cb889305084d3b483c @@ -2498,6 +5463,30 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 43637 timestamp: 1787753403688 +- conda: https://prefix.dev/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_2.conda + sha256: 19ce8bd320414cb6b9889ecbf48a3ded848b0d1068b76ff6bea099bd7387d6f3 + md5: ee1fc5bba400ff0cae27fbf141a1ae0c + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8367 + timestamp: 1786641013393 +- conda: https://prefix.dev/conda-forge/osx-arm64/libfreetype6-2.14.3-h2ed5691_2.conda + sha256: d9b203d6484ad491b5b5f33d49a9d7a91189d776a9adae53d2b63af18ec11e6a + md5: 881cfb44ea02cc9849f612725a959660 + depends: + - __osx >=11.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 340923 + timestamp: 1786641012794 - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda sha256: 689a14968267f2f97c07112fca5636e7d756036b9aee969911267c20bd3eea1f md5: 17f4744c0873e9f77ac9b5cd0a27c187 @@ -2510,6 +5499,20 @@ packages: - libiconv >=1.18,<2.0a0 size: 750816 timestamp: 1787033961086 +- conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.2.0-h84a0fba_1.conda + sha256: 05006418f9392c9b723e8428808db106de0350a497832f95f921b85ff1072310 + md5: b2f8c8e5a7651a1d7c05404c3a159517 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 558459 + timestamp: 1785896382474 - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda sha256: 23d0630046a3e8b164d8f80f2b74ed2605af2e7050ab9913018056402fae4311 md5: 8ab10323068b107661a4b9a4af84f3b5 @@ -2554,6 +5557,19 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 567024 timestamp: 1787177422467 +- conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.59-hf5e6511_0.conda + sha256: 4de4dc4cb7432c328c1eaf4f7cc9c6b48c073eab1e9c6723d4533e6d57e7d595 + md5: 4f99571d5354c39f2621b8b6e3a9afa3 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 290299 + timestamp: 1790805167385 - conda: https://prefix.dev/conda-forge/osx-arm64/libpsl-0.23.1-hdb0c161_1.conda sha256: c8c3153df39abedf3413483f672151ad70f1adb0c06c192bdf7ec432c3616b07 md5: 5d270f716a2b4bc13df9af8612071b17 @@ -2608,6 +5624,26 @@ packages: - libssh2 >=1.11.1,<2.0a0 size: 280492 timestamp: 1786714226814 +- conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.2-hf67920b_1.conda + sha256: 847d22a86ae28f66d3888702698254d25bb4eac3a0f64c1fabfb1842ac00be4c + md5: b6b191267455bf202af79f973690ed5d + depends: + - __osx >=11.0 + - lerc >=4.2.0,<5.0a0 + - libcxx >=21 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 380645 + timestamp: 1787756067271 - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.52.1-h1a92334_1.conda sha256: 4f47de9de1990efd998edbbd6793f89c8f02ffde987ae8120b1c006acefd2a04 md5: de09bd0f175611e94f21b28f8c708e80 @@ -2621,6 +5657,37 @@ packages: - libuv >=1.52.1,<2.0a0 size: 122729 timestamp: 1785914645797 +- conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.6.0-h202fb40_1.conda + sha256: 0ff54650d470c7e54cbeffdd53a8c063e055a7bcf784388c0385ce5c4741b0f4 + md5: 168a13e329259710b28277abc1395b8e + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 294522 + timestamp: 1785955350410 +- conda: https://prefix.dev/conda-forge/osx-arm64/libxcb-1.17.0-hbffa61f_2.conda + sha256: f55c15b66c8ae27d8e30445193acc049b280eb51a47d6f1753bed5ac2937a217 + md5: 786c0680e77665d1938ce9cdd7cf82a7 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 324234 + timestamp: 1787885764666 - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda sha256: a18fa5d5bac452401459f966cf0d872224e8080c4ff93c77e168d43ab42ef9d7 md5: f39288f0ea63ae962e1a2e4f355a0d75 @@ -2648,6 +5715,23 @@ packages: - ncurses >=6.6,<7.0a0 size: 804298 timestamp: 1786355189145 +- conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.4-h4d1e80c_2.conda + sha256: e71bd04b5d0e39f39a3c039d021d3b76cd65bee3032e7f859ab7082f0ace8be5 + md5: 487d92910109a711fdb77631bf1aabf0 + depends: + - __osx >=11.0 + - libcxx >=21 + - libtiff >=4.7.2,<4.8.0a0 + - libzlib >=1.3.2,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 377958 + timestamp: 1788425205328 - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda sha256: 44fbc526456571a9fb8fa18157f6f269d4d4bd40eef20183a93b9c9296f94497 md5: 45d9179cdf6e53d88aec034246f0dad6 @@ -2662,6 +5746,78 @@ packages: - openssl >=3.6.5,<4.0a0 size: 3111573 timestamp: 1791097959641 +- conda: https://prefix.dev/conda-forge/osx-arm64/pillow-12.3.0-py314h709c99d_4.conda + sha256: 734cd2c0fb24436f5ebddd29403472a6d8aa1594652e83555393f3a3c890b73a + md5: 51c68057c585094507bb9816326d6252 + depends: + - python + - __osx >=11.0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libwebp-base >=1.6.0,<2.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - lcms2 >=2.19.1,<3.0a0 + - python_abi 3.14.* *_cp314 + - libxcb >=1.17.0,<2.0a0 + - openjpeg >=2.5.4,<3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + run_exports: {} + size: 1025614 + timestamp: 1789122697364 +- conda: https://prefix.dev/conda-forge/osx-arm64/pthread-stubs-0.4-hb001647_1004.conda + sha256: 3f79452dbda3febaf7053486e4844fa945accf4d74eac4169e2c4d5dc5e4dd0b + md5: f0833c4a0b68798f50935dd83384c705 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 9662 + timestamp: 1788382422327 +- conda: https://prefix.dev/conda-forge/osx-arm64/py-rattler-0.27.1-py311hfcb3ee1_0.conda + noarch: python + sha256: 4f62fa4d7dcd4bc90febafdcc2dd13db3270a7b86445adad61d0a6190c0b0d36 + md5: 5fff6846cf7d6cbf9aac4ba3256de5e6 + depends: + - python + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.11 + constrains: + - __osx >=11.0 + extra_depends: + networkx: + - networkx + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/py-rattler?source=hash-mapping + run_exports: {} + size: 13254637 + timestamp: 1791293349456 +- conda: https://prefix.dev/conda-forge/osx-arm64/pydantic-core-2.50.1-py314hc05cd11_0.conda + sha256: 62ed8fe3f9e145e854bafde8240a23498274cc74b0816a8fb1fc75bbbf3bae41 + md5: 1bd336590b13b3bb7370aeaf38fb80db + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + run_exports: {} + size: 1805148 + timestamp: 1791753924701 - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.14.7-h0ae1c2c_106_cp314.conda build_number: 106 sha256: 5ffc8349ca089ec5ac39ad36a095323ad177ebe05cbfc690c1e135560cfd68b7 @@ -2705,10 +5861,28 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=hash-mapping + - pkg:pypi/pyyaml?source=hash-mapping + run_exports: {} + size: 189475 + timestamp: 1770223788648 +- conda: https://prefix.dev/conda-forge/osx-arm64/qh3-1.9.4-py314h548cc06_0.conda + sha256: a33da386d8371723f25ffbdcee101467fffb4027346f195a6924aeceefe6dd26 + md5: 230357a1fc625bc15c3b3e25083ad482 + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qh3?source=hash-mapping run_exports: {} - size: 189475 - timestamp: 1770223788648 + size: 2023587 + timestamp: 1784169760018 - conda: https://prefix.dev/conda-forge/osx-arm64/rattler-build-0.76.1-h74d5219_0.conda sha256: 7da95b859c8f04edcd64077719f0fbe891244cd688e1e4176e205d318d09535c md5: db2e01dca41265c66b5a3c2d65849172 @@ -2765,6 +5939,22 @@ packages: - rhash >=1.4.6,<2.0a0 size: 185483 timestamp: 1786732022220 +- conda: https://prefix.dev/conda-forge/osx-arm64/rpds-py-2026.9.1-py314hc05cd11_0.conda + sha256: f8b96fa257e9f34af1168d1321ae6ef3ce7211d684fb429c4cbbe425583f9014 + md5: 4faa708a07c8ec44c08c3b2e9fb0e110 + depends: + - python + - __osx >=11.0 + - python_abi 3.14.* *_cp314 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=compressed-mapping + run_exports: {} + size: 286096 + timestamp: 1791202353806 - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda sha256: 857d89087ae7f2c328cf256728affcb7343031a148b4af847334d248a9cf564c md5: 90a01bf394d1c594e0eb9258f967d828 @@ -2778,6 +5968,32 @@ packages: - tk >=8.6.13,<8.7.0a0 size: 3342183 timestamp: 1787272852357 +- conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxau-1.0.12-hb001647_2.conda + sha256: cde7cecabb662b435e6537591e5845e870a0648887542d3e538c9f6c20dd6be5 + md5: 610f557e75d6a0d3f676914da5822227 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 17325 + timestamp: 1788960997645 +- conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hb001647_2.conda + sha256: 30240b39d7b956e8f7a8231ffa0c1fce097124e40b3eb48a523d13d3937e3194 + md5: 14a26fe87734f988eed32abf6afd4c3e + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 21021 + timestamp: 1789677329602 - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h74c22ad_3.conda sha256: 3e78c43207502418fc5fb2317bbbefe5df8b6fc1051d90bdcd1c881c76bb4193 md5: 31cf6dcc138abe673c9440cd6fe6c6fe @@ -2791,6 +6007,20 @@ packages: - yaml >=0.2.5,<0.3.0a0 size: 77530 timestamp: 1787228556857 +- conda: https://prefix.dev/conda-forge/osx-arm64/zlib-ng-2.3.3-h31dac16_1.conda + sha256: 489a29915a3e1b425cff4df10a448f55bbaaf29d777a0f8a9e381444e6a284f1 + md5: 4621ded2fd5b36f51454d5f81bff4ec1 + depends: + - __osx >=11.0 + - libcxx >=21 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 95857 + timestamp: 1786737243497 - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda sha256: da867f5092eb0cb746d353694f0098031fd9817a4ce7d5743121209ae0f406ca md5: 4ec2684c73812cc2c3d78379384a39cc @@ -2805,6 +6035,24 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 433687 timestamp: 1786599629846 +- conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.2.0-py314h85cf176_4.conda + sha256: 77cba8469644eccf05a5be5216ae2c71471ae09e9febc6ef39eb73ac07de08c3 + md5: a0d7c645ae6b82fda8a2eb24a1de7b43 + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libbrotlicommon 1.2.0 hf02afa3_4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + run_exports: {} + size: 336837 + timestamp: 1788480517368 - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda sha256: 04767466ee9227c9c57ab2c6503e0149177d34111c7418d2f420297acb1eb229 md5: c3301c058362f340100d91cd8be0393f @@ -2820,6 +6068,41 @@ packages: - bzip2 >=1.0.8,<2.0a0 size: 55919 timestamp: 1785906343696 +- conda: https://prefix.dev/conda-forge/win-64/cffi-2.1.1-py314h5a2d7ad_3.conda + sha256: 400e8869acc3e5a0633b9a8ccd6695ce8d36b63675708b8d3f5e1c018406ef6a + md5: 178930300441541491ece1cae80240b9 + depends: + - pycparser + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=compressed-mapping + run_exports: {} + size: 347452 + timestamp: 1788485352441 +- conda: https://prefix.dev/conda-forge/win-64/charset-normalizer-3.5.2-h308a848_0.conda + noarch: python + sha256: 15ef0ff35f316beeb8d0ab045cb3c29655f0e38ed1ea49c56f5606d2ff2bc3e4 + md5: 9435e7be4c7a58a0baa36d1a96e4eea0 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - _python_abi3_support 1.* + - cpython >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + run_exports: {} + size: 174725 + timestamp: 1790766070886 - conda: https://prefix.dev/conda-forge/win-64/cmake-3.31.8-hdcbee5b_0.conda sha256: 074400a63931d8d571b2b2284bc5f105fd578c381847b05d5e3d0b03c3db8f69 md5: 96afa0e05c4a683b1c3de91b0259b235 @@ -2839,6 +6122,25 @@ packages: run_exports: {} size: 14669008 timestamp: 1757878123930 +- conda: https://prefix.dev/conda-forge/win-64/cryptography-50.0.2-py311h67a9792_0.conda + noarch: python + sha256: f3a68411fd8c3eb6d2cd3503c8a3bea779b2edf162e447e05b6fb79d2b1bb859 + md5: 79b284ebd7d5ed165381d621f56e1e3d + depends: + - python + - cffi >=2.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - openssl >=3.5.8,<4.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + purls: + - pkg:pypi/cryptography?source=compressed-mapping + run_exports: {} + size: 1786178 + timestamp: 1790790508927 - conda: https://prefix.dev/conda-forge/win-64/gh-2.102.0-h11686cb_0.conda sha256: 618fe7c5162b61595155c47c916e4fbc85138d250f1ecf11afc296afd4463ab8 md5: d3006da1410c8fa707d0e3b30578038c @@ -2880,6 +6182,22 @@ packages: - icu >=78.3,<79.0a0 size: 16835644 timestamp: 1784916416303 +- conda: https://prefix.dev/conda-forge/win-64/jh2-5.0.15-py314h9f07db2_0.conda + sha256: b4e3b3ad0c815bc3b18a0e90628ef5ef959b71ef35d6a25f4c3e100e058526ae + md5: eec3df9535beacffe6fb008828b2e188 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jh2?source=compressed-mapping + run_exports: {} + size: 361145 + timestamp: 1790144364704 - conda: https://prefix.dev/conda-forge/win-64/krb5-1.22.2-h719d79b_2.conda sha256: 63ff03324e903eb01a715ccf357df56d66224e61952fd6615d86490ebefb3285 md5: 93f5a01dec294a2228f757fe2f3432d4 @@ -2896,6 +6214,38 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 753425 timestamp: 1786762169034 +- conda: https://prefix.dev/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_3.conda + sha256: 7c5f96b473b721a4279708b448591dc3d89ed274280ff480dea1b4f9b13e1fcd + md5: a817b8a8f09864652c8700bd1893fe81 + depends: + - libjpeg-turbo >=3.2.0,<4.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - lcms2 >=2.19.1,<3.0a0 + size: 525499 + timestamp: 1789052032238 +- conda: https://prefix.dev/conda-forge/win-64/lerc-4.2.0-hd936e49_0.conda + sha256: 93d666f63f284ef77b87b0b1f77b70f7d36d315a132f9afa64bc0012d937ba39 + md5: add59e2b60ac9d4299d17c938185c75a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 175297 + timestamp: 1785036247761 - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.22.0-hdb0ef4a_0.conda sha256: 5fe063cffa90ad3ef04e25c76b1a79cdbc4f6c43747164a7dcdd89c4faebb84e md5: e8405e754eaac42d66f957222fcfd876 @@ -2915,6 +6265,21 @@ packages: - libcurl >=8.22.0,<9.0a0 size: 413226 timestamp: 1788340784214 +- conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.25-h1a1d4e4_1.conda + sha256: af1cda21d4653f594fbef20aa4e1ff158a546902b3307ef8af9a9b44b43862d2 + md5: e4e122e124676a49eebf241399ad8393 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 157828 + timestamp: 1785908793271 - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda sha256: 70c73d9fd24ad996f2821d1501adae2ca70984b4e2d8faed76227f348ce86078 md5: 4969128c45f9e71adbb6a1696679ce7f @@ -2945,6 +6310,32 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 49992 timestamp: 1787753517346 +- conda: https://prefix.dev/conda-forge/win-64/libfreetype-2.14.3-h57928b3_2.conda + sha256: d794d7fddb6eea50e18a62fa27ab3819f40d51bad00b90cf4ca591fb0d4006c2 + md5: 740f99c3c91079c03874b809fedace1b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 8742 + timestamp: 1786641045882 +- conda: https://prefix.dev/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_2.conda + sha256: cbc650854003e434d4ff6c7b1a2667e38a4242ad8a391a1c5ff89721624065ce + md5: 8157483eb7ed3fcba71aad3b50a97131 + depends: + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + run_exports: {} + size: 340385 + timestamp: 1786641044865 - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_3.conda sha256: 35e04e3ddac7720fc7c550a1c9f998604299d6a7bd1f3ec9b2825d825061daa2 md5: a8a2abdf0f901bc4779d9b7be0845921 @@ -2959,6 +6350,22 @@ packages: - libiconv >=1.18,<2.0a0 size: 694899 timestamp: 1787033851701 +- conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_1.conda + sha256: df78ab4c0eecb3dd9331898f96baeed8e5ca1c363346332517abeb0b614b9a53 + md5: fc2c23bacefd1e733f1e1d6cd3b2aaeb + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 990125 + timestamp: 1785896494014 - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda sha256: d36c4a1e1f80fd08e18a407e03622ff2f34dfdd022da6488ad19603dea19e6d5 md5: 880a0c8549479b198af21ba5dc49b109 @@ -2988,6 +6395,21 @@ packages: run_exports: {} size: 89109 timestamp: 1786650384519 +- conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.59-hdc8cecf_0.conda + sha256: 36050852deae6edc98d7b71489b8d07254e2753c69bd524bf5784927cd1f0b2c + md5: 05145e03eb7b7f4ad2e0575454061c87 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 385760 + timestamp: 1790805156982 - conda: https://prefix.dev/conda-forge/win-64/libpsl-0.23.1-h9b16d47_1.conda sha256: e53fe3b09f82b59b644264133d6d148ac31bb5451b7583cff55690bf038f2f62 md5: 39cdf8c4f59e4d253cfa8091c8b3d7de @@ -3048,6 +6470,26 @@ packages: - libssh2 >=1.11.1,<2.0a0 size: 295149 timestamp: 1786713186180 +- conda: https://prefix.dev/conda-forge/win-64/libtiff-4.7.2-h8f73337_1.conda + sha256: 3575a092e3e52625a1767804a4ebd321becaadf61b63dcd6735ebb88c0b3c359 + md5: 970dbe48f843e7fbd179a9b6c22f865a + depends: + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 1014211 + timestamp: 1787755773611 - conda: https://prefix.dev/conda-forge/win-64/libuv-1.52.1-h6a83c73_1.conda sha256: 0d62467380061cd0fa4b27e579c805a95c7ef55a41ecb067de0c4d2d42490c66 md5: 4ccef39545e98553cc900ea557dff085 @@ -3063,6 +6505,23 @@ packages: - libuv >=1.52.1,<2.0a0 size: 331195 timestamp: 1785914602690 +- conda: https://prefix.dev/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_1.conda + sha256: 4470d98d3178b0d45492eed4808afe421d2e7808352b8d06c2dc29166b75d94d + md5: 35a9475e4cc999d52921f57c181979fc + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 278886 + timestamp: 1785954716703 - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda sha256: 0629c2cc0404d3bb29d6baa7b4ba62da80797015e86de050db81ea5a07050527 md5: 5d2ff29d465097458cc3ff6569151991 @@ -3096,6 +6555,24 @@ packages: - m2-conda-epoch 20250515 *_x86_64 size: 7539 timestamp: 1747330852019 +- conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.4-h90fa87c_2.conda + sha256: d1c630ccd9ae0898b48d84e986f4c330f66a25e535f99efe8cbf03f042b33da5 + md5: d9b2cb1079cf59651722c09aa3a9f840 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.2,<4.8.0a0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - openjpeg >=2.5.4,<3.0a0 + size: 274994 + timestamp: 1788425052805 - conda: https://prefix.dev/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda sha256: bc44625e0c6d83f3e02b5f6adc01e0e3ca7001d3d94e24959591a57f5a011b9a md5: f002ec2237836867bfd3d1299a6005da @@ -3112,6 +6589,68 @@ packages: - openssl >=3.6.5,<4.0a0 size: 9402647 timestamp: 1791099870810 +- conda: https://prefix.dev/conda-forge/win-64/pillow-12.3.0-py314h6acc0e1_4.conda + sha256: ef77652c99881aa3bf33ca0f41a3d30ee89411f5510130a8593c8dc6fad4f3eb + md5: af66d9a6146d2bfb62fb308c693ffd8a + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - openjpeg >=2.5.4,<3.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - python_abi 3.14.* *_cp314 + - libtiff >=4.7.2,<4.8.0a0 + - lcms2 >=2.19.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - tk >=8.6.13,<8.7.0a0 + - libwebp-base >=1.6.0,<2.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + run_exports: {} + size: 988025 + timestamp: 1789122658720 +- conda: https://prefix.dev/conda-forge/win-64/py-rattler-0.27.1-py311h66afae6_0.conda + noarch: python + sha256: 4ea52d61232839fea777075820b6e8a249c3c3900f7c41dd9f9a34e0f07edf37 + md5: af8412bfb7a21f8fa4a875e13cee9537 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - _python_abi3_support 1.* + - cpython >=3.11 + extra_depends: + networkx: + - networkx + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/py-rattler?source=hash-mapping + run_exports: {} + size: 16318201 + timestamp: 1791293359071 +- conda: https://prefix.dev/conda-forge/win-64/pydantic-core-2.50.1-py314h9f07db2_0.conda + sha256: 262fa7a6652ebcbaa816de373472521de1cdd7e727bbfb0250f7bfb62c03cc7b + md5: 3b37e2650cb5f3527da4dc1d7fa45889 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - 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/pydantic-core?source=hash-mapping + run_exports: {} + size: 1998013 + timestamp: 1791753923328 - conda: https://prefix.dev/conda-forge/win-64/python-3.14.7-h53f6dd8_106_cp314.conda build_number: 106 sha256: 9fdcb8a5018d91a22484e67ac6c5ae9116f082f953328f43ed4421418740dfb1 @@ -3143,6 +6682,35 @@ packages: size: 18377601 timestamp: 1788384478011 python_site_packages_path: Lib/site-packages +- conda: https://prefix.dev/conda-forge/win-64/pywin32-312-py314hf700ef7_2.conda + sha256: d41aeb9004cdd408cb1a3e381a9d687a9f6bf2b128757bad182ecd782de8f07b + md5: 9857b7fee277b536d66781180d3b2204 + depends: + - python + - 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=compressed-mapping + run_exports: {} + size: 4473422 + timestamp: 1789685721822 +- conda: https://prefix.dev/conda-forge/win-64/pywin32-ctypes-0.2.3-py314h86ab7b2_4.conda + sha256: 36a483fe6cfc39af48bd70f7048b54a3ddb9025143fb9953c97138e7dc823e9c + md5: 202999e164caa1307ba59db8f071a88f + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + run_exports: {} + size: 58218 + timestamp: 1788533824733 - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda sha256: a2aff34027aa810ff36a190b75002d2ff6f9fbef71ec66e567616ac3a679d997 md5: 0cd9b88826d0f8db142071eb830bce56 @@ -3160,6 +6728,22 @@ packages: run_exports: {} size: 181257 timestamp: 1770223460931 +- conda: https://prefix.dev/conda-forge/win-64/qh3-1.9.4-py314h8a07082_0.conda + sha256: 8f47619fc8cf22daf02040e9b2cf695c8b6f40f851e7145982f58720eab80770 + md5: 5f0e4f76903ea368e51520fa48ae453d + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qh3?source=hash-mapping + run_exports: {} + size: 2033457 + timestamp: 1784169740544 - conda: https://prefix.dev/conda-forge/win-64/rattler-build-0.76.1-he94b42d_0.conda sha256: 8825b67ae50f887334350f0c81a0818b4cf551e1aca00a947d1fd74105732ff6 md5: 2b0a2e175aa4e3239c3c91c86f32d70c @@ -3188,6 +6772,22 @@ packages: run_exports: {} size: 7125817 timestamp: 1788610031611 +- conda: https://prefix.dev/conda-forge/win-64/rpds-py-2026.9.1-py314h9f07db2_0.conda + sha256: 03d56909370dae78f501718bb3f5ccc0b05bf4dcd56bfeecd0d39e61b3fa3d44 + md5: 26ca3c75e8d4dba8000448354f76008c + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + run_exports: {} + size: 221750 + timestamp: 1791202478076 - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda sha256: f19618a3a82cc483dacf1c70a30367ee7b0c7e71b90f1f80e14feff44fbd3688 md5: dd9eb33c99d352b6356f86964d6040f7 @@ -3273,6 +6873,21 @@ packages: - yaml >=0.2.5,<0.3.0a0 size: 63944 timestamp: 1753484092156 +- conda: https://prefix.dev/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda + sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 + md5: 46a21c0a4e65f1a135251fc7c8663f83 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - zlib-ng >=2.3.3,<2.4.0a0 + size: 124542 + timestamp: 1770167984883 - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda sha256: ca7daae4f218a11fab82cc2857f0ea518ec3f46acec60490485347a4c22c6b3e md5: e4ac308c39d6d0e131154976da67cf3b @@ -3305,11 +6920,6 @@ packages: - packaging>=23.0 - zstandard>=0.19.0 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl - name: certifi - version: 2026.7.22 - sha256: 62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/12/74/ef303ec980ef962ffe548fa36cb138bb399d1d1315731ba7bb81da85f7e0/rosdistro-1.1.0-py3-none-any.whl name: rosdistro version: 1.1.0 @@ -3337,11 +6947,6 @@ packages: - distro>=1.4.0 ; python_full_version >= '3.8' - pytest ; extra == 'test' requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.5.2 - sha256: 34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: zstandard version: 0.25.0 @@ -3413,18 +7018,6 @@ packages: - flake8-quotes ; extra == 'test' - pytest ; extra == 'test' requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl - name: idna - version: '3.20' - sha256: ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c - requires_dist: - - ruff>=0.16.0 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - ty>=0.0.37 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - hypothesis>=6.141.1 ; extra == 'all' - - coverage>=7.10.0 ; extra == 'all' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl name: jinja2 version: 3.1.6 @@ -3438,11 +7031,6 @@ packages: version: 3.0.4 sha256: 4cf3468d5ec187ffffcaca8e61929a37448f215dafc1386a12c750a72fe53634 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl - name: charset-normalizer - version: 3.5.2 - sha256: fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl name: networkx version: '3.7' @@ -3488,25 +7076,11 @@ packages: - pytest-mpl ; extra == 'test-extras' - pytest-randomly ; extra == 'test-extras' requires_python: '>=3.12,!=3.14.1' -- pypi: https://files.pythonhosted.org/packages/7f/72/9c5e7707b57c8ddfa9ddf7b0b1d009d7fbab9e9e887d5b721060f37e307d/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - name: charset-normalizer - version: 3.5.2 - sha256: 8d86d6fc60743dc916eb79e2eb1ec4818e21e427731543af40a3021851174a13 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/80/f0/5792ff768a410f93ee3f84fc19345295ffc352d2c936b424cb37e514714c/markupsafe-3.0.4-cp314-cp314-win_amd64.whl name: markupsafe version: 3.0.4 sha256: c1bc67752d5f21013cfe430df4062441714eab79f65a6a05e01505957e9c35fe requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl - name: rich - version: 15.0.0 - sha256: 33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb - requires_dist: - - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' - - markdown-it-py>=2.2.0 - - pygments>=2.13.0,<3.0.0 - requires_python: '>=3.9.0' - pypi: https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl name: zstandard version: 0.25.0 @@ -3520,34 +7094,11 @@ packages: version: 3.0.4 sha256: a8e9f292fcda89b324f2f5c91d13f1424a153e40fc2756f38ee23b15835ff300 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl - name: urllib3 - version: 2.8.0 - sha256: 0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 - requires_dist: - - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - - h2>=4,<5 ; extra == 'h2' - - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/9a/a8/73a81135e85ba66217f5af7facb03bbb386807e1a729ab64532e4c802652/markupsafe-3.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: markupsafe version: 3.0.4 sha256: 1caa2fa5a6184fb233153b35f654e6687bd555476f6170f29d8ee9be1a8b0af9 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - name: requests - version: 2.34.2 - sha256: 2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 - requires_dist: - - charset-normalizer>=2,<4 - - idna>=2.5,<4 - - urllib3>=1.26,<3 - - certifi>=2023.5.7 - - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: zstandard version: 0.25.0 @@ -3580,55 +7131,6 @@ packages: - sphinx-rtd-dark-mode>=1.3.0 ; extra == 'dev' - sphinx-copybutton ; extra == 'dev' requires_python: '>=3.9' -- 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/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl - name: markdown-it-py - version: 4.2.0 - sha256: 9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a - 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' - - pytest-timeout ; extra == 'testing' - - requests ; extra == 'testing' - requires_python: '>=3.10' -- 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/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl - name: charset-normalizer - version: 3.5.2 - sha256: e4e81e09c1578b8df602e3db08b0b3ea0a6947ad612f52bf8dc5ea8d47691f0c - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/e5/ca/78d423b324b8d77900030fa59c4aa9054261ef0925631cd2501dd015b7b7/boolean_py-5.0-py3-none-any.whl name: boolean-py version: '5.0' @@ -3645,10 +7147,3 @@ packages: - sphinx-rtd-theme>=0.5.0 ; extra == 'docs' - doc8>=0.8.1 ; extra == 'docs' - sphinxcontrib-apidoc>=0.3.0 ; extra == 'docs' -- 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.*' diff --git a/pixi.toml b/pixi.toml index 716bb690..528886e4 100644 --- a/pixi.toml +++ b/pixi.toml @@ -27,6 +27,10 @@ git-lfs = "*" pytest = ">=9.1.1,<10" # gh for the workflows: one version everywhere (the runner's is not on PATH on Windows) gh = ">=2.102.0,<3" +# copy_staging_packages.py and mirror_to_anaconda.py (channel maintenance) +anaconda-client = ">=1.14.1,<2" +niquests = ">=3.21.2,<4" +py-rattler = ">=0.27.1,<0.28" [target.win-64.dependencies] # patch is required by rattler-build diff --git a/tools/copy_staging_packages.py b/tools/copy_staging_packages.py new file mode 100644 index 00000000..eb7013ce --- /dev/null +++ b/tools/copy_staging_packages.py @@ -0,0 +1,212 @@ +"""Copy a distribution's packages from robostack-staging to robostack- (anaconda.org). + +humble and noetic upload to robostack-staging; this copies every package of the given +distribution built after a cutoff date that robostack- doesn't have yet, with +`anaconda copy` (the token is read from ANACONDA_API_TOKEN). Moved here from +RoboStack/robostack.github.io (scripts/copy-to-distro-specific-channel.py). +""" + +import argparse +import datetime +import subprocess + +import niquests +from rattler import MatchSpec +from urllib3.util.retry import Retry + +# Configuration +BASE_URL = "https://conda.anaconda.org" +SOURCE_CHANNEL = "robostack-staging" +PLATFORMS = [ + "linux-64", + "linux-aarch64", + "win-64", + "osx-64", + "osx-arm64", + "noarch", + "emscripten-wasm32", +] + +session = niquests.Session( + retries=Retry(total=5, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504]) +) + + +def fetch_repodata(channel: str, platform: str) -> dict: + """ + Fetch the repodata.json file from a given channel and platform. + + A 404 means the channel has no such platform yet and reads as empty. Anything + else raises: treating a transient error as an empty channel would make the run + copy nothing and still report success. + """ + url = f"{BASE_URL}/{channel}/{platform}/repodata.json" + response = session.get(url) + + if response.status_code == 404: + return {} + response.raise_for_status() + return response.json() or {} + + +def upload_package( + package_name_simple: str, + package_name: str, + version: str, + build: str, + platform: str, + destination_channel: str, +) -> None: + """ + Upload a package to the specified Anaconda channel. + """ + try: + # Construct the full package identifier with platform + package_identifier = ( + f"{SOURCE_CHANNEL}/{package_name_simple}/{version}/{platform}/{package_name}" + ) + + print( + f"Uploading package: {package_name}, version: {version}, " + f"build: {build}, platform: {platform}" + ) + command_vec = ["anaconda", "copy", package_identifier, "--to-owner", destination_channel] + subprocess.run(command_vec, check=True) + print( + f"Successfully uploaded: {package_name}, version: {version}, " + f"build: {build}, platform: {platform}" + ) + except subprocess.CalledProcessError as e: + print( + f"Failed to upload {package_name}, version {version}, " + f"build {build}, platform {platform}: {e}" + ) + + +# Get the timestamp in milliseconds from epoch, with an additional workaround +# for packages that for some reason have a timestamp in seconds instead of milliseconds +def get_timestamp_with_workaround_for_timestamp_in_seconds_instead_of_milliseconds( + pkg_data: dict, +) -> int: + timestamp = pkg_data["timestamp"] + # Workaround for https://github.com/RoboStack/ros-humble/issues/258 . + # If it seems that the packages was built before 2001, probably the timestamp is actually + # in seconds instead of milliseconds + if timestamp < 1000000000000: + timestamp *= 1000 + return timestamp + + +def belongs_to_distro(pkg_data: dict, distro: str) -> bool: + """Identify renamed ROS packages by their distro-specific mutex build pin. + + A version-only mutex pin is not enough: different distros can publish the + same mutex version. Require the literal distro name in the build selector. + """ + name = pkg_data["name"] + if name.startswith(f"ros-{distro}-"): + return True + if name in ("ros-distro-mutex", "ros2-distro-mutex"): + return pkg_data["build"].split("_", 1)[0] == distro + if not name.startswith("ros2-"): + return False + + for dependency in pkg_data.get("depends", []): + if dependency.split(" ", 1)[0] != "ros2-distro-mutex": + continue + build = MatchSpec(dependency).build + if build and build.split("_", 1)[0] == distro: + return True + return False + + +def main() -> None: + # Parse command-line arguments + parser = argparse.ArgumentParser( + description="Upload packages from robostack-staging to robostack-." + ) + parser.add_argument("distro", type=str, help="The distro upload (e.g., 'humble')") + parser.add_argument( + "cutoff", + type=str, + help=( + "Only package built after this cutoff date are uploaded. " + "The cutoff date is a a string with format YYYY-MM-DD." + ), + ) + args = parser.parse_args() + distro = args.distro + + destination_channel = f"robostack-{distro}" + + # Convert cutoff date to cutoff timestamps + cutoff_timestamp = int(datetime.datetime.strptime(args.cutoff, "%Y-%m-%d").timestamp() * 1000.0) + + # Fetch repodata.json for each platform from source and destination channels + source_repodata = {} + destination_repodata = {} + for platform in PLATFORMS: + source_repodata[platform] = fetch_repodata(SOURCE_CHANNEL, platform) + destination_repodata[platform] = fetch_repodata(destination_channel, platform) + + # Process packages for each platform + for platform in PLATFORMS: + print(f"Processing platform: {platform}") + + # Extract packages from source and destination + source_packages = {} + source_packages.update(source_repodata[platform].get("packages", {})) + source_packages.update(source_repodata[platform].get("packages.conda", {})) + destination_packages = {} + destination_packages.update(destination_repodata[platform].get("packages", {})) + destination_packages.update(destination_repodata[platform].get("packages.conda", {})) + destination_keys = { + (pkg_name, pkg_data["version"], pkg_data["build"]) + for pkg_name, pkg_data in destination_packages.items() + } + + # Filter packages that belong to the given distro + # and are newer then the specified cutoff date + filtered_packages = { + pkg_name: pkg_data + for pkg_name, pkg_data in source_packages.items() + if belongs_to_distro(pkg_data, distro) + and ( + get_timestamp_with_workaround_for_timestamp_in_seconds_instead_of_milliseconds( + pkg_data + ) + >= cutoff_timestamp + ) + } + + print( + f"Found {len(filtered_packages)} packages in {SOURCE_CHANNEL}/{platform} " + f"that belong to distro {distro}" + ) + + # Upload packages that are not already in the destination channel + for pkg_name, pkg_data in filtered_packages.items(): + package_name = pkg_name + version = pkg_data["version"] + build = pkg_data["build"] + package_name_simple = pkg_data["name"] + + if (package_name, version, build) not in destination_keys: + upload_package( + package_name_simple, + package_name, + version, + build, + platform, + destination_channel, + ) + else: + print( + f"Package {package_name}, version {version}, build {build}, " + f"platform {platform} already exists in {destination_channel}. " + "Skipping upload." + ) + + +if __name__ == "__main__": + main() diff --git a/tools/mirror_to_anaconda.py b/tools/mirror_to_anaconda.py new file mode 100644 index 00000000..1af8beed --- /dev/null +++ b/tools/mirror_to_anaconda.py @@ -0,0 +1,114 @@ +"""Mirror a prefix.dev channel to an anaconda.org channel. + +The distributions upload to prefix.dev. Users who still install from the old +anaconda.org channels get the same packages through this mirror: every package of +the prefix.dev channel that the anaconda.org channel does not have yet is downloaded, +checked against the sha256 of the prefix.dev repodata and uploaded with +`anaconda upload` (the token is read from ANACONDA_API_TOKEN). +""" + +import argparse +import hashlib +import subprocess +import tempfile +from pathlib import Path + +import niquests +from urllib3.util.retry import Retry + +SOURCE_URL = "https://prefix.dev" +DESTINATION_URL = "https://conda.anaconda.org" +PLATFORMS = [ + "linux-64", + "linux-aarch64", + "win-64", + "osx-64", + "osx-arm64", + "noarch", + "emscripten-wasm32", +] + +session = niquests.Session( + retries=Retry(total=5, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504]) +) + + +def fetch_packages(base_url: str, channel: str, platform: str) -> dict[str, dict]: + """The packages of a channel's platform by file name. + + A 404 means the channel has no such platform yet and reads as empty. Anything + else raises: treating a transient error as an empty channel would make the run + upload everything again or nothing at all. + """ + response = session.get(f"{base_url}/{channel}/{platform}/repodata.json") + if response.status_code == 404: + return {} + response.raise_for_status() + repodata = response.json() or {} + return {**repodata.get("packages", {}), **repodata.get("packages.conda", {})} + + +def missing_packages(source: dict[str, dict], destination: dict[str, dict]) -> list[str]: + """File names in the source channel that the destination channel doesn't have.""" + return sorted(set(source) - set(destination)) + + +def download(url: str, sha256: str, target: Path) -> None: + response = session.get(url) + response.raise_for_status() + content = response.content or b"" + if hashlib.sha256(content).hexdigest() != sha256: + raise RuntimeError(f"sha256 mismatch for {url}") + target.write_bytes(content) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("source", help="prefix.dev channel, e.g. robostack-jazzy") + parser.add_argument("destination", help="anaconda.org channel, e.g. robostack-jazzy") + parser.add_argument( + "--dry-run", action="store_true", help="only list the packages that would be uploaded" + ) + args = parser.parse_args() + + failed = [] + for platform in PLATFORMS: + source = fetch_packages(SOURCE_URL, args.source, platform) + destination = fetch_packages(DESTINATION_URL, args.destination, platform) + missing = missing_packages(source, destination) + print(f"{platform}: {len(missing)} of {len(source)} packages to upload") + if args.dry_run: + for filename in missing: + print(f" {filename}") + continue + + with tempfile.TemporaryDirectory() as directory: + for filename in missing: + path = Path(directory) / filename + try: + download( + f"{SOURCE_URL}/{args.source}/{platform}/{filename}", + source[filename]["sha256"], + path, + ) + subprocess.run( + ["anaconda", "upload", "--user", args.destination, str(path)], + check=True, + ) + print(f"uploaded {platform}/{filename}") + except ( + niquests.RequestException, + RuntimeError, + subprocess.CalledProcessError, + ) as e: + print(f"failed {platform}/{filename}: {e}") + failed.append(f"{platform}/{filename}") + finally: + path.unlink(missing_ok=True) + + if failed: + raise SystemExit(f"{len(failed)} packages could not be mirrored") + + +if __name__ == "__main__": + main() diff --git a/tools/tests/test_copy_staging_packages.py b/tools/tests/test_copy_staging_packages.py new file mode 100644 index 00000000..4501d977 --- /dev/null +++ b/tools/tests/test_copy_staging_packages.py @@ -0,0 +1,53 @@ +"""copy_staging_packages: which robostack-staging packages belong to a distribution.""" + +import pytest + +from copy_staging_packages import belongs_to_distro + + +@pytest.mark.parametrize( + ("dependencies", "expected"), + [ + (["ros2-distro-mutex 0.10.* humble_*"], True), + ( + [ + "ros2-distro-mutex >=0.10.0,<0.11.0a0", + "ros2-distro-mutex 0.10.* humble_*", + ], + True, + ), + (["ros2-distro-mutex 0.10.* jazzy_*"], False), + (["ros2-distro-mutex >=0.10.0,<0.11.0a0"], False), + (["ros2-distro-mutex 0.10.* *"], False), + (["ros2-distro-mutex 0.10.* humble-other_*"], False), + (["ros2-rcl 16.*"], False), + ([], False), + ], +) +def test_renamed_package_requires_distro_build_pin(dependencies: list[str], expected: bool) -> None: + artifact = {"name": "ros2-rclcpp", "depends": dependencies} + assert belongs_to_distro(artifact, "humble") is expected + + +def test_legacy_packages_and_shims_remain_distro_specific() -> None: + shim = {"name": "ros-humble-rclcpp", "depends": ["ros2-rclcpp ==16.0.19"]} + assert belongs_to_distro(shim, "humble") + assert not belongs_to_distro(shim, "jazzy") + assert belongs_to_distro({"name": "ros-noetic-roscpp"}, "noetic") + assert not belongs_to_distro({"name": "ros-humble-other-rclcpp"}, "hum") + + +@pytest.mark.parametrize( + ("name", "build", "distro", "expected"), + [ + ("ros2-distro-mutex", "humble_20", "humble", True), + ("ros2-distro-mutex", "humble", "humble", True), + ("ros2-distro-mutex", "jazzy_20", "humble", False), + ("ros2-distro-mutex", "not-humble_20", "humble", False), + ("ros-distro-mutex", "noetic_1", "noetic", True), + ], +) +def test_mutex_build_identifies_its_distro( + name: str, build: str, distro: str, expected: bool +) -> None: + assert belongs_to_distro({"name": name, "build": build}, distro) is expected diff --git a/tools/tests/test_mirror_to_anaconda.py b/tools/tests/test_mirror_to_anaconda.py new file mode 100644 index 00000000..3d7c757a --- /dev/null +++ b/tools/tests/test_mirror_to_anaconda.py @@ -0,0 +1,36 @@ +"""mirror_to_anaconda: which packages are uploaded, and the download check.""" + +import hashlib +from pathlib import Path + +import pytest + +import mirror_to_anaconda as mirror + + +def test_only_packages_missing_on_anaconda_are_uploaded() -> None: + source = {"a-1-0.conda": {}, "b-1-0.conda": {}, "c-1-0.tar.bz2": {}} + destination = {"b-1-0.conda": {}} + assert mirror.missing_packages(source, destination) == ["a-1-0.conda", "c-1-0.tar.bz2"] + + +class FakeResponse: + def __init__(self, content: bytes) -> None: + self.content = content + + def raise_for_status(self) -> None: + pass + + +def test_download_rejects_a_sha256_mismatch( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + session = mirror.session + monkeypatch.setattr(session, "get", lambda url: FakeResponse(b"package")) + target = tmp_path / "a-1-0.conda" + + mirror.download("url", hashlib.sha256(b"package").hexdigest(), target) + assert target.read_bytes() == b"package" + + with pytest.raises(RuntimeError, match="sha256 mismatch"): + mirror.download("url", hashlib.sha256(b"other").hexdigest(), tmp_path / "b.conda") From b08129b3b3fea9947c8bff517e3573b6a7099928 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Fri, 16 Oct 2026 20:41:37 +1000 Subject: [PATCH 2/2] Upload every distribution to robostack- on anaconda.org and prefix.dev Instead of a mirror job (#54): the build uploads each package to anaconda.org (token ANACONDA_API_TOKEN, --force) and then to prefix.dev (trusted publishing), both robostack-; the builds read prefix.dev. Nothing goes to robostack-staging anymore: humble's channel is robostack-humble, and rolling and lyrical get their anaconda.org channels populated. channel_name and upload_target leave distro.yaml. anaconda.org goes first so that prefix.dev, which decides what is built, never has a package anaconda.org lacks; a rebuild replaces the anaconda.org file. The staging copy stays for noetic only (RoboStack/ros-noetic still uploads to robostack-staging). Co-Authored-By: Claude Opus 5.5 --- .github/workflows/copy-staging-packages.yaml | 8 +- .github/workflows/mirror-to-anaconda.yaml | 53 --------- README.md | 24 ++-- distros/humble/distro.yaml | 2 - distros/jazzy/distro.yaml | 2 - distros/lyrical/distro.yaml | 2 - distros/rolling/distro.yaml | 2 - pixi.toml | 2 +- tools/abi_check.py | 6 +- tools/copy_staging_packages.py | 7 +- tools/import_distro.py | 11 +- tools/maintenance.py | 16 +-- tools/mirror_to_anaconda.py | 114 ------------------- tools/robostack.py | 57 ++++++---- tools/tests/test_mirror_to_anaconda.py | 36 ------ tools/tests/test_upload.py | 64 +++++++++++ 16 files changed, 131 insertions(+), 275 deletions(-) delete mode 100644 .github/workflows/mirror-to-anaconda.yaml delete mode 100644 tools/mirror_to_anaconda.py delete mode 100644 tools/tests/test_mirror_to_anaconda.py create mode 100644 tools/tests/test_upload.py diff --git a/.github/workflows/copy-staging-packages.yaml b/.github/workflows/copy-staging-packages.yaml index 6a911a8b..a87480f0 100644 --- a/.github/workflows/copy-staging-packages.yaml +++ b/.github/workflows/copy-staging-packages.yaml @@ -1,6 +1,7 @@ -# humble and noetic upload to robostack-staging: copy their packages on to -# robostack-humble / robostack-noetic (tools/copy_staging_packages.py). Moved here from -# RoboStack/robostack.github.io. A job without its token secret is skipped. +# noetic (RoboStack/ros-noetic) uploads to robostack-staging: copy its packages on to +# robostack-noetic (tools/copy_staging_packages.py). Moved here from +# RoboStack/robostack.github.io. The distributions of this repository upload to their +# own channels directly (tools/robostack.py upload). Skipped without the token secret. name: Copy staging packages on: @@ -18,7 +19,6 @@ jobs: matrix: include: - { distro: noetic, token: ROBOSTACK_NOETIC_ANACONDA_API_TOKEN } - - { distro: humble, token: ROBOSTACK_HUMBLE_ANACONDA_API_TOKEN } name: copy ${{ matrix.distro }} runs-on: ubuntu-latest steps: diff --git a/.github/workflows/mirror-to-anaconda.yaml b/.github/workflows/mirror-to-anaconda.yaml deleted file mode 100644 index c2d701a1..00000000 --- a/.github/workflows/mirror-to-anaconda.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# The distributions upload to prefix.dev; this keeps the old anaconda.org channels that -# users still install from up to date (tools/mirror_to_anaconda.py). Channels that are -# empty on anaconda.org (robostack-rolling, robostack-lyrical) stay empty. -# -# Only started by hand until the distributions' own prefix.dev channels are set up: -# today prefix.dev's robostack-staging and robostack-jazzy are mirrors *of* anaconda.org, -# and mirroring them back would re-upload packages that were removed there. Add a -# schedule (e.g. cron "12 * * * *") and set the source channels once they are (#54). -name: Mirror prefix.dev channels to anaconda.org - -on: - workflow_dispatch: - inputs: - dry_run: - description: Only list the packages that would be uploaded - type: boolean - default: true - -permissions: - contents: read - -jobs: - mirror: - strategy: - fail-fast: false - matrix: - include: - # humble goes to robostack-staging; copy-staging-packages.yaml copies it on to - # robostack-humble as before - - { source: robostack-humble, destination: robostack-staging, token: ROBOSTACK_STAGING_ANACONDA_API_TOKEN } - - { source: robostack-jazzy, destination: robostack-jazzy, token: ROBOSTACK_JAZZY_ANACONDA_API_TOKEN } - name: mirror ${{ matrix.source }} -> ${{ matrix.destination }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Disable git auto-maintenance - run: git config --global maintenance.auto false && git config --global gc.auto 0 - - uses: prefix-dev/setup-pixi@v0.11.0 - with: - locked: true - pixi-version: v0.81.0 - cache-write: false - - name: Mirror - env: - ANACONDA_API_TOKEN: ${{ secrets[matrix.token] }} - SOURCE: ${{ matrix.source }} - DESTINATION: ${{ matrix.destination }} - DRY_RUN: ${{ inputs.dry_run && '--dry-run' || '' }} - run: | - if [ -z "$ANACONDA_API_TOKEN" ] && [ -z "$DRY_RUN" ]; then echo "::notice::no ${{ matrix.token }} secret: skipped"; exit 0; fi - pixi run python tools/mirror_to_anaconda.py "$SOURCE" "$DESTINATION" $DRY_RUN diff --git a/README.md b/README.md index 91c4872c..4aac4de6 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,13 @@ the [RoboStack documentation](https://robostack.github.io/GettingStarted.html). | Distribution | Channel | |---|---| -| rolling | [robostack-rolling](https://prefix.dev/channels/robostack-rolling) | -| lyrical | [robostack-lyrical](https://prefix.dev/channels/robostack-lyrical) | -| jazzy | [robostack-jazzy](https://anaconda.org/robostack-jazzy) | -| humble | [robostack-staging](https://anaconda.org/robostack-staging) | +| rolling | robostack-rolling ([prefix.dev](https://prefix.dev/channels/robostack-rolling), [anaconda.org](https://anaconda.org/robostack-rolling)) | +| lyrical | robostack-lyrical ([prefix.dev](https://prefix.dev/channels/robostack-lyrical), [anaconda.org](https://anaconda.org/robostack-lyrical)) | +| jazzy | robostack-jazzy ([prefix.dev](https://prefix.dev/channels/robostack-jazzy), [anaconda.org](https://anaconda.org/robostack-jazzy)) | +| humble | robostack-humble ([prefix.dev](https://prefix.dev/channels/robostack-humble), [anaconda.org](https://anaconda.org/robostack-humble)) | + +Every distribution uploads the same packages to both: `-c robostack-` (anaconda.org) +and `-c https://prefix.dev/robostack-` work alike. Packages are named `ros2-`, e.g. `ros2-desktop` or `ros2-rclcpp`; the distribution comes from the channel. The older names keep working: for every package @@ -60,7 +63,7 @@ tools/robostack.py `pixi run rs ...`: every task, for one distribution o tools/maintenance.py checks and robostack-bot commands tools/import_distro.py (re)import a distribution from its own repository tools/*.py check_patches_clean_apply, check_dependency_compat, build_gap_report, ... -tools/copy_staging_packages.py, mirror_to_anaconda.py channel maintenance (workflows below) +tools/copy_staging_packages.py noetic's staging copy (see CI) .scripts/ staged build scripts (build_unix.sh, build_win.bat) .github/workflows/ testpr.yaml, main.yaml (staged build branches), bot.yaml, channel maintenance .claude/skills/ procedures for agents (debug a build, patches, versions/rebuilds, package selection) @@ -120,18 +123,19 @@ label doesn't start one by itself. Nothing has to be reset before merging. - Each selected distribution is built on all five platforms, with its own build cache. The `check` job runs `pixi run rs check`. - **After a merge** (`main.yaml`): for every changed distribution and platform, the job regenerates the recipes and the staged build workflow, and pushes them to `buildbranch__`. - Each build branch carries its workflow as `.github/workflows/build.yaml`, which runs `.scripts/build_*.sh` in `distros//work`. - - Those workflows build the packages and upload them to the distribution's channel. + - Those workflows build the packages and upload them to the distribution's channels, `robostack-` on anaconda.org and then on prefix.dev (`pixi run rs upload`). The builds read prefix.dev. - **Repository variables:** - `ROBOSTACK_UPLOAD_CHANNEL`: upload to this prefix.dev channel instead (for example a test channel), or `none` to build without uploading. Use the canonical reference: `/` for a channel that isn't the namespace's primary one (e.g. `tobias-fischer/robostack-distro-test`). - - Upload credentials: prefix.dev channels use Repository Access (OIDC, no stored key). In the channel's *Settings > Repository Access*, authorize GitHub, this repository, workflow filename `build.yaml`, mode *Read/write*. There are no upload tokens: distributions whose channel is still on anaconda.org (`upload_target: anaconda`, read from there) can only upload to a prefix.dev channel set in `ROBOSTACK_UPLOAD_CHANNEL`. + - Upload credentials: + - prefix.dev channels use Repository Access (OIDC, no stored key). In the channel's *Settings > Repository Access*, authorize GitHub, this repository, workflow filename `build.yaml`, mode *Read/write*. + - anaconda.org has no trusted publishing: the secret `ANACONDA_API_TOKEN` is a token of an account that can upload to every `robostack-` channel there. + - With `ROBOSTACK_UPLOAD_CHANNEL` set, the uploads only go to that channel. - `ROBOSTACK_BOT_CLIENT_ID` (the App's Client ID, `Iv23…`) with the secret `ROBOSTACK_BOT_PRIVATE_KEY`: the robostack-bot GitHub App. It pushes the build branches (which contain workflow files) and opens bot PRs so that CI runs on them. `GHA_PAT` works as a fallback. The app needs repository permissions Contents, Pull requests, Issues and Workflows (read and write), with its webhook inactive. - **Channel maintenance:** - - `copy-staging-packages.yaml` (hourly): copies humble's and noetic's packages from `robostack-staging` on to `robostack-humble` / `robostack-noetic` (`anaconda copy`). Secrets `ROBOSTACK_HUMBLE_ANACONDA_API_TOKEN`, `ROBOSTACK_NOETIC_ANACONDA_API_TOKEN`. - - `mirror-to-anaconda.yaml` (started by hand for now, dry run by default): uploads what a prefix.dev channel has and its old anaconda.org channel doesn't (humble → `robostack-staging`, jazzy → `robostack-jazzy`). Secrets `ROBOSTACK_STAGING_ANACONDA_API_TOKEN`, `ROBOSTACK_JAZZY_ANACONDA_API_TOKEN`. - - A job without its secret is skipped. + - `copy-staging-packages.yaml` (hourly): noetic (RoboStack/ros-noetic) still uploads to `robostack-staging`; this copies its packages on to `robostack-noetic` (`anaconda copy`, secret `ROBOSTACK_NOETIC_ANACONDA_API_TOKEN`; skipped without it). ### robostack-bot diff --git a/distros/humble/distro.yaml b/distros/humble/distro.yaml index 3401f176..560381c4 100644 --- a/distros/humble/distro.yaml +++ b/distros/humble/distro.yaml @@ -1,7 +1,5 @@ # Settings of ros-humble that differ from the other distributions # (everything else is shared, see the README). -channel_name: robostack-staging -upload_target: anaconda conda_forge_pinning_version: 2026.09.01.16.28.00 conda_forge_migrations: [giflib6, go_macos, gstreamer128, hdf52, libboost190, pybind11_abi11, urdfdom6, vtk970] diff --git a/distros/jazzy/distro.yaml b/distros/jazzy/distro.yaml index 13c89340..70e8275b 100644 --- a/distros/jazzy/distro.yaml +++ b/distros/jazzy/distro.yaml @@ -1,7 +1,5 @@ # Settings of ros-jazzy that differ from the other distributions # (everything else is shared, see the README). -channel_name: robostack-jazzy -upload_target: anaconda conda_forge_pinning_version: 2026.09.01.16.28.00 conda_forge_migrations: [giflib6, go_macos, gstreamer128, hdf52, libboost190, pybind11_abi11, urdfdom6, vtk970] diff --git a/distros/lyrical/distro.yaml b/distros/lyrical/distro.yaml index 9d7f0f5b..dfaf2b06 100644 --- a/distros/lyrical/distro.yaml +++ b/distros/lyrical/distro.yaml @@ -1,7 +1,5 @@ # Settings of ros-lyrical that differ from the other distributions # (everything else is shared, see the README). -channel_name: robostack-lyrical -upload_target: prefix conda_forge_pinning_version: 2026.10.09.13.11.31 conda_forge_migrations: [elfutils0196, giflib6, go_macos, gsl28, gstreamer128, hdf52, libboost190, libhwloc2150, proj99, urdfdom6] pinning_overrides: diff --git a/distros/rolling/distro.yaml b/distros/rolling/distro.yaml index daeb404b..2239f25a 100644 --- a/distros/rolling/distro.yaml +++ b/distros/rolling/distro.yaml @@ -1,7 +1,5 @@ # Settings of ros-rolling that differ from the other distributions # (everything else is shared, see the README). -channel_name: robostack-rolling -upload_target: prefix conda_forge_pinning_version: 2026.09.01.16.28.00 conda_forge_migrations: [giflib6, go_macos, gstreamer128, hdf52, libboost190, pybind11_abi11, urdfdom6, vtk970] diff --git a/pixi.toml b/pixi.toml index 528886e4..b8656a52 100644 --- a/pixi.toml +++ b/pixi.toml @@ -27,7 +27,7 @@ git-lfs = "*" pytest = ">=9.1.1,<10" # gh for the workflows: one version everywhere (the runner's is not on PATH on Windows) gh = ">=2.102.0,<3" -# copy_staging_packages.py and mirror_to_anaconda.py (channel maintenance) +# tools/copy_staging_packages.py (noetic: robostack-staging -> robostack-noetic) anaconda-client = ">=1.14.1,<2" niquests = ">=3.21.2,<4" py-rattler = ">=0.27.1,<0.28" diff --git a/tools/abi_check.py b/tools/abi_check.py index a601256b..5b50e3f6 100644 --- a/tools/abi_check.py +++ b/tools/abi_check.py @@ -338,13 +338,9 @@ def channel_for(distro: str) -> list[str]: sys.path.insert(0, str(Path(__file__).parent)) import robostack as rs - s = rs.settings(distro) - name = s.get("channel_name", f"robostack-{distro}") upload = os.environ.get("ROBOSTACK_UPLOAD_CHANNEL", "").strip() extra = [f"https://repo.prefix.dev/{upload}"] if upload and upload != "none" else [] - if s.get("upload_target", "prefix") == "prefix": - return extra + [f"https://repo.prefix.dev/{name}"] - return extra + [f"https://conda.anaconda.org/{name}"] + return extra + [f"https://repo.prefix.dev/{rs.channel_name(distro)}"] def download(channel: str, platform: str, filename: str, dest: Path) -> Path: diff --git a/tools/copy_staging_packages.py b/tools/copy_staging_packages.py index eb7013ce..8259e4f0 100644 --- a/tools/copy_staging_packages.py +++ b/tools/copy_staging_packages.py @@ -1,8 +1,9 @@ """Copy a distribution's packages from robostack-staging to robostack- (anaconda.org). -humble and noetic upload to robostack-staging; this copies every package of the given -distribution built after a cutoff date that robostack- doesn't have yet, with -`anaconda copy` (the token is read from ANACONDA_API_TOKEN). Moved here from +noetic uploads to robostack-staging (humble did, too, before it moved here); this +copies every package of the given distribution built after a cutoff date that +robostack- doesn't have yet, with `anaconda copy` (the token is read from +ANACONDA_API_TOKEN). Moved here from RoboStack/robostack.github.io (scripts/copy-to-distro-specific-channel.py). """ diff --git a/tools/import_distro.py b/tools/import_distro.py index 3a2ff073..9d09227c 100644 --- a/tools/import_distro.py +++ b/tools/import_distro.py @@ -14,9 +14,8 @@ ros-- dependency names become ros2- - patch/ patches renamed to ros2-[.].patch - rosdistro_snapshot.yaml, rosdistro_additional_recipes.yaml as they are -- distro.yaml channel and upload target (from its pixi.toml), its - conda-forge pinning version, migrations and the pins that - differ from shared/pinning/overrides.yaml (vinca_pinning.yaml) +- distro.yaml its conda-forge pinning version, migrations and the pins + that differ from shared/pinning/overrides.yaml (vinca_pinning.yaml) - ci.yaml reset to the defaults Afterwards: `pixi run rs render-pinning`, `pixi run sort`, `pixi run rs check`. @@ -205,12 +204,8 @@ def import_distro(src: Source, distro: str | None) -> str: ry.dump(data, fh) # distro.yaml - pixi = src.text("pixi.toml") or "" + # (the channel is robostack- on prefix.dev and anaconda.org, see rs.upload) settings: dict = {} - if m := re.search(r'upload\s*=\s*"rattler-build upload prefix -c (\S+)', pixi): - settings.update(channel_name=m.group(1), upload_target="prefix") - elif m := re.search(r'upload\s*=\s*"rattler-build upload anaconda -o (\S+)', pixi): - settings.update(channel_name=m.group(1), upload_target="anaconda") pinning = yaml.safe_load(src.text("vinca_pinning.yaml") or "") or {} if pinning.get("conda_forge_pinning_version"): settings["conda_forge_pinning_version"] = str(pinning["conda_forge_pinning_version"]) diff --git a/tools/maintenance.py b/tools/maintenance.py index f995e735..4c4ccc4c 100644 --- a/tools/maintenance.py +++ b/tools/maintenance.py @@ -108,9 +108,7 @@ def released_builds(distro: str) -> dict[str, int] | None: import urllib.error import urllib.request - s = rs.settings(distro) - name = s.get("channel_name", f"robostack-{distro}") - base = f"https://repo.prefix.dev/{name}" if s.get("upload_target", "prefix") == "prefix" else rs.channel_url(distro) + base = f"https://repo.prefix.dev/{rs.channel_name(distro)}" builds: dict[str, int] = {} read = False for subdir in REPODATA_SUBDIRS: @@ -414,10 +412,8 @@ def update_snapshot(distro: str) -> Result: def find_stale(distro: str) -> Result: - s = rs.settings(distro) - name = s.get("channel_name", f"robostack-{distro}") # repo.prefix.dev serves repodata directly (prefix.dev redirects) - url = f"https://repo.prefix.dev/{name}" if s.get("upload_target", "prefix") == "prefix" else rs.channel_url(distro) + url = f"https://repo.prefix.dev/{rs.channel_name(distro)}" rs.prepare(distro) proc = subprocess.run( [sys.executable, str(rs.TOOLS / "check_dependency_compat.py"), "--stale", "--repodata", url], @@ -610,12 +606,9 @@ def new_distro(name: str, source: str) -> Result: def _populate_new_distro(name: str, source: str, src: Path, dest: Path) -> Result: - settings = rs.settings(source) - keep = {k: settings[k] for k in ("upload_target",) if k in settings} (dest / "distro.yaml").write_text( f"# Settings of ros-{name} that differ from the other distributions\n" "# (everything else is shared, see the README).\n" - + yaml.safe_dump({"channel_name": f"robostack-{name}", **keep}, sort_keys=False) ) vinca = (src / "vinca.yaml").read_text() vinca = re.sub(r"(?m)^ros_distro:.*$", f"ros_distro: {name}", vinca) @@ -1232,15 +1225,12 @@ def check() -> Result: """Sanity checks: every distribution assembles and its generated files are consistent.""" problems: list[str] = [] all_packages: set[str] = set() - known = {"channel_name", "upload_target", "conda_forge_pinning_version", "conda_forge_migrations", "pinning_overrides", - "rosdistro_sync"} + known = {"conda_forge_pinning_version", "conda_forge_migrations", "pinning_overrides", "rosdistro_sync"} for distro in rs.distros(): d = rs.DISTROS / distro settings = rs.settings(distro) if unknown := set(settings) - known: problems.append(f"{distro}: unknown keys in distro.yaml: {sorted(unknown)}") - if settings.get("upload_target", "prefix") not in ("prefix", "anaconda"): - problems.append(f"{distro}: upload_target must be prefix or anaconda") sync = settings.get("rosdistro_sync") if sync is not None and sync != "manual" and not ((m := SYNC_TAG.match(str(sync))) and m["distro"] == distro): problems.append(f"{distro}: rosdistro_sync must be 'manual' or a sync tag like {distro}/2026-10-05") diff --git a/tools/mirror_to_anaconda.py b/tools/mirror_to_anaconda.py deleted file mode 100644 index 1af8beed..00000000 --- a/tools/mirror_to_anaconda.py +++ /dev/null @@ -1,114 +0,0 @@ -"""Mirror a prefix.dev channel to an anaconda.org channel. - -The distributions upload to prefix.dev. Users who still install from the old -anaconda.org channels get the same packages through this mirror: every package of -the prefix.dev channel that the anaconda.org channel does not have yet is downloaded, -checked against the sha256 of the prefix.dev repodata and uploaded with -`anaconda upload` (the token is read from ANACONDA_API_TOKEN). -""" - -import argparse -import hashlib -import subprocess -import tempfile -from pathlib import Path - -import niquests -from urllib3.util.retry import Retry - -SOURCE_URL = "https://prefix.dev" -DESTINATION_URL = "https://conda.anaconda.org" -PLATFORMS = [ - "linux-64", - "linux-aarch64", - "win-64", - "osx-64", - "osx-arm64", - "noarch", - "emscripten-wasm32", -] - -session = niquests.Session( - retries=Retry(total=5, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504]) -) - - -def fetch_packages(base_url: str, channel: str, platform: str) -> dict[str, dict]: - """The packages of a channel's platform by file name. - - A 404 means the channel has no such platform yet and reads as empty. Anything - else raises: treating a transient error as an empty channel would make the run - upload everything again or nothing at all. - """ - response = session.get(f"{base_url}/{channel}/{platform}/repodata.json") - if response.status_code == 404: - return {} - response.raise_for_status() - repodata = response.json() or {} - return {**repodata.get("packages", {}), **repodata.get("packages.conda", {})} - - -def missing_packages(source: dict[str, dict], destination: dict[str, dict]) -> list[str]: - """File names in the source channel that the destination channel doesn't have.""" - return sorted(set(source) - set(destination)) - - -def download(url: str, sha256: str, target: Path) -> None: - response = session.get(url) - response.raise_for_status() - content = response.content or b"" - if hashlib.sha256(content).hexdigest() != sha256: - raise RuntimeError(f"sha256 mismatch for {url}") - target.write_bytes(content) - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) - parser.add_argument("source", help="prefix.dev channel, e.g. robostack-jazzy") - parser.add_argument("destination", help="anaconda.org channel, e.g. robostack-jazzy") - parser.add_argument( - "--dry-run", action="store_true", help="only list the packages that would be uploaded" - ) - args = parser.parse_args() - - failed = [] - for platform in PLATFORMS: - source = fetch_packages(SOURCE_URL, args.source, platform) - destination = fetch_packages(DESTINATION_URL, args.destination, platform) - missing = missing_packages(source, destination) - print(f"{platform}: {len(missing)} of {len(source)} packages to upload") - if args.dry_run: - for filename in missing: - print(f" {filename}") - continue - - with tempfile.TemporaryDirectory() as directory: - for filename in missing: - path = Path(directory) / filename - try: - download( - f"{SOURCE_URL}/{args.source}/{platform}/{filename}", - source[filename]["sha256"], - path, - ) - subprocess.run( - ["anaconda", "upload", "--user", args.destination, str(path)], - check=True, - ) - print(f"uploaded {platform}/{filename}") - except ( - niquests.RequestException, - RuntimeError, - subprocess.CalledProcessError, - ) as e: - print(f"failed {platform}/{filename}: {e}") - failed.append(f"{platform}/{filename}") - finally: - path.unlink(missing_ok=True) - - if failed: - raise SystemExit(f"{len(failed)} packages could not be mirrored") - - -if __name__ == "__main__": - main() diff --git a/tools/robostack.py b/tools/robostack.py index fa2de6e5..ca619df2 100644 --- a/tools/robostack.py +++ b/tools/robostack.py @@ -49,12 +49,15 @@ def settings(distro: str) -> dict: return yaml.safe_load((DISTROS / distro / "distro.yaml").read_text()) or {} +def channel_name(distro: str) -> str: + """Every distribution's channel: robostack-, on prefix.dev (what the builds + read, and their first upload) and on anaconda.org (the same packages, so that + `-c robostack-` keeps working).""" + return f"robostack-{distro}" + + def channel_url(distro: str) -> str: - s = settings(distro) - name = s.get("channel_name", f"robostack-{distro}") - if s.get("upload_target", "prefix") == "prefix": - return f"https://prefix.dev/{name}" - return f"https://conda.anaconda.org/{name}" + return f"https://prefix.dev/{channel_name(distro)}" def run(cmd: list[str], cwd: Path) -> int: @@ -251,30 +254,44 @@ def rattler_build(distro: str, args: list[str], skip_existing: bool = True) -> l def upload(distro: str, files: list[str], cwd: Path) -> int: - """Upload to the distribution's channel. + """Upload to the distribution's channels: anaconda.org, then prefix.dev. + + prefix.dev uses trusted publishing (Repository Access, OIDC; no stored key) and + publishes an attestation. anaconda.org has no trusted publishing: the + ANACONDA_API_TOKEN repository secret belongs to an account that can upload to every + robostack- channel there. anaconda.org goes first and replaces a file it + already has: prefix.dev decides what is built (skip_existing), so a package whose + prefix.dev upload failed is built again and both channels end up with that build. ROBOSTACK_UPLOAD_CHANNEL (set by the staged build workflows from the repository - variable of the same name) redirects uploads to another prefix.dev channel, e.g. - a test channel (the builds then also read from it, see rattler_build); "none" - skips uploading. prefix.dev uploads use trusted publishing (Repository Access, - OIDC; no stored key) and publish an attestation. + variable of the same name) redirects the uploads to one other prefix.dev channel, + e.g. a test channel (the builds then also read from it, see rattler_build); "none" + skips uploading. """ override = os.environ.get("ROBOSTACK_UPLOAD_CHANNEL", "").strip() if override == "none": print(f"ROBOSTACK_UPLOAD_CHANNEL=none: not uploading {' '.join(files)}") return 0 - s = settings(distro) - if not override and s.get("upload_target", "prefix") != "prefix": - # anaconda.org has no trusted publishing, and we keep no tokens - print(f"{distro}'s channel {s.get('channel_name')} is on anaconda.org: uploads go to prefix.dev only " - "(set ROBOSTACK_UPLOAD_CHANNEL, or move the channel to prefix.dev)", file=sys.stderr) + prefix = ["rattler-build", "upload", "prefix", "-c", override or channel_name(distro), "--skip-existing", + "--generate-attestation"] + if override: + return upload_with_retries(prefix + files, cwd) + token = os.environ.get("ANACONDA_API_TOKEN", "").strip() + if not token: + print(f"ANACONDA_API_TOKEN is not set: can't upload to anaconda.org/{channel_name(distro)}", + file=sys.stderr) return 1 - channel = override or s.get("channel_name", f"robostack-{distro}") - cmd = ["rattler-build", "upload", "prefix", "-c", channel, "--skip-existing", "--generate-attestation"] - # Sigstore (attestations) and the channel fail now and then; uploads are - # idempotent (--skip-existing), so retry. + os.environ["ANACONDA_API_KEY"] = token # read by rattler-build (not on the command line) + rc = upload_with_retries(["rattler-build", "upload", "anaconda", "-o", channel_name(distro), "--force"] + files, + cwd) + return rc or upload_with_retries(prefix + files, cwd) + + +def upload_with_retries(cmd: list[str], cwd: Path) -> int: + # Sigstore (attestations) and the channels fail now and then; the uploads are + # idempotent (prefix.dev --skip-existing, anaconda.org --force), so retry. for attempt in range(1, 4): - rc = run(cmd + files, cwd) + rc = run(cmd, cwd) if rc == 0 or attempt == 3: return rc print(f"upload attempt {attempt} failed, retrying in {30 * attempt} s", file=sys.stderr) diff --git a/tools/tests/test_mirror_to_anaconda.py b/tools/tests/test_mirror_to_anaconda.py deleted file mode 100644 index 3d7c757a..00000000 --- a/tools/tests/test_mirror_to_anaconda.py +++ /dev/null @@ -1,36 +0,0 @@ -"""mirror_to_anaconda: which packages are uploaded, and the download check.""" - -import hashlib -from pathlib import Path - -import pytest - -import mirror_to_anaconda as mirror - - -def test_only_packages_missing_on_anaconda_are_uploaded() -> None: - source = {"a-1-0.conda": {}, "b-1-0.conda": {}, "c-1-0.tar.bz2": {}} - destination = {"b-1-0.conda": {}} - assert mirror.missing_packages(source, destination) == ["a-1-0.conda", "c-1-0.tar.bz2"] - - -class FakeResponse: - def __init__(self, content: bytes) -> None: - self.content = content - - def raise_for_status(self) -> None: - pass - - -def test_download_rejects_a_sha256_mismatch( - tmp_path: Path, monkeypatch: pytest.MonkeyPatch -) -> None: - session = mirror.session - monkeypatch.setattr(session, "get", lambda url: FakeResponse(b"package")) - target = tmp_path / "a-1-0.conda" - - mirror.download("url", hashlib.sha256(b"package").hexdigest(), target) - assert target.read_bytes() == b"package" - - with pytest.raises(RuntimeError, match="sha256 mismatch"): - mirror.download("url", hashlib.sha256(b"other").hexdigest(), tmp_path / "b.conda") diff --git a/tools/tests/test_upload.py b/tools/tests/test_upload.py new file mode 100644 index 00000000..d61c1bdb --- /dev/null +++ b/tools/tests/test_upload.py @@ -0,0 +1,64 @@ +"""rs upload: robostack- on anaconda.org, then on prefix.dev.""" + +import pytest + +import robostack as rs + + +@pytest.fixture +def calls(monkeypatch, tmp_path): + made = [] + monkeypatch.setattr(rs, "run", lambda cmd, cwd: made.append(cmd) or 0) + monkeypatch.setattr(rs.time, "sleep", lambda s: None) + monkeypatch.delenv("ROBOSTACK_UPLOAD_CHANNEL", raising=False) + monkeypatch.delenv("ANACONDA_API_KEY", raising=False) + return made + + +def test_uploads_to_anaconda_then_prefix(calls, monkeypatch, tmp_path): + monkeypatch.setenv("ANACONDA_API_TOKEN", "secret") + + assert rs.upload("humble", ["a.conda"], tmp_path) == 0 + assert calls == [ + ["rattler-build", "upload", "anaconda", "-o", "robostack-humble", "--force", "a.conda"], + ["rattler-build", "upload", "prefix", "-c", "robostack-humble", "--skip-existing", + "--generate-attestation", "a.conda"], + ] + # the token is passed in the environment, not on the command line + assert rs.os.environ["ANACONDA_API_KEY"] == "secret" + + +def test_no_prefix_upload_when_anaconda_fails(calls, monkeypatch, tmp_path): + monkeypatch.setenv("ANACONDA_API_TOKEN", "secret") + monkeypatch.setattr(rs, "run", lambda cmd, cwd: calls.append(cmd) or 1) + + assert rs.upload("jazzy", ["a.conda"], tmp_path) == 1 + # three attempts, all on anaconda.org: prefix.dev must not get a package anaconda.org lacks + assert [c[2] for c in calls] == ["anaconda"] * 3 + + +def test_fails_without_the_anaconda_token(calls, monkeypatch, tmp_path): + monkeypatch.delenv("ANACONDA_API_TOKEN", raising=False) + + assert rs.upload("jazzy", ["a.conda"], tmp_path) == 1 + assert calls == [] + + +def test_upload_channel_override_only_uploads_there(calls, monkeypatch, tmp_path): + monkeypatch.setenv("ROBOSTACK_UPLOAD_CHANNEL", "someone/test") + monkeypatch.delenv("ANACONDA_API_TOKEN", raising=False) + + assert rs.upload("lyrical", ["a.conda"], tmp_path) == 0 + assert calls == [["rattler-build", "upload", "prefix", "-c", "someone/test", "--skip-existing", + "--generate-attestation", "a.conda"]] + + +def test_upload_channel_none_skips_uploading(calls, monkeypatch, tmp_path): + monkeypatch.setenv("ROBOSTACK_UPLOAD_CHANNEL", "none") + + assert rs.upload("rolling", ["a.conda"], tmp_path) == 0 + assert calls == [] + + +def test_every_distribution_reads_its_prefix_channel(): + assert rs.channel_url("humble") == "https://prefix.dev/robostack-humble"