From a869417804bbc1e112e5a95c6226ebe898bfbf07 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Tue, 31 Mar 2026 14:31:08 -0700 Subject: [PATCH 01/16] switch to newer arroyo format, add pixi --- Dockerfile | 2 +- block_configs/lse_operator_block.yaml | 30 + block_configs/viz_operator_block.yaml | 29 + docker-compose.yml | 31 +- pixi.lock | 6545 ++++++++++++++++++ pyproject.toml | 32 +- src/arroyosas/app/lse.py | 2 + src/arroyosas/app/lse_broker_cli.py | 27 - src/arroyosas/app/lse_operator_cli.py | 40 - src/arroyosas/app/lse_worker_cli.py | 67 - src/arroyosas/app/tiled_file_watcher_cli.py | 167 - src/arroyosas/app/tiled_poller_cli.py | 36 - src/arroyosas/app/tiled_ws_cli.py | 55 - src/arroyosas/app/viz_operator_cli.py | 37 - src/arroyosas/app/xps_websocket_simulator.py | 426 -- src/arroyosas/one_d_reduction/operator.py | 31 +- src/arroyosas/redis.py | 3 - src/arroyosas/tiled/tiled_poller.py | 12 + src/arroyosas/tiled/tiled_websocket.py | 15 + src/arroyosas/zmq.py | 20 +- 20 files changed, 6694 insertions(+), 913 deletions(-) create mode 100644 block_configs/lse_operator_block.yaml create mode 100644 block_configs/viz_operator_block.yaml create mode 100644 pixi.lock create mode 100644 src/arroyosas/app/lse.py delete mode 100644 src/arroyosas/app/lse_broker_cli.py delete mode 100644 src/arroyosas/app/lse_operator_cli.py delete mode 100644 src/arroyosas/app/lse_worker_cli.py delete mode 100644 src/arroyosas/app/tiled_file_watcher_cli.py delete mode 100644 src/arroyosas/app/tiled_poller_cli.py delete mode 100644 src/arroyosas/app/tiled_ws_cli.py delete mode 100644 src/arroyosas/app/viz_operator_cli.py delete mode 100644 src/arroyosas/app/xps_websocket_simulator.py diff --git a/Dockerfile b/Dockerfile index 45a96dd..763ad64 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ WORKDIR /app COPY . /app RUN pip install --upgrade pip && \ - pip install .[all] + pip install .[all,lse] RUN pip install debugpy diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml new file mode 100644 index 0000000..bf043fc --- /dev/null +++ b/block_configs/lse_operator_block.yaml @@ -0,0 +1,30 @@ +blocks: + - name: LSE Operator + description: 1D reduction operator - listens for raw frames from tiled reduces, publishes to websocket and tiled + + operator: + class: arroyosas.one_d_reduction.operator.create_one_d_reduction_operator + kwargs: + redis_host: "kvrocks" + redis_port: 6666 + + listeners: + - class: arroyosas.tiled.tiled_websocket.create_tiled_websocket_listener + kwargs: + uri: "http://tiled:8000" + stream_name: "primary" + target: "img" + # api_key: falls back to TILED_LIVE_API_KEY env var + + publishers: + - class: arroyosas.websockets.OneDWSPublisher + kwargs: + host: "0.0.0.0" + port: 8020 + - class: arroyosas.tiled.tiled_poller.create_tiled_processed_publisher + kwargs: + uri: "http://tiled:8000" + root_segments: + - beamlines + - bl733 + # api_key: falls back to TILED_LIVE_API_KEY env var diff --git a/block_configs/viz_operator_block.yaml b/block_configs/viz_operator_block.yaml new file mode 100644 index 0000000..9b1fa9e --- /dev/null +++ b/block_configs/viz_operator_block.yaml @@ -0,0 +1,29 @@ +blocks: + - name: viz_operator + description: 1D reduction operator - listens for raw frames over ZMQ, reduces, publishes to websocket and tiled + + operator: + class: arroyosas.one_d_reduction.operator.create_one_d_reduction_operator + kwargs: + tiled_uri: "https://tiled.nsls2.bnl.gov" + redis_host: "kvrocks" + redis_port: 6666 + # tiled_api_key: falls back to TILED_LIVE_API_KEY env var + + listeners: + - class: arroyosas.zmq.create_zmq_frame_listener + kwargs: + zmq_address: "tcp://tiled_poller:5000" + + publishers: + - class: arroyosas.websockets.OneDWSPublisher + kwargs: + host: "0.0.0.0" + port: 8020 + - class: arroyosas.tiled.tiled_poller.create_tiled_processed_publisher + kwargs: + uri: "https://tiled.computing.als.lbl.gov" + root_segments: + - beamlines + - bl733 + # api_key: falls back to TILED_LIVE_API_KEY env var diff --git a/docker-compose.yml b/docker-compose.yml index c7b51bb..382fd6a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,14 +4,14 @@ services: tiled: # see the file ./tiled/deploy/config.yml for detailed configuration of tiled - image: ghcr.io/bluesky/tiled:0.1.0-b17 + image: ghcr.io/bluesky/tiled:0.2.8 ports: - - "8000:8000" + - "127.0.0.1:8000:8000" environment: - TILED_SINGLE_USER_API_KEY=${TILED_SINGLE_USER_API_KEY} volumes: - - ./conf/tiled/deploy:/deploy:Z - - ./data:/data:Z + - ./conf/tiled/deploy:/config:z + - ./data:/data:z restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://tiled:8000/healthz"] @@ -32,17 +32,20 @@ services: gisax_net1: lse_operator: - command: python -m arroyogisaxs.app.kse_operator_cli + command: python -m arroyopy.cli run block_configs/lse_operator_block.yaml build: context: . restart: unless-stopped + environment: + TILED_API_KEY=${TILED_SINGLE_USER_API_KEY} ports: - "8021:8021" volumes: - .:/app:Z - - ./settings.yaml:/app/settings.yaml:Z + - ./block_configs:/app/block_configs:Z networks: gisax_net1: + viz_operator: command: python -m arroyosas.app.viz_operator_cli build: @@ -68,21 +71,6 @@ services: networks: gisax_net1: - tiled_poller: - command: python -m debugpy --listen 0.0.0.0:5678 --wait-for-client -m arroyosas.app.tiled_poller_cli - build: - context: . - dockerfile: Dockerfile - volumes: - - .:/app:Z - - ./settings_container.yaml:/app/settings.yaml:Z - - ./data:/data:Z - ports: - - "5678:5678" - hostname: tiled_poller - networks: - gisax_net1: - kvrocks: image: docker.io/apache/kvrocks:latest @@ -97,3 +85,4 @@ services: networks: gisax_net1: driver: bridge + diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..86633e8 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,6545 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fabio-2025.10.0-py312h4f23490_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.86.4-hf516916_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.26.10-h17cb667_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_hd4fcb43_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-6.0.0-py312h645ab66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.2-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-devel-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py312h63ddcf0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mako-1.3.10-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyfai-2026.3.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyfai-base-2026.3.0-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyopencl-2026.1.1-py312hf890105_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyopengl-3.1.10-pyha804496_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytools-2025.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h0c412b5_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.0-pl5321h16c4a6b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-5.7.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.7.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/silx-2.2.2-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/silx-base-2.2.2-py312hf79963d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.10.0-py312h1289d80_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/siphash24-1.8-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/95/dc2b3a7b78c432e0b4d01d4874e4adbd9e46d146515023c9af569297708f/awkward_cpp-52-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/4890a7c14b4fa54400945cb52ac3cd88545bbdb973c440f98ca41591cdc5/llvmlite-0.46.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/89/1a74ea99b180b7a5587b0301ed1b183a2937c4b4b67f7994689b5d36fc34/numba-0.64.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3a/79/f5458169690845eb014d21bbbaa855622064a7f28b06ab4ebbb1b2c263ae/opentelemetry_api-1.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/fe/661043d1c263b0d9d10c6ff4e9c9745f3df9641c62b51f96a3473638e7ce/regex-2026.3.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/a9/804ac7423f5dda316d3a982f3ab071c971fb877f8961dad9f6a97d12d2ee/sparse-0.18.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/81/c525760353dff91ae2e4c42c3f3d9bf0bfeecbb6165cc393e86915f1717d/stamina-25.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: ../arroyopy + - pypi: ./ + dev: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fabio-2025.10.0-py312h4f23490_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.86.4-hf516916_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.26.10-h17cb667_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_hd4fcb43_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-6.0.0-py312h645ab66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.2-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-devel-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py312h63ddcf0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mako-1.3.10-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py312h50c33e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyfai-2026.3.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyfai-base-2026.3.0-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyopencl-2026.1.1-py312hf890105_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyopengl-3.1.10-pyha804496_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytools-2025.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h0c412b5_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.0-pl5321h16c4a6b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-5.7.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.7.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/silx-2.2.2-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/silx-base-2.2.2-py312hf79963d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.10.0-py312h1289d80_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/siphash24-1.8-py312h4c3975b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/93/32/6ca400dc7aaf885d823b37884e40832ccf970df043f5d2817f5eb651f3bc/adbc_driver_manager-1.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/76/f7/2ca5bd4d8d4edcd8721adeba20690806cf6186d9a3de217b2c5f44530c3c/adbc_driver_postgresql-1.10.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/88/7f900b29099764307d1c9816c30b05d0076df120a7ca57c759b3a7a5e82b/adbc_driver_sqlite-1.10.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/ab/6936e2663c47a926e0659437b9333ad87d1ff49b1375d239026e0a268eba/asgi_correlation_id-4.3.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/d1/a867c2150f9c6e7af6462637f613ba67f78a314b00db220cd26ff559d532/asyncpg-0.31.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/95/dc2b3a7b78c432e0b4d01d4874e4adbd9e46d146515023c9af569297708f/awkward_cpp-52-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/54/346f681c24a9c3a08e2e74dcee2555ccd1081705b46f791f7b228e177d06/canonicaljson-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/73/f85acbb3ac319a86abbf6b46103d58594d73529123377219980f11b388e9/duckdb-1.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/51/79/119091c98e2bf49e24ed9f3ae69f816d715d2904aefa6a2baa039a2ba0b0/ecdsa-0.19.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/b5/82f89307d0d769cd9bf46a54fb9136be08e4e57c5570ae421db4c9a2ba62/fakeredis-2.34.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/ea/18f6d0457f9efb2fc6fa594857f92810cadb03024975726db6546b3d6fcf/fastapi-0.135.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/4890a7c14b4fa54400945cb52ac3cd88545bbdb973c440f98ca41591cdc5/llvmlite-0.46.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.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/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/89/1a74ea99b180b7a5587b0301ed1b183a2937c4b4b67f7994689b5d36fc34/numba-0.64.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/79/f5458169690845eb014d21bbbaa855622064a7f28b06ab4ebbb1b2c263ae/opentelemetry_api-1.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/c3/0bd11992072e6a1c513b16500a5d07f91a24017c5909b02c72c62d7ad024/python_jose-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/fe/661043d1c263b0d9d10c6ff4e9c9745f3df9641c62b51f96a3473638e7ce/regex-2026.3.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/a9/804ac7423f5dda316d3a982f3ab071c971fb877f8961dad9f6a97d12d2ee/sparse-0.18.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8f/81/c525760353dff91ae2e4c42c3f3d9bf0bfeecbb6165cc393e86915f1717d/stamina-25.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: ../arroyopy + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 + md5: aaa2a381ccc56eac91d63b6c1240312f + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + purls: [] + size: 8191 + timestamp: 1744137672556 +- pypi: https://files.pythonhosted.org/packages/93/32/6ca400dc7aaf885d823b37884e40832ccf970df043f5d2817f5eb651f3bc/adbc_driver_manager-1.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: adbc-driver-manager + version: 1.10.0 + sha256: b112890d3c214380857852eaac40d09e66bd77ce3b75406094f2e48452e57bbd + requires_dist: + - typing-extensions + - pandas ; extra == 'dbapi' + - pyarrow>=14.0.1 ; extra == 'dbapi' + - duckdb ; extra == 'test' + - pandas ; extra == 'test' + - polars ; extra == 'test' + - pyarrow>=14.0.1 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/76/f7/2ca5bd4d8d4edcd8721adeba20690806cf6186d9a3de217b2c5f44530c3c/adbc_driver_postgresql-1.10.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: adbc-driver-postgresql + version: 1.10.0 + sha256: a2efec61f5ba966e503081b7f058516745e95e0d965bfd9ecfcae2f6d2d4a178 + requires_dist: + - adbc-driver-manager + - importlib-resources>=1.3 + - pandas ; extra == 'dbapi' + - pyarrow>=14.0.1 ; extra == 'dbapi' + - pandas ; extra == 'test' + - polars ; extra == 'test' + - pyarrow>=14.0.1 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bc/88/7f900b29099764307d1c9816c30b05d0076df120a7ca57c759b3a7a5e82b/adbc_driver_sqlite-1.10.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: adbc-driver-sqlite + version: 1.10.0 + sha256: 435cbf57c42e6c57762f6998041a8129ddf7a3f0b407712cbb62d46e0729a450 + requires_dist: + - adbc-driver-manager + - importlib-resources>=1.3 + - pandas ; extra == 'dbapi' + - pyarrow>=14.0.1 ; extra == 'dbapi' + - pandas ; extra == 'test' + - pyarrow>=14.0.1 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl + name: aiofiles + version: 25.1.0 + sha256: abe311e527c862958650f9438e859c1fa7568a141b22abcd015e120e86a85695 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + name: aiosqlite + version: 0.22.1 + sha256: 21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb + requires_dist: + - attribution==1.8.0 ; extra == 'dev' + - black==25.11.0 ; extra == 'dev' + - build>=1.2 ; extra == 'dev' + - coverage[toml]==7.10.7 ; extra == 'dev' + - flake8==7.3.0 ; extra == 'dev' + - flake8-bugbear==24.12.12 ; extra == 'dev' + - flit==3.12.0 ; extra == 'dev' + - mypy==1.19.0 ; extra == 'dev' + - ufmt==2.8.0 ; extra == 'dev' + - usort==1.0.8.post1 ; extra == 'dev' + - sphinx==8.1.3 ; extra == 'docs' + - sphinx-mdinclude==0.6.2 ; extra == 'docs' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl + name: alembic + version: 1.18.4 + sha256: a5ed4adcf6d8a4cb575f3d759f071b03cd6e5c7618eb796cb52497be25bfe19a + requires_dist: + - sqlalchemy>=1.4.23 + - mako + - typing-extensions>=4.12 + - tomli ; python_full_version < '3.11' + - tzdata ; extra == 'tz' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 + md5: dcdc58c15961dbf17a0621312b01f5cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 584660 + timestamp: 1768327524772 +- pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + name: annotated-doc + version: 0.0.4 + sha256: 571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + name: anyio + version: 4.13.0 + sha256: 08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708 + requires_dist: + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - idna>=2.8 + - typing-extensions>=4.5 ; python_full_version < '3.13' + - trio>=0.32.0 ; extra == 'trio' + requires_python: '>=3.10' +- pypi: ../arroyopy + name: arroyopy + version: 0.3.0a5 + sha256: bad032904e18179f4388aaa4b599137020a825c736289eeaaaf4d6bd5a0b049a + requires_dist: + - python-dotenv + - pandas + - numpy + - opentelemetry-api + - opentelemetry-sdk + - opentelemetry-exporter-jaeger + - opentelemetry-exporter-prometheus + - prometheus-client + - pydantic>=2.0 + - pyyaml + - typer + - fakeredis ; extra == 'dev' + - flake8 ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - pyzmq ; extra == 'dev' + - redis ; extra == 'dev' + - tiled[minimal-server] ; extra == 'dev' + - typer ; extra == 'dev' + - pyzmq ; extra == 'zmq' + - redis ; extra == 'redis' + - tiled[client] ; extra == 'tiled' + - watchfiles>=0.21.0 ; extra == 'file-watch' + requires_python: '>=3.11,<3.14' +- pypi: ./ + name: arroyosas + version: 0.1.0 + sha256: 4c334d23d753436dd0586aee935e87d4301a439c601949ef0063aed1e040d364 + requires_dist: + - arroyopy>=0.3.0a4 + - dynaconf + - python-dotenv + - pandas + - msgpack + - numpy + - pillow + - bluesky-tiled-plugins==2.0.0b57 + - pyzmq + - tqdm + - typer + - websockets + - zarr + - transformers + - redis + - joblib ; extra == 'workflow-viz' + - numpy<2.0.0 ; extra == 'workflow-viz' + - pandas ; extra == 'workflow-viz' + - plotly-express ; extra == 'workflow-viz' + - python-dotenv ; extra == 'workflow-viz' + - pyarrow>=14.0.1 ; extra == 'workflow-viz' + - requests==2.26.0 ; extra == 'workflow-viz' + - diskcache==5.6.3 ; extra == 'workflow-viz' + - scikit-learn==1.3.0 ; extra == 'workflow-viz' + - fakeredis ; extra == 'dev' + - flake8 ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - tiled[server]>=0.1.0b14,<0.2 ; extra == 'dev' + - torchvision==0.17.2 ; extra == 'lse' + - joblib ; extra == 'lse' + - mlex-latent-explorer @ git+ssh://git@github.com/mlexchange/mlex_latent_explorer.git@main ; extra == 'lse' + - arroyopy>=0.3.0a4 ; extra == 'all' + - bluesky ; extra == 'all' + - dynaconf ; extra == 'all' + - python-dotenv ; extra == 'all' + - pandas ; extra == 'all' + - msgpack ; extra == 'all' + - numpy ; extra == 'all' + - ophyd ; extra == 'all' + - pillow ; extra == 'all' + - pyzmq ; extra == 'all' + - tqdm ; extra == 'all' + - typer ; extra == 'all' + - websockets ; extra == 'all' + - tiled[client]>=0.1.0b14,<0.2 ; extra == 'all' + - redis ; extra == 'all' + - numpy<2.0.0 ; extra == 'all' + - pandas ; extra == 'all' + - python-dotenv ; extra == 'all' + - pyarrow>=14.0.1 ; extra == 'all' + - pyfai ; extra == 'all' + - aiosqlite ; extra == 'all' +- pypi: https://files.pythonhosted.org/packages/d9/ab/6936e2663c47a926e0659437b9333ad87d1ff49b1375d239026e0a268eba/asgi_correlation_id-4.3.4-py3-none-any.whl + name: asgi-correlation-id + version: 4.3.4 + sha256: 36ce69b06c7d96b4acb89c7556a4c4f01a972463d3d49c675026cbbd08e9a0a2 + requires_dist: + - celery ; extra == 'celery' + - packaging + - starlette>=0.18 + requires_python: '>=3.8,<4.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 + md5: 9673a61a297b00016442e022d689faa6 + depends: + - python >=3.10 + constrains: + - astroid >=2,<5 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28797 + timestamp: 1763410017955 +- pypi: https://files.pythonhosted.org/packages/8c/d1/a867c2150f9c6e7af6462637f613ba67f78a314b00db220cd26ff559d532/asyncpg-0.31.0-cp312-cp312-manylinux_2_28_x86_64.whl + name: asyncpg + version: 0.31.0 + sha256: aad7a33913fb8bcb5454313377cc330fbb19a0cd5faa7272407d8a0c4257b671 + requires_dist: + - async-timeout>=4.0.3 ; python_full_version < '3.11' + - gssapi ; sys_platform != 'win32' and extra == 'gssauth' + - sspilib ; sys_platform == 'win32' and extra == 'gssauth' + requires_python: '>=3.9.0' +- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + name: attrs + version: 26.1.0 + sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl + name: awkward + version: 2.9.0 + sha256: 4859e371c606ca7fe737546f302de08110d53ed986cdd1254fb059dd48912db6 + requires_dist: + - awkward-cpp==52 + - fsspec>=2022.11.0 + - importlib-metadata>=4.13.0 ; python_full_version < '3.12' + - numpy>=1.21.3 + - packaging + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/28/95/dc2b3a7b78c432e0b4d01d4874e4adbd9e46d146515023c9af569297708f/awkward_cpp-52-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: awkward-cpp + version: '52' + sha256: 33de01875ee582c51609557a586c6d23ed5474408e7c2abd3f7919f34ba4fd0e + requires_dist: + - numpy>=1.21.3 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda + sha256: 292aa18fe6ab5351710e6416fbd683eaef3aa5b1b7396da9350ff08efc660e4f + md5: 675ea6d90900350b1dcfa8231a5ea2dd + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 134426 + timestamp: 1774274932726 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda + sha256: f21d648349a318f4ae457ea5403d542ba6c0e0343b8642038523dd612b2a5064 + md5: 3c3d02681058c3d206b562b2e3bc337f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - libgcc >=14 + - openssl >=3.5.4,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 56230 + timestamp: 1764593147526 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda + sha256: 926a5b9de0a586e88669d81de717c8dd3218c51ce55658e8a16af7e7fe87c833 + md5: e36ad70a7e0b48f091ed6902f04c23b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 239605 + timestamp: 1763585595898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda + sha256: 1838bdc077b77168416801f4715335b65e9223f83641a2c28644f8acd8f9db0e + md5: f16f498641c9e05b645fe65902df661a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 22278 + timestamp: 1767790836624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda + sha256: c6f910d400ef9034493988e8cd37bd4712e42d85921122bcda4ba68d4614b131 + md5: 7bc920933e5fb225aba86a788164a8f1 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - aws-c-compression >=0.3.2,<0.3.3.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 225868 + timestamp: 1774270031584 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda + sha256: c66ebb7815949db72bab7c86bf477197e4bc6937c381cf32248bdd1ce496db00 + md5: dde6a3e4fe6bb2ecd2a7050dd1e701fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + - s2n >=1.7.1,<1.7.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 181624 + timestamp: 1773868304737 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda + sha256: c15869656f5fbebe27cc5aa58b23831f75d85502d324fedd7ee7e552c79b495d + md5: 4c5c16bf1133dcfe100f33dd4470998e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-checksums >=0.2.10,<0.2.11.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 + - openssl >=3.5.5,<4.0a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-cal >=0.9.13,<0.9.14.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 151340 + timestamp: 1774282148690 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda + sha256: 9d62c5029f6f8219368a8665f0a549da572dc777f52413b7d75609cacdbc02cc + md5: c7e3e08b7b1b285524ab9d74162ce40b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 59383 + timestamp: 1764610113765 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + sha256: 09472dd5fa4473cffd44741ee4c1112f2c76d7168d1343de53c2ad283dc1efa6 + md5: f8e1bcc5c7d839c5882e94498791be08 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 101435 + timestamp: 1771063496927 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda + sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d + md5: 2c2fae981fd2afd00812c92ac47d023d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 48427 + timestamp: 1733513201413 +- pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: blosc2 + version: 4.1.2 + sha256: 830addc8d8722348421e5d99d719c53a36ff34a468980a7af05938ddb336cf4f + requires_dist: + - numpy>=1.26 + - ndindex + - msgpack + - numexpr>=2.14.1 ; platform_machine != 'wasm32' + - requests + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl + name: bluesky-tiled-plugins + version: 2.0.0b57 + sha256: 34aa2673a899229deee1af4b6e86545489f35012f29b1a9c34cf5c81168c55c8 + requires_dist: + - dask + - mongoquery + - pytz + - tiled[client]>=0.1.0b4 + - tzlocal + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20103 + timestamp: 1764017231353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 21021 + timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 207882 + timestamp: 1765214722852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda + sha256: b6ce82ebe3cf24e70179bd656eacfa97ce9df9a500f2cec6843043466a5e6af8 + md5: 68ceffc6cadae61846a207cae60de094 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - lz4-c >=1.10.0,<1.11.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 353899 + timestamp: 1772620395951 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d + depends: + - __unix + license: ISC + purls: [] + size: 147413 + timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + noarch: python + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4134 + timestamp: 1615209571450 +- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping + size: 11065 + timestamp: 1615209567874 +- pypi: https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl + name: cachetools + version: 7.0.5 + sha256: 46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 989514 + timestamp: 1766415934926 +- pypi: https://files.pythonhosted.org/packages/e5/54/346f681c24a9c3a08e2e74dcee2555ccd1081705b46f791f7b228e177d06/canonicaljson-2.0.0-py3-none-any.whl + name: canonicaljson + version: 2.0.0 + sha256: c38a315de3b5a0532f1ec1f9153cd3d716abfc565a558d00a4835428a34fca5b + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl + name: certifi + version: 2026.2.25 + sha256: 027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cffi + version: 2.0.0 + sha256: 3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + name: cfgv + version: 3.5.0 + sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.6 + sha256: 0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + name: click + version: 8.3.1 + sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + name: cloudpickle + version: 3.1.2 + sha256: 9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212 + md5: 2da13f2b299d8e1995bafbbe9689a2f7 + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping + size: 14690 + timestamp: 1753453984907 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + sha256: 62447faf7e8eb691e407688c0b4b7c230de40d5ecf95bf301111b4d05c5be473 + md5: 43c2bc96af3ae5ed9e8a10ded942aa50 + depends: + - numpy >=1.25 + - python + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 320386 + timestamp: 1769155979897 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda + noarch: generic + sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe + md5: f54c1ffb8ecedb85a8b7fcde3a187212 + depends: + - python >=3.12,<3.13.0a0 + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46463 + timestamp: 1772728929620 +- pypi: https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl + name: cryptography + version: 46.0.6 + sha256: 22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 + requires_dist: + - cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' + - cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox[uv]>=2024.4.15 ; extra == 'nox' + - cryptography-vectors==46.0.6 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.11.11 ; extra == 'pep8test' + - mypy>=1.14 ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.8,!=3.9.0,!=3.9.1' +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 210103 + timestamp: 1771943128249 +- pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + name: dask + version: 2026.3.0 + sha256: be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d + requires_dist: + - click>=8.1 + - cloudpickle>=3.0.0 + - fsspec>=2021.9.0 + - packaging>=20.0 + - partd>=1.4.0 + - pyyaml>=5.3.1 + - toolz>=0.12.0 + - importlib-metadata>=4.13.0 ; python_full_version < '3.12' + - numpy>=1.24 ; extra == 'array' + - dask[array] ; extra == 'dataframe' + - pandas>=2.0 ; extra == 'dataframe' + - pyarrow>=16.0 ; extra == 'dataframe' + - distributed>=2026.3.0,<2026.3.1 ; extra == 'distributed' + - bokeh>=3.1.0 ; extra == 'diagnostics' + - jinja2>=2.10.3 ; extra == 'diagnostics' + - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete' + - pyarrow>=16.0 ; extra == 'complete' + - lz4>=4.3.2 ; extra == 'complete' + - pandas[test] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pre-commit ; extra == 'test' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda + sha256: f20121b67149ff80bf951ccae7442756586d8789204cd08ade59397b22bfd098 + md5: ee1b48795ceb07311dd3e665dd4f5f33 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2858582 + timestamp: 1769744978783 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 + md5: 9ce473d1d1be1cc3810856a48b3fab32 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping + size: 14129 + timestamp: 1740385067843 +- pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + name: deprecated + version: 1.3.1 + sha256: 597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f + requires_dist: + - wrapt>=1.10,<3 + - inspect2 ; python_full_version < '3' + - tox ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - bump2version<1 ; extra == 'dev' + - setuptools ; python_full_version >= '3.12' and extra == 'dev' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + name: distlib + version: 0.4.0 + sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 +- pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + name: donfig + version: 0.8.1.post1 + sha256: 2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d + requires_dist: + - pyyaml + - sphinx>=4.0.0 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pytest ; extra == 'docs' + - cloudpickle ; extra == 'docs' + - pytest ; extra == 'test' + - cloudpickle ; extra == 'test' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71809 + timestamp: 1765193127016 +- pypi: https://files.pythonhosted.org/packages/ac/73/f85acbb3ac319a86abbf6b46103d58594d73529123377219980f11b388e9/duckdb-1.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: duckdb + version: 1.3.2 + sha256: 36abdfe0d1704fe09b08d233165f312dad7d7d0ecaaca5fb3bb869f4838a2d0b + requires_python: '>=3.7.0' +- pypi: https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl + name: dynaconf + version: 3.2.13 + sha256: 4305527aef4834bdba3e39479b23c005186e83fb85f65bcaa4bcea58fa26759b + requires_dist: + - redis ; extra == 'redis' + - hvac ; extra == 'vault' + - ruamel-yaml ; extra == 'yaml' + - toml ; extra == 'toml' + - configobj ; extra == 'ini' + - configobj ; extra == 'configobj' + - redis ; extra == 'all' + - ruamel-yaml ; extra == 'all' + - configobj ; extra == 'all' + - hvac ; extra == 'all' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest-mock ; extra == 'test' + - radon ; extra == 'test' + - flask>=0.12 ; extra == 'test' + - django ; extra == 'test' + - python-dotenv ; extra == 'test' + - toml ; extra == 'test' + - redis ; extra == 'test' + - hvac>=1.1.0 ; extra == 'test' + - configobj ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/51/79/119091c98e2bf49e24ed9f3ae69f816d715d2904aefa6a2baa039a2ba0b0/ecdsa-0.19.2-py2.py3-none-any.whl + name: ecdsa + version: 0.19.2 + sha256: 840f5dc5e375c68f36c1a7a5b9caad28f95daa65185c9253c0c08dd952bb7399 + requires_dist: + - six>=1.9.0 + - gmpy ; extra == 'gmpy' + - gmpy2 ; extra == 'gmpy2' + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' +- pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl + name: entrypoints + version: '0.4' + sha256: f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + name: et-xmlfile + version: 2.0.0 + sha256: 7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad + md5: ff9efb7f7469aed3c4a8106ffa29593c + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping + size: 30753 + timestamp: 1756729456476 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fabio-2025.10.0-py312h4f23490_1.conda + sha256: 590614a963bd13285e98c2fe1f38401cfb6f4f31271636f63d76f90f8b7bd14d + md5: 897dff5b8ee998f5b861109f5f49ba1f + depends: + - __glibc >=2.17,<3.0.a0 + - glymur + - h5py + - hdf5plugin + - libgcc >=14 + - lxml + - numpy >=1.23,<3 + - pillow + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT AND LGPL-3.0-or-later + license_family: Other + purls: + - pkg:pypi/fabio?source=hash-mapping + size: 1036332 + timestamp: 1768550757682 +- pypi: https://files.pythonhosted.org/packages/49/b5/82f89307d0d769cd9bf46a54fb9136be08e4e57c5570ae421db4c9a2ba62/fakeredis-2.34.1-py3-none-any.whl + name: fakeredis + version: 2.34.1 + sha256: 0107ec99d48913e7eec2a5e3e2403d1bd5f8aa6489d1a634571b975289c48f12 + requires_dist: + - redis<7.2 ; python_full_version < '3.10' + - redis>=4.3 ; python_full_version >= '3.9' + - redis>=4 ; python_full_version < '3.8' + - sortedcontainers>=2 + - typing-extensions~=4.7 ; python_full_version < '3.11' + - pyprobables>=0.6 ; extra == 'bf' + - pyprobables>=0.6 ; extra == 'cf' + - jsonpath-ng>=1.6 ; extra == 'json' + - lupa>=2.1 ; extra == 'lua' + - pyprobables>=0.6 ; extra == 'probabilistic' + - valkey>=6 ; python_full_version >= '3.8' and extra == 'valkey' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/8f/ea/18f6d0457f9efb2fc6fa594857f92810cadb03024975726db6546b3d6fcf/fastapi-0.135.2-py3-none-any.whl + name: fastapi + version: 0.135.2 + sha256: 0af0447d541867e8db2a6a25c23a8c4bd80e2394ac5529bd87501bbb9e240ca5 + requires_dist: + - starlette>=0.46.0 + - pydantic>=2.9.0 + - typing-extensions>=4.8.0 + - typing-inspection>=0.4.2 + - annotated-doc>=0.0.2 + - fastapi-cli[standard]>=0.0.8 ; extra == 'standard' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard' + - jinja2>=3.1.5 ; extra == 'standard' + - python-multipart>=0.0.18 ; extra == 'standard' + - email-validator>=2.0.0 ; extra == 'standard' + - uvicorn[standard]>=0.12.0 ; extra == 'standard' + - pydantic-settings>=2.0.0 ; extra == 'standard' + - pydantic-extra-types>=2.0.0 ; extra == 'standard' + - fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.8 ; extra == 'standard-no-fastapi-cloud-cli' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - jinja2>=3.1.5 ; extra == 'standard-no-fastapi-cloud-cli' + - python-multipart>=0.0.18 ; extra == 'standard-no-fastapi-cloud-cli' + - email-validator>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - uvicorn[standard]>=0.12.0 ; extra == 'standard-no-fastapi-cloud-cli' + - pydantic-settings>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - pydantic-extra-types>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - fastapi-cli[standard]>=0.0.8 ; extra == 'all' + - httpx>=0.23.0,<1.0.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - python-multipart>=0.0.18 ; extra == 'all' + - itsdangerous>=1.1.0 ; extra == 'all' + - pyyaml>=5.3.1 ; extra == 'all' + - email-validator>=2.0.0 ; extra == 'all' + - uvicorn[standard]>=0.12.0 ; extra == 'all' + - pydantic-settings>=2.0.0 ; extra == 'all' + - pydantic-extra-types>=2.0.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + name: filelock + version: 3.25.2 + sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + name: flake8 + version: 7.3.0 + sha256: b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e + requires_dist: + - mccabe>=0.7.0,<0.8.0 + - pycodestyle>=2.14.0,<2.15.0 + - pyflakes>=3.4.0,<3.5.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + purls: [] + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c + md5: 867127763fbe935bab59815b6e0b7b5c + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 270705 + timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + sha256: 777c80a1aa0889e6b637631c31f95d0b048848c5ba710f89ed7cedd3ad318227 + md5: 526f7ffd63820e55d7992cc1cf931a36 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc >=14 + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - unicodedata2 >=15.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 2935817 + timestamp: 1773137546716 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 + depends: + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 + license: GPL-2.0-only OR FTL + purls: [] + size: 173839 + timestamp: 1774298173462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d + md5: f9f81ea472684d75b9dd8d0b328cf655 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 61244 + timestamp: 1757438574066 +- pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + name: fsspec + version: 2026.3.0 + sha256: d2ceafaad1b3457968ed14efa28798162f1638dbb5d2a6868a2db002a5ee39a4 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs>2024.2.0 ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs>2024.2.0 ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs>2024.2.0 ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs>2024.2.0 ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - backports-zstd ; python_full_version < '3.14' and extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas<3.0.0 ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda + sha256: 5439dc9c3f3ac84b5f637b31e0480b721d686da21927f6fc3f0e7b6944e53012 + md5: 61272bde04aeccf919351b92fbb96a53 + depends: + - glib-tools 2.86.4 hf516916_1 + - libglib 2.86.4 h6548e54_1 + - packaging + - python * + license: LGPL-2.1-or-later + purls: [] + size: 79208 + timestamp: 1771863362595 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.86.4-hf516916_1.conda + sha256: 441586fc577c5a3f2ad7bf83578eb135dac94fb0cb75cc4da35f8abb5823b857 + md5: b52b769cd13f7adaa6ccdc68ef801709 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi + - libgcc >=14 + - libglib 2.86.4 h6548e54_1 + license: LGPL-2.1-or-later + purls: [] + size: 214712 + timestamp: 1771863307416 +- conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda + sha256: 10eb80099319848e0bc6d9c43d55634e856958e1c7a104612190bf457bb07705 + md5: 51cffc356cd6bdb4dce836c93c296f06 + depends: + - imageio + - lxml + - numpy + - openjpeg >=2.4.0 + - packaging + - python >=3.11 + - setuptools + license: MIT + license_family: MIT + purls: + - pkg:pypi/glymur?source=hash-mapping + size: 2732463 + timestamp: 1770246265597 +- pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + name: google-crc32c + version: 1.8.0 + sha256: 14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl + name: googleapis-common-protos + version: 1.59.1 + sha256: 0cbedb6fb68f1c07e18eb4c48256320777707e7d0c55063ae56c15db3224a61e + requires_dist: + - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0 + - grpcio>=1.44.0,<2.0.0.dev0 ; extra == 'grpc' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c + md5: 2cd94587f3a401ae05e03a6caf09539d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 99596 + timestamp: 1755102025473 +- pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: greenlet + version: 3.3.2 + sha256: 43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: grpcio + version: 1.80.0 + sha256: 4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411 + requires_dist: + - typing-extensions~=4.12 + - grpcio-tools>=1.80.0 ; extra == 'protobuf' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda + sha256: f43bc8fd2c8b0c4317cf771f2cf8a9e7eee47105c233bfed00158f6579e41340 + md5: fd9738c3189541787bd967e19587de26 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.15.1,<1.3.0a0 + - gstreamer 1.26.10 h17cb667_0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.3,<3.0a0 + - libogg >=1.3.5,<1.4.0a0 + - libopus >=1.5.2,<2.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libvorbis >=1.3.7,<1.4.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.4,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + - xorg-libxshmfence >=1.3.3,<2.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 2928142 + timestamp: 1766699713774 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.26.10-h17cb667_0.conda + sha256: 35044ecb0b08cd61f32b18f0c0c60f8d4aa610352eee4c5902e171a3decc0eba + md5: 0c38cdf4414540aae129822f961b5636 + depends: + - __glibc >=2.17,<3.0.a0 + - glib >=2.86.3,<3.0a0 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 2059388 + timestamp: 1766699555877 +- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + name: h11 + version: 0.16.0 + sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl + name: h5netcdf + version: 1.8.1 + sha256: a76ed7cfc9b8a8908ea7057c4e57e27307acff1049b7f5ed52db6c2247636879 + requires_dist: + - packaging + - numpy + - h5py ; extra == 'h5py' + - pyfive>=1.0.0 ; extra == 'pyfive' + - h5pyd ; extra == 'h5pyd' + - h5py ; extra == 'test' + - netcdf4 ; extra == 'test' + - pyfive>=1.0.0 ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda + sha256: 3779e40557eb6784750cf7c7a6dcfb2a1b0bee473eb096d5431840c2b6055a68 + md5: ecb3d9fd8598b730103184f2559ecdc6 + depends: + - __glibc >=2.17,<3.0.a0 + - cached-property + - hdf5 >=2.1.0,<3.0a0 + - libgcc >=14 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/h5py?source=hash-mapping + size: 1338634 + timestamp: 1774714816812 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda + sha256: 477f2c553f72165020d3c56740ba354be916c2f0b76fd9f535e83d698277d5ec + md5: 14470902326beee192e33719a2e8bb7f + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2384060 + timestamp: 1774276284520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_hd4fcb43_103.conda + sha256: 79c3592e00ce9974e3d08e4bd28bfbe9f86c03064880efe3cfcff807a633abd1 + md5: dcb50cd5fed839129afb25f1061f6b7f + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.10.1,<0.10.2.0a0 + - aws-c-common >=0.12.6,<0.12.7.0a0 + - aws-c-http >=0.10.12,<0.10.13.0a0 + - aws-c-io >=0.26.3,<0.26.4.0a0 + - aws-c-s3 >=0.11.5,<0.11.6.0a0 + - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 + - libaec >=1.1.5,<2.0a0 + - libcurl >=8.19.0,<9.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4408274 + timestamp: 1774661981887 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-6.0.0-py312h645ab66_5.conda + sha256: 70acb2afdd64426ace27c4336b123ed78c3bd778f6c50fd1f5ef16589a2bb9bc + md5: f53f4c4d971c430ae7bab9df2d9a0e19 + depends: + - __glibc >=2.17,<3.0.a0 + - blosc >=1.21.6,<2.0a0 + - bzip2 >=1.0.8,<2.0a0 + - c-blosc2 >=2.23.1,<2.24.0a0 + - h5py >=3.0.0 + - hdf5 >=2.1.0,<3.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hdf5plugin?source=hash-mapping + size: 3385468 + timestamp: 1774735885169 +- pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: hf-xet + version: 1.4.2 + sha256: 77e8c180b7ef12d8a96739a4e1e558847002afe9ea63b6f6358b2271a8bdda1c + requires_dist: + - pytest ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + name: httpcore + version: 1.0.9 + sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 + requires_dist: + - certifi + - h11>=0.16 + - anyio>=4.0,<5.0 ; extra == 'asyncio' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - trio>=0.22.0,<1.0 ; extra == 'trio' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: httptools + version: 0.7.1 + sha256: 2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + name: httpx + version: 0.28.1 + sha256: d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + requires_dist: + - anyio + - certifi + - httpcore==1.* + - idna + - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' + - click==8.* ; extra == 'cli' + - pygments==2.* ; extra == 'cli' + - rich>=10,<14 ; extra == 'cli' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl + name: huggingface-hub + version: 1.8.0 + sha256: d3eb5047bd4e33c987429de6020d4810d38a5bef95b3b40df9b17346b7f353f2 + requires_dist: + - filelock>=3.10.0 + - fsspec>=2023.5.0 + - hf-xet>=1.4.2,<2.0.0 ; platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' + - httpx>=0.23.0,<1 + - packaging>=20.9 + - pyyaml>=5.1 + - tqdm>=4.42.1 + - typer + - typing-extensions>=4.1.0 + - authlib>=1.3.2 ; extra == 'oauth' + - fastapi ; extra == 'oauth' + - httpx ; extra == 'oauth' + - itsdangerous ; extra == 'oauth' + - torch ; extra == 'torch' + - safetensors[torch] ; extra == 'torch' + - toml ; extra == 'fastai' + - fastai>=2.4 ; extra == 'fastai' + - fastcore>=1.3.27 ; extra == 'fastai' + - hf-xet>=1.4.2,<2.0.0 ; extra == 'hf-xet' + - mcp>=1.8.0 ; extra == 'mcp' + - authlib>=1.3.2 ; extra == 'testing' + - fastapi ; extra == 'testing' + - httpx ; extra == 'testing' + - itsdangerous ; extra == 'testing' + - jedi ; extra == 'testing' + - jinja2 ; extra == 'testing' + - pytest>=8.4.2 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-env ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - pytest-vcr ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - pytest-rerunfailures<16.0 ; extra == 'testing' + - pytest-mock ; extra == 'testing' + - urllib3<2.0 ; extra == 'testing' + - soundfile ; extra == 'testing' + - pillow ; extra == 'testing' + - numpy ; extra == 'testing' + - duckdb ; extra == 'testing' + - fastapi ; extra == 'testing' + - typing-extensions>=4.8.0 ; extra == 'typing' + - types-pyyaml ; extra == 'typing' + - types-simplejson ; extra == 'typing' + - types-toml ; extra == 'typing' + - types-tqdm ; extra == 'typing' + - types-urllib3 ; extra == 'typing' + - ruff>=0.9.0 ; extra == 'quality' + - mypy==1.15.0 ; extra == 'quality' + - libcst>=1.4.0 ; extra == 'quality' + - ty ; extra == 'quality' + - authlib>=1.3.2 ; extra == 'all' + - fastapi ; extra == 'all' + - httpx ; extra == 'all' + - itsdangerous ; extra == 'all' + - jedi ; extra == 'all' + - jinja2 ; extra == 'all' + - pytest>=8.4.2 ; extra == 'all' + - pytest-cov ; extra == 'all' + - pytest-env ; extra == 'all' + - pytest-xdist ; extra == 'all' + - pytest-vcr ; extra == 'all' + - pytest-asyncio ; extra == 'all' + - pytest-rerunfailures<16.0 ; extra == 'all' + - pytest-mock ; extra == 'all' + - urllib3<2.0 ; extra == 'all' + - soundfile ; extra == 'all' + - pillow ; extra == 'all' + - numpy ; extra == 'all' + - duckdb ; extra == 'all' + - fastapi ; extra == 'all' + - ruff>=0.9.0 ; extra == 'all' + - mypy==1.15.0 ; extra == 'all' + - libcst>=1.4.0 ; extra == 'all' + - ty ; extra == 'all' + - typing-extensions>=4.8.0 ; extra == 'all' + - types-pyyaml ; extra == 'all' + - types-simplejson ; extra == 'all' + - types-toml ; extra == 'all' + - types-tqdm ; extra == 'all' + - types-urllib3 ; extra == 'all' + - authlib>=1.3.2 ; extra == 'dev' + - fastapi ; extra == 'dev' + - httpx ; extra == 'dev' + - itsdangerous ; extra == 'dev' + - jedi ; extra == 'dev' + - jinja2 ; extra == 'dev' + - pytest>=8.4.2 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-env ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pytest-vcr ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - pytest-rerunfailures<16.0 ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - urllib3<2.0 ; extra == 'dev' + - soundfile ; extra == 'dev' + - pillow ; extra == 'dev' + - numpy ; extra == 'dev' + - duckdb ; extra == 'dev' + - fastapi ; extra == 'dev' + - ruff>=0.9.0 ; extra == 'dev' + - mypy==1.15.0 ; extra == 'dev' + - libcst>=1.4.0 ; extra == 'dev' + - ty ; extra == 'dev' + - typing-extensions>=4.8.0 ; extra == 'dev' + - types-pyyaml ; extra == 'dev' + - types-simplejson ; extra == 'dev' + - types-toml ; extra == 'dev' + - types-tqdm ; extra == 'dev' + - types-urllib3 ; extra == 'dev' + requires_python: '>=3.9.0' +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a + md5: c80d8a3b84358cb967fa81e7075fbc8a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12723451 + timestamp: 1773822285671 +- pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + name: identify + version: 2.6.18 + sha256: 8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 + requires_dist: + - ukkonen ; extra == 'license' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + name: idna + version: '3.11' + sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda + sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe + md5: b5577bc2212219566578fd5af9993af6 + depends: + - numpy + - pillow >=8.3.2 + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/imageio?source=hash-mapping + size: 293226 + timestamp: 1738273949742 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 + md5: 080594bf4493e6bae2607e65390c520a + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34387 + timestamp: 1773931568510 +- pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + name: importlib-resources + version: 6.5.2 + sha256: 789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec + requires_dist: + - zipp>=3.1.0 ; python_full_version < '3.10' + - pytest>=6,!=8.1.* ; extra == 'test' + - zipp>=3.17 ; extra == 'test' + - jaraco-test>=5.4 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + name: iniconfig + version: 2.3.0 + sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda + sha256: b77ed58eb235e5ad80e742b03caeed4bbc2a2ef064cb9a2deee3b75dfae91b2a + md5: 8b267f517b81c13594ed68d646fd5dcb + depends: + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=8.8.0 + - jupyter_core >=5.1,!=6.0.* + - matplotlib-inline >=0.1 + - nest-asyncio >=1.4 + - packaging >=22 + - psutil >=5.7 + - python >=3.10 + - pyzmq >=25 + - tornado >=6.4.1 + - traitlets >=5.4.0 + - python + constrains: + - appnope >=0.1.2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=compressed-mapping + size: 133644 + timestamp: 1770566133040 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + sha256: 932044bd893f7adce6c9b384b96a72fd3804cc381e76789398c2fae900f21df7 + md5: b293210beb192c3024683bf6a998a0b8 + depends: + - __unix + - decorator >=5.1.0 + - ipython_pygments_lexers >=1.0.0 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.14.0 + - python >=3.12 + - stack_data >=0.6.0 + - traitlets >=5.13.0 + - pexpect >4.6 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=compressed-mapping + size: 649967 + timestamp: 1774609994657 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + size: 13993 + timestamp: 1737123723464 +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.9 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/jedi?source=hash-mapping + size: 843646 + timestamp: 1733300981994 +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + name: jmespath + version: 1.1.0 + sha256: a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl + name: json-merge-patch + version: 0.3.0 + sha256: e0a593719b293ff63858ecaae3afbcb4ff0b57f785453c6783d7b0c3e2708b76 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + name: jsonpatch + version: '1.33' + sha256: 0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade + requires_dist: + - jsonpointer>=1.9 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + name: jsonpointer + version: 3.1.1 + sha256: 8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + name: jsonschema + version: 4.26.0 + sha256: d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce + requires_dist: + - attrs>=22.2.0 + - jsonschema-specifications>=2023.3.6 + - referencing>=0.28.4 + - rpds-py>=0.25.0 + - fqdn ; extra == 'format' + - idna ; extra == 'format' + - isoduration ; extra == 'format' + - jsonpointer>1.13 ; extra == 'format' + - rfc3339-validator ; extra == 'format' + - rfc3987 ; extra == 'format' + - uri-template ; extra == 'format' + - webcolors>=1.11 ; extra == 'format' + - fqdn ; extra == 'format-nongpl' + - idna ; extra == 'format-nongpl' + - isoduration ; extra == 'format-nongpl' + - jsonpointer>1.13 ; extra == 'format-nongpl' + - rfc3339-validator ; extra == 'format-nongpl' + - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' + - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' + - uri-template ; extra == 'format-nongpl' + - webcolors>=24.6.0 ; extra == 'format-nongpl' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + name: jsonschema-specifications + version: 2025.9.1 + sha256: 98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe + requires_dist: + - referencing>=0.31.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + sha256: e402bd119720862a33229624ec23645916a7d47f30e1711a4af9e005162b84f3 + md5: 8a3d6d0523f66cf004e563a50d9392b3 + depends: + - jupyter_core >=5.1 + - python >=3.10 + - python-dateutil >=2.8.2 + - pyzmq >=25.0 + - tornado >=6.4.1 + - traitlets >=5.3 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=compressed-mapping + size: 112785 + timestamp: 1767954655912 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a + md5: b38fe4e78ee75def7e599843ef4c1ab0 + depends: + - __unix + - python + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 65503 + timestamp: 1760643864586 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + sha256: eec7654c2d68f06590862c6e845cc70987b6d6559222b6f0e619dea4268f5dd5 + md5: cd74a9525dc74bbbf93cf8aa2fa9eb5b + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 77120 + timestamp: 1773067050308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab + md5: a8832b479f93521a9e7b5b743803be51 + depends: + - libgcc-ng >=12 + license: LGPL-2.0-only + license_family: LGPL + purls: [] + size: 508258 + timestamp: 1664996250081 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda + sha256: 836ec4b895352110335b9fdcfa83a8dcdbe6c5fb7c06c4929130600caea91c0a + md5: 6f2e2c8f58160147c4d1c6f4c14cbac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 249959 + timestamp: 1768184673131 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda + sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 + md5: 86f7414544ae606282352fa1e116b41f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 36544 + timestamp: 1769221884824 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + build_number: 6 + sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 + md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e + depends: + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 + constrains: + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + - mkl <2026 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18621 + timestamp: 1774503034895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 298378 + timestamp: 1764017210931 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda + sha256: 37c41b1024d0c75da76822e3c079aabaf121618a32fe05e53a897b35a88008fc + md5: 499cd8e2d4358986dbe3b30e8fe1bf6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 124432 + timestamp: 1774333989027 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + build_number: 6 + sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 + md5: 36ae340a916635b97ac8a0655ace2a35 + depends: + - libblas 3.11.0 6_h4a7cf45_openblas + constrains: + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18622 + timestamp: 1774503050205 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda + sha256: de512ce246faec2d4f7766774769921a85b5aa053a74abd2f8c97ad50b393aac + md5: 24a2802074d26aecfdbc9b3f1d8168d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm21 >=21.1.8,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21066639 + timestamp: 1770190428756 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda + sha256: 914da94dbf829192b2bb360a7684b32e46f047a57de96a2f5ab39a011aeae6ea + md5: d966a23335e090a5410cc4f0dec8d00a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 21661249 + timestamp: 1772101075353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + sha256: 4a9dd814492a129f2ff40cd4ab0b942232c9e3c6dbc0d0aaf861f1f65e99cc7d + md5: 140459a7413d8f6884eb68205ce39a0d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm22 >=22.1.0,<22.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 12817500 + timestamp: 1772101411287 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda + sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4 + md5: d50608c443a30c341c24277d28290f76 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.67.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 466704 + timestamp: 1773218522665 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 + md5: 9314bc5a1fe7d1044dc9dfd3ef400535 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.18,<0.19.0a0 + license: MIT + license_family: MIT + purls: [] + size: 310785 + timestamp: 1757212153962 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + sha256: 7fd5408d359d05a969133e47af580183fbf38e2235b562193d427bb9dad79723 + md5: c151d5eb730e9b7480e6d48c0fc44048 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 44840 + timestamp: 1731330973553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 427426 + timestamp: 1685725977222 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c + md5: 49f570f3bc4c874a06ea69b7225753af + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.5.* + license: MIT + license_family: MIT + purls: [] + size: 76624 + timestamp: 1774719175983 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + sha256: e755e234236bdda3d265ae82e5b0581d259a9279e3e5b31d745dc43251ad64fb + md5: 47595b9d53054907a00d95e4d47af1d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libogg >=1.3.5,<1.4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 424563 + timestamp: 1764526740626 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8049 + timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 384575 + timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041788 + timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 + depends: + - libgcc 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27526 + timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e + depends: + - libgfortran5 15.2.0 h68bc16d_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27523 + timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2482475 + timestamp: 1771378241063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d + md5: 928b8be80851f5d8ffb016f9c81dae7a + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - libglx 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 134712 + timestamp: 1731330998354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce + md5: bb26456332b07f68bf3b7622ed71c0da + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4398701 + timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 + md5: 434ca7e50e40f4918ab701e3facd59a0 + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + purls: [] + size: 132463 + timestamp: 1731330968309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 + md5: c8013e438185f33b13814c5c488acd5c + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - xorg-libx11 >=1.8.10,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 75504 + timestamp: 1731330988898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 + md5: 239c5e9546c38a1e884d69effcf4c882 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603262 + timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda + sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 + md5: 8397539e3a0bbd1695584fb4f927485a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633710 + timestamp: 1762094827865 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + build_number: 6 + sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d + md5: 881d801569b201c2e753f03c84b85e15 + depends: + - libblas 3.11.0 6_h4a7cf45_openblas + constrains: + - blas 2.306 openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18624 + timestamp: 1774503065378 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f + md5: 1a2708a460884d6861425b7f9a7bef99 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44333366 + timestamp: 1765959132513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.2-hf7376ad_0.conda + sha256: eda0013a9979d142f520747e3621749c493f5fbc8f9d13a52ac7a2b699338e7c + md5: 7147b0792a803cd5b9929ce5d48f7818 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44217146 + timestamp: 1774480335347 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: c7c83eecbb72d88b940c249af56c8b17 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.2.* + license: 0BSD + purls: [] + size: 113207 + timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f + md5: 2a45e7f8af083626f009645a6481f12d + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 663344 + timestamp: 1773854035739 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + sha256: ffb066ddf2e76953f92e06677021c73c85536098f1c21fcd15360dbc859e22e4 + md5: 68e52064ed3897463c0e958ab5c8f91b + depends: + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 218500 + timestamp: 1745825989535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 + md5: 89d61bc91d3f39fda0ca10fcd3c68594 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.32,<0.3.33.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5928890 + timestamp: 1774471724897 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + sha256: 215086c108d80349e96051ad14131b751d17af3ed2cb5a34edd62fa89bfe8ead + md5: 7df50d44d4a14d6c31a2c54f2cd92157 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 50757 + timestamp: 1731330993524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-devel-1.7.0-ha4b6fd6_2.conda + sha256: b347798eba61ce8d7a65372cf0cf6066c328e5717ab69ae251c6822e6f664f23 + md5: 75b039b1e51525f4572f828be8441970 + depends: + - __glibc >=2.17,<3.0.a0 + - libopengl 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 15460 + timestamp: 1731331007610 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd + md5: 2446ac1fe030c2aa6141386c1f5a6aed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 324993 + timestamp: 1768497114401 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 + md5: 70e3400cbbfa03e96dcde7fc13e38c7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 28424 + timestamp: 1749901812541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda + sha256: 4f9fca3bc21e485ec0b3eb88db108b6cf9ab9a481cdf7d2ac6f9d30350b45ead + md5: 97169784f0775c85683c3d8badcea2c3 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 317540 + timestamp: 1774513272700 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + sha256: c7e61b86c273ec1ce92c0e087d1a0f3ed3b9485507c6cd35e03bc63de1b6b03f + md5: 405ec206d230d9d37ad7c2636114cbf4 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.10,<2.7.0a0 + - openssl >=3.5.5,<4.0a0 + license: PostgreSQL + purls: [] + size: 2865686 + timestamp: 1772136328077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + sha256: 57cb5f92110324c04498b96563211a1bca6a74b2918b1e8df578bfed03cc32e4 + md5: 067590f061c9f6ea7e61e3b2112ed6b3 + depends: + - __glibc >=2.17,<3.0.a0 + - lame >=3.100,<3.101.0a0 + - libflac >=1.5.0,<1.6.0a0 + - libgcc >=14 + - libogg >=1.3.5,<1.4.0a0 + - libopus >=1.5.2,<2.0a0 + - libstdcxx >=14 + - libvorbis >=1.3.7,<1.4.0a0 + - mpg123 >=1.32.9,<1.33.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 355619 + timestamp: 1765181778282 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + sha256: 64e5c80cbce4680a2d25179949739a6def695d72c40ca28f010711764e372d97 + md5: 7af961ef4aa2c1136e11dd43ded245ab + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: ISC + purls: [] + size: 277661 + timestamp: 1772479381288 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 + md5: fd893f6a3002a635b5e50ceb9dd2c0f4 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 951405 + timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 304790 + timestamp: 1745608545575 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852330 + timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 + md5: 6235adb93d064ecdf3d44faee6f468de + depends: + - libstdcxx 15.2.0 h934c35e_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27575 + timestamp: 1771378314494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda + sha256: c5008b602cb5c819f7b52d418b3ed17e1818cbbf6705b189e7ab36bb70cce3d8 + md5: 8ee3cb7f64be0e8c4787f3a4dbe024e6 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 492799 + timestamp: 1773797095649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 435273 + timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee + md5: db409b7c1720428638e7c0d509d3e1b5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40311 + timestamp: 1766271528534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5 + md5: b4ecbefe517ed0157c37f8182768271c + depends: + - libogg + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libogg >=1.3.5,<1.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 285894 + timestamp: 1753879378005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b + md5: 31ad065eda3c2d88f8215b1289df9c89 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 199795 + timestamp: 1770077125520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b + md5: aea31d2e5b1091feca96fcfe945c3cf9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 429011 + timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c + md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 837922 + timestamp: 1764794163823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 + md5: e49238a1609f9a4a844b09d9926f2c3d + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 hca6bf5a_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 45968 + timestamp: 1772704614539 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c + md5: f3bc152cb4f86babe30f3a4bf0dbef69 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.2 + license: MIT + license_family: MIT + purls: [] + size: 557492 + timestamp: 1772704601644 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 245434 + timestamp: 1757963724977 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 63629 + timestamp: 1774072609062 +- pypi: https://files.pythonhosted.org/packages/aa/85/4890a7c14b4fa54400945cb52ac3cd88545bbdb973c440f98ca41591cdc5/llvmlite-0.46.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: llvmlite + version: 0.46.0 + sha256: 3535bd2bb6a2d7ae4012681ac228e5132cdb75fefb1bcb24e33f2f3e0c865ed4 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + name: locket + version: 1.0.0 + sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py312h63ddcf0_2.conda + sha256: 60000e93b2d65072abe97a98c85f987ffd47fa1ee612eeafeb2ccd0f48f9c74c + md5: a12c2fbcb3a5a7fa24e5fb8468368b1b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libxslt >=1.1.43,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause and MIT-CMU + purls: + - pkg:pypi/lxml?source=hash-mapping + size: 1605879 + timestamp: 1762506384758 +- pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: lz4 + version: 4.4.5 + sha256: 24092635f47538b392c4eaeff14c7270d2c8e806bf4be2a6446a378591c5e69e + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 + md5: 9de5350a85c4a20c685259b889aa6393 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 167055 + timestamp: 1733741040117 +- conda: https://conda.anaconda.org/conda-forge/noarch/mako-1.3.10-pyhcf101f3_1.conda + sha256: 6099a13faaaf22afa8daa273929f393d41140fc03509b4ef1e2f6858b511699d + md5: 99f74609a309e434f25f0ede5f50580c + depends: + - python >=3.10 + - importlib-metadata + - markupsafe >=0.9.2 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/mako?source=hash-mapping + size: 71947 + timestamp: 1764678340587 +- pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + name: markdown-it-py + version: 4.0.0 + sha256: 87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=3.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - markdown-it-pyrs ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins>=0.5.0 ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins>=0.5.0 ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme~=1.0 ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - requests ; extra == 'testing' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 + md5: 93a4752d42b12943a355b682ee43285b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 26057 + timestamp: 1772445297924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda + sha256: 6d66175e1a4ffb91ed954e2c11066d2e03a05bce951a808275069836ddfc993e + md5: 2a7663896e5aab10b60833a768c4c272 + depends: + - matplotlib-base >=3.10.8,<3.10.9.0a0 + - pyside6 >=6.7.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 17415 + timestamp: 1763055550515 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda + sha256: 70cf0e7bfd50ef50eb712a6ca1eef0ef0d63b7884292acc81353327b434b548c + md5: b8dc157bbbb69c1407478feede8b7b42 + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.23,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8442149 + timestamp: 1763055517581 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 + md5: 00e120ce3e40bad7bfc78861ce3c4a25 + depends: + - python >=3.10 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + size: 15175 + timestamp: 1761214578417 +- pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + name: mccabe + version: 0.7.0 + sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + requires_python: '>=3.6' +- 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/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl + name: mongoquery + version: 1.4.3 + sha256: 8be47635c5e361c9f363b7a901a2b86649687491b7aaca2d12601eff41cb6128 + requires_dist: + - six +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 + md5: c7f302fd11eeb0987a6a5e1f3aed6a21 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: LGPL-2.1-only + license_family: LGPL + purls: [] + size: 491140 + timestamp: 1730581373280 +- pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.1.2 + sha256: 372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 15851 + timestamp: 1749895533014 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 891641 + timestamp: 1738195959188 +- pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: ndindex + version: 1.10.1 + sha256: 03cf1e6cdac876bd8fc92d3b65bb223496b1581d10eab3ba113f7c195121a959 + requires_dist: + - numpy ; extra == 'arrays' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 + md5: 598fd7d4d0de2455fb74f56063969a97 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/nest-asyncio?source=hash-mapping + size: 11543 + timestamp: 1733325673691 +- pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + name: nodeenv + version: 1.10.0 + sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b + md5: 9a66894dfd07c4510beb6b3f9672ccc0 + constrains: + - mkl <0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3843 + timestamp: 1582593857545 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda + sha256: e3664264bd936c357523b55c71ed5a30263c6ba278d726a75b1eb112e6fb0b64 + md5: e235d5566c9cc8970eb2798dd4ecf62f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 228588 + timestamp: 1762348634537 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda + sha256: 44dd98ffeac859d84a6dcba79a2096193a42fc10b29b28a5115687a680dd6aea + md5: 567fbeed956c200c1db5782a424e58ee + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libsqlite >=3.51.0,<4.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - nspr >=4.38,<5.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 2057773 + timestamp: 1763485556350 +- pypi: https://files.pythonhosted.org/packages/9b/89/1a74ea99b180b7a5587b0301ed1b183a2937c4b4b67f7994689b5d36fc34/numba-0.64.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: numba + version: 0.64.0 + sha256: f13721011f693ba558b8dd4e4db7f2640462bba1b855bdc804be45bbeb55031a + requires_dist: + - llvmlite>=0.46.0.dev0,<0.47 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: numcodecs + version: 0.16.5 + sha256: ad1a379a45bd3491deab8ae6548313946744f868c21d5340116977ea3be5b1d6 + requires_dist: + - numpy>=1.24 + - typing-extensions + - msgpack ; extra == 'msgpack' + - zfpy>=1.0.0 ; extra == 'zfpy' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + - google-crc32c>=1.5 ; extra == 'google-crc32c' + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pyzstd ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - crc32c ; extra == 'test-extras' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda + sha256: 2978bc3fdeab4eb24ed21a0319f2a817e417935f5afdbc54550b6a187b8e4ab2 + md5: f31fa7178c477ce82dfb47273582de15 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - nomkl + - numpy >=1.23,<3 + - numpy >=1.23.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/numexpr?source=hash-mapping + size: 213828 + timestamp: 1762595020114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + sha256: 1aab7ba963affa572956b1bd8d239df52a9c7bc799c560f98bc658ab70224e10 + md5: 5930ee8a175a242b4f001b1e9e72024f + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8757569 + timestamp: 1773839284329 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda + sha256: 2254dae821b286fb57c61895f2b40e3571a070910fdab79a948ff703e1ea807b + md5: 56f8947aa9d5cf37b0b3d43b83f34192 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - opencl-headers >=2024.10.24 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 106742 + timestamp: 1743700382939 +- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + sha256: 8de2f0cd8a659b01abf86e7fbb8cea4f28ada62fd288429a2bbc040db1b98dd0 + md5: c930c8052d780caa41216af7de472226 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 55754 + timestamp: 1773844383536 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 355400 + timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda + sha256: 2e185a3dc2bdc4525dd68559efa3f24fa9159a76c40473e320732b35115163b2 + md5: 3c40a106eadf7c14c6236ceddb267893 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 785570 + timestamp: 1771970256722 +- pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + name: openpyxl + version: 3.1.5 + sha256: 5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 + requires_dist: + - et-xmlfile + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c + md5: f61eb8cd60ff9057122a3d338b99c00f + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3164551 + timestamp: 1769555830639 +- pypi: https://files.pythonhosted.org/packages/3a/79/f5458169690845eb014d21bbbaa855622064a7f28b06ab4ebbb1b2c263ae/opentelemetry_api-1.16.0-py3-none-any.whl + name: opentelemetry-api + version: 1.16.0 + sha256: 79e8f0cf88dbdd36b6abf175d2092af1efcaa2e71552d0d2b3b181a9707bf4bc + requires_dist: + - deprecated>=1.2.6 + - importlib-metadata>=5.0.0 ; python_full_version == '3.7.*' + - setuptools>=16.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl + name: opentelemetry-exporter-jaeger + version: 1.21.0 + sha256: 3d645eff7e31461d917be5c6635803ad7913cbb7662feed014ba2fe6e005b209 + requires_dist: + - opentelemetry-exporter-jaeger-proto-grpc==1.21.0 + - opentelemetry-exporter-jaeger-thrift==1.21.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl + name: opentelemetry-exporter-jaeger-proto-grpc + version: 1.21.0 + sha256: cf8ec4761c56d611e7bfb9538d4d85ea6a67cd1548f12deff83afaa5c447816e + requires_dist: + - googleapis-common-protos~=1.52,<1.60.0 + - grpcio>=1.0.0,<2.0.0 + - opentelemetry-api~=1.3 + - opentelemetry-sdk~=1.11 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl + name: opentelemetry-exporter-jaeger-thrift + version: 1.21.0 + sha256: 4364b8dfa6965707c72c43d85942b1491982b7d44f0123d593513e8bedafa9e2 + requires_dist: + - opentelemetry-api~=1.3 + - opentelemetry-sdk~=1.11 + - thrift>=0.10.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl + name: opentelemetry-exporter-prometheus + version: 0.41b0 + sha256: ca996f3bc15b0cbf3abd798e786095a202650202a5c0edd9e34bb9186a247b79 + requires_dist: + - opentelemetry-api~=1.12 + - opentelemetry-sdk~=1.12 + - prometheus-client>=0.5.0,<1.0.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl + name: opentelemetry-sdk + version: 1.16.0 + sha256: 15f03915eec4839f885a5e6ed959cde59b8690c8c012d07c95b4b138c98dc43f + requires_dist: + - opentelemetry-api==1.16.0 + - opentelemetry-semantic-conventions==0.37b0 + - setuptools>=16.0 + - typing-extensions>=3.7.4 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl + name: opentelemetry-semantic-conventions + version: 0.37b0 + sha256: 462982278a42dab01f68641cd89f8460fe1f93e87c68a012a76fb426dcdba5ee + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: orjson + version: 3.11.8 + sha256: 53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 72010 + timestamp: 1769093650580 +- pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.2 + sha256: ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2024.2 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2024.2 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + sha256: 315b52bfa6d1a820f4806f6490d472581438a28e21df175290477caec18972b0 + md5: d53ffc0edc8eabf4253508008493c5bc + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 458036 + timestamp: 1774281947855 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 + md5: 97c1ce2fffa1209e7afb432810ec6e12 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping + size: 82287 + timestamp: 1770676243987 +- pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + name: partd + version: 1.4.2 + sha256: 978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f + requires_dist: + - locket + - toolz + - numpy>=1.20.0 ; extra == 'complete' + - pandas>=1.3 ; extra == 'complete' + - pyzmq ; extra == 'complete' + - blosc ; extra == 'complete' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea + depends: + - ptyprocess >=0.5 + - python >=3.9 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.1-py312h50c33e8_0.conda + sha256: 782b6b578a0e61f6ef5cca5be993d902db775a2eb3d0328a3c4ff515858e7f2c + md5: c5eff3ada1a829f0bdb780dc4b62bbae + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - lcms2 >=2.18,<3.0a0 + - python_abi 3.12.* *_cp312 + - zlib-ng >=2.3.3,<2.4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + size: 1029755 + timestamp: 1770794002406 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a + md5: c01af13bdc553d1a8fbfff6e8db075f0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 450960 + timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 82c1787f2a65c0155ef9652466ee98d6 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25646 + timestamp: 1773199142345 +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda + sha256: bae453e5cecf19cab23c2e8929c6e30f4866d996a8058be16c797ed4b935461f + md5: fd5062942bfa1b0bd5e0d2a4397b099e + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ply?source=hash-mapping + size: 49052 + timestamp: 1733239818090 +- pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + name: pre-commit + version: 4.5.1 + sha256: 3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77 + requires_dist: + - cfgv>=2.0.0 + - identify>=1.0.0 + - nodeenv>=0.11.1 + - pyyaml>=5.1 + - virtualenv>=20.10.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl + name: prometheus-client + version: 0.24.1 + sha256: 150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055 + requires_dist: + - twisted ; extra == 'twisted' + - aiohttp ; extra == 'aiohttp' + - django ; extra == 'django' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae + md5: edb16f14d920fb3faf17f5ce582942d6 + depends: + - python >=3.10 + - wcwidth + constrains: + - prompt_toolkit 3.0.52 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 273927 + timestamp: 1756321848365 +- pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 4.25.9 + sha256: 438c636de8fb706a0de94a12a268ef1ae8f5ba5ae655a7671fcda5968ba3c9be + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda + sha256: d834fd656133c9e4eaf63ffe9a117c7d0917d86d89f7d64073f4e3a0020bd8a7 + md5: dd94c506b119130aef5a9382aed648e7 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=compressed-mapping + size: 225545 + timestamp: 1769678155334 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + sha256: 0a0858c59805d627d02bdceee965dd84fde0aceab03a2f984325eec08d822096 + md5: b8ea447fdf62e3597cb8d2fae4eb1a90 + depends: + - __glibc >=2.17,<3.0.a0 + - dbus >=1.16.2,<2.0a0 + - libgcc >=14 + - libglib >=2.86.1,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libsndfile >=1.2.2,<1.3.0a0 + - libsystemd0 >=257.10 + - libxcb >=1.17.0,<2.0a0 + constrains: + - pulseaudio 17.0 *_3 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 750785 + timestamp: 1763148198088 +- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0 + md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pure-eval?source=hash-mapping + size: 16668 + timestamp: 1733569518868 +- pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl + name: pyarrow + version: 23.0.1 + sha256: 813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl + name: pyasn1 + version: 0.6.3 + sha256: a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + name: pycodestyle + version: 2.14.0 + sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + name: pycparser + version: '3.0' + sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + name: pydantic + version: 2.12.5 + sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.41.5 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.41.5 + sha256: eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl + name: pydantic-settings + version: 2.13.1 + sha256: d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237 + requires_dist: + - pydantic>=2.7.0 + - python-dotenv>=0.21.0 + - typing-inspection>=0.4.0 + - boto3-stubs[secretsmanager] ; extra == 'aws-secrets-manager' + - boto3>=1.35.0 ; extra == 'aws-secrets-manager' + - azure-identity>=1.16.0 ; extra == 'azure-key-vault' + - azure-keyvault-secrets>=4.8.0 ; extra == 'azure-key-vault' + - google-cloud-secret-manager>=2.23.1 ; extra == 'gcp-secret-manager' + - tomli>=2.0.1 ; extra == 'toml' + - pyyaml>=6.0.1 ; extra == 'yaml' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/pyfai-2026.3.0-hd8ed1ab_0.conda + sha256: 913a8edd397170d5929dd44b8b205828efe80e172bbc4ed8c40fc7d896152173 + md5: 82d8e333f76c54140ec6f66160da7087 + depends: + - hdf5plugin + - matplotlib + - pyfai-base >=2026.3.0,<2026.3.1.0a0 + - silx >=1.1 + license: MIT + license_family: MIT + purls: [] + size: 9931 + timestamp: 1774293556145 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyfai-base-2026.3.0-py312hf79963d_0.conda + sha256: 8ea20ec8f205b703de661635f70254cdf3c52adfc5f47b5646c532e82f260cf0 + md5: 2d81e7066422c1a8ecf93e0068d406f6 + depends: + - __glibc >=2.17,<3.0.a0 + - fabio + - h5py + - libgcc >=14 + - libstdcxx >=14 + - matplotlib-base + - numexpr + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - scipy + - silx-base >=1.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyfai?source=hash-mapping + size: 4623556 + timestamp: 1774293568467 +- pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + name: pyflakes + version: 3.4.0 + sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 + md5: 16c18772b340887160c79a6acc022db0 + depends: + - python >=3.10 + license: BSD-2-Clause + purls: + - pkg:pypi/pygments?source=compressed-mapping + size: 893031 + timestamp: 1774796815820 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyopencl-2026.1.1-py312hf890105_0.conda + sha256: 9061d44855fd595840586dd8783e9cbf65405912dfad8dab2617b529cd86b8d7 + md5: 2844ff09f29cb961b4283fa4749efe2d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - mako + - numpy >=1.23,<3 + - ocl-icd >=2.3.3,<3.0a0 + - platformdirs + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - pytools + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyopencl?source=hash-mapping + size: 653367 + timestamp: 1768059975411 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyopengl-3.1.10-pyha804496_2.conda + sha256: 0775255f81e2c6b49948b3656796823758e64938a15543302857d99da0e3d737 + md5: cce156023226a62044a8112bebf3d5e1 + depends: + - __linux + - libopengl-devel + - python >=3.10 + license: LicenseRef-pyopengl + purls: + - pkg:pypi/pyopengl?source=hash-mapping + size: 1327162 + timestamp: 1756496351413 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de + md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 110893 + timestamp: 1769003998136 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda + sha256: cdad112328763c7b4f23ce823dc0b5821de310f109324b9ba89bddf13af599f0 + md5: 84d5670ea1c8e72198bce0710f015e0c + depends: + - __glibc >=2.17,<3.0.a0 + - libegl >=1.7.0,<2.0a0 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libstdcxx >=14 + - pyqt5-sip 12.17.0 py312h1289d80_2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - qt-main >=5.15.15,<5.16.0a0 + - sip >=6.10.0,<6.11.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxcomposite >=0.4.6,<1.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/pyqt5?source=hash-mapping + size: 5282965 + timestamp: 1759498005783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda + sha256: d1f8665889ace76677084d5a0399b2a488553fc5e8efafe9e97ee7e2641e2496 + md5: 14b1c131cab3002a6d2c2db647550084 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - packaging + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - sip + - toml + license: GPL-3.0-only + license_family: GPL + purls: + - pkg:pypi/pyqt5-sip?source=hash-mapping + size: 85800 + timestamp: 1759495565076 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_0.conda + sha256: 61cdb5b8c3d8ba46aebaefebf5991f35ccde2654fc358faca81f02d6993fb04e + md5: 246c0cd17c06eacdd21be6350515c1f9 + depends: + - python + - qt6-main 6.11.0.* + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - python_abi 3.12.* *_cp312 + - libgl >=1.7.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - qt6-main >=6.11.0,<6.12.0a0 + - libegl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libclang13 >=21.1.8 + - libxml2 + - libxml2-16 >=2.14.6 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 13203421 + timestamp: 1774714566544 +- pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + name: pytest + version: 9.0.2 + sha256: 711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + name: pytest-asyncio + version: 1.3.0 + sha256: 611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5 + requires_dist: + - backports-asyncio-runner>=1.1,<2 ; python_full_version < '3.11' + - pytest>=8.2,<10 + - typing-extensions>=4.12 ; python_full_version < '3.13' + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl + name: pytest-mock + version: 3.15.1 + sha256: 0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d + requires_dist: + - pytest>=6.2.5 + - pre-commit ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - tox ; extra == 'dev' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda + sha256: a44655c1c3e1d43ed8704890a91e12afd68130414ea2c0872e154e5633a13d7e + md5: 7eccb41177e15cc672e1babe9056018e + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31608571 + timestamp: 1772730708989 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 233310 + timestamp: 1751104122689 +- pypi: https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl + name: python-discovery + version: 1.2.1 + sha256: b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 + requires_dist: + - filelock>=3.15.4 + - platformdirs>=4.3.6,<5 + - furo>=2025.12.19 ; extra == 'docs' + - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs' + - sphinx>=9.1 ; extra == 'docs' + - sphinxcontrib-mermaid>=2 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.5.4 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest>=8.3.5 ; extra == 'testing' + - setuptools>=75.1 ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl + name: python-dotenv + version: 1.2.2 + sha256: 1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a + requires_dist: + - click>=5.0 ; extra == 'cli' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda + sha256: 97327b9509ae3aae28d27217a5d7bd31aff0ab61a02041e9c6f98c11d8a53b29 + md5: 32780d6794b8056b78602103a04e90ef + depends: + - cpython 3.12.13.* + - python_abi * *_cp312 + license: Python-2.0 + purls: [] + size: 46449 + timestamp: 1772728979370 +- pypi: https://files.pythonhosted.org/packages/d9/c3/0bd11992072e6a1c513b16500a5d07f91a24017c5909b02c72c62d7ad024/python_jose-3.5.0-py2.py3-none-any.whl + name: python-jose + version: 3.5.0 + sha256: abd1202f23d34dfad2c3d28cb8617b90acf34132c7afd60abd0b0b7d3cb55771 + requires_dist: + - ecdsa!=0.15 + - rsa>=4.0,!=4.1.1,!=4.4,<5.0 + - pyasn1>=0.5.0 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - cryptography>=3.4.0 ; extra == 'cryptography' + - pycrypto>=2.6.0,<2.7.0 ; extra == 'pycrypto' + - pycryptodome>=3.3.1,<4.0.0 ; extra == 'pycryptodome' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl + name: python-multipart + version: 0.0.22 + sha256: 2b2cd894c83d21bf49d702499531c7bafd057d730c201782048f7945d82de155 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + build_number: 8 + sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809 + md5: c3efd25ac4d74b1584d2f7a57195ddf1 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6958 + timestamp: 1752805918820 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytools-2025.2.5-pyhd8ed1ab_0.conda + sha256: 3ccb63a2977a794307652052d37c8e4497093ab64d2068674b78aa3589017d7d + md5: b5996aa64763a81d6101cef6de1944d1 + depends: + - platformdirs >=2.2 + - python >=3.10 + - siphash24 >=1.6 + - typing-extensions >=4 + - typing_extensions >=4.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytools?source=hash-mapping + size: 80797 + timestamp: 1759858907656 +- pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl + name: pytz + version: 2026.1.post1 + sha256: f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a +- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + noarch: python + sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 + md5: 082985717303dab433c976986c674b35 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=compressed-mapping + size: 211567 + timestamp: 1771716961404 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h0c412b5_8.conda + sha256: c0008c97dbfaef709eff044ea2fdcf7cca55b2e061ff992872d71b9b35f7f91b + md5: 80e27e7982af989ebc2e0f0d57c75ea7 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gst-plugins-base >=1.26.10,<1.27.0a0 + - gstreamer >=1.26.10,<1.27.0a0 + - harfbuzz >=13.2.0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libclang-cpp22.1 >=22.1.0,<22.2.0a0 + - libclang13 >=22.1.0 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libevent >=2.1.12,<2.1.13.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=13 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libpq >=18.3,<19.0a0 + - libsqlite >=3.52.0,<4.0a0 + - libstdcxx >=13 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - nspr >=4.38,<5.0a0 + - nss >=3.118,<4.0a0 + - openssl >=3.5.5,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 5.15.15 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 52674357 + timestamp: 1773957808615 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.0-pl5321h16c4a6b_2.conda + sha256: e83dabfeb6209c863a1555edad81b12b08a953a0d952359bf3f0be3250ab12ce + md5: c6ba2de6b22dedf2f20eba3bde1dbe8e + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libllvm21 >=21.1.8,<21.2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libclang-cpp21.1 >=21.1.8,<21.2.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - icu >=78.3,<79.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - libglib >=2.86.4,<3.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libpq >=18.3,<19.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - harfbuzz >=13.2.1 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - dbus >=1.16.2,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - libxcb >=1.17.0,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - libegl >=1.7.0,<2.0a0 + - libpng >=1.6.56,<1.7.0a0 + - wayland >=1.25.0,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libclang13 >=21.1.8 + - libsqlite >=3.52.0,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + constrains: + - qt ==6.11.0 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 60993086 + timestamp: 1774634904948 +- conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-5.7.2-pyhd8ed1ab_0.conda + sha256: 890fdf416cb1cb29bfe502fb1b038b60a87a6cdffc0a78db6b9688d8ae75f0c8 + md5: 506f8b95ef2554db6160f0e8b8994313 + depends: + - pyqt + - python >=3.9 + - qtconsole-base >=5.7.2,<5.7.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8549 + timestamp: 1774450526675 +- conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.7.2-pyha770c72_0.conda + sha256: 45dfcd222fc03cff4b68b666272bfb106b83307bedab65640d1ce4a27ecd6e60 + md5: adc01873b0ddaa51e92ce8014a7ebb21 + depends: + - ipykernel >=4.1 + - ipython_pygments_lexers + - jupyter_client >=4.1 + - jupyter_core + - packaging + - pygments + - python >=3.9 + - qtpy >=2.4.0 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/qtconsole?source=hash-mapping + size: 103142 + timestamp: 1774450507445 +- conda: https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda + sha256: b17dd9d2ee7a4f60fb13712883cd2664aa1339df4b29eb7ae0f4423b31778b00 + md5: b49c000df5aca26d36b3f078ba85e03a + depends: + - packaging + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/qtpy?source=hash-mapping + size: 63041 + timestamp: 1749167192680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 +- pypi: https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl + name: redis + version: 7.4.0 + sha256: a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec + requires_dist: + - async-timeout>=4.0.3 ; python_full_version < '3.11.3' + - pybreaker>=1.4.0 ; extra == 'circuit-breaker' + - hiredis>=3.2.0 ; extra == 'hiredis' + - pyjwt>=2.9.0 ; extra == 'jwt' + - cryptography>=36.0.1 ; extra == 'ocsp' + - pyopenssl>=20.0.1 ; extra == 'ocsp' + - requests>=2.31.0 ; extra == 'ocsp' + - opentelemetry-api>=1.39.1 ; extra == 'otel' + - opentelemetry-exporter-otlp-proto-http>=1.39.1 ; extra == 'otel' + - opentelemetry-sdk>=1.39.1 ; extra == 'otel' + - xxhash~=3.6.0 ; extra == 'xxhash' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + name: referencing + version: 0.37.0 + sha256: 381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0a/fe/661043d1c263b0d9d10c6ff4e9c9745f3df9641c62b51f96a3473638e7ce/regex-2026.3.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: regex + version: 2026.3.32 + sha256: f54840bea73541652f1170dc63402a5b776fc851ad36a842da9e5163c1f504a0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + name: requests + version: 2.33.1 + sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.26,<3 + - certifi>=2023.5.7 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + name: rich + version: 14.3.3 + sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d + 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.8.0' +- pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 0.30.0 + sha256: 47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl + name: rsa + version: 4.9.1 + sha256: 68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762 + requires_dist: + - pyasn1>=0.1.3 + requires_python: '>=3.6,<4' +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda + sha256: dbbe4ab36b90427f12d69fc14a8b601b6bca4185c6c4dd67b8046a8da9daec03 + md5: 9d978822b57bafe72ebd3f8b527bba71 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - openssl >=3.5.5,<4.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 395083 + timestamp: 1773251675551 +- pypi: https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: safetensors + version: 0.7.0 + sha256: dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48 + requires_dist: + - numpy>=1.21.6 ; extra == 'numpy' + - packaging ; extra == 'torch' + - safetensors[numpy] ; extra == 'torch' + - torch>=1.10 ; extra == 'torch' + - safetensors[numpy] ; extra == 'tensorflow' + - tensorflow>=2.11.0 ; extra == 'tensorflow' + - safetensors[numpy] ; extra == 'pinned-tf' + - tensorflow==2.18.0 ; extra == 'pinned-tf' + - safetensors[numpy] ; extra == 'jax' + - flax>=0.6.3 ; extra == 'jax' + - jax>=0.3.25 ; extra == 'jax' + - jaxlib>=0.3.25 ; extra == 'jax' + - mlx>=0.0.9 ; extra == 'mlx' + - safetensors[numpy] ; extra == 'paddlepaddle' + - paddlepaddle>=2.4.1 ; extra == 'paddlepaddle' + - ruff ; extra == 'quality' + - safetensors[numpy] ; extra == 'testing' + - h5py>=3.7.0 ; extra == 'testing' + - huggingface-hub>=0.12.1 ; extra == 'testing' + - setuptools-rust>=1.5.2 ; extra == 'testing' + - pytest>=7.2.0 ; extra == 'testing' + - pytest-benchmark>=4.0.0 ; extra == 'testing' + - hypothesis>=6.70.2 ; extra == 'testing' + - safetensors[numpy] ; extra == 'testingfree' + - huggingface-hub>=0.12.1 ; extra == 'testingfree' + - setuptools-rust>=1.5.2 ; extra == 'testingfree' + - pytest>=7.2.0 ; extra == 'testingfree' + - pytest-benchmark>=4.0.0 ; extra == 'testingfree' + - hypothesis>=6.70.2 ; extra == 'testingfree' + - safetensors[torch] ; extra == 'all' + - safetensors[numpy] ; extra == 'all' + - safetensors[pinned-tf] ; extra == 'all' + - safetensors[jax] ; extra == 'all' + - safetensors[paddlepaddle] ; extra == 'all' + - safetensors[quality] ; extra == 'all' + - safetensors[testing] ; extra == 'all' + - safetensors[all] ; extra == 'dev' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd + md5: 3e38daeb1fb05a95656ff5af089d2e4c + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.7 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=compressed-mapping + size: 17109648 + timestamp: 1771880675810 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=compressed-mapping + size: 639697 + timestamp: 1773074868565 +- pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + name: shellingham + version: 1.5.4 + sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/silx-2.2.2-hd8ed1ab_2.conda + sha256: cb314ce0e65e53f70276a11b846b157edb3e393a55207e4a9b65e7d5db15b188 + md5: 3dbe7183da39843aade67239bcf56242 + depends: + - hdf5plugin + - mako + - matplotlib-base >=3.1.0 + - pillow + - pyopencl + - pyopengl + - pyqt + - python-dateutil + - qtconsole + - scipy + - silx-base >=2.2.2,<2.2.3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 10784 + timestamp: 1759515338446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/silx-base-2.2.2-py312hf79963d_2.conda + sha256: 81efa715404094aa976dc20abf26e42727c5bf87b59b90aca27423f79db53ce6 + md5: 68e388c195a9f65ecaf4625a6b8031d6 + depends: + - __glibc >=2.17,<3.0.a0 + - fabio >=0.9 + - h5py + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - packaging + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/silx?source=hash-mapping + size: 4882534 + timestamp: 1759515947785 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.10.0-py312h1289d80_1.conda + sha256: 65224ec231bb938a720897d75fb76f20a2376bded01a438f5220f6fa43195e4f + md5: f96baa9ba899d5d30578675fe28b3473 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - packaging + - ply + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - setuptools + - tomli + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sip?source=hash-mapping + size: 680892 + timestamp: 1759437964748 +- conda: https://conda.anaconda.org/conda-forge/linux-64/siphash24-1.8-py312h4c3975b_2.conda + sha256: d38b2f4b79601e19f6ff420953a033b8388543ff97fb21bad4ed578199c792b6 + md5: 5890c9c1300335542718b6641d59ca57 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 or LGPL-2.1-or-later + purls: + - pkg:pypi/siphash24?source=hash-mapping + size: 94347 + timestamp: 1764877366848 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 + md5: 98b6c9dc80eb87b2519b97bcf7e578dd + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 45829 + timestamp: 1762948049098 +- pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + name: sortedcontainers + version: 2.4.0 + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: https://files.pythonhosted.org/packages/20/a9/804ac7423f5dda316d3a982f3ab071c971fb877f8961dad9f6a97d12d2ee/sparse-0.18.0-py2.py3-none-any.whl + name: sparse + version: 0.18.0 + sha256: 6f4a127d5aae88eca41ea8106bbd5a7830f83d068b37291df597a43511212069 + requires_dist: + - numpy>=1.17 + - numba>=0.49 + - mkdocs-material ; extra == 'docs' + - mkdocstrings[python] ; extra == 'docs' + - mkdocs-gen-files ; extra == 'docs' + - mkdocs-literate-nav ; extra == 'docs' + - mkdocs-section-index ; extra == 'docs' + - mkdocs-jupyter ; extra == 'docs' + - sparse[extras] ; extra == 'docs' + - dask[array] ; extra == 'extras' + - sparse[finch] ; extra == 'extras' + - scipy ; extra == 'extras' + - scikit-learn ; extra == 'extras' + - networkx ; extra == 'extras' + - sparse[extras] ; extra == 'tests' + - pytest>=3.5 ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - pre-commit ; extra == 'tests' + - pytest-codspeed ; extra == 'tests' + - sparse[tests] ; extra == 'tox' + - tox ; extra == 'tox' + - sparse[tests] ; extra == 'notebooks' + - nbmake ; extra == 'notebooks' + - matplotlib ; extra == 'notebooks' + - sparse[docs,mlir,notebooks,tox] ; extra == 'all' + - matrepr ; extra == 'all' + - finch-tensor>=0.2.13 ; extra == 'finch' + - finch-mlir>=0.0.2 ; extra == 'mlir' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: sqlalchemy + version: 2.0.48 + sha256: 34634e196f620c7a61d18d5cf7dc841ca6daa7961aed75d532b7e58b309ac894 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - greenlet>=1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + - typing-extensions>=4.6.0 + - greenlet>=1 ; extra == 'asyncio' + - mypy>=0.910 ; extra == 'mypy' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - mariadb>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10 ; extra == 'mariadb-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - greenlet>=1 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - greenlet>=1 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet>=1 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet>=1 ; extra == 'asyncmy' + - asyncmy>=0.2.3,!=0.2.4,!=0.2.6 ; extra == 'asyncmy' + - greenlet>=1 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 + md5: b1b505328da7a6b246787df4b5a49fbc + depends: + - asttokens + - executing + - pure_eval + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping + size: 26988 + timestamp: 1733569565672 +- pypi: https://files.pythonhosted.org/packages/8f/81/c525760353dff91ae2e4c42c3f3d9bf0bfeecbb6165cc393e86915f1717d/stamina-25.2.0-py3-none-any.whl + name: stamina + version: 25.2.0 + sha256: 7f0de7dba735464c256a31e6372c01b8bb51fb6efd649e6773f4ce804462feea + requires_dist: + - tenacity + - typing-extensions ; python_full_version < '3.10' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl + name: starlette + version: 1.0.0 + sha256: d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b + requires_dist: + - anyio>=3.6.2,<5 + - typing-extensions>=4.10.0 ; python_full_version < '3.13' + - httpx>=0.27.0,<0.29.0 ; extra == 'full' + - itsdangerous ; extra == 'full' + - jinja2 ; extra == 'full' + - python-multipart>=0.0.18 ; extra == 'full' + - pyyaml ; extra == 'full' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + name: tenacity + version: 9.1.4 + sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 + requires_dist: + - reno ; extra == 'doc' + - sphinx ; extra == 'doc' + - pytest ; extra == 'test' + - tornado>=4.5 ; extra == 'test' + - typeguard ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz + name: thrift + version: 0.22.0 + sha256: 42e8276afbd5f54fe1d364858b6877bc5e5a4a5ed69f6a005b94ca4918fe1466 + requires_dist: + - tornado>=4.0 ; extra == 'tornado' + - twisted ; extra == 'twisted' + - tornado>=4.0 ; extra == 'all' + - twisted ; extra == 'all' +- pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl + name: tifffile + version: 2026.3.3 + sha256: e8be15c94273113d31ecb7aa3a39822189dd11c4967e3cc88c178f1ad2fd1170 + requires_dist: + - numpy + - imagecodecs>=2025.11.11 ; extra == 'codecs' + - defusedxml ; extra == 'xml' + - lxml ; extra == 'xml' + - zarr>=3.1.5 ; extra == 'zarr' + - fsspec ; extra == 'zarr' + - kerchunk ; extra == 'zarr' + - matplotlib ; extra == 'plot' + - imagecodecs>=2025.11.11 ; extra == 'all' + - matplotlib ; extra == 'all' + - defusedxml ; extra == 'all' + - lxml ; extra == 'all' + - zarr>=3.1.5 ; extra == 'all' + - fsspec ; extra == 'all' + - kerchunk ; extra == 'all' + - cmapfile ; extra == 'test' + - czifile ; extra == 'test' + - dask ; extra == 'test' + - defusedxml ; extra == 'test' + - fsspec ; extra == 'test' + - imagecodecs ; extra == 'test' + - kerchunk ; extra == 'test' + - lfdfiles ; extra == 'test' + - lxml ; extra == 'test' + - ndtiff ; extra == 'test' + - oiffile ; extra == 'test' + - psdtags ; extra == 'test' + - pytest ; extra == 'test' + - requests ; extra == 'test' + - roifile ; extra == 'test' + - xarray ; extra == 'test' + - zarr>=3.1.5 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl + name: tiled + version: 0.1.6 + sha256: d0421f3413ef6c75ee32c1bfc892b3b822e62ef597c5203870047b6240eaf53f + requires_dist: + - httpx>=0.20.0,!=0.23.1 + - json-merge-patch + - jsonpatch + - jsonschema + - msgpack>=1.0.0 + - orjson + - platformdirs + - pydantic-settings>=2,<3 + - pydantic>=2,<3 + - pyyaml + - typer + - adbc-driver-manager ; extra == 'all' + - adbc-driver-postgresql ; extra == 'all' + - adbc-driver-sqlite ; extra == 'all' + - aiofiles ; extra == 'all' + - aiosqlite ; extra == 'all' + - alembic ; extra == 'all' + - anyio ; extra == 'all' + - asgi-correlation-id ; extra == 'all' + - asyncpg ; extra == 'all' + - awkward>=2.4.3 ; extra == 'all' + - blosc2 ; python_full_version >= '3.10' and extra == 'all' + - cachetools ; extra == 'all' + - canonicaljson ; extra == 'all' + - dask ; extra == 'all' + - dask[array] ; extra == 'all' + - dask[dataframe] ; extra == 'all' + - duckdb<1.4.0 ; extra == 'all' + - entrypoints ; extra == 'all' + - fastapi>=0.115.8 ; extra == 'all' + - h5netcdf ; extra == 'all' + - h5py ; extra == 'all' + - hdf5plugin ; extra == 'all' + - jinja2 ; extra == 'all' + - jmespath ; extra == 'all' + - lz4 ; extra == 'all' + - ndindex ; extra == 'all' + - numba>=0.59.0 ; extra == 'all' + - numcodecs ; extra == 'all' + - numpy ; extra == 'all' + - openpyxl ; extra == 'all' + - packaging ; extra == 'all' + - pandas ; extra == 'all' + - pillow ; extra == 'all' + - prometheus-client ; extra == 'all' + - pyarrow>=14.0.1 ; extra == 'all' + - python-dateutil ; extra == 'all' + - python-jose[cryptography] ; extra == 'all' + - python-multipart ; extra == 'all' + - redis ; extra == 'all' + - rich ; extra == 'all' + - sparse>=0.15.5 ; extra == 'all' + - sqlalchemy[asyncio]>=2 ; extra == 'all' + - stamina ; extra == 'all' + - starlette>=0.38.0 ; extra == 'all' + - tifffile ; extra == 'all' + - uvicorn[standard] ; extra == 'all' + - watchfiles ; extra == 'all' + - xarray ; extra == 'all' + - zarr ; extra == 'all' + - zstandard ; extra == 'all' + - dask[array] ; extra == 'array' + - numpy ; extra == 'array' + - awkward>=2.4.3 ; extra == 'client' + - blosc2 ; python_full_version >= '3.10' and extra == 'client' + - dask[array] ; extra == 'client' + - dask[dataframe] ; extra == 'client' + - entrypoints ; extra == 'client' + - lz4 ; extra == 'client' + - ndindex ; extra == 'client' + - numba>=0.59.0 ; extra == 'client' + - numpy ; extra == 'client' + - pandas ; extra == 'client' + - pyarrow>=14.0.1 ; extra == 'client' + - rich ; extra == 'client' + - sparse>=0.15.5 ; extra == 'client' + - stamina ; extra == 'client' + - watchfiles ; extra == 'client' + - websockets ; extra == 'client' + - xarray ; extra == 'client' + - zstandard ; extra == 'client' + - blosc2 ; python_full_version >= '3.10' and extra == 'compression' + - lz4 ; extra == 'compression' + - zstandard ; extra == 'compression' + - dask[dataframe] ; extra == 'dataframe' + - pandas ; extra == 'dataframe' + - pyarrow>=14.0.1 ; extra == 'dataframe' + - aiohttp ; extra == 'dev' + - coverage ; extra == 'dev' + - flake8 ; extra == 'dev' + - importlib-resources ; python_full_version < '3.9' and extra == 'dev' + - ipython ; extra == 'dev' + - ldap3 ; extra == 'dev' + - locust ; extra == 'dev' + - matplotlib ; extra == 'dev' + - mistune ; extra == 'dev' + - myst-parser ; extra == 'dev' + - numpydoc ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-asyncio ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - pytest-rerunfailures ; extra == 'dev' + - sphinx!=4.1.0,!=4.1.1,!=4.1.2,!=4.2.0 ; extra == 'dev' + - sphinx-click ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - sphinxcontrib-mermaid ; extra == 'dev' + - h5netcdf ; extra == 'formats' + - h5py ; extra == 'formats' + - hdf5plugin ; extra == 'formats' + - openpyxl ; extra == 'formats' + - pillow ; extra == 'formats' + - tifffile ; extra == 'formats' + - entrypoints ; extra == 'minimal-client' + - rich ; extra == 'minimal-client' + - stamina ; extra == 'minimal-client' + - watchfiles ; extra == 'minimal-client' + - websockets ; extra == 'minimal-client' + - aiofiles ; extra == 'minimal-server' + - aiosqlite ; extra == 'minimal-server' + - alembic ; extra == 'minimal-server' + - anyio ; extra == 'minimal-server' + - asgi-correlation-id ; extra == 'minimal-server' + - cachetools ; extra == 'minimal-server' + - canonicaljson ; extra == 'minimal-server' + - dask ; extra == 'minimal-server' + - fastapi>=0.115.8 ; extra == 'minimal-server' + - jinja2 ; extra == 'minimal-server' + - jmespath ; extra == 'minimal-server' + - numcodecs ; extra == 'minimal-server' + - packaging ; extra == 'minimal-server' + - prometheus-client ; extra == 'minimal-server' + - python-dateutil ; extra == 'minimal-server' + - python-jose[cryptography] ; extra == 'minimal-server' + - python-multipart ; extra == 'minimal-server' + - redis ; extra == 'minimal-server' + - sqlalchemy[asyncio]>=2 ; extra == 'minimal-server' + - starlette>=0.38.0 ; extra == 'minimal-server' + - uvicorn[standard] ; extra == 'minimal-server' + - zarr ; extra == 'minimal-server' + - adbc-driver-manager ; extra == 'server' + - adbc-driver-postgresql ; extra == 'server' + - adbc-driver-sqlite ; extra == 'server' + - aiofiles ; extra == 'server' + - aiosqlite ; extra == 'server' + - alembic ; extra == 'server' + - anyio ; extra == 'server' + - asgi-correlation-id ; extra == 'server' + - asyncpg ; extra == 'server' + - awkward>=2.4.3 ; extra == 'server' + - blosc2 ; python_full_version >= '3.10' and extra == 'server' + - cachetools ; extra == 'server' + - canonicaljson ; extra == 'server' + - dask ; extra == 'server' + - dask[array] ; extra == 'server' + - dask[dataframe] ; extra == 'server' + - duckdb<1.4.0 ; extra == 'server' + - entrypoints ; extra == 'server' + - fastapi>=0.115.8 ; extra == 'server' + - h5netcdf ; extra == 'server' + - h5py ; extra == 'server' + - hdf5plugin ; extra == 'server' + - jinja2 ; extra == 'server' + - jmespath ; extra == 'server' + - lz4 ; extra == 'server' + - ndindex ; extra == 'server' + - numba>=0.59.0 ; extra == 'server' + - numcodecs ; extra == 'server' + - numpy ; extra == 'server' + - openpyxl ; extra == 'server' + - packaging ; extra == 'server' + - pandas ; extra == 'server' + - pillow ; extra == 'server' + - prometheus-client ; extra == 'server' + - pyarrow>=14.0.1 ; extra == 'server' + - python-dateutil ; extra == 'server' + - python-jose[cryptography] ; extra == 'server' + - python-multipart ; extra == 'server' + - redis ; extra == 'server' + - sparse>=0.15.5 ; extra == 'server' + - sqlalchemy[asyncio]>=2 ; extra == 'server' + - stamina ; extra == 'server' + - starlette>=0.38.0 ; extra == 'server' + - tifffile ; extra == 'server' + - uvicorn[standard] ; extra == 'server' + - websockets ; extra == 'server' + - xarray ; extra == 'server' + - zarr ; extra == 'server' + - zstandard ; extra == 'server' + - ndindex ; extra == 'sparse' + - numba>=0.59.0 ; extra == 'sparse' + - pyarrow>=14.0.1 ; extra == 'sparse' + - sparse>=0.15.5 ; extra == 'sparse' + - dask[array] ; extra == 'xarray' + - pandas ; extra == 'xarray' + - pyarrow ; extra == 'xarray' + - xarray ; extra == 'xarray' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 +- pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: tokenizers + version: 0.22.2 + sha256: 369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67 + requires_dist: + - huggingface-hub>=0.16.4,<2.0 + - pytest ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - requests ; extra == 'testing' + - numpy ; extra == 'testing' + - datasets ; extra == 'testing' + - ruff ; extra == 'testing' + - ty ; extra == 'testing' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - setuptools-rust ; extra == 'docs' + - tokenizers[testing] ; extra == 'dev' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda + sha256: fd30e43699cb22ab32ff3134d3acf12d6010b5bbaa63293c37076b50009b91f8 + md5: d0fc809fa4c4d85e959ce4ab6e1de800 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/toml?source=hash-mapping + size: 24017 + timestamp: 1764486833072 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=compressed-mapping + size: 21561 + timestamp: 1774492402955 +- pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl + name: toolz + version: 1.1.0 + sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda + sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a + md5: 2b37798adbc54fd9e591d24679d2133a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 859665 + timestamp: 1774358032165 +- pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + name: tqdm + version: 4.67.3 + sha256: ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf + requires_dist: + - colorama ; sys_platform == 'win32' + - importlib-metadata ; python_full_version < '3.8' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' + - requests ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110051 + timestamp: 1733367480074 +- pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl + name: transformers + version: 5.4.0 + sha256: 9fbe50602d2a4e6d0aa8a35a605433dfac72d595ee2192eae192590a6cc2df86 + requires_dist: + - huggingface-hub>=1.5.0,<2.0 + - numpy>=1.17 + - packaging>=20.0 + - pyyaml>=5.1 + - regex>=2025.10.22 + - tokenizers>=0.22.0,<=0.23.0 + - typer + - safetensors>=0.4.3 + - tqdm>=4.27 + - torch>=2.4 ; extra == 'torch' + - accelerate>=1.1.0 ; extra == 'torch' + - torchvision ; extra == 'vision' + - pillow>=10.0.1,<=15.0 ; extra == 'vision' + - torchaudio ; extra == 'audio' + - librosa ; extra == 'audio' + - pyctcdecode>=0.4.0 ; extra == 'audio' + - phonemizer ; extra == 'audio' + - av ; extra == 'video' + - timm>=1.0.23 ; extra == 'timm' + - datasets>=2.15.0 ; extra == 'quality' + - ruff==0.14.10 ; extra == 'quality' + - gitpython<3.1.19 ; extra == 'quality' + - urllib3<2.0.0 ; extra == 'quality' + - libcst ; extra == 'quality' + - rich ; extra == 'quality' + - ty==0.0.20 ; extra == 'quality' + - tomli ; extra == 'quality' + - kernels>=0.12.0,<0.13 ; extra == 'kernels' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'sentencepiece' + - protobuf ; extra == 'sentencepiece' + - tiktoken ; extra == 'tiktoken' + - blobfile ; extra == 'tiktoken' + - mistral-common[image]>=1.10.0 ; extra == 'mistral-common' + - jinja2>=3.1.0 ; extra == 'chat-template' + - jmespath>=1.0.1 ; extra == 'chat-template' + - scikit-learn ; extra == 'sklearn' + - accelerate>=1.1.0 ; extra == 'accelerate' + - faiss-cpu ; extra == 'retrieval' + - datasets>=2.15.0 ; extra == 'retrieval' + - sagemaker>=2.31.0 ; extra == 'sagemaker' + - deepspeed>=0.9.3 ; extra == 'deepspeed' + - accelerate>=1.1.0 ; extra == 'deepspeed' + - optuna ; extra == 'optuna' + - kernels>=0.12.0,<0.13 ; extra == 'integrations' + - optuna ; extra == 'integrations' + - codecarbon>=2.8.1 ; extra == 'integrations' + - ray[tune]>=2.7.0 ; extra == 'integrations' + - ray[tune]>=2.7.0 ; extra == 'ray' + - codecarbon>=2.8.1 ; extra == 'codecarbon' + - openai>=1.98.0 ; extra == 'serving' + - pydantic>=2 ; extra == 'serving' + - uvicorn ; extra == 'serving' + - fastapi ; extra == 'serving' + - starlette ; extra == 'serving' + - rich ; extra == 'serving' + - torch>=2.4 ; extra == 'serving' + - accelerate>=1.1.0 ; extra == 'serving' + - num2words ; extra == 'num2words' + - optimum-benchmark>=0.3.0 ; extra == 'benchmark' + - fugashi>=1.0 ; extra == 'ja' + - ipadic>=1.0.0,<2.0 ; extra == 'ja' + - unidic-lite>=1.0.7 ; extra == 'ja' + - unidic>=1.0.2 ; extra == 'ja' + - rhoknp>=1.1.0,<1.3.1 ; extra == 'ja' + - sudachipy>=0.6.6 ; extra == 'ja' + - sudachidict-core>=20220729 ; extra == 'ja' + - opentelemetry-api ; extra == 'open-telemetry' + - opentelemetry-exporter-otlp ; extra == 'open-telemetry' + - opentelemetry-sdk ; extra == 'open-telemetry' + - pytest>=7.2.0,<9.0.0 ; extra == 'testing' + - pytest-asyncio>=1.2.0 ; extra == 'testing' + - pytest-random-order ; extra == 'testing' + - pytest-rich ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - pytest-order ; extra == 'testing' + - pytest-rerunfailures<16.0 ; extra == 'testing' + - pytest-timeout ; extra == 'testing' + - pytest-env ; extra == 'testing' + - timeout-decorator ; extra == 'testing' + - parameterized>=0.9 ; extra == 'testing' + - psutil ; extra == 'testing' + - dill<0.3.5 ; extra == 'testing' + - evaluate>=0.4.6 ; extra == 'testing' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'testing' + - nltk<=3.8.1 ; extra == 'testing' + - sacremoses ; extra == 'testing' + - rjieba ; extra == 'testing' + - beautifulsoup4 ; extra == 'testing' + - tensorboard ; extra == 'testing' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'testing' + - filelock ; extra == 'testing' + - datasets>=2.15.0 ; extra == 'testing' + - ruff==0.14.10 ; extra == 'testing' + - gitpython<3.1.19 ; extra == 'testing' + - urllib3<2.0.0 ; extra == 'testing' + - libcst ; extra == 'testing' + - rich ; extra == 'testing' + - ty==0.0.20 ; extra == 'testing' + - tomli ; extra == 'testing' + - faiss-cpu ; extra == 'testing' + - datasets>=2.15.0 ; extra == 'testing' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'testing' + - protobuf ; extra == 'testing' + - openai>=1.98.0 ; extra == 'testing' + - pydantic>=2 ; extra == 'testing' + - uvicorn ; extra == 'testing' + - fastapi ; extra == 'testing' + - starlette ; extra == 'testing' + - rich ; extra == 'testing' + - torch>=2.4 ; extra == 'testing' + - accelerate>=1.1.0 ; extra == 'testing' + - mistral-common[image]>=1.10.0 ; extra == 'testing' + - deepspeed>=0.9.3 ; extra == 'deepspeed-testing' + - accelerate>=1.1.0 ; extra == 'deepspeed-testing' + - pytest>=7.2.0,<9.0.0 ; extra == 'deepspeed-testing' + - pytest-asyncio>=1.2.0 ; extra == 'deepspeed-testing' + - pytest-random-order ; extra == 'deepspeed-testing' + - pytest-rich ; extra == 'deepspeed-testing' + - pytest-xdist ; extra == 'deepspeed-testing' + - pytest-order ; extra == 'deepspeed-testing' + - pytest-rerunfailures<16.0 ; extra == 'deepspeed-testing' + - pytest-timeout ; extra == 'deepspeed-testing' + - pytest-env ; extra == 'deepspeed-testing' + - timeout-decorator ; extra == 'deepspeed-testing' + - parameterized>=0.9 ; extra == 'deepspeed-testing' + - psutil ; extra == 'deepspeed-testing' + - dill<0.3.5 ; extra == 'deepspeed-testing' + - evaluate>=0.4.6 ; extra == 'deepspeed-testing' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'deepspeed-testing' + - nltk<=3.8.1 ; extra == 'deepspeed-testing' + - sacremoses ; extra == 'deepspeed-testing' + - rjieba ; extra == 'deepspeed-testing' + - beautifulsoup4 ; extra == 'deepspeed-testing' + - tensorboard ; extra == 'deepspeed-testing' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'deepspeed-testing' + - filelock ; extra == 'deepspeed-testing' + - datasets>=2.15.0 ; extra == 'deepspeed-testing' + - ruff==0.14.10 ; extra == 'deepspeed-testing' + - gitpython<3.1.19 ; extra == 'deepspeed-testing' + - urllib3<2.0.0 ; extra == 'deepspeed-testing' + - libcst ; extra == 'deepspeed-testing' + - rich ; extra == 'deepspeed-testing' + - ty==0.0.20 ; extra == 'deepspeed-testing' + - tomli ; extra == 'deepspeed-testing' + - faiss-cpu ; extra == 'deepspeed-testing' + - datasets>=2.15.0 ; extra == 'deepspeed-testing' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'deepspeed-testing' + - protobuf ; extra == 'deepspeed-testing' + - openai>=1.98.0 ; extra == 'deepspeed-testing' + - pydantic>=2 ; extra == 'deepspeed-testing' + - uvicorn ; extra == 'deepspeed-testing' + - fastapi ; extra == 'deepspeed-testing' + - starlette ; extra == 'deepspeed-testing' + - rich ; extra == 'deepspeed-testing' + - torch>=2.4 ; extra == 'deepspeed-testing' + - accelerate>=1.1.0 ; extra == 'deepspeed-testing' + - mistral-common[image]>=1.10.0 ; extra == 'deepspeed-testing' + - optuna ; extra == 'deepspeed-testing' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'deepspeed-testing' + - protobuf ; extra == 'deepspeed-testing' + - torch>=2.4 ; extra == 'all' + - accelerate>=1.1.0 ; extra == 'all' + - torchvision ; extra == 'all' + - pillow>=10.0.1,<=15.0 ; extra == 'all' + - torchaudio ; extra == 'all' + - librosa ; extra == 'all' + - pyctcdecode>=0.4.0 ; extra == 'all' + - phonemizer ; extra == 'all' + - av ; extra == 'all' + - kernels>=0.12.0,<0.13 ; extra == 'all' + - timm>=1.0.23 ; extra == 'all' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'all' + - protobuf ; extra == 'all' + - tiktoken ; extra == 'all' + - blobfile ; extra == 'all' + - jinja2>=3.1.0 ; extra == 'all' + - jmespath>=1.0.1 ; extra == 'all' + - num2words ; extra == 'all' + - mistral-common[image]>=1.10.0 ; extra == 'all' + - torch>=2.4 ; extra == 'dev' + - accelerate>=1.1.0 ; extra == 'dev' + - torchvision ; extra == 'dev' + - pillow>=10.0.1,<=15.0 ; extra == 'dev' + - torchaudio ; extra == 'dev' + - librosa ; extra == 'dev' + - pyctcdecode>=0.4.0 ; extra == 'dev' + - phonemizer ; extra == 'dev' + - av ; extra == 'dev' + - kernels>=0.12.0,<0.13 ; extra == 'dev' + - timm>=1.0.23 ; extra == 'dev' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev' + - protobuf ; extra == 'dev' + - tiktoken ; extra == 'dev' + - blobfile ; extra == 'dev' + - jinja2>=3.1.0 ; extra == 'dev' + - jmespath>=1.0.1 ; extra == 'dev' + - num2words ; extra == 'dev' + - mistral-common[image]>=1.10.0 ; extra == 'dev' + - pytest>=7.2.0,<9.0.0 ; extra == 'dev' + - pytest-asyncio>=1.2.0 ; extra == 'dev' + - pytest-random-order ; extra == 'dev' + - pytest-rich ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pytest-order ; extra == 'dev' + - pytest-rerunfailures<16.0 ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-env ; extra == 'dev' + - timeout-decorator ; extra == 'dev' + - parameterized>=0.9 ; extra == 'dev' + - psutil ; extra == 'dev' + - dill<0.3.5 ; extra == 'dev' + - evaluate>=0.4.6 ; extra == 'dev' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'dev' + - nltk<=3.8.1 ; extra == 'dev' + - sacremoses ; extra == 'dev' + - rjieba ; extra == 'dev' + - beautifulsoup4 ; extra == 'dev' + - tensorboard ; extra == 'dev' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'dev' + - filelock ; extra == 'dev' + - datasets>=2.15.0 ; extra == 'dev' + - ruff==0.14.10 ; extra == 'dev' + - gitpython<3.1.19 ; extra == 'dev' + - urllib3<2.0.0 ; extra == 'dev' + - libcst ; extra == 'dev' + - rich ; extra == 'dev' + - ty==0.0.20 ; extra == 'dev' + - tomli ; extra == 'dev' + - faiss-cpu ; extra == 'dev' + - datasets>=2.15.0 ; extra == 'dev' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev' + - protobuf ; extra == 'dev' + - openai>=1.98.0 ; extra == 'dev' + - pydantic>=2 ; extra == 'dev' + - uvicorn ; extra == 'dev' + - fastapi ; extra == 'dev' + - starlette ; extra == 'dev' + - rich ; extra == 'dev' + - torch>=2.4 ; extra == 'dev' + - accelerate>=1.1.0 ; extra == 'dev' + - mistral-common[image]>=1.10.0 ; extra == 'dev' + - fugashi>=1.0 ; extra == 'dev' + - ipadic>=1.0.0,<2.0 ; extra == 'dev' + - unidic-lite>=1.0.7 ; extra == 'dev' + - unidic>=1.0.2 ; extra == 'dev' + - rhoknp>=1.1.0,<1.3.1 ; extra == 'dev' + - sudachipy>=0.6.6 ; extra == 'dev' + - sudachidict-core>=20220729 ; extra == 'dev' + - scikit-learn ; extra == 'dev' + requires_python: '>=3.10.0' +- pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + name: typer + version: 0.24.1 + sha256: 112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e + requires_dist: + - click>=8.2.1 + - shellingham>=1.3.0 + - rich>=12.3.0 + - annotated-doc>=0.0.2 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 + depends: + - typing_extensions ==4.15.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 91383 + timestamp: 1756220668932 +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 +- pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + name: tzlocal + version: 5.3.1 + sha256: eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d + requires_dist: + - tzdata ; sys_platform == 'win32' + - pytest>=4.3 ; extra == 'devenv' + - pytest-mock>=3.3 ; extra == 'devenv' + - pytest-cov ; extra == 'devenv' + - check-manifest ; extra == 'devenv' + - zest-releaser ; extra == 'devenv' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + sha256: 895bbfe9ee25c98c922799de901387d842d7c01cae45c346879865c6a907f229 + md5: 0b6c506ec1f272b685240e70a29261b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=compressed-mapping + size: 410641 + timestamp: 1770909099497 +- pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + name: urllib3 + version: 2.6.3 + sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + requires_dist: + - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl + name: uvicorn + version: 0.42.0 + sha256: 96c30f5c7abe6f74ae8900a70e92b85ad6613b745d4879eb9b16ccad15645359 + requires_dist: + - click>=7.0 + - h11>=0.8 + - typing-extensions>=4.0 ; python_full_version < '3.11' + - colorama>=0.4 ; sys_platform == 'win32' and extra == 'standard' + - httptools>=0.6.3 ; extra == 'standard' + - python-dotenv>=0.13 ; extra == 'standard' + - pyyaml>=5.1 ; extra == 'standard' + - uvloop>=0.15.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' and extra == 'standard' + - watchfiles>=0.20 ; extra == 'standard' + - websockets>=10.4 ; extra == 'standard' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: uvloop + version: 0.22.1 + sha256: 7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4 + requires_dist: + - aiohttp>=3.10.5 ; extra == 'test' + - flake8~=6.1 ; extra == 'test' + - psutil ; extra == 'test' + - pycodestyle~=2.11.0 ; extra == 'test' + - pyopenssl~=25.3.0 ; extra == 'test' + - mypy>=0.800 ; extra == 'test' + - setuptools>=60 ; extra == 'dev' + - cython~=3.0 ; extra == 'dev' + - sphinx~=4.1.2 ; extra == 'docs' + - sphinxcontrib-asyncio~=0.3.0 ; extra == 'docs' + - sphinx-rtd-theme~=0.5.2 ; extra == 'docs' + requires_python: '>=3.8.1' +- pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + name: virtualenv + version: 21.2.0 + sha256: 1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs>=3.9.1,<5 + - python-discovery>=1 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: watchfiles + version: 1.1.1 + sha256: 1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 + requires_dist: + - anyio>=3.0.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 334139 + timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa + md5: c3197f8c0d5b955c904616b716aca093 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=compressed-mapping + size: 71550 + timestamp: 1770634638503 +- pypi: https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: websockets + version: '16.0' + sha256: 9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: wrapt + version: 2.1.2 + sha256: c20b757c268d30d6215916a5fa8461048d023865d888e437fab451139cad6c8e + requires_dist: + - pytest ; extra == 'dev' + - setuptools ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl + name: xarray + version: 2026.2.0 + sha256: e927d7d716ea71dea78a13417970850a640447d8dd2ceeb65c5687f6373837c9 + requires_dist: + - numpy>=1.26 + - packaging>=24.1 + - pandas>=2.2 + - scipy>=1.13 ; extra == 'accel' + - bottleneck ; extra == 'accel' + - numbagg>=0.8 ; extra == 'accel' + - numba>=0.62 ; extra == 'accel' + - flox>=0.9 ; extra == 'accel' + - opt-einsum ; extra == 'accel' + - xarray[accel,etc,io,parallel,viz] ; extra == 'complete' + - netcdf4>=1.6.0 ; extra == 'io' + - h5netcdf>=1.4.0 ; extra == 'io' + - pydap ; extra == 'io' + - scipy>=1.13 ; extra == 'io' + - zarr>=2.18 ; extra == 'io' + - fsspec ; extra == 'io' + - cftime ; extra == 'io' + - pooch ; extra == 'io' + - sparse>=0.15 ; extra == 'etc' + - dask[complete] ; extra == 'parallel' + - cartopy>=0.23 ; extra == 'viz' + - matplotlib>=3.8 ; extra == 'viz' + - nc-time-axis ; extra == 'viz' + - seaborn ; extra == 'viz' + - pandas-stubs ; extra == 'types' + - scipy-stubs ; extra == 'types' + - types-pyyaml ; extra == 'types' + - types-pygments ; extra == 'types' + - types-colorama ; extra == 'types' + - types-decorator ; extra == 'types' + - types-defusedxml ; extra == 'types' + - types-docutils ; extra == 'types' + - types-networkx ; extra == 'types' + - types-pexpect ; extra == 'types' + - types-psutil ; extra == 'types' + - types-pycurl ; extra == 'types' + - types-openpyxl ; extra == 'types' + - types-python-dateutil ; extra == 'types' + - types-pytz ; extra == 'types' + - types-requests ; extra == 'types' + - types-setuptools ; extra == 'types' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20829 + timestamp: 1763366954390 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399291 + timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 15321 + timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20591 + timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50326 + timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 + md5: ba231da7fccf9ea1e768caf5c7099b84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20071 + timestamp: 1759282564045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a + md5: 17dcc85db3c7886650b8908b183d6876 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47179 + timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 + md5: e192019153591938acf7322b6459d36e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 30456 + timestamp: 1769445263457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda + sha256: c0830fe9fa78d609cd9021f797307e7e0715ef5122be3f784765dad1b4d8a193 + md5: 9a809ce9f65460195777f2f2116bae02 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 12302 + timestamp: 1734168591429 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32808 + timestamp: 1727964811275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18701 + timestamp: 1769434732453 +- pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + name: zarr + version: 3.1.6 + sha256: b5a82c5079d1c3d4ee8f06746fa3b9a98a7d804300fa3f4be154362a33e1207e + requires_dist: + - donfig>=0.8 + - google-crc32c>=1.5 + - numcodecs>=0.14 + - numpy>=2.0 + - packaging>=22.0 + - typing-extensions>=4.12 + - typer ; extra == 'cli' + - cupy-cuda12x ; extra == 'gpu' + - universal-pathlib ; extra == 'optional' + - fsspec>=2023.10.0 ; extra == 'remote' + - obstore>=0.5.1 ; extra == 'remote' + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 + md5: 755b096086851e1193f3b10347415d7c + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.21,<1.0.22.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 311150 + timestamp: 1772476812121 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 24194 + timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + purls: [] + size: 122618 + timestamp: 1770167931827 +- pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: zstandard + version: 0.25.0 + sha256: 5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902 + requires_dist: + - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 601375 + timestamp: 1764777111296 diff --git a/pyproject.toml b/pyproject.toml index ff48065..e65cae1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,11 +5,11 @@ build-backend = "setuptools.build_meta" [project] name = "arroyoSAS" -version = "0.0.1" +version = "0.1.0" description = "A package to perform computations and suggestions during a time-resolved GISAXS experiment." authors = [{ name = "Dylan McReynolds", email = "dmcreynolds@lbl.gov" }] dependencies = [ - "arroyopy", + "arroyopy >= 0.3.0a4", "dynaconf", "python-dotenv", "pandas", @@ -22,7 +22,6 @@ dependencies = [ "typer", "websockets", "zarr", - "pyFAI", "transformers", "redis"] @@ -32,7 +31,6 @@ workflow-viz = [ "numpy<2.0.0", "pandas", "plotly-express", - "pyFAI==2023.9.0", "python-dotenv", "pyarrow>=14.0.1", "requests==2.26.0", @@ -50,11 +48,12 @@ dev = [ lse = [ "torchvision==0.17.2", - "joblib" + "joblib", + "latent-space-explorer @ git+https://github.com/mlexchange/mlex_latent_explorer.git@main" ] all = [ - "arroyopy", + "arroyopy >= 0.3.0a4", "bluesky", "dynaconf", "python-dotenv", @@ -73,6 +72,7 @@ all = [ "pandas", "python-dotenv", "pyarrow>=14.0.1", + "pyfai", "aiosqlite", ] @@ -82,11 +82,23 @@ profile = "black" +[tool.pixi.workspace] +name = "arroyosas" +channels = ["conda-forge"] +platforms = ["linux-64"] + +[tool.pixi.dependencies] +# pyFAI from conda-forge avoids needing a C compiler +python = "3.12.*" +pyfai = ">=2024.1" + [tool.pixi.pypi-dependencies] +arroyosas = { path = ".", editable = true } +arroyopy = { path = "../arroyopy", editable = true } +[tool.pixi.tasks] +lse_operator = "arroyo run block_configs/lse_operator_block.yaml" [tool.pixi.environments] -# # default = { solve-group = "default" } -dev = { features = ["dev"] } -# # notebook = { features = ["notebook"], solve-group = "default" } -# lse = { features = ["lse"]} +default = { solve-group = "default,lse" } +dev = { features = ["dev"], solve-group = "default" } diff --git a/src/arroyosas/app/lse.py b/src/arroyosas/app/lse.py new file mode 100644 index 0000000..54d1e20 --- /dev/null +++ b/src/arroyosas/app/lse.py @@ -0,0 +1,2 @@ +from sl + diff --git a/src/arroyosas/app/lse_broker_cli.py b/src/arroyosas/app/lse_broker_cli.py deleted file mode 100644 index 166ae2e..0000000 --- a/src/arroyosas/app/lse_broker_cli.py +++ /dev/null @@ -1,27 +0,0 @@ -import asyncio -import logging - -import typer - -from ..config import settings -from ..log_utils import setup_logger -from ..zmq import ZMQBroker - -app = typer.Typer() -logger = logging.getLogger("arroyosas") -setup_logger(logger) - - -@app.command() -async def start() -> None: - app_settings = settings.lse_operator - logger.info("Getting settings") - logger.info(f"{settings.lse_operator}") - logger.info("Starting Broker") - # we may consider starting this in its own process - broker = ZMQBroker.from_settings(app_settings.zmq_broker) - await asyncio.gather(broker.start()) - - -if __name__ == "__main__": - asyncio.run(start()) diff --git a/src/arroyosas/app/lse_operator_cli.py b/src/arroyosas/app/lse_operator_cli.py deleted file mode 100644 index 2a1fb7e..0000000 --- a/src/arroyosas/app/lse_operator_cli.py +++ /dev/null @@ -1,40 +0,0 @@ -import asyncio -import logging - -import typer - -from ..config import settings -from ..log_utils import setup_logger -from ..lse.lse_operator import LatentSpaceOperator -from ..lse.lse_ws_publisher import LSEWSResultPublisher -from ..tiled.tiled_poller import TiledProcessedPublisher -from ..zmq import ZMQFrameListener - -app = typer.Typer() -logger = logging.getLogger("arroyosas") -setup_logger(logger, settings.logging_level) - - -@app.command() -async def start() -> None: - app_settings = settings.lse_operator - logger.info("Getting settings") - logger.info(f"{settings.lse_operator}") - - logger.info("Starting ZMQ PubSub Listener") - logger.info(f"ZMQPubSubListener settings: {app_settings}") - operator = LatentSpaceOperator.from_settings(app_settings, settings.lse_reducer) - - ws_publisher = LSEWSResultPublisher.from_settings(app_settings.ws_publisher) - tiled_event_publisher = TiledProcessedPublisher.from_settings( - settings.tiled_processed - ) - operator.add_publisher(ws_publisher) - operator.add_publisher(tiled_event_publisher) - - listener = ZMQFrameListener.from_settings(app_settings.listener, operator) - await asyncio.gather(listener.start(), ws_publisher.start()) - - -if __name__ == "__main__": - asyncio.run(start()) \ No newline at end of file diff --git a/src/arroyosas/app/lse_worker_cli.py b/src/arroyosas/app/lse_worker_cli.py deleted file mode 100644 index 126fccb..0000000 --- a/src/arroyosas/app/lse_worker_cli.py +++ /dev/null @@ -1,67 +0,0 @@ -import logging - -import msgpack -import typer -import zmq -import zmq.asyncio - -from ..config import settings -from ..log_utils import setup_logger -from ..lse.lse_reducer import LatentSpaceReducer -from ..schemas import ( - LatentSpaceEvent, - RawFrameEvent, - SerializableNumpyArrayModel, -) - -app = typer.Typer() -logger = logging.getLogger("arroyosas") -setup_logger(logger) - - -@app.command() -def start() -> None: - logger.info("Getting settings") - logger.info(f"{settings}") - - context = zmq.Context() - client_socket = context.socket(zmq.REP) # worker to the broker - client_socket.connect(settings.lse_operator.zmq_broker.dealer_address) - logger.info( - f"Connected to broker dealer at {settings.lse_operator.zmq_broker.dealer_address}" - ) - reducer = LatentSpaceReducer.from_settings(settings.lse_reducer) - logger.info("Listening for messages") - while True: - response_sent = False - try: - raw_msg = client_socket.recv() - message = msgpack.unpackb(raw_msg, raw=False) - message_type = message.get("msg_type") - if message_type != "event": - continue - image = SerializableNumpyArrayModel.deserialize_array(message["image"]) - message["image"] = image - event = RawFrameEvent(**message) - # logger.debug("calculating latent space") - - latent_space = reducer.reduce(event) - # logger.debug("latent space returned") - return_message = LatentSpaceEvent( - tiled_url="foo", - feature_vector=latent_space[0].tolist(), - index=message.get("frame_number"), - ) - client_socket.send( - msgpack.packb(return_message.model_dump(), use_bin_type=True) - ) - response_sent = True - # logger.debug("LSE returned") - except Exception as e: - logger.error(f"Error processing message: {e}") - if not response_sent: - client_socket.send(b"ERROR") - - -if __name__ == "__main__": - start() diff --git a/src/arroyosas/app/tiled_file_watcher_cli.py b/src/arroyosas/app/tiled_file_watcher_cli.py deleted file mode 100644 index 82a3d4d..0000000 --- a/src/arroyosas/app/tiled_file_watcher_cli.py +++ /dev/null @@ -1,167 +0,0 @@ -import asyncio -import logging -import os -from pathlib import Path -from typing import Optional - - -from arroyopy import Listener, Operator, Publisher -from arroyopy.files import FileWatcherMessage -from tiled.client import from_uri -from tiled.client.base import BaseClient -import redis.asyncio as redis -import typer -from watchfiles import awatch, Change - -from ..tiled.ingestor import TiledIngestor - -# ----------------------------------------------------------------------------- -# Logging Setup -# ----------------------------------------------------------------------------- -logger = logging.getLogger("data_watcher") - - -def setup_logging(log_level: str = "INFO"): - level = getattr(logging, log_level.upper(), logging.INFO) - logger.setLevel(level) - - if not logger.hasHandlers(): - handler = logging.StreamHandler() - formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") - handler.setFormatter(formatter) - logger.addHandler(handler) - - logger.propagate = False # Prevent duplication through root logger - - - - - - -# ----------------------------------------------------------------------------- -# CLI App -# ----------------------------------------------------------------------------- -app = typer.Typer(help="Watch a directory and publish new .gb files to Redis.") - - -class RedisPublisher(Publisher): - def __init__(self, redis_client: redis.Redis, channel_name: str): - self.channel_name = channel_name - self.redis_client = redis_client - - async def publish(self, message: FileWatcherMessage): - logger.debug(f"Publishing message to Redis: {message}") - if message.is_directory: - logger.debug(f"Skipping directory: {message.file_path}") - return - await self.redis_client.publish(self.channel_name,message.model_dump_json()) - - -class TiledPublisher(Publisher): - def __init__(self, tiled_url: str, tiled_ingestor: TiledIngestor, redis_publisher: RedisPublisher = None): - self.tiled_url = tiled_url - self.tiled_ingestor = tiled_ingestor - self.redis_publisher = redis_publisher - super().__init__() - - async def publish(self, message: FileWatcherMessage): - try: - logger.debug(f"Publishing message to Tiled: {message}") - if message.is_directory: # collections for directories get for new files by ingestor - logger.debug(f"Skipping directory: {message.file_path}") - return - tiled_uri = await asyncio.to_thread(self.tiled_ingestor.add_scan_tiled, message.file_path) - if self.redis_publisher: - message.file_path = tiled_uri - await self.redis_publisher.publish(message) - except Exception as e: - logger.error(f"Error publishing message: {e}") - - - -class FileWatcherOperator(Operator): - def __init__(self, publisher: Publisher): - self.publisher = publisher - - async def process(self, message): - logger.info(f"Processing message: {message}") - await self.publisher.publish(message) - - -class NullPublisher(Publisher): - async def publish(self, message): - logger.debug(f"NullPublisher: {message} - No action taken.") - -class FileWatcherListener(Listener): - def __init__(self, directory: str, operator: Operator, force_polling: bool = True): - self.directory = directory - self.operator = operator - self.force_polling = force_polling - - async def start(self): - logger.info(f"🔍 Watching directory recursively: {self.directory} (force_polling={self.force_polling})") - async for changes in awatch(self.directory, force_polling=self.force_polling): - for change_type, path_str in changes: - if change_type is not Change.added: - continue - path = Path(path_str) - if not path.exists(): - logger.debug(f"⚠️ Skipping non-existent path: {path}") - continue - - if not path.is_dir() and path.suffix not in [".gb", ".edf"]: - logger.debug(f"⚠️ Skipping non-supported file type: {path.suffix}") - continue - - logger.info(f"📦 Detected: {change_type} on {path}") - message = FileWatcherMessage( - file_path=str(path), is_directory=path.is_dir() - ) - await self.operator.process(message) - - - async def stop(self): - pass - - -@app.command() -def main( - directory: Path = typer.Argument(..., help="Directory to watch for new files"), - tiled_uri: str = typer.Option(str, help="Tiled server URI, can bet set with TILED_URI env var"), - tiled_raw_root: str = typer.Option(str, help= "Root locatiuon of tile raw data can be set with TILED_RAW_ROOT env var"), - tiled_api_key: Optional[int] = typer.Option(None, help="tiled apikey can be set with TILED_API_KEY env vars"), - log_level: str = typer.Option( - "INFO", help="Logging level (DEBUG, INFO, WARNING, ERROR)" - ), -): - setup_logging(log_level) - - loop = asyncio.get_event_loop() - - - if not tiled_uri: - tiled_uri = os.getenv("TILED_URI") - if not tiled_api_key: - tiled_api_key = os.getenv("TILED_API_KEY") - if not tiled_raw_root: - tiled_raw_root = os.getenv("TILED_RAW_ROOT") - - - logger.info(f"Connecting to Tiled server at {tiled_uri} with root {tiled_raw_root}") - tiled_client = from_uri(tiled_uri, api_key=tiled_api_key) - tiled_ingestor = TiledIngestor(tiled_client, tiled_raw_root, directory) - redis_client = redis.Redis(host="kvrocks", port=6666, decode_responses=True) - redis_publisher = RedisPublisher(redis_client, "sas_file_watcher") - publisher = TiledPublisher(f"{tiled_uri}{tiled_raw_root}", tiled_ingestor, redis_publisher) - logger.info("Using Tiled publisher") - else: - publisher = NullPublisher() - logger.info("Using default null publisher") - - operator = FileWatcherOperator(publisher) - listener = FileWatcherListener(str(directory), operator) - loop.run_until_complete(listener.start()) - - -if __name__ == "__main__": - app() diff --git a/src/arroyosas/app/tiled_poller_cli.py b/src/arroyosas/app/tiled_poller_cli.py deleted file mode 100644 index 018525a..0000000 --- a/src/arroyosas/app/tiled_poller_cli.py +++ /dev/null @@ -1,36 +0,0 @@ -import asyncio -import logging - -import typer - -from arroyosas.config import settings -from arroyosas.tiled.tiled_poller import ( - TiledPollingRedisListener, - TiledRawFrameOperator, -) -from arroyosas.zmq import ZMQFramePublisher - -from ..log_utils import setup_logger - -app = typer.Typer() -logger = logging.getLogger("arroyosas") - -app_settings = settings.tiled_poller -setup_logger(logger, log_level=settings.logging_level) - - -@app.command() -async def start(tiled_url: str, zmq_url: str, poll_interval: int = 5): - logger.info( - f"Starting Tiled Poller with tiled_url: {tiled_url}, zmq_url: {zmq_url}, poll_interval: {poll_interval}" - ) - operator = TiledRawFrameOperator() - publisher = ZMQFramePublisher.from_settings(app_settings.zmq_frame_publisher) - - operator.add_publisher(publisher) - listener = TiledPollingRedisListener.from_settings(app_settings, operator) - await asyncio.gather(listener.start()) - - -if __name__ == "__main__": - asyncio.run(start("", "")) diff --git a/src/arroyosas/app/tiled_ws_cli.py b/src/arroyosas/app/tiled_ws_cli.py deleted file mode 100644 index 445f0e3..0000000 --- a/src/arroyosas/app/tiled_ws_cli.py +++ /dev/null @@ -1,55 +0,0 @@ -import asyncio -import logging - -import typer - -from arroyosas.config import settings -from arroyosas.log_utils import setup_logger -from arroyosas.tiled.tiled_poller import TiledRawFrameOperator -from arroyosas.tiled.tiled_websocket import TiledWebSocketListener -from arroyosas.zmq import ZMQFramePublisher - -app = typer.Typer() -logger = logging.getLogger("arroyosas") - -app_settings = settings.tiled_poller -setup_logger(logger, log_level=settings.logging_level) - - -@app.command() -async def start( - tiled_url: str = typer.Option(None, help="Tiled base URL"), - websocket_url: str = typer.Option(None, help="WebSocket URL"), - zmq_url: str = typer.Option(None, help="ZMQ publisher URL"), -): - """Start the Tiled WebSocket listener.""" - # Override settings if provided - if tiled_url: - app_settings.uri = tiled_url - if websocket_url: - app_settings.websocket_url = websocket_url - if zmq_url: - app_settings.zmq_frame_publisher.address = zmq_url - - # Derive WebSocket URL if not provided - if not app_settings.get("websocket_url"): - base_url = app_settings.uri - if base_url.endswith("/"): - base_url = base_url[:-1] - app_settings.websocket_url = ( - base_url.replace("http://", "ws://").replace("https://", "wss://") - + "/stream" - ) - - # Create operator and publisher - operator = TiledRawFrameOperator() - publisher = ZMQFramePublisher.from_settings(app_settings.zmq_frame_publisher) - operator.add_publisher(publisher) - - # Create and start listener - listener = TiledWebSocketListener.from_settings(app_settings, operator) - await listener.start() - - -if __name__ == "__main__": - asyncio.run(start()) diff --git a/src/arroyosas/app/viz_operator_cli.py b/src/arroyosas/app/viz_operator_cli.py deleted file mode 100644 index bc31f48..0000000 --- a/src/arroyosas/app/viz_operator_cli.py +++ /dev/null @@ -1,37 +0,0 @@ -import asyncio -import logging - -import typer - -from arroyosas.zmq import ZMQFrameListener - -from ..config import settings -from ..log_utils import setup_logger -from ..one_d_reduction.operator import OneDReductionOperator -from ..tiled.tiled_poller import TiledProcessedPublisher -from ..websockets import OneDWSPublisher - -app = typer.Typer() -logger = logging.getLogger("arroyosas") -app_settings = settings.viz_operator -setup_logger(logger, log_level=settings.logging_level) - - -@app.command() -async def start(): - logger.info("Starting Tiled Poller") - logger.info("Getting settings") - logger.info(f"{settings.viz_operator}") - operator = OneDReductionOperator.from_settings(app_settings) - tiled_event_publisher = TiledProcessedPublisher.from_settings( - settings.tiled_processed - ) - ws_publisher = OneDWSPublisher.from_settings(app_settings.ws_publisher) - operator.add_publisher(ws_publisher) - operator.add_publisher(tiled_event_publisher) - listener = ZMQFrameListener.from_settings(app_settings.listener, operator) - await asyncio.gather(listener.start(), ws_publisher.start()) - - -if __name__ == "__main__": - asyncio.run(start()) diff --git a/src/arroyosas/app/xps_websocket_simulator.py b/src/arroyosas/app/xps_websocket_simulator.py deleted file mode 100644 index ad1d4b4..0000000 --- a/src/arroyosas/app/xps_websocket_simulator.py +++ /dev/null @@ -1,426 +0,0 @@ -""" -XPS WebSocket Simulator for arroyosas package - -Loads XPS data from combined_all_bin_averages.npy and streams via WebSocket -in the format expected by the XPS processing system (tr_ap_xps format). - -Data structure: Dictionary with keys (bin_num, shot_num) -> 2D numpy array -Example: combined_averages[(5, 70)] = heatmap array - -Usage: - python -m arroyosas.app.xps_websocket_simulator --data-file /data/xps_test/combined_all_bin_averages.npy -""" - -import asyncio -import json -import logging -import os -import uuid -from pathlib import Path -from typing import List, Tuple, Dict - -import msgpack -import numpy as np -import typer -import websockets - -# Setup logging -logger = logging.getLogger(__name__) -logging.basicConfig( - level=logging.INFO, - format='%(levelname)s: (%(name)s) %(message)s' -) - -app = typer.Typer() - - -def load_xps_data(data_file: str) -> Tuple[np.ndarray, Dict[int, Tuple[int, int]]]: - """ - Load XPS data from combined_all_bin_averages.npy - - Args: - data_file: Path to combined_all_bin_averages.npy - - Returns: - Tuple of: - - 3D numpy array (total_entries, height, width) - - Index map: {index: (bin_num, shot_num)} - """ - try: - # Load the combined dictionary - combined_averages = np.load(data_file, allow_pickle=True).item() - - if not isinstance(combined_averages, dict): - raise ValueError(f"Expected dict, got {type(combined_averages)}") - - # Get all keys, sorted by bin then shot number - all_keys = sorted(combined_averages.keys()) - total_entries = len(all_keys) - - if total_entries == 0: - raise ValueError("No data found in file") - - # Get shape from first entry - first_key = all_keys[0] - single_image_shape = combined_averages[first_key].shape - - logger.info(f"Data structure:") - logger.info(f" Total entries: {total_entries}") - logger.info(f" Image shape: {single_image_shape}") - - # Create 3D array - all_data = np.zeros((total_entries, *single_image_shape), dtype=np.float32) - - # Create index map - index_map = {} - - # Fill array and map - for i, key in enumerate(all_keys): - all_data[i] = combined_averages[key] - index_map[i] = key # key is (bin_num, shot_num) - - # Log bin distribution - bins = set(bin_num for bin_num, _ in all_keys) - logger.info(f" Number of bins: {len(bins)}") - logger.info(f" Bin numbers: {sorted(bins)}") - - # Count shots per bin - from collections import defaultdict - shots_per_bin = defaultdict(int) - for bin_num, _ in all_keys: - shots_per_bin[bin_num] += 1 - - for bin_num in sorted(shots_per_bin.keys()): - logger.info(f" Bin {bin_num}: {shots_per_bin[bin_num]} shots") - - return all_data, index_map - - except Exception as e: - logger.error(f"Error loading data file: {e}") - raise - - -def prepare_start_message() -> str: - """ - Prepare XPS start message in JSON format. - Matches the tr_ap_xps XPSStart schema. - """ - scan_uuid = str(uuid.uuid4()) - start_message = { - "msg_type": "start", - "scan_name": f"temp name {scan_uuid}", - "F_Trigger": 13, - "F_Un-Trigger": 38, - "F_Dead": 45, - "F_Reset": 46, - "CCD_nx": 1392, - "CCD_ny": 1040, - "Pass Energy": 200, - "Center Energy": 3308, - "Offset Energy": -0.837, - "Lens Mode": "X6-26Mar2022-test", - "Rectangle": { - "Left": 148, - "Top": 385, - "Right": 1279, - "Bottom": 654, - "Rotation": 0 - }, - "data_type": "U8", - "dt": 0.0820741786426572, - "Photon Energy": 3999.99740398402, - "Binding Energy": 90, - "File Ver": "1.0.0" - } - return json.dumps(start_message) - - -def prepare_stop_message() -> str: - """ - Prepare XPS stop message in JSON format. - Matches the tr_ap_xps XPSStop schema. - """ - stop_message = { - "msg_type": "stop", - "Num Frames": 0 - } - return json.dumps(stop_message) - - -def convert_to_uint8(image: np.ndarray) -> bytes: - """ - Convert an image to uint8 with logarithmic scaling. - Matches the tr_ap_xps/websockets.py convert_to_uint8 function. - """ - if image.size == 0: - return b'' - - # Normalize to [0, 1] - image_normalized = (image - image.min()) / (image.max() - image.min() + 1e-10) - - # Apply logarithmic stretch - log_stretched = np.log1p(image_normalized) - - # Normalize again - log_stretched_normalized = (log_stretched - log_stretched.min()) / ( - log_stretched.max() - log_stretched.min() + 1e-10 - ) - - # Convert to uint8 - image_uint8 = (log_stretched_normalized * 255).astype(np.uint8) - return image_uint8.tobytes() - - -def prepare_xps_message( - shot_num: int, - bin_num: int, - shot_mean: np.ndarray -) -> bytes: - """ - Prepare XPS message matching the tr_ap_xps format. - - Args: - shot_num: Shot number within current bin - bin_num: Current bin number - shot_mean: 2D numpy array with heatmap data - - Returns: msgpack binary message - """ - # Ensure 2D shape - if shot_mean.ndim != 2: - logger.warning(f"Expected 2D array, got shape {shot_mean.shape}") - if shot_mean.ndim == 1: - shot_mean = shot_mean.reshape(1, -1) - else: - shot_mean = shot_mean.reshape(shot_mean.shape[0], -1) - - height, width = shot_mean.shape - - # msgpack with image data (tr_ap_xps format) - msgpack_data = { - "shot_num": shot_num, - "shot_mean": convert_to_uint8(shot_mean), - "shot_recent": convert_to_uint8(shot_mean), - "shot_std": convert_to_uint8(np.zeros_like(shot_mean)), - "width": height, # Note: swapped in real system - "height": width, - "raw": convert_to_uint8(shot_mean), - "vfft": convert_to_uint8(shot_mean), - "ifft": convert_to_uint8(shot_mean), - "fitted": json.dumps([]) - } - - return msgpack.packb(msgpack_data) - - -async def send_xps_data( - websocket, - shot_num: int, - bin_num: int, - shot_mean: np.ndarray -): - """Send XPS data through WebSocket""" - try: - msgpack_msg = prepare_xps_message(shot_num, bin_num, shot_mean) - msg_size = len(msgpack_msg) - - await websocket.send(msgpack_msg) - logger.info(f"✓ Sent bin {bin_num:2d}, shot {shot_num:2d} | shape={shot_mean.shape} | size={msg_size:,} bytes") - - except Exception as e: - logger.error(f"✗ Error sending bin {bin_num}, shot {shot_num}: {e}") - - -async def websocket_handler( - websocket, - all_data: np.ndarray, - index_map: Dict[int, Tuple[int, int]], - cycles: int, - pause: float, - bins_to_send: List[int] = None -): - """ - Handle WebSocket connection and send XPS data. - - Args: - websocket: WebSocket connection - all_data: 3D array (entries, height, width) - index_map: Maps index -> (bin_num, shot_num) - cycles: Number of times to repeat the data - pause: Pause between shots in seconds - bins_to_send: List of bin numbers to send (None = all bins) - """ - client_info = f"{websocket.remote_address[0]}:{websocket.remote_address[1]}" - logger.info("=" * 70) - logger.info(f"📌 New WebSocket connection from {client_info}") - logger.info(f"📝 Path: {websocket.request.path}") - logger.info("=" * 70) - - # Check path - if websocket.request.path != "/simImages": - logger.warning(f"⚠️ Unexpected path: {websocket.request.path}, expected /simImages") - - try: - for cycle in range(cycles): - logger.info("") - logger.info("=" * 70) - logger.info(f"🔄 Cycle {cycle + 1}/{cycles}") - logger.info("=" * 70) - - # Group indices by bin - from collections import defaultdict - bin_indices = defaultdict(list) - for idx, (bin_num, shot_num) in index_map.items(): - if bins_to_send is None or bin_num in bins_to_send: - bin_indices[bin_num].append((idx, shot_num)) - - # Send data bin by bin - each bin gets its own START/STOP - for bin_num in sorted(bin_indices.keys()): - logger.info(f"") - logger.info(f"📦 Starting bin {bin_num}") - - # Send start message for this bin - start_msg = prepare_start_message() - # Extract UUID from the start message for logging - start_data = json.loads(start_msg) - scan_uuid = start_data['scan_name'].replace('temp name ', '').strip() - await websocket.send(start_msg) - logger.info(f"📤 Sent START message for bin {bin_num} with UUID: {scan_uuid}") - await asyncio.sleep(0.1) - - logger.info(f" Total shots in bin: {len(bin_indices[bin_num])}") - - # Sort shots within bin - shots = sorted(bin_indices[bin_num], key=lambda x: x[1]) - - # Track timing - import time - bin_start = time.time() - - # Send all shots for this bin - for idx, original_shot_num in shots: - shot_num = original_shot_num - shot_mean = all_data[idx] - - await send_xps_data(websocket, shot_num, bin_num, shot_mean) - await asyncio.sleep(pause) - - # Send stop message for this bin - stop_msg = prepare_stop_message() - await websocket.send(stop_msg) - logger.info(f"📤 Sent STOP message for bin {bin_num}") - - bin_duration = time.time() - bin_start - logger.info(f"✅ Completed bin {bin_num} | {len(shots)} shots in {bin_duration:.2f}s") - - if cycle < cycles - 1: - logger.info("") - logger.info(f"⏸️ Cycle {cycle + 1} complete, pausing before next cycle...") - await asyncio.sleep(1.0) - - logger.info("") - logger.info("=" * 70) - logger.info(f"🎉 All {cycles} cycles complete!") - logger.info("=" * 70) - await asyncio.sleep(2.0) - - except websockets.exceptions.ConnectionClosed: - logger.info(f"🔌 Client {client_info} disconnected") - except Exception as e: - logger.error(f"❌ Error in handler: {e}") - import traceback - logger.error(traceback.format_exc()) - - -async def run_server( - host: str, - port: int, - data_file: str, - cycles: int, - pause: float, - bins: str = None -): - """Run the WebSocket server.""" - # Load data - logger.info(f"Loading data from {data_file}...") - all_data, index_map = load_xps_data(data_file) - - # Parse bins to send - bins_to_send = None - if bins: - try: - bins_to_send = [int(b.strip()) for b in bins.split(',')] - logger.info(f"Will send only bins: {bins_to_send}") - except: - logger.error(f"Invalid bins format: {bins}. Using all bins.") - - logger.info(f"WebSocket server: ws://{host}:{port}/simImages") - - async def handler(websocket): - await websocket_handler( - websocket, - all_data, - index_map, - cycles, - pause, - bins_to_send - ) - - async with websockets.serve(handler, host, port): - logger.info("Server running...") - await asyncio.Future() - - -@app.command() -def main( - host: str = typer.Option("0.0.0.0", help="Host to bind"), - port: int = typer.Option(8001, help="Port to bind"), - data_file: str = typer.Option( - "/data/xps_test/combined_all_bin_averages.npy", - help="Path to combined_all_bin_averages.npy" - ), - cycles: int = typer.Option(1, help="Number of cycles to repeat all data"), - pause: float = typer.Option(0.1, help="Pause between shots (seconds)"), - bins: str = typer.Option(None, help="Comma-separated bin numbers to send (e.g. '0,1,5')"), -): - """ - XPS WebSocket Simulator - - Loads data from combined_all_bin_averages.npy and streams via WebSocket. - Compatible with tr_ap_xps message format. - - Data structure: - - Dictionary with keys (bin_num, shot_num) -> 2D numpy array - - shot_num resets for each bin - - Sends bins in order, with all shots for each bin - - Examples: - # Send all bins - python -m arroyosas.app.xps_websocket_simulator --data-file data.npy - - # Send only bins 0, 1, and 5 - python -m arroyosas.app.xps_websocket_simulator --bins "0,1,5" - - # Repeat 10 times with 0.05s pause - python -m arroyosas.app.xps_websocket_simulator --cycles 10 --pause 0.05 - """ - logger.info("=" * 60) - logger.info("XPS WebSocket Simulator (Bin Structure)") - logger.info("=" * 60) - logger.info(f"Host: {host}:{port}") - logger.info(f"Data file: {data_file}") - logger.info(f"Cycles: {cycles}, Pause: {pause}s") - if bins: - logger.info(f"Bins filter: {bins}") - logger.info("=" * 60) - - if not os.path.exists(data_file): - logger.error(f"Data file not found: {data_file}") - logger.info("Please provide the path to combined_all_bin_averages.npy") - return - - asyncio.run(run_server(host, port, data_file, cycles, pause, bins)) - - -if __name__ == "__main__": - app() \ No newline at end of file diff --git a/src/arroyosas/one_d_reduction/operator.py b/src/arroyosas/one_d_reduction/operator.py index 5aee943..a33887b 100644 --- a/src/arroyosas/one_d_reduction/operator.py +++ b/src/arroyosas/one_d_reduction/operator.py @@ -5,7 +5,6 @@ import numpy as np from arroyopy.operator import Operator from tiled.client import from_uri -from tiled.client.base import BaseClient from ..redis import RedisConn from ..schemas import ( @@ -25,12 +24,10 @@ class OneDReductionOperator(Operator): - def __init__(self, tiled_client: BaseClient, redis_conn: RedisConn): + def __init__(self, redis_conn: RedisConn): super().__init__() - self.tiled_client = tiled_client self.redis_conn = redis_conn self.current_scan_metadata = None - # self.mask = None self.mask = self.load_static_mask_file() asyncio.create_task( @@ -122,13 +119,6 @@ def do_reduction(self, reduction_settings: dict) -> tuple: logger.error("No reduction settings found") return reduction_settings.pop("input_uri_data") - # mask_uri = reduction_settings.pop("input_uri_mask") - # image_container = get_nested_client(self.tiled_client, mask_uri) - # image = image_container - # mask = self.calculate_mask(reduction_settings) - # masked_image = image[0][0] + mask.T - # reduction_settings["masked_image"] = masked_image - # reduction_settings["masked_image"] = image reduction = pixel_roi_horizontal_cut(**reduction_settings) return reduction except Exception as e: @@ -160,10 +150,21 @@ def generate_masked_image(image, mask): masked_image = image * masked_float # Multiply to set masked values to NaN return masked_image + async def start(self): + publisher_tasks = [ + asyncio.create_task(p.start()) for p in self.publishers + if hasattr(p, "start") + ] + await asyncio.gather(super().start(), *publisher_tasks) + @classmethod def from_settings(cls, settings) -> "OneDReductionOperator": redis_conn = RedisConn.from_settings(settings.redis) - tiled_client = from_uri( - settings.tiled.raw.uri, api_key=settings.tiled.raw.api_key - ) - return cls(tiled_client, redis_conn) + return cls(redis_conn) + + +def create_one_d_reduction_operator( + redis_host: str, redis_port: int +) -> OneDReductionOperator: + redis_conn = RedisConn.create(redis_host, redis_port) + return OneDReductionOperator(redis_conn) diff --git a/src/arroyosas/redis.py b/src/arroyosas/redis.py index d8a4077..c738cce 100644 --- a/src/arroyosas/redis.py +++ b/src/arroyosas/redis.py @@ -2,11 +2,8 @@ import logging import redis.asyncio as redis -from arroyosas.config import settings -from arroyosas.log_utils import setup_logger logger = logging.getLogger(__name__) -setup_logger(logger, log_level=settings.logging_level) class RedisConn: diff --git a/src/arroyosas/tiled/tiled_poller.py b/src/arroyosas/tiled/tiled_poller.py index 4137f78..a3a5ba8 100644 --- a/src/arroyosas/tiled/tiled_poller.py +++ b/src/arroyosas/tiled/tiled_poller.py @@ -36,6 +36,7 @@ class TiledTestframeListener(Listener): + """ Depcrecated now that tiled can watch for new files, but keeping as an example of how to write a tiled listener""" def __init__(self, tiled_array: ArrayClient): super().__init__() self.tiled_array = tiled_array @@ -396,6 +397,17 @@ def from_settings(cls, settings: dict): return cls(root_container) +def create_tiled_processed_publisher( + uri: str, root_segments: list, api_key: str = None +) -> TiledProcessedPublisher: + import os + if api_key is None: + api_key = os.environ.get("TILED_LIVE_API_KEY") + client = from_uri(uri, api_key=api_key) + root_container = get_runs_container(client, root_segments) + return TiledProcessedPublisher(root_container) + + def create_one_d_node(run_node: Container, message: SAS1DReduction) -> None: one_d_array_node = run_node.write_array( message.curve.array[np.newaxis, :], key="one_d_reduction" diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index 6c8e78b..5d631e8 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -259,6 +259,21 @@ def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": ) +def create_tiled_client_listener( + operator: Operator, + uri: str, + stream_name: str, + target: str = "img", + create_run_logs: bool = True, + log_dir: str = "tiled_logs", + api_key: str = None, +) -> TiledClientListener: + if api_key is None: + api_key = os.environ.get("TILED_LIVE_API_KEY") + client = from_uri(uri, api_key=api_key) + return TiledClientListener(operator, client, stream_name, target, create_run_logs, log_dir) + + if __name__ == "__main__": logging.basicConfig(level=logging.INFO) # Example usage diff --git a/src/arroyosas/zmq.py b/src/arroyosas/zmq.py index 101531b..6fb2785 100644 --- a/src/arroyosas/zmq.py +++ b/src/arroyosas/zmq.py @@ -59,14 +59,18 @@ async def stop(self): @classmethod def from_settings(cls, settings: dict, operator: Operator) -> "ZMQFrameListener": - context = Context() - zmq_socket = context.socket(zmq.SUB) - zmq_socket.connect(settings.zmq_address) - zmq_socket.setsockopt_string(zmq.SUBSCRIBE, "") - zmq_socket.setsockopt(zmq.SNDHWM, 10000) # Allow up to 10,000 messages - zmq_socket.setsockopt(zmq.RCVHWM, 10000) - logger.info(f"##### Listening for frames on {settings.zmq_address}") - return cls(operator, zmq_socket) + return cls(operator, settings.zmq_address) + + +def create_zmq_frame_listener(operator: Operator, zmq_address: str) -> ZMQFrameListener: + context = Context() + zmq_socket = context.socket(zmq.SUB) + zmq_socket.connect(zmq_address) + zmq_socket.setsockopt_string(zmq.SUBSCRIBE, "") + zmq_socket.setsockopt(zmq.SNDHWM, 10000) + zmq_socket.setsockopt(zmq.RCVHWM, 10000) + logger.info(f"##### Listening for frames on {zmq_address}") + return ZMQFrameListener(operator, zmq_socket) class ZMQFramePublisher(Publisher): From 3ac8a34453b38cd93fca26504520e0bfbf9735df Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Tue, 31 Mar 2026 14:43:26 -0700 Subject: [PATCH 02/16] add factory for LSEOperator --- block_configs/lse_operator_block.yaml | 5 +---- block_configs/viz_operator_block.yaml | 29 --------------------------- src/arroyosas/lse.py | 8 ++++++++ 3 files changed, 9 insertions(+), 33 deletions(-) delete mode 100644 block_configs/viz_operator_block.yaml create mode 100644 src/arroyosas/lse.py diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml index bf043fc..0b76d03 100644 --- a/block_configs/lse_operator_block.yaml +++ b/block_configs/lse_operator_block.yaml @@ -3,10 +3,7 @@ blocks: description: 1D reduction operator - listens for raw frames from tiled reduces, publishes to websocket and tiled operator: - class: arroyosas.one_d_reduction.operator.create_one_d_reduction_operator - kwargs: - redis_host: "kvrocks" - redis_port: 6666 + class: arrosas.le.build_lse_operator listeners: - class: arroyosas.tiled.tiled_websocket.create_tiled_websocket_listener diff --git a/block_configs/viz_operator_block.yaml b/block_configs/viz_operator_block.yaml deleted file mode 100644 index 9b1fa9e..0000000 --- a/block_configs/viz_operator_block.yaml +++ /dev/null @@ -1,29 +0,0 @@ -blocks: - - name: viz_operator - description: 1D reduction operator - listens for raw frames over ZMQ, reduces, publishes to websocket and tiled - - operator: - class: arroyosas.one_d_reduction.operator.create_one_d_reduction_operator - kwargs: - tiled_uri: "https://tiled.nsls2.bnl.gov" - redis_host: "kvrocks" - redis_port: 6666 - # tiled_api_key: falls back to TILED_LIVE_API_KEY env var - - listeners: - - class: arroyosas.zmq.create_zmq_frame_listener - kwargs: - zmq_address: "tcp://tiled_poller:5000" - - publishers: - - class: arroyosas.websockets.OneDWSPublisher - kwargs: - host: "0.0.0.0" - port: 8020 - - class: arroyosas.tiled.tiled_poller.create_tiled_processed_publisher - kwargs: - uri: "https://tiled.computing.als.lbl.gov" - root_segments: - - beamlines - - bl733 - # api_key: falls back to TILED_LIVE_API_KEY env var diff --git a/src/arroyosas/lse.py b/src/arroyosas/lse.py new file mode 100644 index 0000000..ed1aa63 --- /dev/null +++ b/src/arroyosas/lse.py @@ -0,0 +1,8 @@ +from arroyo_reduction.operator import LatentSpaceOperator +from arroyo_reduction.reducer import LatentSpaceReducer, Reducer +from arroyo_reduction.schemas import LatentSpaceEvent + + +def build_lse_operator() -> LatentSpaceOperator: + reducer = LatentSpaceReducer() + return LatentSpaceOperator(reducer) From 1dbb93d4d0f4384aa4720d81ac079f1348463581 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Tue, 31 Mar 2026 14:43:54 -0700 Subject: [PATCH 03/16] add factory for LSEOperator --- block_configs/lse_operator_block.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml index 0b76d03..6de506d 100644 --- a/block_configs/lse_operator_block.yaml +++ b/block_configs/lse_operator_block.yaml @@ -1,7 +1,6 @@ blocks: - name: LSE Operator - description: 1D reduction operator - listens for raw frames from tiled reduces, publishes to websocket and tiled - + description: 2D latent space operator for SAS Data operator: class: arrosas.le.build_lse_operator From 0265c8c9d6ae297d6f914c0f6cb973a1115214be Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Tue, 31 Mar 2026 17:33:09 -0700 Subject: [PATCH 04/16] add modules out of mlex_latent_explorer --- .gitignore | 4 +- Dockerfile | 5 +- block_configs/lse_operator_block.yaml | 17 +- block_configs/lse_operator_block_local.yaml | 25 + docker-compose.yml | 46 +- pixi.lock | 2969 +++++++++++++---- pyproject.toml | 50 +- src/arroyosas/lse.py | 27 +- src/arroyosas/lse_reduction/__init__.py | 0 .../lse_reduction/base_model_store.py | 31 + src/arroyosas/lse_reduction/mlflow_utils.py | 346 ++ src/arroyosas/lse_reduction/operator.py | 162 + src/arroyosas/lse_reduction/publisher.py | 93 + .../lse_reduction/redis_model_store.py | 342 ++ .../lse_reduction/redis_proxy_client.py | 99 + src/arroyosas/lse_reduction/reducer.py | 345 ++ src/arroyosas/lse_reduction/schemas.py | 45 + .../lse_reduction/tiled_results_publisher.py | 514 +++ src/arroyosas/lse_reduction/vector_save.py | 91 + src/arroyosas/tiled/tiled_websocket.py | 69 +- 20 files changed, 4585 insertions(+), 695 deletions(-) create mode 100644 block_configs/lse_operator_block_local.yaml create mode 100644 src/arroyosas/lse_reduction/__init__.py create mode 100644 src/arroyosas/lse_reduction/base_model_store.py create mode 100644 src/arroyosas/lse_reduction/mlflow_utils.py create mode 100644 src/arroyosas/lse_reduction/operator.py create mode 100644 src/arroyosas/lse_reduction/publisher.py create mode 100644 src/arroyosas/lse_reduction/redis_model_store.py create mode 100644 src/arroyosas/lse_reduction/redis_proxy_client.py create mode 100644 src/arroyosas/lse_reduction/reducer.py create mode 100644 src/arroyosas/lse_reduction/schemas.py create mode 100644 src/arroyosas/lse_reduction/tiled_results_publisher.py create mode 100644 src/arroyosas/lse_reduction/vector_save.py diff --git a/.gitignore b/.gitignore index 3b2cf55..758515d 100644 --- a/.gitignore +++ b/.gitignore @@ -184,4 +184,6 @@ persist/ data/models/ -.settings.yaml \ No newline at end of file +.settings.yaml + +mlflow.db \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 763ad64..5ad0f49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,9 @@ WORKDIR /app COPY . /app -RUN pip install --upgrade pip && \ - pip install .[all,lse] +RUN pip install uv && \ + uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu && \ + uv pip install --system ".[lse]" RUN pip install debugpy diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml index 6de506d..faeabc0 100644 --- a/block_configs/lse_operator_block.yaml +++ b/block_configs/lse_operator_block.yaml @@ -2,13 +2,16 @@ blocks: - name: LSE Operator description: 2D latent space operator for SAS Data operator: - class: arrosas.le.build_lse_operator + class: arroyosas.lse.build_lse_operator + kwargs: + redis_host: 127.0.0.1 + redis_port: 6666 listeners: - class: arroyosas.tiled.tiled_websocket.create_tiled_websocket_listener kwargs: - uri: "http://tiled:8000" - stream_name: "primary" + uri: "https://tiled-staging.computing.als.lbl.gov" + stream_name: "beamlines" target: "img" # api_key: falls back to TILED_LIVE_API_KEY env var @@ -17,10 +20,6 @@ blocks: kwargs: host: "0.0.0.0" port: 8020 - - class: arroyosas.tiled.tiled_poller.create_tiled_processed_publisher + - class: arroyosas.lse_reduction.tiled_results_publisher.create_tiled_results_publisher kwargs: - uri: "http://tiled:8000" - root_segments: - - beamlines - - bl733 - # api_key: falls back to TILED_LIVE_API_KEY env var + tiled_uri: "https://tiled-staging.computing.als.lbl.gov" diff --git a/block_configs/lse_operator_block_local.yaml b/block_configs/lse_operator_block_local.yaml new file mode 100644 index 0000000..bd6edf3 --- /dev/null +++ b/block_configs/lse_operator_block_local.yaml @@ -0,0 +1,25 @@ +blocks: + - name: LSE Operator + description: 2D latent space operator for SAS Data + operator: + class: arroyosas.lse.build_lse_operator + kwargs: + redis_host: 127.0.0.1 + redis_port: 6666 + + listeners: + - class: arroyosas.tiled.tiled_websocket.create_tiled_websocket_listener + kwargs: + uri: "http://127.0.0.1:8000" + stream_name: "primary" + target: "img" + # api_key: falls back to TILED_LIVE_API_KEY env var + + publishers: + - class: arroyosas.websockets.OneDWSPublisher + kwargs: + host: "0.0.0.0" + port: 8020 + - class: arroyosas.lse_reduction.tiled_results_publisher.create_tiled_results_publisher + kwargs: + tiled_uri: "http://127.0.0.1:8000" diff --git a/docker-compose.yml b/docker-compose.yml index 382fd6a..0ce6faa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,30 +46,30 @@ services: networks: gisax_net1: - viz_operator: - command: python -m arroyosas.app.viz_operator_cli - build: - context: . - restart: unless-stopped - ports: - - "8021:8021" - volumes: - - .:/app:Z - - ./settings.yaml:/app/settings.yaml:Z - networks: - gisax_net1: + # viz_operator: + # command: python -m arroyosas.app.viz_operator_cli + # build: + # context: . + # restart: unless-stopped + # ports: + # - "8021:8021" + # volumes: + # - .:/app:Z + # - ./settings.yaml:/app/settings.yaml:Z + # networks: + # gisax_net1: - frontend: - build: - context: . - dockerfile: Dockerfile_frontend - ports: - - "8080:80" - restart: unless-stopped - volumes: - - .:/app:Z - networks: - gisax_net1: + # frontend: + # build: + # context: . + # dockerfile: Dockerfile_frontend + # ports: + # - "8080:80" + # restart: unless-stopped + # volumes: + # - .:/app:Z + # networks: + # gisax_net1: kvrocks: diff --git a/pixi.lock b/pixi.lock index 86633e8..632fe13 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,15 +3,17 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/pytorch/ indexes: - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda @@ -22,9 +24,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda @@ -32,17 +37,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/pytorch/noarch/cpuonly-2.0-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fabio-2025.10.0-py312h4f23490_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_h95b8bfc_907.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -53,23 +64,34 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.86.4-hf516916_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py312hcaba1f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.26.10-h17cb667_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_hd4fcb43_103.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-6.0.0-py312h645ab66_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda @@ -79,13 +101,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda @@ -110,10 +135,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.2-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda @@ -121,13 +146,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-devel-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.3.0-hed573e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.3.0-hed573e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.3.0-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.3.0-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.3.0-h1862bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.3.0-h1862bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.3.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.3.0-h0767aad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.3.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.1-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda @@ -136,8 +175,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda @@ -147,6 +193,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-15.0.7-h0cdce71_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py312h63ddcf0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mako-1.3.10-pyhcf101f3_1.conda @@ -154,17 +201,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-ha770c72_50498.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.10.1-mkl_py312h791fadb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -181,6 +233,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyfai-2026.3.0-hd8ed1ab_0.conda @@ -192,11 +245,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytools-2025.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/pytorch/linux-64/pytorch-2.2.2-py3.12_cpu_0.tar.bz2 + - conda: https://conda.anaconda.org/pytorch/noarch/pytorch-mutex-1.0-cpu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h0c412b5_8.conda @@ -205,27 +262,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.7.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/silx-2.2.2-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/silx-base-2.2.2-py312hf79963d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.10.0-py312h1289d80_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/siphash24-1.8-py312h4c3975b_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hb700be7_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/pytorch/linux-64/torchvision-0.17.2-py312_cpu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda @@ -246,41 +316,61 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/95/dc2b3a7b78c432e0b4d01d4874e4adbd9e46d146515023c9af569297708f/awkward_cpp-52-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/3a/92e1a4af07ac0f542b10076a4af280ce1f62f7743cf099a2845d0729469e/blosc2-3.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/8c/d082bd5f72d7613524d5b35dfe1f71732b2246be2704fad68cd0e3fdd020/databricks_sdk-0.102.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/ea/18f6d0457f9efb2fc6fa594857f92810cadb03024975726db6546b3d6fcf/fastapi-0.135.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/34/fae9ac8f1c3a552fd3f7ff652b94c78d219dedc5fce0c0a4232457760a00/huey-2.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl @@ -291,6 +381,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/18/ca682e740b90d5a930981cd375f878a453a713741b5b7d9c0d9516552b5e/mlflow-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4b/52/17460157271e70b0d8444d27f8ad730ef7d95fb82fac59dc19f11519b921/mlflow_skinny-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/9a/7ac1db2ed7b5e21c50fadf925a53f0c77452a8a855ee4a119b084c2fa5d3/mlflow_tracing-3.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl @@ -301,61 +394,78 @@ environments: - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/e6/94145d714402fd5ade00b5661f2d0ab981219e07f7db9bfa16786cdb9c04/pynndescent-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/fe/661043d1c263b0d9d10c6ff4e9c9745f3df9641c62b51f96a3473638e7ce/regex-2026.3.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/72/cd/4761675df1b3dd93072c89697278f3ed3dc004a60c034cd2603c43ff64b5/scikit-learn-1.3.0.tar.gz - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/e8/6a2b2030f0689f894432b9c2f0357f2f3286b2a00474827e04b8fe9eea13/skops-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/a9/804ac7423f5dda316d3a982f3ab071c971fb877f8961dad9f6a97d12d2ee/sparse-0.18.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/81/c525760353dff91ae2e4c42c3f3d9bf0bfeecbb6165cc393e86915f1717d/stamina-25.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/90/273b6c7ec78af547694eddeea9e05de771278bd20476525ab930cecaf7d8/tokenizers-0.21.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/3a/8bdab26e09c5a242182b7ba9152e216d5ab4ae2d78c4298eb4872549cd35/transformers-4.47.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7f/b2/0bba9bbb4596d2d2f285a16c2ab04118f6b957d8441566e1abb892e6a6b2/werkzeug-3.1.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ../arroyopy - pypi: ./ dev: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/pytorch/ indexes: - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda @@ -366,9 +476,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.23.1-hc31b594_0.conda @@ -376,17 +489,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda + - conda: https://conda.anaconda.org/pytorch/noarch/cpuonly-2.0-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fabio-2025.10.0-py312h4f23490_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_h95b8bfc_907.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -397,23 +516,34 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.86.4-hf516916_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py312hcaba1f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.26.10-h17cb667_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.16.0-nompi_py312ha829cd9_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5-2.1.0-nompi_hd4fcb43_103.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf5plugin-6.0.0-py312h645ab66_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda @@ -423,13 +553,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.0-default_h99862b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda @@ -454,10 +587,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.2-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda @@ -465,13 +598,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-devel-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.3.0-hed573e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.3.0-hed573e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.3.0-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.3.0-hb617929_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.3.0-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.3.0-h1862bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.3.0-h1862bb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.3.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.3.0-h0767aad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.3.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.3-h9abb657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.1-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda @@ -480,8 +627,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda @@ -491,6 +645,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-15.0.7-h0cdce71_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py312h63ddcf0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mako-1.3.10-pyhcf101f3_1.conda @@ -498,17 +653,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-ha770c72_50498.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.10.1-mkl_py312h791fadb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -525,6 +685,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyfai-2026.3.0-hd8ed1ab_0.conda @@ -536,11 +697,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.0-py312h50ac2ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytools-2025.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/pytorch/linux-64/pytorch-2.2.2-py3.12_cpu_0.tar.bz2 + - conda: https://conda.anaconda.org/pytorch/noarch/pytorch-mutex-1.0-cpu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h0c412b5_8.conda @@ -549,27 +714,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.7.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/silx-2.2.2-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/silx-base-2.2.2-py312hf79963d_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.10.0-py312h1289d80_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/siphash24-1.8-py312h4c3975b_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hb700be7_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhcf101f3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/pytorch/linux-64/torchvision-0.17.2-py312_cpu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda @@ -590,9 +768,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda @@ -611,20 +791,21 @@ environments: - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/39/4d8414260c3d83f22029a39e51553c173611b378d62ca391e5ca68e65cfa/awkward-2.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/95/dc2b3a7b78c432e0b4d01d4874e4adbd9e46d146515023c9af569297708f/awkward_cpp-52-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/3a/92e1a4af07ac0f542b10076a4af280ce1f62f7743cf099a2845d0729469e/blosc2-3.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/54/346f681c24a9c3a08e2e74dcee2555ccd1081705b46f791f7b228e177d06/canonicaljson-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/8c/d082bd5f72d7613524d5b35dfe1f71732b2246be2704fad68cd0e3fdd020/databricks_sdk-0.102.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/73/f85acbb3ac319a86abbf6b46103d58594d73529123377219980f11b388e9/duckdb-1.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl @@ -633,26 +814,35 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/b5/82f89307d0d769cd9bf46a54fb9136be08e4e57c5570ae421db4c9a2ba62/fakeredis-2.34.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/ea/18f6d0457f9efb2fc6fa594857f92810cadb03024975726db6546b3d6fcf/fastapi-0.135.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/34/fae9ac8f1c3a552fd3f7ff652b94c78d219dedc5fce0c0a4232457760a00/huey-2.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl @@ -664,6 +854,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.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/c2/18/ca682e740b90d5a930981cd375f878a453a713741b5b7d9c0d9516552b5e/mlflow-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4b/52/17460157271e70b0d8444d27f8ad730ef7d95fb82fac59dc19f11519b921/mlflow_skinny-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/9a/7ac1db2ed7b5e21c50fadf925a53f0c77452a8a855ee4a119b084c2fa5d3/mlflow_tracing-3.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/ae/defd665dbbeb2fffa077491365ed160acaec49274ce8d4b979f55db71f18/ndindex-1.10.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl @@ -676,23 +869,28 @@ environments: - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/e6/94145d714402fd5ade00b5661f2d0ab981219e07f7db9bfa16786cdb9c04/pynndescent-0.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl @@ -701,59 +899,61 @@ environments: - pypi: https://files.pythonhosted.org/packages/d9/c3/0bd11992072e6a1c513b16500a5d07f91a24017c5909b02c72c62d7ad024/python_jose-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/d0/397f9626e711ff749a95d96b7af99b9c566a9bb5129b8e4c10fc4d100304/python_multipart-0.0.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/fe/661043d1c263b0d9d10c6ff4e9c9745f3df9641c62b51f96a3473638e7ce/regex-2026.3.32-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/72/cd/4761675df1b3dd93072c89697278f3ed3dc004a60c034cd2603c43ff64b5/scikit-learn-1.3.0.tar.gz - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/e8/6a2b2030f0689f894432b9c2f0357f2f3286b2a00474827e04b8fe9eea13/skops-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/a9/804ac7423f5dda316d3a982f3ab071c971fb877f8961dad9f6a97d12d2ee/sparse-0.18.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/81/c525760353dff91ae2e4c42c3f3d9bf0bfeecbb6165cc393e86915f1717d/stamina-25.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/90/273b6c7ec78af547694eddeea9e05de771278bd20476525ab930cecaf7d8/tokenizers-0.21.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/3a/8bdab26e09c5a242182b7ba9152e216d5ab4ae2d78c4298eb4872549cd35/transformers-4.47.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7f/b2/0bba9bbb4596d2d2f285a16c2ab04118f6b957d8441566e1abb892e6a6b2/werkzeug-3.1.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ../arroyopy - pypi: ./ packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - build_number: 20 - sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 - md5: a9f577daf3de00bca7c3c76c0ecbd1de +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: c0cddb66070dd6355311f7667ce2acccf70d1013edaa6e97f22859502fefdb22 + md5: 887b70e1d607fba7957aa02f9ee0d939 depends: - - __glibc >=2.17,<3.0.a0 - - libgomp >=7.5.0 - constrains: - - openmp_impl <0.0a0 + - llvm-openmp >=9.0.1 license: BSD-3-Clause license_family: BSD purls: [] - size: 28948 - timestamp: 1770939786096 + size: 8244 + timestamp: 1764092331208 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 md5: aaa2a381ccc56eac91d63b6c1240312f @@ -873,6 +1073,17 @@ packages: - typing-extensions>=4.5 ; python_full_version < '3.13' - trio>=0.32.0 ; extra == 'trio' requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 + md5: 346722a0be40f6edc53f12640d301338 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2706396 + timestamp: 1718551242397 - pypi: ../arroyopy name: arroyopy version: 0.3.0a5 @@ -907,7 +1118,7 @@ packages: - pypi: ./ name: arroyosas version: 0.1.0 - sha256: 4c334d23d753436dd0586aee935e87d4301a439c601949ef0063aed1e040d364 + sha256: 11e575b8ab817c381a51b821e0c22a8e4cb9269be9fd6f601a9345eb905608bc requires_dist: - arroyopy>=0.3.0a4 - dynaconf @@ -923,6 +1134,7 @@ packages: - websockets - zarr - transformers + - tiled[client] - redis - joblib ; extra == 'workflow-viz' - numpy<2.0.0 ; extra == 'workflow-viz' @@ -938,31 +1150,20 @@ packages: - pre-commit ; extra == 'dev' - pytest-asyncio ; extra == 'dev' - pytest-mock ; extra == 'dev' - - tiled[server]>=0.1.0b14,<0.2 ; extra == 'dev' + - tiled[server] ; extra == 'dev' + - aiosqlite ; extra == 'lse' + - dynaconf ; extra == 'lse' + - msgpack ; extra == 'lse' + - redis ; extra == 'lse' + - websockets ; extra == 'lse' + - zarr ; extra == 'lse' + - scikit-learn==1.3.0 ; extra == 'lse' + - torch>=2.0.0 ; extra == 'lse' - torchvision==0.17.2 ; extra == 'lse' - - joblib ; extra == 'lse' - - mlex-latent-explorer @ git+ssh://git@github.com/mlexchange/mlex_latent_explorer.git@main ; extra == 'lse' - - arroyopy>=0.3.0a4 ; extra == 'all' - - bluesky ; extra == 'all' - - dynaconf ; extra == 'all' - - python-dotenv ; extra == 'all' - - pandas ; extra == 'all' - - msgpack ; extra == 'all' - - numpy ; extra == 'all' - - ophyd ; extra == 'all' - - pillow ; extra == 'all' - - pyzmq ; extra == 'all' - - tqdm ; extra == 'all' - - typer ; extra == 'all' - - websockets ; extra == 'all' - - tiled[client]>=0.1.0b14,<0.2 ; extra == 'all' - - redis ; extra == 'all' - - numpy<2.0.0 ; extra == 'all' - - pandas ; extra == 'all' - - python-dotenv ; extra == 'all' - - pyarrow>=14.0.1 ; extra == 'all' - - pyfai ; extra == 'all' - - aiosqlite ; extra == 'all' + - transformers==4.47.1 ; extra == 'lse' + - umap-learn ; extra == 'lse' + - joblib==1.4.2 ; extra == 'lse' + - mlflow ; extra == 'lse' - pypi: https://files.pythonhosted.org/packages/d9/ab/6936e2663c47a926e0659437b9333ad87d1ff49b1375d239026e0a268eba/asgi_correlation_id-4.3.4-py3-none-any.whl name: asgi-correlation-id version: 4.3.4 @@ -1141,6 +1342,35 @@ packages: purls: [] size: 101435 timestamp: 1771063496927 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda + sha256: d77a24be15e283d83214121428290dbe55632a6e458378205b39c550afa008cf + md5: 5b8c55fed2e576dde4b0b33693a4fdb1 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 237970 + timestamp: 1767045004512 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2 + sha256: a9a9125029a66905fc9e932dfd4f595be3a59a30db37fd7bf4a675a5c6151d62 + md5: 349aef876b1d8c9dccae01de20d5b385 + depends: + - mkl + track_features: + - blas_mkl + license: BSD 3-clause + purls: [] + size: 1381 +- pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + name: blinker + version: 1.9.0 + sha256: ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda sha256: e7af5d1183b06a206192ff440e08db1c4e8b2ca1f8376ee45fb2f3a85d4ee45d md5: 2c2fae981fd2afd00812c92ac47d023d @@ -1157,16 +1387,44 @@ packages: purls: [] size: 48427 timestamp: 1733513201413 -- pypi: https://files.pythonhosted.org/packages/96/c6/6c98cb75da1ef26cb27fedb3edb4b3cdd1b3aa2f1056bdd9de0823effed9/blosc2-4.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/8b/3a/92e1a4af07ac0f542b10076a4af280ce1f62f7743cf099a2845d0729469e/blosc2-3.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: blosc2 - version: 4.1.2 - sha256: 830addc8d8722348421e5d99d719c53a36ff34a468980a7af05938ddb336cf4f + version: 3.7.2 + sha256: 8763e98c4bf03e0b968361838b52c5947c6432fde2bea30716a29107c6da7880 requires_dist: - numpy>=1.26 - ndindex - msgpack - - numexpr>=2.14.1 ; platform_machine != 'wasm32' + - platformdirs + - numexpr ; platform_machine != 'wasm32' + - py-cpuinfo ; platform_machine != 'wasm32' - requests + - dask ; extra == 'dev' + - h5py ; extra == 'dev' + - hdf5plugin ; extra == 'dev' + - jupyterlab ; extra == 'dev' + - matplotlib ; extra == 'dev' + - pandas ; extra == 'dev' + - plotly ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pyarrow ; extra == 'dev' + - ruff ; extra == 'dev' + - s3fs ; extra == 'dev' + - xarray ; extra == 'dev' + - zarr ; extra == 'dev' + - pytest ; extra == 'test' + - psutil ; platform_machine != 'wasm32' and extra == 'test' + - torch ; platform_machine != 'wasm32' and extra == 'test' + - sphinx>=8 ; extra == 'doc' + - pydata-sphinx-theme ; extra == 'doc' + - numpydoc ; extra == 'doc' + - myst-parser ; extra == 'doc' + - sphinx-paramlinks ; extra == 'doc' + - nbsphinx ; extra == 'doc' + - ipykernel ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - furo ; extra == 'doc' + - numba ; extra == 'doc' requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/2f/34/e7790a5643734c3f66fbfc728a6bfc78e4f7be739256695e74118e8842c6/bluesky_tiled_plugins-2.0.0b57-py3-none-any.whl name: bluesky-tiled-plugins @@ -1206,6 +1464,23 @@ packages: purls: [] size: 21021 timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda + sha256: 49df13a1bb5e388ca0e4e87022260f9501ed4192656d23dc9d9a1b4bf3787918 + md5: 64088dffd7413a2dd557ce837b4cbbdb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.2.0 hb03c661_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=compressed-mapping + size: 368300 + timestamp: 1764017300621 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -1311,11 +1586,16 @@ packages: version: 2.0.0 sha256: c38a315de3b5a0532f1ec1f9153cd3d716abfc565a558d00a4835428a34fca5b requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl - name: certifi - version: 2026.2.25 - sha256: 027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa - requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=compressed-mapping + size: 151445 + timestamp: 1772001170301 - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: cffi version: 2.0.0 @@ -1328,11 +1608,17 @@ packages: version: 3.5.0 sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: charset-normalizer - version: 3.4.6 - sha256: 0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 - requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 + md5: 49ee13eb9b8f44d63879c69b8a40a74b + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=compressed-mapping + size: 58510 + timestamp: 1773660086450 - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl name: click version: 8.3.1 @@ -1373,6 +1659,16 @@ packages: - pkg:pypi/contourpy?source=hash-mapping size: 320386 timestamp: 1769155979897 +- conda: https://conda.anaconda.org/pytorch/noarch/cpuonly-2.0-0.tar.bz2 + sha256: f9107aca2a9d23a032634644df5cdb8d0185337891593ce540adc480810ab539 + md5: 1cf3a59ef90a4078c253e3b02c272065 + depends: + - pytorch-mutex 1.0 cpu + track_features: + - cpuonly + purls: [] + size: 2380 + timestamp: 1630913615511 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda noarch: generic sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe @@ -1474,6 +1770,49 @@ packages: - pytest-xdist ; extra == 'test' - pre-commit ; extra == 'test' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/02/8c/d082bd5f72d7613524d5b35dfe1f71732b2246be2704fad68cd0e3fdd020/databricks_sdk-0.102.0-py3-none-any.whl + name: databricks-sdk + version: 0.102.0 + sha256: 75d1253276ee8f3dd5e7b00d62594b7051838435e618f74a8570a6dbd723ec12 + requires_dist: + - requests>=2.28.1,<3 + - google-auth~=2.0 + - protobuf>=4.25.8,!=5.26.*,!=5.27.*,!=5.28.*,!=5.29.0,!=5.29.1,!=5.29.2,!=5.29.3,!=5.29.4,!=6.30.0,!=6.30.1,!=6.31.0,<7.0 + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-xdist>=3.6.1,<4.0 ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - black==24.8.0 ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - autoflake==2.3.1 ; extra == 'dev' + - isort==5.13.2 ; extra == 'dev' + - wheel ; extra == 'dev' + - ipython ; extra == 'dev' + - ipywidgets ; extra == 'dev' + - requests-mock ; extra == 'dev' + - pyfakefs ; extra == 'dev' + - databricks-connect ; extra == 'dev' + - pytest-rerunfailures ; extra == 'dev' + - openai ; extra == 'dev' + - langchain-openai ; python_full_version >= '3.8' and extra == 'dev' + - httpx ; extra == 'dev' + - build ; extra == 'dev' + - ipython>=8,<10 ; extra == 'notebook' + - ipywidgets>=8,<9 ; extra == 'notebook' + - openai ; extra == 'openai' + - langchain-openai ; python_full_version >= '3.8' and extra == 'openai' + - httpx ; extra == 'openai' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 + md5: 418c6ca5929a611cbd69204907a83995 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 760229 + timestamp: 1685695754230 - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 md5: ce96f2f470d39bd96ce03945af92e280 @@ -1531,6 +1870,24 @@ packages: name: distlib version: 0.4.0 sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 +- pypi: https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl + name: docker + version: 7.1.0 + sha256: c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 + requires_dist: + - pywin32>=304 ; sys_platform == 'win32' + - requests>=2.26.0 + - urllib3>=1.26.0 + - coverage==7.2.7 ; extra == 'dev' + - pytest-cov==4.1.0 ; extra == 'dev' + - pytest-timeout==2.1.0 ; extra == 'dev' + - pytest==7.4.2 ; extra == 'dev' + - ruff==0.1.8 ; extra == 'dev' + - myst-parser==0.18.0 ; extra == 'docs' + - sphinx==5.1.1 ; extra == 'docs' + - paramiko>=2.4.3 ; extra == 'ssh' + - websocket-client>=1.3.0 ; extra == 'websockets' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl name: donfig version: 0.8.1.post1 @@ -1693,11 +2050,78 @@ packages: - pydantic-settings>=2.0.0 ; extra == 'all' - pydantic-extra-types>=2.0.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl - name: filelock - version: 3.25.2 - sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_h95b8bfc_907.conda + sha256: 3442ba15fa027c7284fbc3d16fe151d8c3232158fec20b20367dcb23581746cb + md5: 8458372dd1d9a95b69ab787c58533aa5 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.14,<1.3.0a0 + - aom >=3.9.1,<3.10.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - harfbuzz >=12.2.0 + - lame >=3.100,<3.101.0a0 + - libass >=0.17.4,<0.17.5.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libopenvino >=2025.3.0,<2025.3.1.0a0 + - libopenvino-auto-batch-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-auto-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-hetero-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-intel-cpu-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-intel-gpu-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-intel-npu-plugin >=2025.3.0,<2025.3.1.0a0 + - libopenvino-ir-frontend >=2025.3.0,<2025.3.1.0a0 + - libopenvino-onnx-frontend >=2025.3.0,<2025.3.1.0a0 + - libopenvino-paddle-frontend >=2025.3.0,<2025.3.1.0a0 + - libopenvino-pytorch-frontend >=2025.3.0,<2025.3.1.0a0 + - libopenvino-tensorflow-frontend >=2025.3.0,<2025.3.1.0a0 + - libopenvino-tensorflow-lite-frontend >=2025.3.0,<2025.3.1.0a0 + - libopus >=1.6,<2.0a0 + - librsvg >=2.60.0,<3.0a0 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpl >=2.15.0,<2.16.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.328.1,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.4,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2025.5,<2025.6.0a0 + - svt-av1 >=3.1.2,<3.1.3.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 12491236 + timestamp: 1765872413130 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f + md5: f58064cec97b12a7136ebb8a6f8a129b + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock?source=compressed-mapping + size: 25845 + timestamp: 1773314012590 - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl name: flake8 version: 7.3.0 @@ -1707,6 +2131,29 @@ packages: - pycodestyle>=2.14.0,<2.15.0 - pyflakes>=3.4.0,<3.5.0 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl + name: flask + version: 3.1.3 + sha256: f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c + requires_dist: + - blinker>=1.9.0 + - click>=8.1.3 + - importlib-metadata>=3.6.0 ; python_full_version < '3.10' + - itsdangerous>=2.2.0 + - jinja2>=3.1.2 + - markupsafe>=2.1.1 + - werkzeug>=3.1.0 + - asgiref>=3.2 ; extra == 'async' + - python-dotenv ; extra == 'dotenv' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl + name: flask-cors + version: 6.0.2 + sha256: e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a + requires_dist: + - flask>=0.9 + - werkzeug>=0.7 + requires_python: '>=3.9,<4.0' - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -1923,6 +2370,51 @@ packages: - zstandard ; python_full_version < '3.14' and extra == 'test-full' - tqdm ; extra == 'tqdm' requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda + sha256: c5594497f0646e9079705b3199dbb2d5b13c48173cf110000fa1c8818e2b3e0c + md5: 7892f39a39ed39591a89a28eba03e987 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 577414 + timestamp: 1774985848058 +- pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + name: gitdb + version: 4.0.12 + sha256: 67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf + requires_dist: + - smmap>=3.0.1,<6 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + name: gitpython + version: 3.1.46 + sha256: 79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058 + requires_dist: + - gitdb>=4.0.1,<5 + - typing-extensions>=3.10.0.2 ; python_full_version < '3.10' + - coverage[toml] ; extra == 'test' + - ddt>=1.1.1,!=1.4.3 ; extra == 'test' + - mock ; python_full_version < '3.8' and extra == 'test' + - mypy==1.18.2 ; python_full_version >= '3.9' and extra == 'test' + - pre-commit ; extra == 'test' + - pytest>=7.3.1 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-sugar ; extra == 'test' + - typing-extensions ; python_full_version < '3.11' and extra == 'test' + - sphinx>=7.1.2,<7.2 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.86.4-h5192d8d_1.conda sha256: 5439dc9c3f3ac84b5f637b31e0480b721d686da21927f6fc3f0e7b6944e53012 md5: 61272bde04aeccf919351b92fbb96a53 @@ -1947,6 +2439,19 @@ packages: purls: [] size: 214712 timestamp: 1771863307416 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda + sha256: 88a5ad3571948bde22957d08ab01328b8a7eb04fdee66268b3125cc322dbde8b + md5: ba5b655d827f263090ad2dc514810328 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1353008 + timestamp: 1770195199411 - conda: https://conda.anaconda.org/conda-forge/noarch/glymur-0.14.7-pyhd8ed1ab_0.conda sha256: 10eb80099319848e0bc6d9c43d55634e856958e1c7a104612190bf457bb07705 md5: 51cffc356cd6bdb4dce836c93c296f06 @@ -1964,19 +2469,107 @@ packages: - pkg:pypi/glymur?source=hash-mapping size: 2732463 timestamp: 1770246265597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c + md5: c94a5994ef49749880a8139cf9afcbe1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] + size: 460055 + timestamp: 1718980856608 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py312hcaba1f9_1.conda + sha256: 6fbdd686d04a0d8c48efe92795137d3bba55a4325acd7931978fd8ea5e24684d + md5: fedbe80d864debab03541e1b447fc12a + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 253171 + timestamp: 1773245116314 +- pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl + name: google-auth + version: 2.49.1 + sha256: 195ebe3dca18eddd1b3db5edc5189b76c13e96f29e73043b923ebcf3f1a860f7 + requires_dist: + - pyasn1-modules>=0.2.1 + - cryptography>=38.0.3 + - cryptography>=38.0.3 ; extra == 'cryptography' + - aiohttp>=3.6.2,<4.0.0 ; extra == 'aiohttp' + - requests>=2.20.0,<3.0.0 ; extra == 'aiohttp' + - pyopenssl ; extra == 'enterprise-cert' + - pyopenssl>=20.0.0 ; extra == 'pyopenssl' + - pyjwt>=2.0 ; extra == 'pyjwt' + - pyu2f>=0.1.5 ; extra == 'reauth' + - requests>=2.20.0,<3.0.0 ; extra == 'requests' + - grpcio ; extra == 'testing' + - flask ; extra == 'testing' + - freezegun ; extra == 'testing' + - pyjwt>=2.0 ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-localserver ; extra == 'testing' + - pyopenssl>=20.0.0 ; extra == 'testing' + - pyu2f>=0.1.5 ; extra == 'testing' + - responses ; extra == 'testing' + - urllib3 ; extra == 'testing' + - packaging ; extra == 'testing' + - aiohttp>=3.6.2,<4.0.0 ; extra == 'testing' + - requests>=2.20.0,<3.0.0 ; extra == 'testing' + - aioresponses ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - pyopenssl<24.3.0 ; extra == 'testing' + - aiohttp<3.10.0 ; extra == 'testing' + - urllib3 ; extra == 'urllib3' + - packaging ; extra == 'urllib3' + - rsa>=3.1.4,<5 ; extra == 'rsa' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl name: google-crc32c version: 1.8.0 sha256: 14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b3/b7/bbaa556e9ff0580f408c64ccf4db0c1414eec79e7151d33a10bc209ffb6d/googleapis_common_protos-1.59.1-py2.py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl name: googleapis-common-protos - version: 1.59.1 - sha256: 0cbedb6fb68f1c07e18eb4c48256320777707e7d0c55063ae56c15db3224a61e + version: 1.56.1 + sha256: ddcd955b5bb6589368f659fa475373faa1ed7d09cde5ba25e88513d87007e174 requires_dist: - - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0 - - grpcio>=1.44.0,<2.0.0.dev0 ; extra == 'grpc' - requires_python: '>=3.7' + - protobuf>=3.15.0 + - grpcio>=1.0.0 ; extra == 'grpc' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl + name: graphene + version: 3.4.3 + sha256: 820db6289754c181007a150db1f7fff544b94142b556d12e3ebc777a7bf36c71 + requires_dist: + - graphql-core>=3.1,<3.3 + - graphql-relay>=3.1,<3.3 + - python-dateutil>=2.7.0,<3 + - typing-extensions>=4.7.1,<5 + - ruff==0.5.0 ; extra == 'dev' + - types-python-dateutil>=2.8.1,<3 ; extra == 'dev' + - mypy>=1.10,<2 ; extra == 'dev' + - pytest>=8,<9 ; extra == 'dev' + - pytest-benchmark>=4,<5 ; extra == 'dev' + - pytest-cov>=5,<6 ; extra == 'dev' + - pytest-mock>=3,<4 ; extra == 'dev' + - pytest-asyncio>=0.16,<2 ; extra == 'dev' + - coveralls>=3.3,<5 ; extra == 'dev' + - pytest>=8,<9 ; extra == 'test' + - pytest-benchmark>=4,<5 ; extra == 'test' + - pytest-cov>=5,<6 ; extra == 'test' + - pytest-mock>=3,<4 ; extra == 'test' + - pytest-asyncio>=0.16,<2 ; extra == 'test' + - coveralls>=3.3,<5 ; extra == 'test' - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c md5: 2cd94587f3a401ae05e03a6caf09539d @@ -1989,6 +2582,21 @@ packages: purls: [] size: 99596 timestamp: 1755102025473 +- pypi: https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl + name: graphql-core + version: 3.2.8 + sha256: cbee07bee1b3ed5e531723685369039f32ff815ef60166686e0162f540f1520c + requires_dist: + - typing-extensions>=4.7,<5 ; python_full_version < '3.10' + requires_python: '>=3.7,<4' +- pypi: https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl + name: graphql-relay + version: 3.2.0 + sha256: c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5 + requires_dist: + - graphql-core>=3.2,<3.3 + - typing-extensions>=4.1,<5 ; python_full_version < '3.8' + requires_python: '>=3.6,<4' - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: greenlet version: 3.3.2 @@ -2058,11 +2666,47 @@ packages: purls: [] size: 2059388 timestamp: 1766699555877 +- pypi: https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl + name: gunicorn + version: 25.3.0 + sha256: cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 + requires_dist: + - packaging + - gevent>=24.10.1 ; extra == 'gevent' + - eventlet>=0.40.3 ; extra == 'eventlet' + - tornado>=6.5.0 ; extra == 'tornado' + - setproctitle ; extra == 'setproctitle' + - h2>=4.1.0 ; extra == 'http2' + - gunicorn-h1c>=0.6.3 ; extra == 'fast' + - gevent>=24.10.1 ; extra == 'testing' + - eventlet>=0.40.3 ; extra == 'testing' + - h2>=4.1.0 ; extra == 'testing' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - uvloop>=0.19.0 ; extra == 'testing' + - httpx[http2] ; extra == 'testing' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl name: h11 version: 0.16.0 sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 95967 + timestamp: 1756364871835 - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl name: h5netcdf version: 1.8.1 @@ -2169,6 +2813,17 @@ packages: requires_dist: - pytest ; extra == 'tests' requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 30731 + timestamp: 1737618390337 - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl name: httpcore version: 1.0.9 @@ -2204,38 +2859,55 @@ packages: - socksio==1.* ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/a9/ae/8a3a16ea4d202cb641b51d2681bdd3d482c1c592d7570b3fa264730829ce/huggingface_hub-1.8.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/1a/34/fae9ac8f1c3a552fd3f7ff652b94c78d219dedc5fce0c0a4232457760a00/huey-2.6.0-py3-none-any.whl + name: huey + version: 2.6.0 + sha256: 1b9df9d370b49c6d5721ba8a01ac9a787cf86b3bdc584e4679de27b920395c3f + requires_dist: + - redis>=3.0.0 ; extra == 'backends' +- pypi: https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl name: huggingface-hub - version: 1.8.0 - sha256: d3eb5047bd4e33c987429de6020d4810d38a5bef95b3b40df9b17346b7f353f2 + version: 0.36.2 + sha256: 48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270 requires_dist: - - filelock>=3.10.0 + - filelock - fsspec>=2023.5.0 - - hf-xet>=1.4.2,<2.0.0 ; platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' - - httpx>=0.23.0,<1 + - hf-xet>=1.1.3,<2.0.0 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' - packaging>=20.9 - pyyaml>=5.1 + - requests - tqdm>=4.42.1 - - typer - - typing-extensions>=4.1.0 + - typing-extensions>=3.7.4.3 + - inquirerpy==0.3.4 ; extra == 'cli' + - aiohttp ; extra == 'inference' - authlib>=1.3.2 ; extra == 'oauth' - fastapi ; extra == 'oauth' - httpx ; extra == 'oauth' - itsdangerous ; extra == 'oauth' - torch ; extra == 'torch' - safetensors[torch] ; extra == 'torch' + - hf-transfer>=0.1.4 ; extra == 'hf-transfer' - toml ; extra == 'fastai' - fastai>=2.4 ; extra == 'fastai' - fastcore>=1.3.27 ; extra == 'fastai' - - hf-xet>=1.4.2,<2.0.0 ; extra == 'hf-xet' + - tensorflow ; extra == 'tensorflow' + - pydot ; extra == 'tensorflow' + - graphviz ; extra == 'tensorflow' + - tensorflow ; extra == 'tensorflow-testing' + - keras<3.0 ; extra == 'tensorflow-testing' + - hf-xet>=1.1.2,<2.0.0 ; extra == 'hf-xet' - mcp>=1.8.0 ; extra == 'mcp' + - typer ; extra == 'mcp' + - aiohttp ; extra == 'mcp' + - inquirerpy==0.3.4 ; extra == 'testing' + - aiohttp ; extra == 'testing' - authlib>=1.3.2 ; extra == 'testing' - fastapi ; extra == 'testing' - httpx ; extra == 'testing' - itsdangerous ; extra == 'testing' - jedi ; extra == 'testing' - jinja2 ; extra == 'testing' - - pytest>=8.4.2 ; extra == 'testing' + - pytest>=8.1.1,<8.2.2 ; extra == 'testing' - pytest-cov ; extra == 'testing' - pytest-env ; extra == 'testing' - pytest-xdist ; extra == 'testing' @@ -2246,26 +2918,30 @@ packages: - urllib3<2.0 ; extra == 'testing' - soundfile ; extra == 'testing' - pillow ; extra == 'testing' + - gradio>=4.0.0 ; extra == 'testing' - numpy ; extra == 'testing' - - duckdb ; extra == 'testing' - fastapi ; extra == 'testing' - typing-extensions>=4.8.0 ; extra == 'typing' - types-pyyaml ; extra == 'typing' + - types-requests ; extra == 'typing' - types-simplejson ; extra == 'typing' - types-toml ; extra == 'typing' - types-tqdm ; extra == 'typing' - types-urllib3 ; extra == 'typing' - ruff>=0.9.0 ; extra == 'quality' - - mypy==1.15.0 ; extra == 'quality' + - mypy>=1.14.1,<1.15.0 ; python_full_version == '3.8.*' and extra == 'quality' + - mypy==1.15.0 ; python_full_version >= '3.9' and extra == 'quality' - libcst>=1.4.0 ; extra == 'quality' - ty ; extra == 'quality' + - inquirerpy==0.3.4 ; extra == 'all' + - aiohttp ; extra == 'all' - authlib>=1.3.2 ; extra == 'all' - fastapi ; extra == 'all' - httpx ; extra == 'all' - itsdangerous ; extra == 'all' - jedi ; extra == 'all' - jinja2 ; extra == 'all' - - pytest>=8.4.2 ; extra == 'all' + - pytest>=8.1.1,<8.2.2 ; extra == 'all' - pytest-cov ; extra == 'all' - pytest-env ; extra == 'all' - pytest-xdist ; extra == 'all' @@ -2276,26 +2952,30 @@ packages: - urllib3<2.0 ; extra == 'all' - soundfile ; extra == 'all' - pillow ; extra == 'all' + - gradio>=4.0.0 ; extra == 'all' - numpy ; extra == 'all' - - duckdb ; extra == 'all' - fastapi ; extra == 'all' - ruff>=0.9.0 ; extra == 'all' - - mypy==1.15.0 ; extra == 'all' + - mypy>=1.14.1,<1.15.0 ; python_full_version == '3.8.*' and extra == 'all' + - mypy==1.15.0 ; python_full_version >= '3.9' and extra == 'all' - libcst>=1.4.0 ; extra == 'all' - ty ; extra == 'all' - typing-extensions>=4.8.0 ; extra == 'all' - types-pyyaml ; extra == 'all' + - types-requests ; extra == 'all' - types-simplejson ; extra == 'all' - types-toml ; extra == 'all' - types-tqdm ; extra == 'all' - types-urllib3 ; extra == 'all' + - inquirerpy==0.3.4 ; extra == 'dev' + - aiohttp ; extra == 'dev' - authlib>=1.3.2 ; extra == 'dev' - fastapi ; extra == 'dev' - httpx ; extra == 'dev' - itsdangerous ; extra == 'dev' - jedi ; extra == 'dev' - jinja2 ; extra == 'dev' - - pytest>=8.4.2 ; extra == 'dev' + - pytest>=8.1.1,<8.2.2 ; extra == 'dev' - pytest-cov ; extra == 'dev' - pytest-env ; extra == 'dev' - pytest-xdist ; extra == 'dev' @@ -2306,20 +2986,33 @@ packages: - urllib3<2.0 ; extra == 'dev' - soundfile ; extra == 'dev' - pillow ; extra == 'dev' + - gradio>=4.0.0 ; extra == 'dev' - numpy ; extra == 'dev' - - duckdb ; extra == 'dev' - fastapi ; extra == 'dev' - ruff>=0.9.0 ; extra == 'dev' - - mypy==1.15.0 ; extra == 'dev' + - mypy>=1.14.1,<1.15.0 ; python_full_version == '3.8.*' and extra == 'dev' + - mypy==1.15.0 ; python_full_version >= '3.9' and extra == 'dev' - libcst>=1.4.0 ; extra == 'dev' - ty ; extra == 'dev' - typing-extensions>=4.8.0 ; extra == 'dev' - types-pyyaml ; extra == 'dev' + - types-requests ; extra == 'dev' - types-simplejson ; extra == 'dev' - types-toml ; extra == 'dev' - types-tqdm ; extra == 'dev' - types-urllib3 ; extra == 'dev' - requires_python: '>=3.9.0' + requires_python: '>=3.8.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 17397 + timestamp: 1737618427549 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a md5: c80d8a3b84358cb967fa81e7075fbc8a @@ -2339,16 +3032,17 @@ packages: requires_dist: - ukkonen ; extra == 'license' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - name: idna - version: '3.11' - sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 + md5: 53abe63df7e10a6ba605dc5f9f961d36 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 50721 + timestamp: 1760286526795 - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.37.0-pyhfb79c49_0.conda sha256: 8ef69fa00c68fad34a3b7b260ea774fda9bd9274fd706d3baffb9519fd0063fe md5: b5577bc2212219566578fd5af9993af6 @@ -2401,6 +3095,32 @@ packages: version: 2.3.0 sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + sha256: bc231d69eb6663db0e09738fb916c5e5507147cf1ac60f364f964004e0b29bab + md5: 10909406c1b0e4b57f9f4f0eb0999af8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 1013714 + timestamp: 1774422680665 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda + sha256: 286679d4c175e8db2d047be766d1629f1ea5828bff9fe7e6aac2e6f0fad2b427 + md5: 7ae2034a0e2e24eb07468f1a50cdf0bb + depends: + - __glibc >=2.17,<3.0.a0 + - intel-gmmlib >=22.8.1,<23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libva >=2.22.0,<3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 8424610 + timestamp: 1757591682198 - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda sha256: b77ed58eb235e5ad80e742b03caeed4bbc2a2ef064cb9a2deee3b75dfae91b2a md5: 8b267f517b81c13594ed68d646fd5dcb @@ -2462,6 +3182,11 @@ packages: - pkg:pypi/ipython-pygments-lexers?source=hash-mapping size: 13993 timestamp: 1737123723464 +- pypi: https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl + name: itsdangerous + version: 2.2.0 + sha256: c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 @@ -2473,19 +3198,29 @@ packages: - pkg:pypi/jedi?source=hash-mapping size: 843646 timestamp: 1733300981994 -- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - name: jinja2 - version: 3.1.6 - sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - requires_dist: - - markupsafe>=2.0 - - babel>=2.7 ; extra == 'i18n' - requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d + depends: + - markupsafe >=2.0 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=compressed-mapping + size: 120685 + timestamp: 1764517220861 - pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl name: jmespath version: 1.1.0 sha256: a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl + name: joblib + version: 1.4.2 + sha256: 06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6 + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/cb/c1/fb2c66d92b5d0167c57042b784456ee3f8531a997726c88cf6f012a22da6/json_merge_patch-0.3.0-py3-none-any.whl name: json-merge-patch version: 0.3.0 @@ -2661,6 +3396,33 @@ packages: purls: [] size: 261513 timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda + sha256: 5384380213daffbd7fe4d568b2cf2ab9f2476f7a5f228a3d70280e98333eaf0f + md5: 4323e07abff8366503b97a0f17924b76 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 858387 + timestamp: 1772045965844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda + sha256: dcd1429a1782864c452057a6c5bc1860f2b637dc20a2b7e6eacd57395bbceff8 + md5: 83b160d4da3e1e847bf044997621ed63 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libabseil-static =20250512.1=cxx17* + - abseil-cpp =20250512.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1310612 + timestamp: 1750194198254 - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda sha256: 822e4ae421a7e9c04e841323526321185f6659222325e1a9aedec811c686e688 md5: 86f7414544ae606282352fa1e116b41f @@ -2673,24 +3435,44 @@ packages: purls: [] size: 36544 timestamp: 1769221884824 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - build_number: 6 - sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 - md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + sha256: 035eb8b54e03e72e42ef707420f9979c7427776ea99e0f1e3c969f92eb573f19 + md5: d3be7b2870bf7aff45b12ea53165babd + depends: + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - fribidi >=1.0.10,<2.0a0 + - libiconv >=1.18,<2.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=11.0.1 + license: ISC + purls: [] + size: 152179 + timestamp: 1749328931930 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda + build_number: 20 + sha256: 9e5f27fca79223a5d38ccdf4c468e798c3684ba01bdb6b4b44e61f2103a298eb + md5: 8bf521f6007b0b0eb91515a1165b5d85 depends: - - libopenblas >=0.3.32,<0.3.33.0a0 - - libopenblas >=0.3.32,<1.0a0 + - mkl >=2023.2.0,<2024.0a0 constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas - - mkl <2026 + - libcblas 3.9.0 20_linux64_mkl + - blas * mkl + - liblapack 3.9.0 20_linux64_mkl + - liblapacke 3.9.0 20_linux64_mkl + - mkl <2025 + track_features: + - blas_mkl + - blas_backport_2 license: BSD-3-Clause license_family: BSD purls: [] - size: 18621 - timestamp: 1774503034895 + size: 14912 + timestamp: 1700568380170 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e md5: 72c8fd1af66bd67bf580645b426513ed @@ -2737,21 +3519,24 @@ packages: purls: [] size: 124432 timestamp: 1774333989027 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - build_number: 6 - sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 - md5: 36ae340a916635b97ac8a0655ace2a35 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda + build_number: 20 + sha256: 841b4d44e20e5207f4a74ca98176629ead5ba590384ed6b0fe3c8600248c9fef + md5: 7a2972758a03adc92d856072c71c9170 depends: - - libblas 3.11.0 6_h4a7cf45_openblas + - libblas 3.9.0 20_linux64_mkl constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas + - blas * mkl + - liblapack 3.9.0 20_linux64_mkl + - liblapacke 3.9.0 20_linux64_mkl + - mkl <2025 + track_features: + - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 18622 - timestamp: 1774503050205 + size: 14394 + timestamp: 1700568407268 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda sha256: de512ce246faec2d4f7766774769921a85b5aa053a74abd2f8c97ad50b393aac md5: 24a2802074d26aecfdbc9b3f1d8168d1 @@ -3046,20 +3831,24 @@ packages: purls: [] size: 75504 timestamp: 1731330988898 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 - md5: 239c5e9546c38a1e884d69effcf4c882 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda + sha256: 2cf160794dda62cf93539adf16d26cfd31092829f2a2757dbdd562984c1b110a + md5: 0ed3aa3e3e6bc85050d38881673a692f depends: - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 603262 - timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f - md5: 915f5995e94f60e9a4826e0b0920ee88 - depends: + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2449916 + timestamp: 1765103845133 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: LGPL-2.1-only @@ -3078,21 +3867,24 @@ packages: purls: [] size: 633710 timestamp: 1762094827865 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda - build_number: 6 - sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d - md5: 881d801569b201c2e753f03c84b85e15 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda + build_number: 20 + sha256: 21b4324dd65815f6b5a83c15f0b9a201434d0aa55eeecc37efce7ee70bbbf482 + md5: 4db0cd03efcdab535f6f066aca4cddbb depends: - - libblas 3.11.0 6_h4a7cf45_openblas + - libblas 3.9.0 20_linux64_mkl constrains: - - blas 2.306 openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas + - libcblas 3.9.0 20_linux64_mkl + - blas * mkl + - liblapacke 3.9.0 20_linux64_mkl + - mkl <2025 + track_features: + - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 18624 - timestamp: 1774503065378 + size: 14437 + timestamp: 1700568420776 - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f md5: 1a2708a460884d6861425b7f9a7bef99 @@ -3186,21 +3978,6 @@ packages: purls: [] size: 218500 timestamp: 1745825989535 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 - md5: 89d61bc91d3f39fda0ca10fcd3c68594 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.32,<0.3.33.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 5928890 - timestamp: 1774471724897 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda sha256: 215086c108d80349e96051ad14131b751d17af3ed2cb5a34edd62fa89bfe8ead md5: 7df50d44d4a14d6c31a2c54f2cd92157 @@ -3221,6 +3998,172 @@ packages: purls: [] size: 15460 timestamp: 1731331007610 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.3.0-hb617929_0.conda + sha256: 6e91b477febd21e760d7ee96f7b8c3701c8c7d658d1eb3c06491c853eda31f27 + md5: 1aebc72ec8205968171e987048998402 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2021.13.0 + purls: [] + size: 6258972 + timestamp: 1757093862200 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.3.0-hed573e4_0.conda + sha256: eda5fdc479cd44ce7e0357b72ab6a53c58aca62a89e7f8edbb2e0e9bbde7a4b4 + md5: 2345c54506eba868f9ce9cd0415fea55 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - tbb >=2021.13.0 + purls: [] + size: 115344 + timestamp: 1757093887707 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.3.0-hed573e4_0.conda + sha256: 9d805fa00bbf412a46b5ad3625b9095392258a9119704d4ef339468afd257f5a + md5: e75c7b9e354ced9b97ea51b8375ad9c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - tbb >=2021.13.0 + purls: [] + size: 250623 + timestamp: 1757093901637 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.3.0-hd41364c_0.conda + sha256: 7f3b00c54e19e3799ae4c3efbd165d936be055d40024dda8e2df268d4f82bcc7 + md5: c3c9a019cbbb67766b8c94464f3682d2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + purls: [] + size: 212287 + timestamp: 1757093916374 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.3.0-hb617929_0.conda + sha256: 1463ea90243b62d3eac13ee1c461dd6f06a51c58bbf0716a5fec8de3ea735546 + md5: 0cb11f9375c0cb3d78998665a25b88ed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2021.13.0 + purls: [] + size: 12650560 + timestamp: 1757093930794 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.3.0-hb617929_0.conda + sha256: 367f2864e21aeb6c3f091c79f0378ae06ae290bd80d82b24c256284e693ceb2d + md5: 8818c223099ebe371eb08f9c948c685d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - ocl-icd >=2.3.3,<3.0a0 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2021.13.0 + purls: [] + size: 10891474 + timestamp: 1757093975205 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.3.0-hb617929_0.conda + sha256: 8c635b8f0593ad287674927e30ced3f77b62e67b9d3706fd00cb749f2572ada8 + md5: 3e467f255724c192cb246793ba48a321 + depends: + - __glibc >=2.17,<3.0.a0 + - level-zero >=1.24.2,<2.0a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2021.13.0 + purls: [] + size: 1543417 + timestamp: 1757094015983 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.3.0-hd41364c_0.conda + sha256: 3dcdece16dca740f839160154d9c35e4e8c35c7a44750e32987a7e7c8cbad2eb + md5: 2fbd913d8f4f5250a125256618bd30c4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + purls: [] + size: 207468 + timestamp: 1757094031996 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.3.0-h1862bb8_0.conda + sha256: 4f1a916e16f6a67ea88c4aaadb876ba6066d752928bc4eab139ef9e91e3d1006 + md5: b637d9dfa5c2a93aabaf6dd6a661c35e + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + purls: [] + size: 1744923 + timestamp: 1757094046471 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.3.0-h1862bb8_0.conda + sha256: d8d2b08fb7b3428123909c582c2173b7c63f30342cfe6ca43a3c8dc372eca7c9 + md5: 60f9ae637cd085f9bada023b9900a6f4 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + purls: [] + size: 746334 + timestamp: 1757094063348 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.3.0-hecca717_0.conda + sha256: 235b9ad1ea6c3e541732c88c07f94076edddbb6f850a10530dbb332a252831a7 + md5: bbca2712681bc23ba9070c21eb6bc5db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + purls: [] + size: 1259787 + timestamp: 1757094077972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.3.0-h0767aad_0.conda + sha256: 67dacffbb00f88ac344376fcedd0c9cc630f364f3fa235af16cb22121634cf62 + md5: 414c2986d3c28d080a810234ccfdf4d2 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + purls: [] + size: 1324560 + timestamp: 1757094093832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.3.0-hecca717_0.conda + sha256: db2dc1db5e1611f5866845bab2c39dbebfbd86905ab47da29dd121f0c0836a45 + md5: 145a8f5a7b3b8d2e74bd4057872ced44 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2025.3.0 hb617929_0 + - libstdcxx >=14 + purls: [] + size: 496517 + timestamp: 1757094111336 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd md5: 2446ac1fe030c2aa6141386c1f5a6aed @@ -3268,6 +4211,41 @@ packages: purls: [] size: 2865686 timestamp: 1772136328077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_4.conda + sha256: 0ef142ac31e6fd59b4af89ac800acb6deb3fbd9cc4ccf070c03cc2c784dc7296 + md5: 07479fc04ba3ddd5d9f760ef1635cfa7 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4372578 + timestamp: 1766316228461 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.1-h4c96295_0.conda + sha256: dc4698b32b2ca3fc0715d7d307476a71622bee0f2f708f9dadec8af21e1047c8 + md5: a4b87f1fbcdbb8ad32e99c2611120f2e + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.5,<3.0a0 + - harfbuzz >=13.1.1 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + purls: [] + size: 3474421 + timestamp: 1773814909137 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda sha256: 57cb5f92110324c04498b96563211a1bca6a74b2918b1e8df578bfed03cc32e4 md5: 067590f061c9f6ea7e61e3b2112ed6b3 @@ -3373,6 +4351,52 @@ packages: purls: [] size: 435273 timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda + sha256: 1a1e367c04d66030aa93b4d33905f7f6fbb59cfc292e816fe3e9c1e8b3f4d1e2 + md5: 2c2270f93d6f9073cbf72d821dfc7d72 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 145087 + timestamp: 1773797108513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a + md5: e179a69edd30d75c0144d7a380b88f28 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 75995 + timestamp: 1757032240102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + sha256: 3d17b7aa90610afc65356e9e6149aeac0b2df19deda73a51f0a09cf04fd89286 + md5: 56f65185b520e016d29d01657ac02c0d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 154203 + timestamp: 1770566529700 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + sha256: 89c84f5b26028a9d0f5c4014330703e7dff73ba0c98f90103e9cef6b43a5323c + md5: d17e3fb595a9f24fa9e149239a33475d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libudev1 >=257.4 + license: LGPL-2.1-or-later + purls: [] + size: 89551 + timestamp: 1748856210075 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -3384,6 +4408,27 @@ packages: purls: [] size: 40311 timestamp: 1766271528534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + sha256: 255c7d00b54e26f19fad9340db080716bced1d8539606e2b8396c57abd40007c + md5: 25813fe38b3e541fc40007592f12bae5 + depends: + - __glibc >=2.17,<3.0.a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglx >=1.7.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - wayland >=1.24.0,<2.0a0 + - wayland-protocols + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 221308 + timestamp: 1765652453244 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5 md5: b4ecbefe517ed0157c37f8182768271c @@ -3399,6 +4444,33 @@ packages: purls: [] size: 285894 timestamp: 1753879378005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda + sha256: bf0010d93f5b154c59bd9d3cc32168698c1d24f2904729f4693917cce5b27a9f + md5: a41a299c157cc6d0eff05e5fc298cc45 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - intel-media-driver >=25.3.3,<25.4.0a0 + - libva >=2.22.0,<3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 287944 + timestamp: 1757278954789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda + sha256: 8e1119977f235b488ab32d540c018d3fd1eccefc3dd3859921a0ff555d8c10d2 + md5: 10f5008f1c89a40b09711b5a9cdbd229 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1070048 + timestamp: 1762010217363 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b md5: 31ad065eda3c2d88f8215b1289df9c89 @@ -3526,6 +4598,18 @@ packages: purls: [] size: 63629 timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-15.0.7-h0cdce71_0.conda + sha256: 7c67d383a8b1f3e7bf9e046e785325c481f6868194edcfb9d78d261da4ad65d4 + md5: 589c9a3575a050b583241c3d688ad9aa + depends: + - libzlib >=1.2.13,<2.0.0a0 + constrains: + - openmp 15.0.7|15.0.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 3268766 + timestamp: 1673584331056 - pypi: https://files.pythonhosted.org/packages/aa/85/4890a7c14b4fa54400945cb52ac3cd88545bbdb973c440f98ca41591cdc5/llvmlite-0.46.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: llvmlite version: 0.46.0 @@ -3706,12 +4790,197 @@ packages: version: 0.1.2 sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-ha770c72_50498.conda + sha256: cafca5b96c1431757909fa11942cb57056870d3fede2eb6bbc138f5ed86679a4 + md5: 0ef2680575d5b0d9082c287c7eef11f8 + depends: + - _openmp_mutex * *_kmp_* + - _openmp_mutex >=4.5 + - tbb 2021.* + license: LicenseRef-ProprietaryIntel + license_family: Proprietary + purls: [] + size: 163765767 + timestamp: 1757090808863 +- pypi: https://files.pythonhosted.org/packages/c2/18/ca682e740b90d5a930981cd375f878a453a713741b5b7d9c0d9516552b5e/mlflow-3.10.1-py3-none-any.whl + name: mlflow + version: 3.10.1 + sha256: 17bfbd76d4071498d6199c3fc53945e5f50997d14e3e2a6bfd4dc3cb8957f209 + requires_dist: + - mlflow-skinny==3.10.1 + - mlflow-tracing==3.10.1 + - flask-cors<7 + - flask<4 + - alembic!=1.10.0,<2 + - cryptography>=43.0.0,<47 + - docker>=4.0.0,<8 + - graphene<4 + - gunicorn<26 ; sys_platform != 'win32' + - huey>=2.5.4,<3 + - matplotlib<4 + - numpy<3 + - pandas<3 + - pyarrow>=4.0.0,<24 + - scikit-learn<2 + - scipy<2 + - skops<1 + - sqlalchemy>=1.4.0,<3 + - waitress<4 ; sys_platform == 'win32' + - pyarrow ; extra == 'extras' + - requests-auth-aws-sigv4 ; extra == 'extras' + - boto3 ; extra == 'extras' + - botocore ; extra == 'extras' + - google-cloud-storage>=1.30.0 ; extra == 'extras' + - azureml-core>=1.2.0 ; extra == 'extras' + - pysftp ; extra == 'extras' + - kubernetes ; extra == 'extras' + - prometheus-flask-exporter ; extra == 'extras' + - pymysql ; extra == 'db' + - psycopg2-binary ; extra == 'db' + - pymssql ; extra == 'db' + - azure-storage-file-datalake>12 ; extra == 'databricks' + - google-cloud-storage>=1.30.0 ; extra == 'databricks' + - boto3>1 ; extra == 'databricks' + - botocore ; extra == 'databricks' + - databricks-agents>=1.2.0,<2.0 ; extra == 'databricks' + - mlserver>=1.2.0,!=1.3.1,<2.0.0 ; extra == 'mlserver' + - mlserver-mlflow>=1.2.0,!=1.3.1,<2.0.0 ; extra == 'mlserver' + - aiohttp<4 ; extra == 'gateway' + - boto3>=1.28.56,<2 ; extra == 'gateway' + - fastapi<1 ; extra == 'gateway' + - slowapi>=0.1.9,<1 ; extra == 'gateway' + - tiktoken<1 ; extra == 'gateway' + - uvicorn[standard]<1 ; extra == 'gateway' + - watchfiles<2 ; extra == 'gateway' + - aiohttp<4 ; extra == 'genai' + - boto3>=1.28.56,<2 ; extra == 'genai' + - fastapi<1 ; extra == 'genai' + - gepa>=0.0.26,<1 ; extra == 'genai' + - litellm>=1.0.0,<2 ; extra == 'genai' + - slowapi>=0.1.9,<1 ; extra == 'genai' + - tiktoken<1 ; extra == 'genai' + - uvicorn[standard]<1 ; extra == 'genai' + - watchfiles<2 ; extra == 'genai' + - fastmcp>=2.0.0,<3 ; extra == 'mcp' + - click!=8.3.0 ; extra == 'mcp' + - mlflow-dbstore ; extra == 'sqlserver' + - aliyunstoreplugin ; extra == 'aliyun-oss' + - mlflow-jfrog-plugin ; extra == 'jfrog' + - langchain>=0.3.19,<=1.2.9 ; extra == 'langchain' + - flask-wtf<2 ; extra == 'auth' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4b/52/17460157271e70b0d8444d27f8ad730ef7d95fb82fac59dc19f11519b921/mlflow_skinny-3.10.1-py3-none-any.whl + name: mlflow-skinny + version: 3.10.1 + sha256: df1dd507d8ddadf53bfab2423c76cdcafc235cd1a46921a06d1a6b4dd04b023c + requires_dist: + - cachetools>=5.0.0,<8 + - click>=7.0,<9 + - cloudpickle<4 + - databricks-sdk>=0.20.0,<1 + - fastapi<1 + - gitpython>=3.1.9,<4 + - importlib-metadata>=3.7.0,!=4.7.0,<9 + - opentelemetry-api>=1.9.0,<3 + - opentelemetry-proto>=1.9.0,<3 + - opentelemetry-sdk>=1.9.0,<3 + - packaging<27 + - protobuf>=3.12.0,<7 + - pydantic>=2.0.0,<3 + - python-dotenv>=0.19.0,<2 + - pyyaml>=5.1,<7 + - requests>=2.17.3,<3 + - sqlparse>=0.4.0,<1 + - typing-extensions>=4.0.0,<5 + - uvicorn<1 + - pyarrow ; extra == 'extras' + - requests-auth-aws-sigv4 ; extra == 'extras' + - boto3 ; extra == 'extras' + - botocore ; extra == 'extras' + - google-cloud-storage>=1.30.0 ; extra == 'extras' + - azureml-core>=1.2.0 ; extra == 'extras' + - pysftp ; extra == 'extras' + - kubernetes ; extra == 'extras' + - prometheus-flask-exporter ; extra == 'extras' + - pymysql ; extra == 'db' + - psycopg2-binary ; extra == 'db' + - pymssql ; extra == 'db' + - azure-storage-file-datalake>12 ; extra == 'databricks' + - google-cloud-storage>=1.30.0 ; extra == 'databricks' + - boto3>1 ; extra == 'databricks' + - botocore ; extra == 'databricks' + - databricks-agents>=1.2.0,<2.0 ; extra == 'databricks' + - mlserver>=1.2.0,!=1.3.1,<2.0.0 ; extra == 'mlserver' + - mlserver-mlflow>=1.2.0,!=1.3.1,<2.0.0 ; extra == 'mlserver' + - aiohttp<4 ; extra == 'gateway' + - boto3>=1.28.56,<2 ; extra == 'gateway' + - fastapi<1 ; extra == 'gateway' + - slowapi>=0.1.9,<1 ; extra == 'gateway' + - tiktoken<1 ; extra == 'gateway' + - uvicorn[standard]<1 ; extra == 'gateway' + - watchfiles<2 ; extra == 'gateway' + - aiohttp<4 ; extra == 'genai' + - boto3>=1.28.56,<2 ; extra == 'genai' + - fastapi<1 ; extra == 'genai' + - gepa>=0.0.26,<1 ; extra == 'genai' + - litellm>=1.0.0,<2 ; extra == 'genai' + - slowapi>=0.1.9,<1 ; extra == 'genai' + - tiktoken<1 ; extra == 'genai' + - uvicorn[standard]<1 ; extra == 'genai' + - watchfiles<2 ; extra == 'genai' + - fastmcp>=2.0.0,<3 ; extra == 'mcp' + - click!=8.3.0 ; extra == 'mcp' + - mlflow-dbstore ; extra == 'sqlserver' + - aliyunstoreplugin ; extra == 'aliyun-oss' + - mlflow-jfrog-plugin ; extra == 'jfrog' + - langchain>=0.3.19,<=1.2.9 ; extra == 'langchain' + - flask-wtf<2 ; extra == 'auth' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b6/9a/7ac1db2ed7b5e21c50fadf925a53f0c77452a8a855ee4a119b084c2fa5d3/mlflow_tracing-3.10.1-py3-none-any.whl + name: mlflow-tracing + version: 3.10.1 + sha256: 649c722cc58d54f1f40559023a6bd6f3f08150c3ce3c3bb27972b3e795890f47 + requires_dist: + - cachetools>=5.0.0,<8 + - databricks-sdk>=0.20.0,<1 + - opentelemetry-api>=1.9.0,<3 + - opentelemetry-proto>=1.9.0,<3 + - opentelemetry-sdk>=1.9.0,<3 + - packaging<27 + - protobuf>=3.12.0,<7 + - pydantic>=2.0.0,<3 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ce/33/7ce3f09d91a0ca5db7cca67671d865b7c8310b8b59eff287a711919641f0/mongoquery-1.4.3-py3-none-any.whl name: mongoquery version: 1.4.3 sha256: 8be47635c5e361c9f363b7a901a2b86649687491b7aaca2d12601eff41cb6128 requires_dist: - six +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda + sha256: c1fdeebc9f8e4f51df265efca4ea20c7a13911193cc255db73cccb6e422ae486 + md5: 770d00bf57b5599c4544d61b61d8c6c6 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpfr >=4.2.2,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 100245 + timestamp: 1774472435333 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda + sha256: 8690f550a780f75d9c47f7ffc15f5ff1c149d36ac17208e50eda101ca16611b9 + md5: 85ce2ffa51ab21da5efa4a9edc5946aa + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 730422 + timestamp: 1773413915171 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 md5: c7f302fd11eeb0987a6a5e1f3aed6a21 @@ -3724,6 +4993,17 @@ packages: purls: [] size: 491140 timestamp: 1730581373280 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + sha256: 5bbf2f8179ec43d34d67ca8e4989d216c1bdb4b749fe6cb40e86ebf88c1b5300 + md5: 2e81b32b805f406d23ba61938a184081 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpmath?source=compressed-mapping + size: 464918 + timestamp: 1773662068273 - pypi: https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: msgpack version: 1.1.2 @@ -3768,21 +5048,28 @@ packages: - pkg:pypi/nest-asyncio?source=hash-mapping size: 11543 timestamp: 1733325673691 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 + md5: a2c1eeadae7a309daed9d62c96012a2b + depends: + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib-base >=3.8 + - pandas >=2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping + size: 1587439 + timestamp: 1765215107045 - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl name: nodeenv version: 1.10.0 sha256: 5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' -- conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b - md5: 9a66894dfd07c4510beb6b3f9672ccc0 - constrains: - - mkl <0.a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3843 - timestamp: 1582593857545 - conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda sha256: e3664264bd936c357523b55c71ed5a30263c6ba278d726a75b1eb112e6fb0b64 md5: e235d5566c9cc8970eb2798dd4ecf62f @@ -3841,15 +5128,16 @@ packages: - importlib-metadata ; extra == 'test-extras' - crc32c ; extra == 'test-extras' requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-py312h88efc94_101.conda - sha256: 2978bc3fdeab4eb24ed21a0319f2a817e417935f5afdbc54550b6a187b8e4ab2 - md5: f31fa7178c477ce82dfb47273582de15 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.10.1-mkl_py312h791fadb_2.conda + sha256: e36e16a29da93bf1f18d58a49f0319b3ebed91bc994b2e8ee6d4cb59218eea61 + md5: e8071b3568e9e7930936be6859a7d501 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - nomkl - - numpy >=1.23,<3 + - libblas * *mkl + - libgcc >=13 + - libstdcxx >=13 + - mkl >=2023.2.0,<2024.0a0 + - numpy >=1.21,<3 - numpy >=1.23.0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -3857,28 +5145,27 @@ packages: license_family: MIT purls: - pkg:pypi/numexpr?source=hash-mapping - size: 213828 - timestamp: 1762595020114 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda - sha256: 1aab7ba963affa572956b1bd8d239df52a9c7bc799c560f98bc658ab70224e10 - md5: 5930ee8a175a242b4f001b1e9e72024f + size: 191812 + timestamp: 1728902684300 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 + md5: d8285bea2a350f63fab23bf460221f3f depends: - - python - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 8757569 - timestamp: 1773839284329 + size: 7484186 + timestamp: 1707225809722 - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda sha256: 2254dae821b286fb57c61895f2b40e3571a070910fdab79a948ff703e1ea807b md5: 56f8947aa9d5cf37b0b3d43b83f34192 @@ -3903,6 +5190,18 @@ packages: purls: [] size: 55754 timestamp: 1773844383536 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + sha256: 3f231f2747a37a58471c82a9a8a80d92b7fece9f3fce10901a5ac888ce00b747 + md5: b28cf020fd2dead0ca6d113608683842 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 731471 + timestamp: 1739400677213 - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d md5: 11b3379b191f63139e29c0d19dee24cd @@ -3997,6 +5296,13 @@ packages: - opentelemetry-sdk~=1.12 - prometheus-client>=0.5.0,<1.0.0 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl + name: opentelemetry-proto + version: 1.40.0 + sha256: 266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f + requires_dist: + - protobuf>=5.0,<7.0 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl name: opentelemetry-sdk version: 1.16.0 @@ -4029,96 +5335,97 @@ packages: - pkg:pypi/packaging?source=hash-mapping size: 72010 timestamp: 1769093650580 -- pypi: https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: pandas - version: 3.0.2 - sha256: ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f + version: 2.3.3 + sha256: b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89 requires_dist: - - numpy>=1.26.0 ; python_full_version < '3.14' - - numpy>=2.3.3 ; python_full_version >= '3.14' + - numpy>=1.22.4 ; python_full_version < '3.11' + - numpy>=1.23.2 ; python_full_version == '3.11.*' + - numpy>=1.26.0 ; python_full_version >= '3.12' - python-dateutil>=2.8.2 - - tzdata ; sys_platform == 'win32' - - tzdata ; sys_platform == 'emscripten' - - hypothesis>=6.116.0 ; extra == 'test' - - pytest>=8.3.4 ; extra == 'test' - - pytest-xdist>=3.6.1 ; extra == 'test' - - pyarrow>=13.0.0 ; extra == 'pyarrow' - - bottleneck>=1.4.2 ; extra == 'performance' - - numba>=0.60.0 ; extra == 'performance' - - numexpr>=2.10.2 ; extra == 'performance' - - scipy>=1.14.1 ; extra == 'computation' - - xarray>=2024.10.0 ; extra == 'computation' - - fsspec>=2024.10.0 ; extra == 'fss' - - s3fs>=2024.10.0 ; extra == 'aws' - - gcsfs>=2024.10.0 ; extra == 'gcp' + - pytz>=2020.1 + - tzdata>=2022.7 + - hypothesis>=6.46.1 ; extra == 'test' + - pytest>=7.3.2 ; extra == 'test' + - pytest-xdist>=2.2.0 ; extra == 'test' + - pyarrow>=10.0.1 ; extra == 'pyarrow' + - bottleneck>=1.3.6 ; extra == 'performance' + - numba>=0.56.4 ; extra == 'performance' + - numexpr>=2.8.4 ; extra == 'performance' + - scipy>=1.10.0 ; extra == 'computation' + - xarray>=2022.12.0 ; extra == 'computation' + - fsspec>=2022.11.0 ; extra == 'fss' + - s3fs>=2022.11.0 ; extra == 'aws' + - gcsfs>=2022.11.0 ; extra == 'gcp' + - pandas-gbq>=0.19.0 ; extra == 'gcp' - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.5 ; extra == 'excel' - - python-calamine>=0.3.0 ; extra == 'excel' + - openpyxl>=3.1.0 ; extra == 'excel' + - python-calamine>=0.1.7 ; extra == 'excel' - pyxlsb>=1.0.10 ; extra == 'excel' - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.2.0 ; extra == 'excel' - - pyarrow>=13.0.0 ; extra == 'parquet' - - pyarrow>=13.0.0 ; extra == 'feather' - - pyiceberg>=0.8.1 ; extra == 'iceberg' - - tables>=3.10.1 ; extra == 'hdf5' - - pyreadstat>=1.2.8 ; extra == 'spss' - - sqlalchemy>=2.0.36 ; extra == 'postgresql' - - psycopg2>=2.9.10 ; extra == 'postgresql' - - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.36 ; extra == 'mysql' - - pymysql>=1.1.1 ; extra == 'mysql' - - sqlalchemy>=2.0.36 ; extra == 'sql-other' - - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' - - beautifulsoup4>=4.12.3 ; extra == 'html' + - xlsxwriter>=3.0.5 ; extra == 'excel' + - pyarrow>=10.0.1 ; extra == 'parquet' + - pyarrow>=10.0.1 ; extra == 'feather' + - tables>=3.8.0 ; extra == 'hdf5' + - pyreadstat>=1.2.0 ; extra == 'spss' + - sqlalchemy>=2.0.0 ; extra == 'postgresql' + - psycopg2>=2.9.6 ; extra == 'postgresql' + - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.0 ; extra == 'mysql' + - pymysql>=1.0.2 ; extra == 'mysql' + - sqlalchemy>=2.0.0 ; extra == 'sql-other' + - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' + - beautifulsoup4>=4.11.2 ; extra == 'html' - html5lib>=1.1 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'html' - - lxml>=5.3.0 ; extra == 'xml' - - matplotlib>=3.9.3 ; extra == 'plot' - - jinja2>=3.1.5 ; extra == 'output-formatting' + - lxml>=4.9.2 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'xml' + - matplotlib>=3.6.3 ; extra == 'plot' + - jinja2>=3.1.2 ; extra == 'output-formatting' - tabulate>=0.9.0 ; extra == 'output-formatting' - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.4.2 ; extra == 'clipboard' - - zstandard>=0.23.0 ; extra == 'compression' - - pytz>=2024.2 ; extra == 'timezone' - - adbc-driver-postgresql>=1.2.0 ; extra == 'all' - - adbc-driver-sqlite>=1.2.0 ; extra == 'all' - - beautifulsoup4>=4.12.3 ; extra == 'all' - - bottleneck>=1.4.2 ; extra == 'all' - - fastparquet>=2024.11.0 ; extra == 'all' - - fsspec>=2024.10.0 ; extra == 'all' - - gcsfs>=2024.10.0 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'clipboard' + - zstandard>=0.19.0 ; extra == 'compression' + - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' + - adbc-driver-postgresql>=0.8.0 ; extra == 'all' + - adbc-driver-sqlite>=0.8.0 ; extra == 'all' + - beautifulsoup4>=4.11.2 ; extra == 'all' + - bottleneck>=1.3.6 ; extra == 'all' + - dataframe-api-compat>=0.1.7 ; extra == 'all' + - fastparquet>=2022.12.0 ; extra == 'all' + - fsspec>=2022.11.0 ; extra == 'all' + - gcsfs>=2022.11.0 ; extra == 'all' - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.116.0 ; extra == 'all' - - jinja2>=3.1.5 ; extra == 'all' - - lxml>=5.3.0 ; extra == 'all' - - matplotlib>=3.9.3 ; extra == 'all' - - numba>=0.60.0 ; extra == 'all' - - numexpr>=2.10.2 ; extra == 'all' + - hypothesis>=6.46.1 ; extra == 'all' + - jinja2>=3.1.2 ; extra == 'all' + - lxml>=4.9.2 ; extra == 'all' + - matplotlib>=3.6.3 ; extra == 'all' + - numba>=0.56.4 ; extra == 'all' + - numexpr>=2.8.4 ; extra == 'all' - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.5 ; extra == 'all' - - psycopg2>=2.9.10 ; extra == 'all' - - pyarrow>=13.0.0 ; extra == 'all' - - pyiceberg>=0.8.1 ; extra == 'all' - - pymysql>=1.1.1 ; extra == 'all' + - openpyxl>=3.1.0 ; extra == 'all' + - pandas-gbq>=0.19.0 ; extra == 'all' + - psycopg2>=2.9.6 ; extra == 'all' + - pyarrow>=10.0.1 ; extra == 'all' + - pymysql>=1.0.2 ; extra == 'all' - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.8 ; extra == 'all' - - pytest>=8.3.4 ; extra == 'all' - - pytest-xdist>=3.6.1 ; extra == 'all' - - python-calamine>=0.3.0 ; extra == 'all' - - pytz>=2024.2 ; extra == 'all' + - pyreadstat>=1.2.0 ; extra == 'all' + - pytest>=7.3.2 ; extra == 'all' + - pytest-xdist>=2.2.0 ; extra == 'all' + - python-calamine>=0.1.7 ; extra == 'all' - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.4.2 ; extra == 'all' - - scipy>=1.14.1 ; extra == 'all' - - s3fs>=2024.10.0 ; extra == 'all' - - sqlalchemy>=2.0.36 ; extra == 'all' - - tables>=3.10.1 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'all' + - scipy>=1.10.0 ; extra == 'all' + - s3fs>=2022.11.0 ; extra == 'all' + - sqlalchemy>=2.0.0 ; extra == 'all' + - tables>=3.8.0 ; extra == 'all' - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2024.10.0 ; extra == 'all' + - xarray>=2022.12.0 ; extra == 'all' - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.2.0 ; extra == 'all' - - zstandard>=0.23.0 ; extra == 'all' - requires_python: '>=3.11' + - xlsxwriter>=3.0.5 ; extra == 'all' + - zstandard>=0.19.0 ; extra == 'all' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda sha256: 315b52bfa6d1a820f4806f6490d472581438a28e21df175290477caec18972b0 md5: d53ffc0edc8eabf4253508008493c5bc @@ -4269,6 +5576,16 @@ packages: - pyyaml>=5.1 - virtualenv>=20.10.0 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl + name: prettytable + version: 3.17.0 + sha256: aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287 + requires_dist: + - wcwidth + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-lazy-fixtures ; extra == 'tests' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl name: prometheus-client version: 0.24.1 @@ -4292,11 +5609,11 @@ packages: - pkg:pypi/prompt-toolkit?source=hash-mapping size: 273927 timestamp: 1756321848365 -- pypi: https://files.pythonhosted.org/packages/a8/5c/53f18822017b8bda6bd8bb4e02048e911fdc79a3dafdc83ab994fe922a84/protobuf-4.25.9-cp37-abi3-manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl name: protobuf - version: 4.25.9 - sha256: 438c636de8fb706a0de94a12a268ef1ae8f5ba5ae655a7671fcda5968ba3c9be - requires_python: '>=3.8' + version: 6.33.6 + sha256: e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda sha256: d834fd656133c9e4eaf63ffe9a117c7d0917d86d89f7d64073f4e3a0020bd8a7 md5: dd94c506b119130aef5a9382aed648e7 @@ -4332,6 +5649,18 @@ packages: - pkg:pypi/ptyprocess?source=hash-mapping size: 19457 timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + sha256: 23c98a5000356e173568dc5c5770b53393879f946f3ace716bbdefac2a8b23d2 + md5: b11a4c6bf6f6f44e5e143f759ffa2087 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + purls: [] + size: 118488 + timestamp: 1736601364156 - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda sha256: 0a0858c59805d627d02bdceee965dd84fde0aceab03a2f984325eec08d822096 md5: b8ea447fdf62e3597cb8d2fae4eb1a90 @@ -4362,6 +5691,10 @@ packages: - pkg:pypi/pure-eval?source=hash-mapping size: 16668 timestamp: 1733569518868 +- pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl + name: py-cpuinfo + version: 9.0.0 + sha256: 859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5 - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl name: pyarrow version: 23.0.1 @@ -4372,6 +5705,13 @@ packages: version: 0.6.3 sha256: a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + name: pyasn1-modules + version: 0.4.2 + sha256: 29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a + requires_dist: + - pyasn1>=0.6.1,<0.7.0 + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl name: pycodestyle version: 2.14.0 @@ -4467,6 +5807,17 @@ packages: - pkg:pypi/pygments?source=compressed-mapping size: 893031 timestamp: 1774796815820 +- pypi: https://files.pythonhosted.org/packages/b2/e6/94145d714402fd5ade00b5661f2d0ab981219e07f7db9bfa16786cdb9c04/pynndescent-0.6.0-py3-none-any.whl + name: pynndescent + version: 0.6.0 + sha256: dc8c74844e4c7f5cbd1e0cd6909da86fdc789e6ff4997336e344779c3d5538ef + requires_dist: + - scikit-learn>=0.18 + - scipy>=1.0 + - numba>=0.55.0 + - llvmlite>=0.38 + - joblib>=0.11 + - pytest ; extra == 'testing' - conda: https://conda.anaconda.org/conda-forge/linux-64/pyopencl-2026.1.1-py312hf890105_0.conda sha256: 9061d44855fd595840586dd8783e9cbf65405912dfad8dab2617b529cd86b8d7 md5: 2844ff09f29cb961b4283fa4749efe2d @@ -4588,6 +5939,18 @@ packages: - pkg:pypi/shiboken6?source=hash-mapping size: 13203421 timestamp: 1774714566544 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 21085 + timestamp: 1733217331982 - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl name: pytest version: 9.0.2 @@ -4750,15 +6113,56 @@ packages: - pkg:pypi/pytools?source=hash-mapping size: 80797 timestamp: 1759858907656 -- pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl +- conda: https://conda.anaconda.org/pytorch/linux-64/pytorch-2.2.2-py3.12_cpu_0.tar.bz2 + sha256: 491590e3bf26385acb68f15e58397397d0fab8ef739ee23558dca006ed5b277a + md5: 46c453799abf95188a96ae08e99a1a27 + depends: + - blas * mkl + - filelock + - jinja2 + - llvm-openmp <16 + - mkl >=2018 + - networkx + - python >=3.12,<3.13.0a0 + - pytorch-mutex 1.0 cpu + - pyyaml + - sympy + - typing_extensions + constrains: + - cpuonly + license: BSD 3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 85774030 + timestamp: 1711404929346 +- conda: https://conda.anaconda.org/pytorch/noarch/pytorch-mutex-1.0-cpu.tar.bz2 + sha256: d48c964188ca49660d750cffd73698d217cf94e694cd51987f9f186425435e76 + md5: 49565ed726991fd28d08a39885caa88d + track_features: + - pytorch-mutex + purls: [] + size: 2897 + timestamp: 1628062935164 +- pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl name: pytz version: 2026.1.post1 sha256: f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a -- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf + md5: 15878599a87992e44c059731771591cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 198293 + timestamp: 1770223620706 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda noarch: python sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 @@ -5008,18 +6412,23 @@ packages: version: 2026.3.32 sha256: f54840bea73541652f1170dc63402a5b776fc851ad36a842da9e5163c1f504a0 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl - name: requests - version: 2.33.1 - sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a - requires_dist: - - charset-normalizer>=2,<4 - - idna>=2.5,<4 - - urllib3>=1.26,<3 - - certifi>=2023.5.7 - - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + sha256: c0249bc4bf4c0e8e06d0e7b4d117a5d593cc4ab2144d5006d6d47c83cb0af18e + md5: 10afbb4dbf06ff959ad25a92ccee6e59 + depends: + - python >=3.10 + - certifi >=2023.5.7 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - urllib3 >=1.26,<3 + - python + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + purls: + - pkg:pypi/requests?source=compressed-mapping + size: 63712 + timestamp: 1774894783063 - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl name: rich version: 14.3.3 @@ -5096,6 +6505,50 @@ packages: - safetensors[testing] ; extra == 'all' - safetensors[all] ; extra == 'dev' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/72/cd/4761675df1b3dd93072c89697278f3ed3dc004a60c034cd2603c43ff64b5/scikit-learn-1.3.0.tar.gz + name: scikit-learn + version: 1.3.0 + sha256: 8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a + requires_dist: + - numpy>=1.17.3 + - scipy>=1.5.0 + - joblib>=1.1.1 + - threadpoolctl>=2.0.0 + - matplotlib>=3.1.3 ; extra == 'examples' + - scikit-image>=0.16.2 ; extra == 'examples' + - pandas>=1.0.5 ; extra == 'examples' + - seaborn>=0.9.0 ; extra == 'examples' + - pooch>=1.6.0 ; extra == 'examples' + - plotly>=5.14.0 ; extra == 'examples' + - matplotlib>=3.1.3 ; extra == 'docs' + - scikit-image>=0.16.2 ; extra == 'docs' + - pandas>=1.0.5 ; extra == 'docs' + - seaborn>=0.9.0 ; extra == 'docs' + - memory-profiler>=0.57.0 ; extra == 'docs' + - sphinx>=6.0.0 ; extra == 'docs' + - sphinx-copybutton>=0.5.2 ; extra == 'docs' + - sphinx-gallery>=0.10.1 ; extra == 'docs' + - numpydoc>=1.2.0 ; extra == 'docs' + - pillow>=7.1.2 ; extra == 'docs' + - pooch>=1.6.0 ; extra == 'docs' + - sphinx-prompt>=1.3.0 ; extra == 'docs' + - sphinxext-opengraph>=0.4.2 ; extra == 'docs' + - plotly>=5.14.0 ; extra == 'docs' + - matplotlib>=3.1.3 ; extra == 'tests' + - scikit-image>=0.16.2 ; extra == 'tests' + - pandas>=1.0.5 ; extra == 'tests' + - pytest>=7.1.2 ; extra == 'tests' + - pytest-cov>=2.9.0 ; extra == 'tests' + - ruff>=0.0.272 ; extra == 'tests' + - black>=23.3.0 ; extra == 'tests' + - mypy>=1.3 ; extra == 'tests' + - pyamg>=4.0.0 ; extra == 'tests' + - numpydoc>=1.2.0 ; extra == 'tests' + - pooch>=1.6.0 ; extra == 'tests' + - matplotlib>=3.1.3 ; extra == 'benchmark' + - pandas>=1.0.5 ; extra == 'benchmark' + - memory-profiler>=0.57.0 ; extra == 'benchmark' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd md5: 3e38daeb1fb05a95656ff5af089d2e4c @@ -5119,6 +6572,50 @@ packages: - pkg:pypi/scipy?source=compressed-mapping size: 17109648 timestamp: 1771880675810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + sha256: 987ad072939fdd51c92ea8d3544b286bb240aefda329f9b03a51d9b7e777f9de + md5: cdd138897d94dc07d99afe7113a07bec + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libgl >=1.7.0,<2.0a0 + - sdl3 >=3.2.22,<4.0a0 + - libegl >=1.7.0,<2.0a0 + license: Zlib + purls: [] + size: 589145 + timestamp: 1757842881 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda + sha256: 64b982664550e01c25f8f09333c0ee54d4764a80fe8636b8aaf881fe6e8a0dbe + md5: 88a69db027a8ff59dab972a09d69a1ab + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - libudev1 >=257.10 + - pulseaudio-client >=17.0,<17.1.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - liburing >=2.14,<2.15.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - libusb >=1.0.29,<2.0a0 + - dbus >=1.16.2,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - xorg-libxi >=1.8.2,<2.0a0 + - wayland >=1.24.0,<2.0a0 + license: Zlib + purls: [] + size: 2138749 + timestamp: 1771668185803 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 md5: 8e194e7b992f99a5015edbd4ebd38efd @@ -5130,6 +6627,20 @@ packages: - pkg:pypi/setuptools?source=compressed-mapping size: 639697 timestamp: 1773074868565 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda + sha256: 0c2d6f24ee2b614ee1da4d7d99cc9944ea1ace65455a47d48d8c1f726317168a + md5: 8dc8dda113c4c568256bdd486b6e842e + depends: + - __glibc >=2.17,<3.0.a0 + - glslang >=16,<17.0a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 113513 + timestamp: 1770208767759 - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl name: shellingham version: 1.5.4 @@ -5218,6 +6729,23 @@ packages: - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 +- pypi: https://files.pythonhosted.org/packages/04/e8/6a2b2030f0689f894432b9c2f0357f2f3286b2a00474827e04b8fe9eea13/skops-0.13.0-py3-none-any.whl + name: skops + version: 0.13.0 + sha256: 55e2cccb18c86f5916e4cfe5acf55ed7b0eecddf08a151906414c092fa5926dc + requires_dist: + - numpy>=1.25.0 + - packaging>=17.0 + - prettytable>=3.9 + - scikit-learn>=1.2 + - scipy>=1.10.0 + - rich>=12 ; extra == 'rich' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl + name: smmap + version: 5.0.3 + sha256: c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 md5: 98b6c9dc80eb87b2519b97bcf7e578dd @@ -5270,6 +6798,20 @@ packages: - finch-tensor>=0.2.13 ; extra == 'finch' - finch-mlir>=0.0.2 ; extra == 'mlir' requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda + sha256: 003180b3a2e0c6490b1f3461cf9e0ed740b1bbf88ee4b73ee177b94bea0dc95d + md5: 8809e0bd5ec279bfe4bb6651c3ed2730 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2296977 + timestamp: 1770089626195 - pypi: https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: sqlalchemy version: 2.0.48 @@ -5308,6 +6850,14 @@ packages: - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' - sqlcipher3-binary ; extra == 'sqlcipher' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl + name: sqlparse + version: 0.5.5 + sha256: 12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba + requires_dist: + - build ; extra == 'dev' + - sphinx ; extra == 'doc' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 md5: b1b505328da7a6b246787df4b5a49fbc @@ -5343,6 +6893,46 @@ packages: - python-multipart>=0.0.18 ; extra == 'full' - pyyaml ; extra == 'full' requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda + sha256: 34e2e9c505cd25dba0a9311eb332381b15147cf599d972322a7c197aedfc8ce2 + md5: 9859766c658e78fec9afa4a54891d920 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2741200 + timestamp: 1756086702093 +- conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda + sha256: 1c8057e6875eba958aa8b3c1a072dc9a75d013f209c26fd8125a5ebd3abbec0c + md5: 32d866e43b25275f61566b9391ccb7b5 + depends: + - __unix + - cpython + - gmpy2 >=2.0.8 + - mpmath >=1.1.0,<1.5 + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/sympy?source=hash-mapping + size: 4661767 + timestamp: 1771952371059 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hb700be7_5.conda + sha256: a49f26ddf4b954670733586e42e41e43d13f7e8e589b70ead8b7512657404d82 + md5: d4cfccb9ccd4f7cbfde7353b5e20d31a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.12.2,<2.12.3.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 171042 + timestamp: 1767886637012 - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl name: tenacity version: 9.1.4 @@ -5354,6 +6944,11 @@ packages: - tornado>=4.5 ; extra == 'test' - typeguard ; extra == 'test' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + name: threadpoolctl + version: 3.6.0 + sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz name: thrift version: 0.22.0 @@ -5619,19 +7214,18 @@ packages: purls: [] size: 3301196 timestamp: 1769460227866 -- pypi: https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f2/90/273b6c7ec78af547694eddeea9e05de771278bd20476525ab930cecaf7d8/tokenizers-0.21.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: tokenizers - version: 0.22.2 - sha256: 369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67 + version: 0.21.4 + sha256: 51b7eabb104f46c1c50b486520555715457ae833d5aee9ff6ae853d1130506ff requires_dist: - - huggingface-hub>=0.16.4,<2.0 + - huggingface-hub>=0.16.4,<1.0 - pytest ; extra == 'testing' - - pytest-asyncio ; extra == 'testing' - requests ; extra == 'testing' - numpy ; extra == 'testing' - datasets ; extra == 'testing' + - black==22.3 ; extra == 'testing' - ruff ; extra == 'testing' - - ty ; extra == 'testing' - sphinx ; extra == 'docs' - sphinx-rtd-theme ; extra == 'docs' - setuptools-rust ; extra == 'docs' @@ -5666,6 +7260,26 @@ packages: version: 1.1.0 sha256: 15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8 requires_python: '>=3.9' +- conda: https://conda.anaconda.org/pytorch/linux-64/torchvision-0.17.2-py312_cpu.tar.bz2 + sha256: 61ac82c99f354fc4964239c37b1c10c32859a05f8a97eb13a4b5426eacb54e39 + md5: 3b5e39b6c7d49b66d6c5ff5aa9981ab8 + depends: + - ffmpeg >=4.2 + - libjpeg-turbo + - libpng + - numpy >=1.23.5 + - pillow >=5.3.0,!=8.3.* + - python >=3.12,<3.13.0a0 + - pytorch 2.2.2 + - pytorch-mutex 1.0 cpu + - requests + constrains: + - cpuonly + license: BSD + purls: + - pkg:pypi/torchvision?source=hash-mapping + size: 7314006 + timestamp: 1711422542215 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a md5: 2b37798adbc54fd9e591d24679d2133a @@ -5708,261 +7322,370 @@ packages: - pkg:pypi/traitlets?source=hash-mapping size: 110051 timestamp: 1733367480074 -- pypi: https://files.pythonhosted.org/packages/0b/a0/0a87883e564e364baab32adcacb4bec2e200b28a568423c8cf7fde316461/transformers-5.4.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/f2/3a/8bdab26e09c5a242182b7ba9152e216d5ab4ae2d78c4298eb4872549cd35/transformers-4.47.1-py3-none-any.whl name: transformers - version: 5.4.0 - sha256: 9fbe50602d2a4e6d0aa8a35a605433dfac72d595ee2192eae192590a6cc2df86 + version: 4.47.1 + sha256: d2f5d19bb6283cd66c893ec7e6d931d6370bbf1cc93633326ff1f41a40046c9c requires_dist: - - huggingface-hub>=1.5.0,<2.0 + - filelock + - huggingface-hub>=0.24.0,<1.0 - numpy>=1.17 - packaging>=20.0 - pyyaml>=5.1 - - regex>=2025.10.22 - - tokenizers>=0.22.0,<=0.23.0 - - typer - - safetensors>=0.4.3 + - regex!=2019.12.17 + - requests + - tokenizers>=0.21,<0.22 + - safetensors>=0.4.1 - tqdm>=4.27 - - torch>=2.4 ; extra == 'torch' - - accelerate>=1.1.0 ; extra == 'torch' - - torchvision ; extra == 'vision' - - pillow>=10.0.1,<=15.0 ; extra == 'vision' - - torchaudio ; extra == 'audio' + - accelerate>=0.26.0 ; extra == 'accelerate' + - diffusers ; extra == 'agents' + - accelerate>=0.26.0 ; extra == 'agents' + - datasets!=2.5.0 ; extra == 'agents' + - torch ; extra == 'agents' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'agents' + - opencv-python ; extra == 'agents' + - pillow>=10.0.1,<=15.0 ; extra == 'agents' + - tensorflow>2.9,<2.16 ; extra == 'all' + - onnxconverter-common ; extra == 'all' + - tf2onnx ; extra == 'all' + - tensorflow-text<2.16 ; extra == 'all' + - keras-nlp>=0.3.1,<0.14.0 ; extra == 'all' + - torch ; extra == 'all' + - accelerate>=0.26.0 ; extra == 'all' + - jax>=0.4.1,<=0.4.13 ; extra == 'all' + - jaxlib>=0.4.1,<=0.4.13 ; extra == 'all' + - flax>=0.4.1,<=0.7.0 ; extra == 'all' + - optax>=0.0.8,<=0.1.4 ; extra == 'all' + - scipy<1.13.0 ; extra == 'all' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'all' + - protobuf ; extra == 'all' + - tokenizers>=0.21,<0.22 ; extra == 'all' + - torchaudio ; extra == 'all' + - librosa ; extra == 'all' + - pyctcdecode>=0.4.0 ; extra == 'all' + - phonemizer ; extra == 'all' + - kenlm ; extra == 'all' + - pillow>=10.0.1,<=15.0 ; extra == 'all' + - optuna ; extra == 'all' + - ray[tune]>=2.7.0 ; extra == 'all' + - sigopt ; extra == 'all' + - timm<=1.0.11 ; extra == 'all' + - torchvision ; extra == 'all' + - codecarbon==1.2.0 ; extra == 'all' + - av==9.2.0 ; extra == 'all' - librosa ; extra == 'audio' - pyctcdecode>=0.4.0 ; extra == 'audio' - phonemizer ; extra == 'audio' - - av ; extra == 'video' - - timm>=1.0.23 ; extra == 'timm' - - datasets>=2.15.0 ; extra == 'quality' - - ruff==0.14.10 ; extra == 'quality' - - gitpython<3.1.19 ; extra == 'quality' - - urllib3<2.0.0 ; extra == 'quality' - - libcst ; extra == 'quality' - - rich ; extra == 'quality' - - ty==0.0.20 ; extra == 'quality' - - tomli ; extra == 'quality' - - kernels>=0.12.0,<0.13 ; extra == 'kernels' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'sentencepiece' - - protobuf ; extra == 'sentencepiece' - - tiktoken ; extra == 'tiktoken' - - blobfile ; extra == 'tiktoken' - - mistral-common[image]>=1.10.0 ; extra == 'mistral-common' - - jinja2>=3.1.0 ; extra == 'chat-template' - - jmespath>=1.0.1 ; extra == 'chat-template' - - scikit-learn ; extra == 'sklearn' - - accelerate>=1.1.0 ; extra == 'accelerate' - - faiss-cpu ; extra == 'retrieval' - - datasets>=2.15.0 ; extra == 'retrieval' - - sagemaker>=2.31.0 ; extra == 'sagemaker' - - deepspeed>=0.9.3 ; extra == 'deepspeed' - - accelerate>=1.1.0 ; extra == 'deepspeed' - - optuna ; extra == 'optuna' - - kernels>=0.12.0,<0.13 ; extra == 'integrations' - - optuna ; extra == 'integrations' - - codecarbon>=2.8.1 ; extra == 'integrations' - - ray[tune]>=2.7.0 ; extra == 'integrations' - - ray[tune]>=2.7.0 ; extra == 'ray' - - codecarbon>=2.8.1 ; extra == 'codecarbon' - - openai>=1.98.0 ; extra == 'serving' - - pydantic>=2 ; extra == 'serving' - - uvicorn ; extra == 'serving' - - fastapi ; extra == 'serving' - - starlette ; extra == 'serving' - - rich ; extra == 'serving' - - torch>=2.4 ; extra == 'serving' - - accelerate>=1.1.0 ; extra == 'serving' - - num2words ; extra == 'num2words' + - kenlm ; extra == 'audio' - optimum-benchmark>=0.3.0 ; extra == 'benchmark' - - fugashi>=1.0 ; extra == 'ja' - - ipadic>=1.0.0,<2.0 ; extra == 'ja' - - unidic-lite>=1.0.7 ; extra == 'ja' - - unidic>=1.0.2 ; extra == 'ja' - - rhoknp>=1.1.0,<1.3.1 ; extra == 'ja' - - sudachipy>=0.6.6 ; extra == 'ja' - - sudachidict-core>=20220729 ; extra == 'ja' - - opentelemetry-api ; extra == 'open-telemetry' - - opentelemetry-exporter-otlp ; extra == 'open-telemetry' - - opentelemetry-sdk ; extra == 'open-telemetry' - - pytest>=7.2.0,<9.0.0 ; extra == 'testing' - - pytest-asyncio>=1.2.0 ; extra == 'testing' - - pytest-random-order ; extra == 'testing' - - pytest-rich ; extra == 'testing' - - pytest-xdist ; extra == 'testing' - - pytest-order ; extra == 'testing' - - pytest-rerunfailures<16.0 ; extra == 'testing' - - pytest-timeout ; extra == 'testing' - - pytest-env ; extra == 'testing' - - timeout-decorator ; extra == 'testing' - - parameterized>=0.9 ; extra == 'testing' - - psutil ; extra == 'testing' - - dill<0.3.5 ; extra == 'testing' - - evaluate>=0.4.6 ; extra == 'testing' - - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'testing' - - nltk<=3.8.1 ; extra == 'testing' - - sacremoses ; extra == 'testing' - - rjieba ; extra == 'testing' - - beautifulsoup4 ; extra == 'testing' - - tensorboard ; extra == 'testing' - - sacrebleu>=1.4.12,<2.0.0 ; extra == 'testing' - - filelock ; extra == 'testing' - - datasets>=2.15.0 ; extra == 'testing' - - ruff==0.14.10 ; extra == 'testing' - - gitpython<3.1.19 ; extra == 'testing' - - urllib3<2.0.0 ; extra == 'testing' - - libcst ; extra == 'testing' - - rich ; extra == 'testing' - - ty==0.0.20 ; extra == 'testing' - - tomli ; extra == 'testing' - - faiss-cpu ; extra == 'testing' - - datasets>=2.15.0 ; extra == 'testing' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'testing' - - protobuf ; extra == 'testing' - - openai>=1.98.0 ; extra == 'testing' - - pydantic>=2 ; extra == 'testing' - - uvicorn ; extra == 'testing' - - fastapi ; extra == 'testing' - - starlette ; extra == 'testing' - - rich ; extra == 'testing' - - torch>=2.4 ; extra == 'testing' - - accelerate>=1.1.0 ; extra == 'testing' - - mistral-common[image]>=1.10.0 ; extra == 'testing' + - codecarbon==1.2.0 ; extra == 'codecarbon' + - deepspeed>=0.9.3 ; extra == 'deepspeed' + - accelerate>=0.26.0 ; extra == 'deepspeed' - deepspeed>=0.9.3 ; extra == 'deepspeed-testing' - - accelerate>=1.1.0 ; extra == 'deepspeed-testing' - - pytest>=7.2.0,<9.0.0 ; extra == 'deepspeed-testing' - - pytest-asyncio>=1.2.0 ; extra == 'deepspeed-testing' - - pytest-random-order ; extra == 'deepspeed-testing' + - accelerate>=0.26.0 ; extra == 'deepspeed-testing' + - pytest>=7.2.0,<8.0.0 ; extra == 'deepspeed-testing' - pytest-rich ; extra == 'deepspeed-testing' - pytest-xdist ; extra == 'deepspeed-testing' - - pytest-order ; extra == 'deepspeed-testing' - - pytest-rerunfailures<16.0 ; extra == 'deepspeed-testing' - - pytest-timeout ; extra == 'deepspeed-testing' - - pytest-env ; extra == 'deepspeed-testing' - timeout-decorator ; extra == 'deepspeed-testing' - - parameterized>=0.9 ; extra == 'deepspeed-testing' + - parameterized ; extra == 'deepspeed-testing' - psutil ; extra == 'deepspeed-testing' + - datasets!=2.5.0 ; extra == 'deepspeed-testing' - dill<0.3.5 ; extra == 'deepspeed-testing' - - evaluate>=0.4.6 ; extra == 'deepspeed-testing' + - evaluate>=0.2.0 ; extra == 'deepspeed-testing' + - pytest-timeout ; extra == 'deepspeed-testing' + - ruff==0.5.1 ; extra == 'deepspeed-testing' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'deepspeed-testing' - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'deepspeed-testing' - nltk<=3.8.1 ; extra == 'deepspeed-testing' + - gitpython<3.1.19 ; extra == 'deepspeed-testing' - sacremoses ; extra == 'deepspeed-testing' - rjieba ; extra == 'deepspeed-testing' - beautifulsoup4 ; extra == 'deepspeed-testing' - tensorboard ; extra == 'deepspeed-testing' - - sacrebleu>=1.4.12,<2.0.0 ; extra == 'deepspeed-testing' - - filelock ; extra == 'deepspeed-testing' - - datasets>=2.15.0 ; extra == 'deepspeed-testing' - - ruff==0.14.10 ; extra == 'deepspeed-testing' - - gitpython<3.1.19 ; extra == 'deepspeed-testing' - - urllib3<2.0.0 ; extra == 'deepspeed-testing' - - libcst ; extra == 'deepspeed-testing' - - rich ; extra == 'deepspeed-testing' - - ty==0.0.20 ; extra == 'deepspeed-testing' - - tomli ; extra == 'deepspeed-testing' - - faiss-cpu ; extra == 'deepspeed-testing' - - datasets>=2.15.0 ; extra == 'deepspeed-testing' + - pydantic ; extra == 'deepspeed-testing' - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'deepspeed-testing' - - protobuf ; extra == 'deepspeed-testing' - - openai>=1.98.0 ; extra == 'deepspeed-testing' - - pydantic>=2 ; extra == 'deepspeed-testing' - - uvicorn ; extra == 'deepspeed-testing' - - fastapi ; extra == 'deepspeed-testing' - - starlette ; extra == 'deepspeed-testing' - - rich ; extra == 'deepspeed-testing' - - torch>=2.4 ; extra == 'deepspeed-testing' - - accelerate>=1.1.0 ; extra == 'deepspeed-testing' - - mistral-common[image]>=1.10.0 ; extra == 'deepspeed-testing' + - faiss-cpu ; extra == 'deepspeed-testing' + - cookiecutter==1.7.3 ; extra == 'deepspeed-testing' - optuna ; extra == 'deepspeed-testing' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'deepspeed-testing' - protobuf ; extra == 'deepspeed-testing' - - torch>=2.4 ; extra == 'all' - - accelerate>=1.1.0 ; extra == 'all' - - torchvision ; extra == 'all' - - pillow>=10.0.1,<=15.0 ; extra == 'all' - - torchaudio ; extra == 'all' - - librosa ; extra == 'all' - - pyctcdecode>=0.4.0 ; extra == 'all' - - phonemizer ; extra == 'all' - - av ; extra == 'all' - - kernels>=0.12.0,<0.13 ; extra == 'all' - - timm>=1.0.23 ; extra == 'all' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'all' - - protobuf ; extra == 'all' - - tiktoken ; extra == 'all' - - blobfile ; extra == 'all' - - jinja2>=3.1.0 ; extra == 'all' - - jmespath>=1.0.1 ; extra == 'all' - - num2words ; extra == 'all' - - mistral-common[image]>=1.10.0 ; extra == 'all' - - torch>=2.4 ; extra == 'dev' - - accelerate>=1.1.0 ; extra == 'dev' - - torchvision ; extra == 'dev' - - pillow>=10.0.1,<=15.0 ; extra == 'dev' + - tensorflow>2.9,<2.16 ; extra == 'dev' + - onnxconverter-common ; extra == 'dev' + - tf2onnx ; extra == 'dev' + - tensorflow-text<2.16 ; extra == 'dev' + - keras-nlp>=0.3.1,<0.14.0 ; extra == 'dev' + - torch ; extra == 'dev' + - accelerate>=0.26.0 ; extra == 'dev' + - jax>=0.4.1,<=0.4.13 ; extra == 'dev' + - jaxlib>=0.4.1,<=0.4.13 ; extra == 'dev' + - flax>=0.4.1,<=0.7.0 ; extra == 'dev' + - optax>=0.0.8,<=0.1.4 ; extra == 'dev' + - scipy<1.13.0 ; extra == 'dev' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev' + - protobuf ; extra == 'dev' + - tokenizers>=0.21,<0.22 ; extra == 'dev' - torchaudio ; extra == 'dev' - librosa ; extra == 'dev' - pyctcdecode>=0.4.0 ; extra == 'dev' - phonemizer ; extra == 'dev' - - av ; extra == 'dev' - - kernels>=0.12.0,<0.13 ; extra == 'dev' - - timm>=1.0.23 ; extra == 'dev' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev' - - protobuf ; extra == 'dev' - - tiktoken ; extra == 'dev' - - blobfile ; extra == 'dev' - - jinja2>=3.1.0 ; extra == 'dev' - - jmespath>=1.0.1 ; extra == 'dev' - - num2words ; extra == 'dev' - - mistral-common[image]>=1.10.0 ; extra == 'dev' - - pytest>=7.2.0,<9.0.0 ; extra == 'dev' - - pytest-asyncio>=1.2.0 ; extra == 'dev' - - pytest-random-order ; extra == 'dev' + - kenlm ; extra == 'dev' + - pillow>=10.0.1,<=15.0 ; extra == 'dev' + - optuna ; extra == 'dev' + - ray[tune]>=2.7.0 ; extra == 'dev' + - sigopt ; extra == 'dev' + - timm<=1.0.11 ; extra == 'dev' + - torchvision ; extra == 'dev' + - codecarbon==1.2.0 ; extra == 'dev' + - av==9.2.0 ; extra == 'dev' + - pytest>=7.2.0,<8.0.0 ; extra == 'dev' - pytest-rich ; extra == 'dev' - pytest-xdist ; extra == 'dev' - - pytest-order ; extra == 'dev' - - pytest-rerunfailures<16.0 ; extra == 'dev' - - pytest-timeout ; extra == 'dev' - - pytest-env ; extra == 'dev' - timeout-decorator ; extra == 'dev' - - parameterized>=0.9 ; extra == 'dev' + - parameterized ; extra == 'dev' - psutil ; extra == 'dev' + - datasets!=2.5.0 ; extra == 'dev' - dill<0.3.5 ; extra == 'dev' - - evaluate>=0.4.6 ; extra == 'dev' + - evaluate>=0.2.0 ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - ruff==0.5.1 ; extra == 'dev' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'dev' - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'dev' - nltk<=3.8.1 ; extra == 'dev' + - gitpython<3.1.19 ; extra == 'dev' - sacremoses ; extra == 'dev' - rjieba ; extra == 'dev' - beautifulsoup4 ; extra == 'dev' - tensorboard ; extra == 'dev' - - sacrebleu>=1.4.12,<2.0.0 ; extra == 'dev' - - filelock ; extra == 'dev' - - datasets>=2.15.0 ; extra == 'dev' - - ruff==0.14.10 ; extra == 'dev' - - gitpython<3.1.19 ; extra == 'dev' + - pydantic ; extra == 'dev' + - faiss-cpu ; extra == 'dev' + - cookiecutter==1.7.3 ; extra == 'dev' + - isort>=5.5.4 ; extra == 'dev' - urllib3<2.0.0 ; extra == 'dev' - libcst ; extra == 'dev' - rich ; extra == 'dev' - - ty==0.0.20 ; extra == 'dev' - - tomli ; extra == 'dev' - - faiss-cpu ; extra == 'dev' - - datasets>=2.15.0 ; extra == 'dev' - - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev' - - protobuf ; extra == 'dev' - - openai>=1.98.0 ; extra == 'dev' - - pydantic>=2 ; extra == 'dev' - - uvicorn ; extra == 'dev' - - fastapi ; extra == 'dev' - - starlette ; extra == 'dev' - - rich ; extra == 'dev' - - torch>=2.4 ; extra == 'dev' - - accelerate>=1.1.0 ; extra == 'dev' - - mistral-common[image]>=1.10.0 ; extra == 'dev' - fugashi>=1.0 ; extra == 'dev' - ipadic>=1.0.0,<2.0 ; extra == 'dev' - unidic-lite>=1.0.7 ; extra == 'dev' - unidic>=1.0.2 ; extra == 'dev' - - rhoknp>=1.1.0,<1.3.1 ; extra == 'dev' - sudachipy>=0.6.6 ; extra == 'dev' - sudachidict-core>=20220729 ; extra == 'dev' + - rhoknp>=1.1.0,<1.3.1 ; extra == 'dev' - scikit-learn ; extra == 'dev' - requires_python: '>=3.10.0' + - pytest>=7.2.0,<8.0.0 ; extra == 'dev-tensorflow' + - pytest-rich ; extra == 'dev-tensorflow' + - pytest-xdist ; extra == 'dev-tensorflow' + - timeout-decorator ; extra == 'dev-tensorflow' + - parameterized ; extra == 'dev-tensorflow' + - psutil ; extra == 'dev-tensorflow' + - datasets!=2.5.0 ; extra == 'dev-tensorflow' + - dill<0.3.5 ; extra == 'dev-tensorflow' + - evaluate>=0.2.0 ; extra == 'dev-tensorflow' + - pytest-timeout ; extra == 'dev-tensorflow' + - ruff==0.5.1 ; extra == 'dev-tensorflow' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'dev-tensorflow' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'dev-tensorflow' + - nltk<=3.8.1 ; extra == 'dev-tensorflow' + - gitpython<3.1.19 ; extra == 'dev-tensorflow' + - sacremoses ; extra == 'dev-tensorflow' + - rjieba ; extra == 'dev-tensorflow' + - beautifulsoup4 ; extra == 'dev-tensorflow' + - tensorboard ; extra == 'dev-tensorflow' + - pydantic ; extra == 'dev-tensorflow' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev-tensorflow' + - faiss-cpu ; extra == 'dev-tensorflow' + - cookiecutter==1.7.3 ; extra == 'dev-tensorflow' + - tensorflow>2.9,<2.16 ; extra == 'dev-tensorflow' + - onnxconverter-common ; extra == 'dev-tensorflow' + - tf2onnx ; extra == 'dev-tensorflow' + - tensorflow-text<2.16 ; extra == 'dev-tensorflow' + - keras-nlp>=0.3.1,<0.14.0 ; extra == 'dev-tensorflow' + - protobuf ; extra == 'dev-tensorflow' + - tokenizers>=0.21,<0.22 ; extra == 'dev-tensorflow' + - pillow>=10.0.1,<=15.0 ; extra == 'dev-tensorflow' + - isort>=5.5.4 ; extra == 'dev-tensorflow' + - urllib3<2.0.0 ; extra == 'dev-tensorflow' + - libcst ; extra == 'dev-tensorflow' + - rich ; extra == 'dev-tensorflow' + - scikit-learn ; extra == 'dev-tensorflow' + - onnxruntime>=1.4.0 ; extra == 'dev-tensorflow' + - onnxruntime-tools>=1.4.2 ; extra == 'dev-tensorflow' + - librosa ; extra == 'dev-tensorflow' + - pyctcdecode>=0.4.0 ; extra == 'dev-tensorflow' + - phonemizer ; extra == 'dev-tensorflow' + - kenlm ; extra == 'dev-tensorflow' + - pytest>=7.2.0,<8.0.0 ; extra == 'dev-torch' + - pytest-rich ; extra == 'dev-torch' + - pytest-xdist ; extra == 'dev-torch' + - timeout-decorator ; extra == 'dev-torch' + - parameterized ; extra == 'dev-torch' + - psutil ; extra == 'dev-torch' + - datasets!=2.5.0 ; extra == 'dev-torch' + - dill<0.3.5 ; extra == 'dev-torch' + - evaluate>=0.2.0 ; extra == 'dev-torch' + - pytest-timeout ; extra == 'dev-torch' + - ruff==0.5.1 ; extra == 'dev-torch' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'dev-torch' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'dev-torch' + - nltk<=3.8.1 ; extra == 'dev-torch' + - gitpython<3.1.19 ; extra == 'dev-torch' + - sacremoses ; extra == 'dev-torch' + - rjieba ; extra == 'dev-torch' + - beautifulsoup4 ; extra == 'dev-torch' + - tensorboard ; extra == 'dev-torch' + - pydantic ; extra == 'dev-torch' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'dev-torch' + - faiss-cpu ; extra == 'dev-torch' + - cookiecutter==1.7.3 ; extra == 'dev-torch' + - torch ; extra == 'dev-torch' + - accelerate>=0.26.0 ; extra == 'dev-torch' + - protobuf ; extra == 'dev-torch' + - tokenizers>=0.21,<0.22 ; extra == 'dev-torch' + - torchaudio ; extra == 'dev-torch' + - librosa ; extra == 'dev-torch' + - pyctcdecode>=0.4.0 ; extra == 'dev-torch' + - phonemizer ; extra == 'dev-torch' + - kenlm ; extra == 'dev-torch' + - pillow>=10.0.1,<=15.0 ; extra == 'dev-torch' + - optuna ; extra == 'dev-torch' + - ray[tune]>=2.7.0 ; extra == 'dev-torch' + - sigopt ; extra == 'dev-torch' + - timm<=1.0.11 ; extra == 'dev-torch' + - torchvision ; extra == 'dev-torch' + - codecarbon==1.2.0 ; extra == 'dev-torch' + - isort>=5.5.4 ; extra == 'dev-torch' + - urllib3<2.0.0 ; extra == 'dev-torch' + - libcst ; extra == 'dev-torch' + - rich ; extra == 'dev-torch' + - fugashi>=1.0 ; extra == 'dev-torch' + - ipadic>=1.0.0,<2.0 ; extra == 'dev-torch' + - unidic-lite>=1.0.7 ; extra == 'dev-torch' + - unidic>=1.0.2 ; extra == 'dev-torch' + - sudachipy>=0.6.6 ; extra == 'dev-torch' + - sudachidict-core>=20220729 ; extra == 'dev-torch' + - rhoknp>=1.1.0,<1.3.1 ; extra == 'dev-torch' + - scikit-learn ; extra == 'dev-torch' + - onnxruntime>=1.4.0 ; extra == 'dev-torch' + - onnxruntime-tools>=1.4.2 ; extra == 'dev-torch' + - jax>=0.4.1,<=0.4.13 ; extra == 'flax' + - jaxlib>=0.4.1,<=0.4.13 ; extra == 'flax' + - flax>=0.4.1,<=0.7.0 ; extra == 'flax' + - optax>=0.0.8,<=0.1.4 ; extra == 'flax' + - scipy<1.13.0 ; extra == 'flax' + - librosa ; extra == 'flax-speech' + - pyctcdecode>=0.4.0 ; extra == 'flax-speech' + - phonemizer ; extra == 'flax-speech' + - kenlm ; extra == 'flax-speech' + - ftfy ; extra == 'ftfy' + - optuna ; extra == 'integrations' + - ray[tune]>=2.7.0 ; extra == 'integrations' + - sigopt ; extra == 'integrations' + - fugashi>=1.0 ; extra == 'ja' + - ipadic>=1.0.0,<2.0 ; extra == 'ja' + - unidic-lite>=1.0.7 ; extra == 'ja' + - unidic>=1.0.2 ; extra == 'ja' + - sudachipy>=0.6.6 ; extra == 'ja' + - sudachidict-core>=20220729 ; extra == 'ja' + - rhoknp>=1.1.0,<1.3.1 ; extra == 'ja' + - cookiecutter==1.7.3 ; extra == 'modelcreation' + - natten>=0.14.6,<0.15.0 ; extra == 'natten' + - onnxconverter-common ; extra == 'onnx' + - tf2onnx ; extra == 'onnx' + - onnxruntime>=1.4.0 ; extra == 'onnx' + - onnxruntime-tools>=1.4.2 ; extra == 'onnx' + - onnxruntime>=1.4.0 ; extra == 'onnxruntime' + - onnxruntime-tools>=1.4.2 ; extra == 'onnxruntime' + - optuna ; extra == 'optuna' + - datasets!=2.5.0 ; extra == 'quality' + - isort>=5.5.4 ; extra == 'quality' + - ruff==0.5.1 ; extra == 'quality' + - gitpython<3.1.19 ; extra == 'quality' + - urllib3<2.0.0 ; extra == 'quality' + - libcst ; extra == 'quality' + - rich ; extra == 'quality' + - ray[tune]>=2.7.0 ; extra == 'ray' + - faiss-cpu ; extra == 'retrieval' + - datasets!=2.5.0 ; extra == 'retrieval' + - ruff==0.5.1 ; extra == 'ruff' + - sagemaker>=2.31.0 ; extra == 'sagemaker' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'sentencepiece' + - protobuf ; extra == 'sentencepiece' + - pydantic ; extra == 'serving' + - uvicorn ; extra == 'serving' + - fastapi ; extra == 'serving' + - starlette ; extra == 'serving' + - sigopt ; extra == 'sigopt' + - scikit-learn ; extra == 'sklearn' + - torchaudio ; extra == 'speech' + - librosa ; extra == 'speech' + - pyctcdecode>=0.4.0 ; extra == 'speech' + - phonemizer ; extra == 'speech' + - kenlm ; extra == 'speech' + - pytest>=7.2.0,<8.0.0 ; extra == 'testing' + - pytest-rich ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - timeout-decorator ; extra == 'testing' + - parameterized ; extra == 'testing' + - psutil ; extra == 'testing' + - datasets!=2.5.0 ; extra == 'testing' + - dill<0.3.5 ; extra == 'testing' + - evaluate>=0.2.0 ; extra == 'testing' + - pytest-timeout ; extra == 'testing' + - ruff==0.5.1 ; extra == 'testing' + - sacrebleu>=1.4.12,<2.0.0 ; extra == 'testing' + - rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1 ; extra == 'testing' + - nltk<=3.8.1 ; extra == 'testing' + - gitpython<3.1.19 ; extra == 'testing' + - sacremoses ; extra == 'testing' + - rjieba ; extra == 'testing' + - beautifulsoup4 ; extra == 'testing' + - tensorboard ; extra == 'testing' + - pydantic ; extra == 'testing' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'testing' + - faiss-cpu ; extra == 'testing' + - cookiecutter==1.7.3 ; extra == 'testing' + - tensorflow>2.9,<2.16 ; extra == 'tf' + - onnxconverter-common ; extra == 'tf' + - tf2onnx ; extra == 'tf' + - tensorflow-text<2.16 ; extra == 'tf' + - keras-nlp>=0.3.1,<0.14.0 ; extra == 'tf' + - keras>2.9,<2.16 ; extra == 'tf-cpu' + - tensorflow-cpu>2.9,<2.16 ; extra == 'tf-cpu' + - onnxconverter-common ; extra == 'tf-cpu' + - tf2onnx ; extra == 'tf-cpu' + - tensorflow-text<2.16 ; extra == 'tf-cpu' + - keras-nlp>=0.3.1,<0.14.0 ; extra == 'tf-cpu' + - tensorflow-probability<0.24 ; extra == 'tf-cpu' + - librosa ; extra == 'tf-speech' + - pyctcdecode>=0.4.0 ; extra == 'tf-speech' + - phonemizer ; extra == 'tf-speech' + - kenlm ; extra == 'tf-speech' + - tiktoken ; extra == 'tiktoken' + - blobfile ; extra == 'tiktoken' + - timm<=1.0.11 ; extra == 'timm' + - tokenizers>=0.21,<0.22 ; extra == 'tokenizers' + - torch ; extra == 'torch' + - accelerate>=0.26.0 ; extra == 'torch' + - torchaudio ; extra == 'torch-speech' + - librosa ; extra == 'torch-speech' + - pyctcdecode>=0.4.0 ; extra == 'torch-speech' + - phonemizer ; extra == 'torch-speech' + - kenlm ; extra == 'torch-speech' + - torchvision ; extra == 'torch-vision' + - pillow>=10.0.1,<=15.0 ; extra == 'torch-vision' + - filelock ; extra == 'torchhub' + - huggingface-hub>=0.24.0,<1.0 ; extra == 'torchhub' + - importlib-metadata ; extra == 'torchhub' + - numpy>=1.17 ; extra == 'torchhub' + - packaging>=20.0 ; extra == 'torchhub' + - protobuf ; extra == 'torchhub' + - regex!=2019.12.17 ; extra == 'torchhub' + - requests ; extra == 'torchhub' + - sentencepiece>=0.1.91,!=0.1.92 ; extra == 'torchhub' + - torch ; extra == 'torchhub' + - tokenizers>=0.21,<0.22 ; extra == 'torchhub' + - tqdm>=4.27 ; extra == 'torchhub' + - av==9.2.0 ; extra == 'video' + - pillow>=10.0.1,<=15.0 ; extra == 'vision' + requires_python: '>=3.9.0' - pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl name: typer version: 0.24.1 @@ -6002,6 +7725,11 @@ packages: - pkg:pypi/typing-extensions?source=hash-mapping size: 51692 timestamp: 1756220668932 +- pypi: https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl + name: tzdata + version: '2025.3' + sha256: 06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 + requires_python: '>=2' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c md5: ad659d0a2b3e47e38d829aa8cad2d610 @@ -6021,6 +7749,27 @@ packages: - check-manifest ; extra == 'devenv' - zest-releaser ; extra == 'devenv' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/8f/671c0e1f2572ba625cbcc1faeba9435e00330c3d6962858711445cf1e817/umap_learn-0.5.7-py3-none-any.whl + name: umap-learn + version: 0.5.7 + sha256: 6a7e0be2facfa365a5ed6588447102bdbef32a0ef449535c25c97ea7e680073c + requires_dist: + - numpy>=1.17 + - scipy>=1.3.1 + - scikit-learn>=0.22 + - numba>=0.51.2 + - pynndescent>=0.5 + - tqdm + - tensorflow>=2.1 ; extra == 'parametric-umap' + - pandas ; extra == 'plot' + - matplotlib ; extra == 'plot' + - datashader ; extra == 'plot' + - bokeh ; extra == 'plot' + - holoviews ; extra == 'plot' + - colorcet ; extra == 'plot' + - seaborn ; extra == 'plot' + - scikit-image ; extra == 'plot' + - tbb>=2019.0 ; extra == 'tbb' - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py312h4c3975b_0.conda sha256: 895bbfe9ee25c98c922799de901387d842d7c01cae45c346879865c6a907f229 md5: 0b6c506ec1f272b685240e70a29261b8 @@ -6035,17 +7784,21 @@ packages: - pkg:pypi/unicodedata2?source=compressed-mapping size: 410641 timestamp: 1770909099497 -- pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - name: urllib3 - version: 2.6.3 - sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 - requires_dist: - - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - - h2>=4,<5 ; extra == 'h2' - - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a + md5: 9272daa869e03efe68833e3dc7a02130 + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 103172 + timestamp: 1767817860341 - pypi: https://files.pythonhosted.org/packages/0a/89/f8827ccff89c1586027a105e5630ff6139a64da2515e24dafe860bd9ae4d/uvicorn-0.42.0-py3-none-any.whl name: uvicorn version: 0.42.0 @@ -6113,6 +7866,14 @@ packages: purls: [] size: 334139 timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + sha256: 9ab2c12053ea8984228dd573114ffc6d63df42c501d59fda3bf3aeb1eaa1d23e + md5: 7da1571f560d4ba3343f7f4c48a79c76 + license: MIT + license_family: MIT + purls: [] + size: 140476 + timestamp: 1765821981856 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa md5: c3197f8c0d5b955c904616b716aca093 @@ -6129,6 +7890,14 @@ packages: version: '16.0' sha256: 9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7f/b2/0bba9bbb4596d2d2f285a16c2ab04118f6b957d8441566e1abb892e6a6b2/werkzeug-3.1.7-py3-none-any.whl + name: werkzeug + version: 3.1.7 + sha256: 4b314d81163a3e1a169b6a0be2a000a0e204e8873c5de6586f453c55688d422f + requires_dist: + - markupsafe>=2.1.1 + - watchdog>=2.3 ; extra == 'watchdog' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: wrapt version: 2.1.2 @@ -6137,6 +7906,27 @@ packages: - pytest ; extra == 'dev' - setuptools ; extra == 'dev' requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + sha256: 175315eb3d6ea1f64a6ce470be00fa2ee59980108f246d3072ab8b977cb048a5 + md5: 6c99772d483f566d59e25037fea2c4b1 + depends: + - libgcc-ng >=12 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 897548 + timestamp: 1660323080555 +- conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 + sha256: 76c7405bcf2af639971150f342550484efac18219c0203c5ee2e38b8956fe2a0 + md5: e7f6ed84d4623d52ee581325c1587a6b + depends: + - libgcc-ng >=10.3.0 + - libstdcxx-ng >=10.3.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3357188 + timestamp: 1646609687141 - pypi: https://files.pythonhosted.org/packages/99/92/545eb2ca17fc0e05456728d7e4378bfee48d66433ae3b7e71948e46826fb/xarray-2026.2.0-py3-none-any.whl name: xarray version: 2026.2.0 @@ -6431,6 +8221,19 @@ packages: purls: [] size: 33005 timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + sha256: 58e8fc1687534124832d22e102f098b5401173212ac69eb9fd96b16a3e2c8cb2 + md5: 303f7a0e9e0cd7d250bb6b952cecda90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14412 + timestamp: 1727899730073 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxshmfence-1.3.3-hb9d3cd8_0.conda sha256: c0830fe9fa78d609cd9021f797307e7e0715ef5122be3f784765dad1b4d8a193 md5: 9a809ce9f65460195777f2f2116bae02 @@ -6469,22 +8272,68 @@ packages: purls: [] size: 18701 timestamp: 1769434732453 -- pypi: https://files.pythonhosted.org/packages/de/7c/ba8ca8cbe9dbef8e83a95fc208fed8e6686c98b4719aaa0aa7f3d31fe390/zarr-3.1.6-py3-none-any.whl +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 85189 + timestamp: 1753484064210 +- pypi: https://files.pythonhosted.org/packages/44/15/bb13b4913ef95ad5448490821eee4671d0e67673342e4d4070854e5fe081/zarr-3.1.5-py3-none-any.whl name: zarr - version: 3.1.6 - sha256: b5a82c5079d1c3d4ee8f06746fa3b9a98a7d804300fa3f4be154362a33e1207e + version: 3.1.5 + sha256: 29cd905afb6235b94c09decda4258c888fcb79bb6c862ef7c0b8fe009b5c8563 requires_dist: - donfig>=0.8 - google-crc32c>=1.5 - numcodecs>=0.14 - - numpy>=2.0 + - numpy>=1.26 - packaging>=22.0 - - typing-extensions>=4.12 + - typing-extensions>=4.9 - typer ; extra == 'cli' + - astroid<4 ; extra == 'docs' + - griffe-inherited-docstrings ; extra == 'docs' + - markdown-exec[ansi] ; extra == 'docs' + - mike>=2.1.3 ; extra == 'docs' + - mkdocs-material[imaging]>=9.6.14 ; extra == 'docs' + - mkdocs-redirects>=1.2.0 ; extra == 'docs' + - mkdocs>=1.6.1 ; extra == 'docs' + - mkdocstrings-python>=1.16.10 ; extra == 'docs' + - mkdocstrings>=0.29.1 ; extra == 'docs' + - numcodecs[msgpack] ; extra == 'docs' + - pytest ; extra == 'docs' + - rich ; extra == 'docs' + - ruff ; extra == 'docs' + - s3fs>=2023.10.0 ; extra == 'docs' + - towncrier ; extra == 'docs' - cupy-cuda12x ; extra == 'gpu' + - rich ; extra == 'optional' - universal-pathlib ; extra == 'optional' - fsspec>=2023.10.0 ; extra == 'remote' - obstore>=0.5.1 ; extra == 'remote' + - botocore ; extra == 'remote-tests' + - fsspec>=2023.10.0 ; extra == 'remote-tests' + - moto[s3,server] ; extra == 'remote-tests' + - obstore>=0.5.1 ; extra == 'remote-tests' + - requests ; extra == 'remote-tests' + - s3fs>=2023.10.0 ; extra == 'remote-tests' + - coverage>=7.10 ; extra == 'test' + - hypothesis ; extra == 'test' + - mypy ; extra == 'test' + - numpydoc ; extra == 'test' + - packaging ; extra == 'test' + - pytest-accept ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pytest<8.4 ; extra == 'test' + - rich ; extra == 'test' + - tomlkit ; extra == 'test' + - uv ; extra == 'test' requires_python: '>=3.11' - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 diff --git a/pyproject.toml b/pyproject.toml index e65cae1..18aa84f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,7 @@ dependencies = [ "websockets", "zarr", "transformers", + "tiled[client]", "redis"] [project.optional-dependencies] @@ -43,40 +44,26 @@ dev = [ "pre-commit", "pytest-asyncio", "pytest-mock", - "tiled[server] >=0.1.0b14, <0.2" + "tiled[server]" ] lse = [ - "torchvision==0.17.2", - "joblib", - "latent-space-explorer @ git+https://github.com/mlexchange/mlex_latent_explorer.git@main" -] - -all = [ - "arroyopy >= 0.3.0a4", - "bluesky", + "aiosqlite", "dynaconf", - "python-dotenv", - "pandas", "msgpack", - "numpy", - "ophyd", - "Pillow", - "pyzmq", - "tqdm", - "typer", - "websockets", - "tiled[client] >=0.1.0b14, <0.2", "redis", - "numpy<2.0.0", - "pandas", - "python-dotenv", - "pyarrow>=14.0.1", - "pyfai", - "aiosqlite", - + "websockets", + "zarr", + "scikit-learn==1.3.0", + "torch>=2.0.0", + "torchvision==0.17.2", + "transformers==4.47.1", + "umap-learn", + "joblib==1.4.2", + "mlflow", ] + [tool.isort] profile = "black" @@ -84,21 +71,26 @@ profile = "black" [tool.pixi.workspace] name = "arroyosas" -channels = ["conda-forge"] +channels = ["conda-forge", "pytorch"] platforms = ["linux-64"] [tool.pixi.dependencies] # pyFAI from conda-forge avoids needing a C compiler python = "3.12.*" pyfai = ">=2024.1" +# CPU-only pytorch from the pytorch channel; also pins numpy to avoid NumPy 2.x incompatibility +pytorch = {version = ">=2.0.0", channel = "pytorch"} +torchvision = {version = "0.17.2", channel = "pytorch"} +cpuonly = {version = "*", channel = "pytorch"} +numpy = "<2.0" [tool.pixi.pypi-dependencies] -arroyosas = { path = ".", editable = true } +arroyosas = { path = ".", editable = true, extras = ["lse"] } arroyopy = { path = "../arroyopy", editable = true } [tool.pixi.tasks] lse_operator = "arroyo run block_configs/lse_operator_block.yaml" [tool.pixi.environments] -default = { solve-group = "default,lse" } +default = { solve-group = "default" } dev = { features = ["dev"], solve-group = "default" } diff --git a/src/arroyosas/lse.py b/src/arroyosas/lse.py index ed1aa63..3226e53 100644 --- a/src/arroyosas/lse.py +++ b/src/arroyosas/lse.py @@ -1,8 +1,23 @@ -from arroyo_reduction.operator import LatentSpaceOperator -from arroyo_reduction.reducer import LatentSpaceReducer, Reducer -from arroyo_reduction.schemas import LatentSpaceEvent +import logging +import os +from arroyosas.lse_reduction.redis_model_store import RedisModelStore +from .lse_reduction.operator import LatentSpaceOperator +from .lse_reduction.reducer import LatentSpaceReducer -def build_lse_operator() -> LatentSpaceOperator: - reducer = LatentSpaceReducer() - return LatentSpaceOperator(reducer) +logger = logging.getLogger(__name__) + +def build_lse_operator(redis_host: str = None, redis_port: int = None) -> LatentSpaceOperator: + + # Initialize RedisModelStore instead of direct Redis client + try: + redis_host = redis_host or os.getenv("REDIS_HOST", "kvrocks") + redis_port = redis_port or int(os.getenv("REDIS_PORT", 6666)) + print(redis_host) + redis_model_store = RedisModelStore(host=redis_host, port=redis_port) + logger.info(f"Connected to Redis Model Store at {redis_host}:{redis_port}") + except Exception as e: + logger.warning(f"Could not connect to Redis Model Store: {e}") + redis_model_store = None + reducer = LatentSpaceReducer(redis_model_store) + return LatentSpaceOperator(reducer, redis_model_store) diff --git a/src/arroyosas/lse_reduction/__init__.py b/src/arroyosas/lse_reduction/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/arroyosas/lse_reduction/base_model_store.py b/src/arroyosas/lse_reduction/base_model_store.py new file mode 100644 index 0000000..d0e21f7 --- /dev/null +++ b/src/arroyosas/lse_reduction/base_model_store.py @@ -0,0 +1,31 @@ +from abc import ABC, abstractmethod + + +class BaseModelStore(ABC): + @abstractmethod + def store_autoencoder_model(self, model_name: str) -> bool: + pass + + @abstractmethod + def store_dimred_model(self, model_name: str) -> bool: + pass + + @abstractmethod + def get_autoencoder_model(self) -> str: + pass + + @abstractmethod + def get_dimred_model(self) -> str: + pass + + @abstractmethod + def publish_model_update(self, model_type: str, model_name: str) -> bool: + pass + + @abstractmethod + def subscribe_to_model_updates(self, callback): + pass + + @abstractmethod + def get_model_loading_state(self): + pass diff --git a/src/arroyosas/lse_reduction/mlflow_utils.py b/src/arroyosas/lse_reduction/mlflow_utils.py new file mode 100644 index 0000000..3dcead6 --- /dev/null +++ b/src/arroyosas/lse_reduction/mlflow_utils.py @@ -0,0 +1,346 @@ +import logging +import os +import shutil +import hashlib +import tempfile + +import mlflow +from mlflow.tracking import MlflowClient + + +MLFLOW_TRACKING_URI = os.getenv("MLFLOW_TRACKING_URI") +MLFLOW_TRACKING_USERNAME = os.getenv("MLFLOW_TRACKING_USERNAME", "") +MLFLOW_TRACKING_PASSWORD = os.getenv("MLFLOW_TRACKING_PASSWORD", "") +# Define a cache directory that will be mounted as a volume +MLFLOW_CACHE_DIR = os.getenv("MLFLOW_CACHE_DIR", os.path.join(tempfile.gettempdir(), "mlflow_cache")) + +logger = logging.getLogger("lse.mlflow_utils") + + +class MLflowClient: + """A wrapper class for MLflow client operations.""" + + # In-memory model cache (for quick access) + _model_cache = {} + + def __init__( + self, + tracking_uri=None, + username=None, + password=None, + cache_dir=None + ): + """ + Initialize the MLflow client with connection parameters. + + Args: + tracking_uri: MLflow tracking server URI + username: MLflow authentication username + password: MLflow authentication password + cache_dir: Directory to store cached models + """ + self.tracking_uri = tracking_uri or os.getenv("MLFLOW_TRACKING_URI") + self.username = username or os.getenv("MLFLOW_TRACKING_USERNAME", "") + self.password = password or os.getenv("MLFLOW_TRACKING_PASSWORD", "") + self.cache_dir = cache_dir or MLFLOW_CACHE_DIR + + # Create cache directory if it doesn't exist + os.makedirs(self.cache_dir, exist_ok=True) + + # Set environment variables + os.environ['MLFLOW_TRACKING_USERNAME'] = self.username + os.environ['MLFLOW_TRACKING_PASSWORD'] = self.password + + # Set tracking URI + mlflow.set_tracking_uri(self.tracking_uri) + + # Create client + self.client = MlflowClient() + + def check_model_compatibility(self, autoencoder_model, dim_reduction_model): + """ + Check if autoencoder and dimension reduction models are compatible. + + Models are compatible if autoencoder latent_dim matches dimension reduction input_dim. + + Args: + autoencoder_model (str): Autoencoder model name (or "name:version" format) + dim_reduction_model (str): Dimension reduction model name (or "name:version" format) + + Returns: + bool: True if models are compatible, False otherwise + """ + if not autoencoder_model or not dim_reduction_model: + return False + + # Check dimension compatibility + try: + # get_mlflow_params now handles "name:version" format automatically + auto_params = self.get_mlflow_params(autoencoder_model) + dimred_params = self.get_mlflow_params(dim_reduction_model) + + auto_dim = int(auto_params.get("latent_dim", 0)) + dimred_dim = int(dimred_params.get("input_dim", 0)) + + return auto_dim > 0 and auto_dim == dimred_dim + except Exception as e: + logger.warning(f"Error checking dimensions: {e}") + return False + + def check_mlflow_ready(self): + """ + Check if MLflow server is reachable by performing a lightweight API call. + + Returns: + bool: True if MLflow server is reachable, False otherwise + """ + try: + # Perform a lightweight API call to verify connectivity + # search_experiments() is a simple call that requires minimal server resources + self.client.search_experiments(max_results=1) + logger.info("MLflow server is reachable") + return True + except Exception as e: + logger.warning(f"MLflow server is not reachable: {e}") + return False + + def get_mlflow_params(self, mlflow_model_id, version=None): + """ + Get MLflow model parameters for a specific version. + + Args: + mlflow_model_id: Model name or "name:version" format + version: Specific version (optional, can be parsed from mlflow_model_id) + + Returns: + dict: Model parameters + """ + # Parse version from identifier if present + if version is None: + if isinstance(mlflow_model_id, str) and ":" in mlflow_model_id: + mlflow_model_id, version = mlflow_model_id.split(":", 1) + else: + version = "1" # Default to version 1 for backward compatibility + + model_version_details = self.client.get_model_version( + name=mlflow_model_id, + version=str(version) + ) + run_id = model_version_details.run_id + + run_info = self.client.get_run(run_id) + params = run_info.data.params + return params + + def get_mlflow_models(self, livemode=False, model_type=None): + """ + Retrieve available MLflow models and create dropdown options. + + Args: + livemode (bool): If True, only include models where exp_type == "live_mode". + If False, exclude models where exp_type == "live_mode" and use custom labels. + model_type (str, optional): Filter by run tag 'model_type'. + + Returns: + list: Dropdown options for MLflow models matching the tag filters. + """ + try: + all_versions = self.client.search_model_versions() + + model_map = {} # model name -> latest version info + + for v in all_versions: + try: + current = model_map.get(v.name) + if current and int(v.version) <= int(current.version): + continue + + run = self.client.get_run(v.run_id) + run_tags = run.data.tags + + # Tag-based filtering + exp_type = run_tags.get("exp_type") + if livemode: + if exp_type != "live_mode": + continue + else: + if exp_type == "live_mode": + continue + + if model_type is not None and run_tags.get("model_type") != model_type: + continue + + model_map[v.name] = v + + except Exception as e: + logger.warning(f"Error processing model version {v.name} v{v.version}: {e}") + continue + + # Build dropdown options + model_options = [] + for name in sorted(model_map.keys()): + if livemode: + label = name + else: + try: + parent_id = get_flow_run_parent_id(name) + label = get_flow_run_name(parent_id) + except Exception as e: + logger.warning(f"Failed to get label for model '{name}': {e}") + label = name # fallback + + model_options.append({"label": label, "value": name}) + + return model_options + + except Exception as e: + logger.warning(f"Error retrieving MLflow models: {e}") + return [{"label": "Error loading models", "value": None}] + + def get_model_versions(self, model_name): + """ + Get all available versions for a specific model. + + Args: + model_name (str): Name of the model + + Returns: + list: List of version options sorted by version number (latest first) + """ + try: + versions = self.client.search_model_versions(f"name='{model_name}'") + + if not versions: + return [] + + # Sort versions by version number (descending - latest first) + sorted_versions = sorted( + versions, + key=lambda v: int(v.version), + reverse=True + ) + + # Create dropdown options + version_options = [ + {"label": f"Version {v.version}", "value": v.version} + for v in sorted_versions + ] + + return version_options + + except Exception as e: + logger.error(f"Error retrieving versions for model {model_name}: {e}") + return [] + + def _get_cache_path(self, model_name, version=None): + """Get the cache path for a model""" + # Create a unique filename based on model name and version + if version is None: + # Use a hash of the model name as part of the filename + hash_obj = hashlib.md5(model_name.encode()) + hash_str = hash_obj.hexdigest() + return os.path.join(self.cache_dir, f"{model_name}_{hash_str}") + else: + # Include version in the filename + return os.path.join(self.cache_dir, f"{model_name}_v{version}") + + def load_model(self, model_name, version=None): + """ + Load a model from MLflow by name with disk caching + + Args: + model_name: Name of the model in MLflow + version: Specific version to load (optional, defaults to latest) + + Returns: + The loaded model or None if loading fails + """ + if model_name is None: + logger.error("Cannot load model: model_name is None") + return None + + # Create a cache key that includes version if specified + cache_key = f"{model_name}:{version}" if version else model_name + + # Check in-memory cache first + if cache_key in self._model_cache: + logger.info(f"Using in-memory cached model: {cache_key}") + return self._model_cache[cache_key] + + try: + # Get the specific version or latest version + if version is None: + versions = self.client.search_model_versions(f"name='{model_name}'") + + if not versions: + logger.error(f"No versions found for model {model_name}") + return None + + version = max([int(mv.version) for mv in versions]) + + model_uri = f"models:/{model_name}/{version}" + + # Check disk cache + cache_path = self._get_cache_path(model_name, version) + if os.path.exists(cache_path): + logger.info(f"Loading model from disk cache: {cache_path}") + try: + model = mlflow.pyfunc.load_model(cache_path) + self._model_cache[cache_key] = model + logger.info(f"Successfully loaded cached model: {cache_key}") + return model + except Exception as e: + logger.warning(f"Error loading model from cache: {e}") + + # Create cache directory if it doesn't exist + os.makedirs(os.path.dirname(cache_path) if os.path.dirname(cache_path) else ".", exist_ok=True) + + logger.info(f"Downloading model {model_name}, version {version} from MLflow to cache") + + try: + # Download the model directly to the cache location + download_path = mlflow.artifacts.download_artifacts( + artifact_uri=f"models:/{model_name}/{version}", + dst_path=cache_path + ) + logger.info(f"Downloaded model artifacts to: {download_path}") + + # Load the model from the cached location + model = mlflow.pyfunc.load_model(download_path) + logger.info(f"Successfully loaded model from cache: {cache_key}") + + # Store in memory cache + self._model_cache[cache_key] = model + + return model + except Exception as e: + logger.warning(f"Error downloading artifacts: {e}") + + # Fallback: Load the model directly from MLflow + logger.info(f"Falling back to direct model loading from MLflow") + model = mlflow.pyfunc.load_model(model_uri) + logger.info(f"Successfully loaded model: {cache_key}") + + # Store in memory cache + self._model_cache[cache_key] = model + + return model + except Exception as e: + logger.error(f"Error loading model {cache_key}: {e}") + return None + + @classmethod + def clear_memory_cache(cls): + """Clear the in-memory model cache""" + logger.info("Clearing in-memory model cache") + cls._model_cache.clear() + + def clear_disk_cache(self): + """Clear the disk cache""" + logger.info(f"Clearing disk cache at {self.cache_dir}") + try: + # Delete and recreate the cache directory + shutil.rmtree(self.cache_dir) + os.makedirs(self.cache_dir, exist_ok=True) + except Exception as e: + logger.error(f"Error clearing disk cache: {e}") \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/operator.py b/src/arroyosas/lse_reduction/operator.py new file mode 100644 index 0000000..8566769 --- /dev/null +++ b/src/arroyosas/lse_reduction/operator.py @@ -0,0 +1,162 @@ +import asyncio +import logging +import os +import time + +from arroyopy.operator import Operator +from arroyopy.schemas import Start, Stop +from arroyosas.schemas import RawFrameEvent, SASMessage + +from .reducer import LatentSpaceReducer, Reducer +from .schemas import LatentSpaceEvent +from .redis_model_store import RedisModelStore # Import the RedisModelStore class + +logger = logging.getLogger("arroyo_reduction.operator") + + +class LatentSpaceOperator(Operator): + def __init__(self, reducer: Reducer, redis_model_store: RedisModelStore): + super().__init__() + self.reducer = reducer + self.redis_model_store = redis_model_store + + # NEW: Track if flush was already sent + self._flush_sent = False + + + def _check_models_selected(self): + """ + Synchronous helper to check if models are selected in Redis. + This will be called via asyncio.to_thread() to avoid blocking the event loop. + + Returns: + tuple: (autoencoder_model, dimred_model) or (None, None) if not available + """ + if self.redis_model_store is None: + return (None, None) + + try: + autoencoder_model = self.redis_model_store.get_autoencoder_model() + dimred_model = self.redis_model_store.get_dimred_model() + return (autoencoder_model, dimred_model) + except Exception as e: + logger.error(f"Error checking model selection in Redis: {e}") + return (None, None) + + async def process(self, message: SASMessage) -> None: + # logger.debug("message recvd") + if isinstance(message, Start): + logger.info("Received Start Message") + await self.publish(message) + elif isinstance(message, RawFrameEvent): + # NEW: Check if models are selected before publishing RawFrameEvent + if self.redis_model_store is not None: + # Run Redis check in thread pool to avoid blocking event loop + autoencoder_model, dimred_model = await asyncio.to_thread( + self._check_models_selected + ) + + if not autoencoder_model or not dimred_model: + logger.info(f"In offline mode - skipping write image {message.frame_number}") + else: + await self.publish(message) + else: + # If redis not available, publish anyway (default behavior) + await self.publish(message) + + result = await self.dispatch(message) + if result is not None: # Only publish if we got a valid result + await self.publish(result) + elif isinstance(message, Stop): + logger.info("Received Stop Message") + await self.publish(message) + else: + logger.warning(f"Unknown message type: {type(message)}") + return None + + async def dispatch(self, message: RawFrameEvent) -> LatentSpaceEvent: + try: + # Use the RedisModelStore instead of direct Redis client + if self.redis_model_store is not None: + # Run Redis check in thread pool to avoid blocking event loop + autoencoder_model, dimred_model = await asyncio.to_thread( + self._check_models_selected + ) + + if not autoencoder_model or not dimred_model: + # NEW: Send flush only once when entering offline mode + if not self._flush_sent: + flush_event = LatentSpaceEvent( + tiled_url="FLUSH_SIGNAL", + feature_vector=[], + index=-1, + autoencoder_model="", + dimred_model="", + experiment_name="", + timestamp=time.time() + ) + await self.publish(flush_event) + self._flush_sent = True + logger.info("Sent flush signal when entering offline mode") + + logger.info(f"In offline mode - skipping dispatch frame {message.frame_number}") + return None + else: + # NEW: Reset flush flag when back in live mode + self._flush_sent = False + else: + # Model store couldn't be initialized, log a warning but continue processing + logger.debug("Redis Model Store not available, proceeding with processing") + + # Existing loading check + if hasattr(self.reducer, 'is_loading_model') and self.reducer.is_loading_model: + loading_type = self.reducer.loading_model_type or "unknown" + logger.info(f"Waiting for {loading_type} model to finish loading before processing frame {message.frame_number}...") + return None + + # Record timing information + start_time = time.time() + + # Pass message to reducer with timing information tracking + feature_vector, timing_info = await asyncio.to_thread(self.reducer.reduce, message) + + # Calculate total processing time + end_time = time.time() + total_processing_time = end_time - start_time + + if feature_vector is None: + logger.info(f"Skipping frame {message.frame_number} due to processing error or model transition") + return None + + # Get the current model names from the reducer + current_autoencoder = self.reducer.autoencoder_model_name + current_dimred = self.reducer.dimred_model_name + + # NEW: Get experiment name from the reducer + experiment_name = self.reducer.experiment_name + + response = LatentSpaceEvent( + tiled_url=message.tiled_url, + feature_vector=feature_vector[0].tolist(), + index=message.frame_number, + autoencoder_model=current_autoencoder, # Add autoencoder model name + dimred_model=current_dimred, # Add dimension reduction model name + experiment_name=experiment_name, # NEW: Add experiment name + timestamp=start_time, # Add start timestamp + total_processing_time=total_processing_time, # Add total processing time + autoencoder_time=timing_info.get('autoencoder_time'), # Add autoencoder processing time + dimred_time=timing_info.get('dimred_time'), # Add dimension reduction processing time + ) + return response + except Exception as e: + logger.error(f"Error sending message to broker {e}") + return None + + + @classmethod + def from_settings(cls, settings, reducer_settings=None): + + # socket.connect(settings.zmq_broker.router_address) + # logger.info(f"Connected to broker at {settings.zmq_broker.router_address}") + reducer = LatentSpaceReducer() + return cls(reducer) \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/publisher.py b/src/arroyosas/lse_reduction/publisher.py new file mode 100644 index 0000000..3570146 --- /dev/null +++ b/src/arroyosas/lse_reduction/publisher.py @@ -0,0 +1,93 @@ +import asyncio +import json +import logging +from typing import Union + +# import msgpack +# import numpy as np +import websockets +from arroyopy.publisher import Publisher +from arroyosas.schemas import SASStart, SASStop + +from .schemas import LatentSpaceEvent + +logger = logging.getLogger("arroyo_reduction.publisher") + + +class LSEWSResultPublisher(Publisher): + """ + A publisher class for sending dimensionality reduction information + + """ + + websocket_server = None + connected_clients = set() + current_start_message = None + + def __init__(self, host: str = "localhost", port: int = 8765, path="/lse_operator"): + + super().__init__() + self.host = host + self.port = port + self.path = path + logger.info(f"Initialized LSEWSResultPublisher on {self.host}:{self.port}{self.path}") + + async def start( + self, + ): + # Use partial to bind `self` while matching the expected handler signature + server = await websockets.serve( + self.websocket_handler, + self.host, + self.port, + ) + logger.info(f"Websocket server started at ws://{self.host}:{self.port}") + await server.wait_closed() + + async def publish(self, message: LatentSpaceEvent) -> None: + if self.connected_clients: # Only send if there are clients connected + asyncio.gather( + *(self.publish_ws(client, message) for client in self.connected_clients) + ) + + async def publish_ws( + self, + client, + message: Union[LatentSpaceEvent | SASStart | SASStop], + ) -> None: + if isinstance(message, SASStop): + # logger.info(f"WS Sending Stop {message}") + # self.current_start_message = None + # await client.send(json.dumps(message.model_dump())) + return + + if isinstance(message, SASStart): + # self.current_start_message = message + # logger.info(f"WS Sending Start {message}") + # await client.send(json.dumps(message.model_dump())) + return + + if isinstance(message, LatentSpaceEvent): + # send image data separately to client memory issues + logger.debug( + f"WS Sending LatentSpaceEvent: vector={message.feature_vector}, " + f"autoencoder={message.autoencoder_model}, dimred={message.dimred_model}, " + f"index={message.index}, tiled_url={message.tiled_url}" + ) + await client.send(message.model_dump_json()) + + async def websocket_handler(self, websocket): + logger.info(f"New connection from {websocket.remote_address}") + + self.connected_clients.add(websocket) + try: + # Keep the connection open and do nothing until the client disconnects + await websocket.wait_closed() + finally: + # Remove the client when it disconnects + self.connected_clients.remove(websocket) + logger.info("Client disconnected") + + @classmethod + def from_settings(cls, settings: dict) -> "LSEWSResultPublisher": + return cls(settings.host, settings.port) diff --git a/src/arroyosas/lse_reduction/redis_model_store.py b/src/arroyosas/lse_reduction/redis_model_store.py new file mode 100644 index 0000000..20de383 --- /dev/null +++ b/src/arroyosas/lse_reduction/redis_model_store.py @@ -0,0 +1,342 @@ +import json +import logging +import os +import threading +import time + +import redis + +logger = logging.getLogger(__name__) + +class RedisModelStore: + """ + Redis integration for model selections that supports both: + 1. Key-Value Store: For storing and retrieving model selections + 2. Pub/Sub: For real-time notification of model changes + + Models are stored in "name:version" format (e.g., "model_v1:3") + """ + + # Redis Key Constants + KEY_AUTOENCODER_MODEL = "selected_mlflow_model" + KEY_DIMRED_MODEL = "selected_dim_reduction_model" + KEY_EXPERIMENT_NAME = "experiment_name" # NEW: Add this constant + + # Redis Channel Constants + CHANNEL_MODEL_UPDATES = "model_updates" + + def __init__( + self, + host: str = None, + port: int = None, + password: str = None, + decode_responses: bool = True + ): + """Initialize Redis client for key-value operations""" + self.host = host or os.getenv("REDIS_HOST", "kvrocks") + self.port = port or int(os.getenv("REDIS_PORT", 6666)) + + + # Initialize Redis client + try: + self.redis_client = redis.Redis( + host=self.host, + port=self.port, + decode_responses=decode_responses + ) + logger.info(f"Connected to Redis at {self.host}:{self.port}") + except Exception as e: + self.redis_client = None + logger.warning(f"Could not connect to Redis: {e}") + + # NEW: Add these methods after the existing model methods + def store_experiment_name(self, experiment_name: str) -> bool: + """ + Store experiment name in Redis + + Args: + experiment_name: Name of the experiment (can be empty string to clear) + + Returns: + bool: Success status + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return False + + try: + logger.info(f"Storing experiment name: {experiment_name}") + self.redis_client.set(self.KEY_EXPERIMENT_NAME, experiment_name) + + # NEW: Add this line to publish the experiment name update + self.publish_experiment_update(experiment_name) + + return True + except Exception as e: + logger.error(f"Error storing experiment name in Redis: {e}") + return False + + def get_experiment_name(self) -> str: + """ + Get experiment name from Redis + + Returns: + str: Experiment name or None if not set + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return None + + try: + experiment_name = self.redis_client.get(self.KEY_EXPERIMENT_NAME) + logger.debug(f"Retrieved experiment name: {experiment_name}") + return experiment_name + except Exception as e: + logger.error(f"Error retrieving experiment name from Redis: {e}") + return None + + # NEW: Add this new method + def publish_experiment_update(self, experiment_name: str) -> bool: + """ + Publish an experiment name update notification to Redis + + Args: + experiment_name: Name of the experiment + + Returns: + bool: Success status + """ + if self.redis_client is None: + logger.warning("Redis client not available for publishing experiment update") + return False + + try: + # Create message payload for experiment name + message = { + "update_type": "experiment_name", # Different from model updates + "experiment_name": experiment_name, + "timestamp": time.time() + } + + # Publish to Redis channel + message_json = json.dumps(message) + result = self.redis_client.publish(self.CHANNEL_MODEL_UPDATES, message_json) + logger.info(f"Published experiment name update: {experiment_name}, received by {result} subscribers") + return True + except Exception as e: + logger.error(f"Error publishing experiment name update to Redis: {e}") + return False + + # ===================================================================== + # Key-Value Store Methods for Model Selection Storage + # ===================================================================== + + def store_autoencoder_model(self, model_identifier: str) -> bool: + """ + Store autoencoder model identifier in Redis + + Args: + model_identifier: Model identifier in "name:version" format (e.g., "model_v1:3") + or just "name" for backward compatibility + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return False + + try: + logger.info(f"Storing autoencoder model: {model_identifier}") + self.redis_client.set(self.KEY_AUTOENCODER_MODEL, model_identifier) + + # Parse model identifier for pub/sub notification + # The publish_model_update expects the full identifier + self.publish_model_update("autoencoder", model_identifier) + + return True + except Exception as e: + logger.error(f"Error storing autoencoder model in Redis: {e}") + return False + + def store_dimred_model(self, model_identifier: str) -> bool: + """ + Store dimension reduction model identifier in Redis + + Args: + model_identifier: Model identifier in "name:version" format (e.g., "umap_v1:2") + or just "name" for backward compatibility + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return False + + try: + logger.info(f"Storing dimension reduction model: {model_identifier}") + self.redis_client.set(self.KEY_DIMRED_MODEL, model_identifier) + + # Parse model identifier for pub/sub notification + self.publish_model_update("dimred", model_identifier) + + return True + except Exception as e: + logger.error(f"Error storing dimension reduction model in Redis: {e}") + return False + + def get_autoencoder_model(self) -> str: + """ + Get autoencoder model identifier from Redis + + Returns: + Model identifier in "name:version" format or just "name" + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return None + + try: + model_identifier = self.redis_client.get(self.KEY_AUTOENCODER_MODEL) + logger.info(f"Retrieved autoencoder model: {model_identifier}") + return model_identifier + except Exception as e: + logger.error(f"Error retrieving autoencoder model from Redis: {e}") + return None + + def get_dimred_model(self) -> str: + """ + Get dimension reduction model identifier from Redis + + Returns: + Model identifier in "name:version" format or just "name" + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return None + + try: + model_identifier = self.redis_client.get(self.KEY_DIMRED_MODEL) + logger.info(f"Retrieved dimension reduction model: {model_identifier}") + return model_identifier + except Exception as e: + logger.error(f"Error retrieving dimension reduction model from Redis: {e}") + return None + + # ===================================================================== + # Pub/Sub Methods for Real-time Model Updates + # ===================================================================== + + def publish_model_update(self, model_type: str, model_identifier: str) -> bool: + """ + Publish a model update notification to Redis + + Args: + model_type: Type of model ('autoencoder' or 'dimred') + model_identifier: Full model identifier in "name:version" format + + Returns: + bool: Success status + """ + if self.redis_client is None: + logger.warning("Redis client not available for publishing model update") + return False + + try: + # Create message payload with full identifier + message = { + "model_type": model_type, + "model_name": model_identifier, # This now contains "name:version" + "timestamp": time.time() + } + + # Publish to Redis channel + message_json = json.dumps(message) + result = self.redis_client.publish(self.CHANNEL_MODEL_UPDATES, message_json) + logger.info(f"Published model update: {message}, received by {result} subscribers") + return True + except Exception as e: + logger.error(f"Error publishing model update to Redis: {e}") + return False + + def subscribe_to_model_updates(self, callback): + """ + Subscribe to model update notifications from Redis + + Args: + callback: Function to call when a model update is received + """ + if self.redis_client is None: + logger.warning("Redis client not available for subscribing to model updates") + return + + # Create a new thread for listening to Redis Pub/Sub + def listener_thread(): + while True: + try: + # Create a new Redis connection for Pub/Sub + redis_client = redis.Redis( + host=self.host, + port=self.port, + decode_responses=True + ) + pubsub = redis_client.pubsub() + pubsub.subscribe(self.CHANNEL_MODEL_UPDATES) + logger.info(f"Subscribed to channel: {self.CHANNEL_MODEL_UPDATES}") + + # Listen for messages + for message in pubsub.listen(): + if message["type"] == "message": + try: + data = message.get("data") + if isinstance(data, str): + payload = json.loads(data) + logger.debug(f"Received model update: {payload}") + callback(payload) + except json.JSONDecodeError: + logger.warning(f"Received invalid JSON in model update: {message}") + except Exception as e: + logger.error(f"Error processing model update: {e}") + # Continue processing other messages even if one fails + + except (redis.exceptions.ConnectionError, redis.exceptions.TimeoutError) as e: + logger.warning(f"Redis connection error in listener: {e}. Retrying in 5 seconds...") + import time + time.sleep(5) + + except Exception as e: + logger.error(f"Unexpected error in model update listener: {e}") + # For unexpected errors, wait a bit longer before retrying + time.sleep(10) + # Don't break out of the loop - keep trying to reconnect + + # Start the listener thread + thread = threading.Thread(target=listener_thread, daemon=True) + thread.start() + logger.info("Started model update listener thread") + + def get_model_loading_state(self): + """ + Get the current model loading state from Redis + + Returns: + dict: Dictionary with is_loading_model (bool) and loading_model_type (str or None) + """ + if self.redis_client is None: + logger.warning("Redis client not available") + return {"is_loading_model": False, "loading_model_type": None} + + try: + # Get values directly from Redis + is_loading_str = self.redis_client.get("model_loading_state") + loading_type = self.redis_client.get("loading_model_type") + + # Convert is_loading to boolean - compare with string "True" + is_loading = str(is_loading_str) == "True" + + # Empty loading_type becomes None + if not loading_type: + loading_type = None + + return { + "is_loading_model": is_loading, + "loading_model_type": loading_type + } + except Exception as e: + logger.error(f"Error retrieving model loading state from Redis: {e}") + return {"is_loading_model": False, "loading_model_type": None} \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/redis_proxy_client.py b/src/arroyosas/lse_reduction/redis_proxy_client.py new file mode 100644 index 0000000..1d33a3e --- /dev/null +++ b/src/arroyosas/lse_reduction/redis_proxy_client.py @@ -0,0 +1,99 @@ +import json +import httpx +from typing import AsyncGenerator, Optional, Union + + +class RedisHTTPClient: + """Async HTTP client for Redis HTTP Gateway (SSE subscribe). + + Methods are async: get, set, publish, subscribe (async generator), close. + """ + + def __init__(self, base_url: str = "http://localhost:8000", token: Optional[str] = None, timeout: float = 10.0): + self.base_url = base_url.rstrip("/") + self.token = token + self.timeout = timeout + # Provide all four timeout parameters explicitly to satisfy httpx API. + client_timeout = httpx.Timeout(connect=timeout, read=None, write=None, pool=None) + self.client = httpx.AsyncClient(timeout=client_timeout) + print(f"RedisHTTPClient connecting to {self.base_url}") + if token: + self.client.headers["Authorization"] = f"Bearer {token}" + + # --- Basic KV ops --- + + async def get(self, key: str) -> Optional[Union[dict, str]]: + """GET /get?key=...""" + r = await self.client.get(f"{self.base_url}/get", params={"key": key}) + if r.status_code == 404: + return None + r.raise_for_status() + return r.json() + + async def set(self, key: str, value, ttl: Optional[int] = None, nx: Optional[bool] = None, xx: Optional[bool] = None): + """POST /set""" + payload = {"key": key, "value": value} + if ttl is not None: + payload["ttl"] = ttl + if nx is not None: + payload["nx"] = nx + if xx is not None: + payload["xx"] = xx + + r = await self.client.post(f"{self.base_url}/set", json=payload) + r.raise_for_status() + return r.json() + + # --- Pub/Sub --- + + async def publish(self, channel: str, message): + """POST /publish""" + payload = {"channel": channel, "message": message} + r = await self.client.post(f"{self.base_url}/publish", json=payload) + r.raise_for_status() + return r.json() + + async def subscribe(self, channel: str, heartbeat: int = 2) -> AsyncGenerator[Union[dict, str], None]: + """Async generator for SSE subscribe endpoint. + + Yields parsed JSON messages when possible, otherwise raw text. + """ + url = f"{self.base_url}/subscribe" + params = {"channel": channel, "heartbeat": heartbeat} + headers = {} + if self.token: + headers["Authorization"] = f"Bearer {self.token}" + + async with self.client.stream("GET", url, params=params, headers=headers) as resp: + resp.raise_for_status() + # Simple async SSE parser: accumulate lines until a blank line + data_lines = [] + async for raw_line in resp.aiter_lines(): + # raw_line is a str without trailing newline + line = raw_line.rstrip("\r\n") + if line == "": + # end of event + if not data_lines: + # heartbeat or comment-only event + data_lines = [] + continue + # concatenate data: lines starting with 'data:' + data = "\n".join(l.partition(":")[2].lstrip() for l in data_lines if l.startswith("data:")) + data_lines = [] + if not data: + continue + try: + yield json.loads(data) + except json.JSONDecodeError: + yield data + continue + + # Collect lines (including comments). Preserve exact prefix for parsing. + data_lines.append(line) + + async def close(self): + await self.client.aclose() + + +def from_url(url: str, token: Optional[str] = None, timeout: float = 10.0) -> RedisHTTPClient: + return RedisHTTPClient(base_url=url, token=token, timeout=timeout) \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/reducer.py b/src/arroyosas/lse_reduction/reducer.py new file mode 100644 index 0000000..c6e0c5a --- /dev/null +++ b/src/arroyosas/lse_reduction/reducer.py @@ -0,0 +1,345 @@ +import logging +import os +import sys +import time +from abc import ABC, abstractmethod +from pathlib import Path + +import numpy as np +import redis +import torch +import torchvision.transforms as transforms +from arroyosas.schemas import RawFrameEvent +from PIL import Image + +from .mlflow_utils import MLflowClient + +from .redis_model_store import RedisModelStore + +logger = logging.getLogger("arroyo_reduction.reducer") +# logger.propagate = False # Add this line to prevent propagation to parent loggers + + +# Set Numba environment variables to avoid umap illegal instruction error +os.environ.setdefault("NUMBA_DISABLE_JIT", "0") +# Check if JIT is disabled (set by user) +if os.environ.get("NUMBA_DISABLE_JIT") == "1": + # Apply conservative CPU settings for compatibility + os.environ.setdefault("NUMBA_CPU_NAME", "generic") + os.environ.setdefault("NUMBA_CPU_FEATURES", "+neon") + logger.info("Numba JIT disabled - using conservative CPU settings for compatibility") +# Else let Numba detect CPU features automatically + +# message = { +# "tiled_uri": DATA_TILED_URI, +# "index": index, +# "feature_vector": latent_vector.tolist(), +# } + +class Reducer(ABC): + """ + Abstract base class for reducers. + Reducers are responsible for taking an image, encoding it into a + latent space, and saving the latent space to a Tiled dataset. + """ + + @abstractmethod + def reduce(self, message: RawFrameEvent) -> tuple[np.ndarray, dict]: + """ + Reduce the image to a feature vector and return timing information. + Returns a tuple of (feature_vector, timing_info_dict) + """ + pass + +class LatentSpaceReducer(Reducer): + """ + Responsible for taking an image, encoding it into a + latent space, and reducing it to 2D + """ + + def __init__(self, redis_model_store: RedisModelStore): + """Initialize the reducer with models from Redis""" + # Initialize model loading status flags + self.is_loading_model = False + self.loading_model_type = None + + # Initialize Redis model store + self.redis_model_store = redis_model_store + + # Get model selections from Redis (may include version in "name:version" format) + self.autoencoder_model_name = self.redis_model_store.get_autoencoder_model() + self.dimred_model_name = self.redis_model_store.get_dimred_model() + self.experiment_name = self.redis_model_store.get_experiment_name() + + logger.info(f"Using experiment name: {self.experiment_name}") + logger.info(f"Using autoencoder model: {self.autoencoder_model_name}") + logger.info(f"Using dimension reduction model: {self.dimred_model_name}") + + # Check for CUDA else use CPU + if torch.cuda.is_available(): + device = torch.device("cuda") + logger.info(f"Using CUDA: {torch.cuda.get_device_name(0)}") + else: + device = torch.device("cpu") + logger.info("Using CPU") + self.device = device + + # Load models from MLflow + mlflow_client = MLflowClient() + self.mlflow_client = mlflow_client # Store for later use + + # Set loading flags before loading models + self._update_loading_state(True, "initial") + + try: + # Parse model name and version for autoencoder + if self.autoencoder_model_name and ":" in self.autoencoder_model_name: + auto_name, auto_version = self.autoencoder_model_name.split(":", 1) + self.current_torch_model = mlflow_client.load_model(auto_name, version=auto_version) + else: + self.current_torch_model = mlflow_client.load_model(self.autoencoder_model_name) + + # Parse model name and version for dimred + if self.dimred_model_name and ":" in self.dimred_model_name: + dimred_name, dimred_version = self.dimred_model_name.split(":", 1) + self.current_dim_reduction_model = mlflow_client.load_model(dimred_name, version=dimred_version) + else: + self.current_dim_reduction_model = mlflow_client.load_model(self.dimred_model_name) + + logger.info("Initial models loaded successfully") + finally: + # Reset loading flags + self._update_loading_state(False) + + # Subscribe to model update channel if supported + self._subscribe_to_model_updates() + + def _update_loading_state(self, is_loading, model_type=None): + """ + Update loading state both locally and in Redis + + Args: + is_loading (bool): Whether models are currently loading + model_type (str, optional): Type of model being loaded if is_loading=True + """ + # Update local state + self.is_loading_model = is_loading + self.loading_model_type = model_type if is_loading else None + + # Update Redis state + try: + if self.redis_model_store and self.redis_model_store.redis_client: + self.redis_model_store.redis_client.set("model_loading_state", str(is_loading)) + self.redis_model_store.redis_client.set("loading_model_type", str(model_type or "")) + logger.info(f"Updated loading state in Redis: is_loading={is_loading}, type={model_type or ''}") + except Exception as e: + logger.error(f"Error updating loading state in Redis: {e}") + + def reduce(self, message: RawFrameEvent) -> tuple[np.ndarray, dict]: + """Process an image through the models to get feature vectors with timing information""" + + # Initialize timing dictionary + timing_info = { + 'autoencoder_time': None, + 'dimred_time': None + } + + # Check if models are currently being loading + if self.is_loading_model: + logger.info(f"Waiting for {self.loading_model_type} model to finish loading...") + # Return a placeholder while models are loading + return None, timing_info + + try: + # Get numpy array from message + img_array = message.image.array + + # Additional debugging for the image data + logger.info(f"Get input image shape: {img_array.shape}, dtype: {img_array.dtype}. Image min: {img_array.min()}, max: {img_array.max()}") + + except Exception as e: + logger.error(f"Error in image preparation: {e}") + return None, timing_info + + # Process with autoencoder to get latent features with timing + try: + # Start timing autoencoder processing + autoencoder_start = time.time() + + # Pass numpy array directly to model, the predict() API will handle data preprocessing + autoencoder_result = self.current_torch_model.predict(img_array) + latent_features = autoencoder_result["latent_features"] + + # End timing autoencoder processing + autoencoder_end = time.time() + timing_info['autoencoder_time'] = autoencoder_end - autoencoder_start + + logger.info(f"Latent features shape: {latent_features.shape}, processing time: {timing_info['autoencoder_time']:.4f}s") + + except Exception as e: + logger.error(f"Error in autoencoder processing: {e}") + return None, timing_info + + # Apply dimension reduction directly with latent features with timing + try: + # Start timing dimension reduction processing + dimred_start = time.time() + + dimred_result = self.current_dim_reduction_model.predict(latent_features) + f_vec = dimred_result["coords"] + + # End timing dimension reduction processing + dimred_end = time.time() + timing_info['dimred_time'] = dimred_end - dimred_start + + logger.info(f"Feature vector shape: {f_vec.shape}, processing time: {timing_info['dimred_time']:.4f}s") + + return f_vec, timing_info + except Exception as e: + logger.error(f"Error in dimension reduction: {e}") + return None, timing_info + + def _subscribe_to_model_updates(self): + """ + Subscribe to model update notifications through Redis PubSub + This runs in a separate thread to listen for model updates + """ + try: + import threading + + def listen_for_updates(): + """Listen for model updates in a separate thread""" + try: + redis_client = redis.Redis( + host=REDIS_HOST, + port=REDIS_PORT, + decode_responses=True + ) + pubsub = redis_client.pubsub() + pubsub.subscribe("model_updates") + + logger.info("Subscribed to model updates channel") + + # Listen for messages + for message in pubsub.listen(): + if message["type"] == "message": + data = message["data"] + try: + import json + update = json.loads(data) + self._handle_model_update(update) + except Exception as e: + logger.error(f"Error processing model update: {e}") + except Exception as e: + logger.error(f"Error in model update listener: {e}") + + # Start listener thread + thread = threading.Thread(target=listen_for_updates, daemon=True) + thread.start() + logger.info("Started model update listener thread") + except Exception as e: + logger.warning(f"Could not start model update listener: {e}") + + + def _handle_model_update(self, update): + """Handle a model update from Redis PubSub with version support""" + try: + # NEW: Check if this is an experiment name update + if update.get("update_type") == "experiment_name": + new_experiment_name = update.get("experiment_name") + logger.info(f"Received experiment name update: {new_experiment_name}") + self.experiment_name = new_experiment_name + return + + # Otherwise handle model updates as before + model_type = update.get("model_type") + model_id = update.get("model_name") + + if not model_type or not model_id: + logger.warning(f"Invalid model update: {update}") + return + + # Parse model name and version + if ":" in model_id: + model_name, model_version = model_id.split(":", 1) + else: + model_name = model_id + model_version = None + + # Check if this is a duplicate update + if model_type == "autoencoder": + if self.autoencoder_model_name and ":" in self.autoencoder_model_name: + current_name, current_version = self.autoencoder_model_name.split(":", 1) + else: + current_name = self.autoencoder_model_name + current_version = None + + if model_name == current_name and model_version == current_version: + logger.info(f"Ignoring duplicate autoencoder update: {model_id}") + self._update_loading_state(False) + return + + elif model_type == "dimred": + if self.dimred_model_name and ":" in self.dimred_model_name: + current_name, current_version = self.dimred_model_name.split(":", 1) + else: + current_name = self.dimred_model_name + current_version = None + + if model_name == current_name and model_version == current_version: + logger.info(f"Ignoring duplicate dimred update: {model_id}") + self._update_loading_state(False) + return + + logger.info(f"Received model update: {model_type} = {model_id}") + + # Set loading flags + self._update_loading_state(True, model_type) + + try: + # Update the appropriate model + if model_type == "autoencoder": + logger.info(f"Loading new autoencoder model: {model_id}...") + # DON'T update name yet - wait until model is loaded + # self.autoencoder_model_name = model_id # ← REMOVE THIS + + # Load model with version if specified + if model_version: + new_model = self.mlflow_client.load_model( + model_name, version=model_version + ) + else: + new_model = self.mlflow_client.load_model(model_name) + + # Only update name AFTER successful load + self.current_torch_model = new_model + self.autoencoder_model_name = model_id # ← MOVE HERE + logger.info(f"Successfully loaded new autoencoder model: {model_id}") + + elif model_type == "dimred": + logger.info(f"Loading new dimension reduction model: {model_id}...") + # DON'T update name yet - wait until model is loaded + # self.dimred_model_name = model_id # ← REMOVE THIS + + # Load model with version if specified + if model_version: + new_model = self.mlflow_client.load_model( + model_name, version=model_version + ) + else: + new_model = self.mlflow_client.load_model(model_name) + + # Only update name AFTER successful load + self.current_dim_reduction_model = new_model + self.dimred_model_name = model_id # ← MOVE HERE + logger.info(f"Successfully loaded new dimension reduction model: {model_id}") + else: + logger.warning(f"Unknown model type: {model_type}") + finally: + # Reset loading flags + self._update_loading_state(False) + logger.info(f"Model update complete. Ready to process images.") + except Exception as e: + # Ensure we reset flags even if there's an error + self._update_loading_state(False) + logger.error(f"Error handling model update: {e}") \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/schemas.py b/src/arroyosas/lse_reduction/schemas.py new file mode 100644 index 0000000..fe7ee58 --- /dev/null +++ b/src/arroyosas/lse_reduction/schemas.py @@ -0,0 +1,45 @@ +import numpy as np +from arroyopy.schemas import Event +from pydantic import BaseModel, field_serializer, field_validator + + +class SerializableNumpyArrayModel(BaseModel): + """ + Custom Pydantic model for serializing NumPy arrays. + """ + + array: np.ndarray + + @field_serializer("array") + def serialize_array(self, value: np.ndarray): + """Convert NumPy array to a dictionary with bytes and dtype""" + return { + "data": value.tobytes(), + "dtype": str(value.dtype.name), + "shape": value.shape, + } + + @field_validator("array", mode="before") + @classmethod + def deserialize_array(cls, value): + """Convert bytes back to NumPy array""" + if isinstance(value, dict) and "data" in value: + return np.frombuffer(value["data"], dtype=np.dtype(value["dtype"])).reshape( + value["shape"] + ) + return value + + class Config: + arbitrary_types_allowed = True + +class LatentSpaceEvent(Event): + tiled_url: str + feature_vector: list[float] + index: int + autoencoder_model: str = None # Add autoencoder model name + dimred_model: str = None # Add dimension reduction model name + experiment_name: str = None # NEW: Add experiment name + timestamp: float = None # Add timestamp for when processing began + total_processing_time: float = None # Total time to process the frame + autoencoder_time: float = None # Time spent in autoencoder processing + dimred_time: float = None # Time spent in dimension reduction processing \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/tiled_results_publisher.py b/src/arroyosas/lse_reduction/tiled_results_publisher.py new file mode 100644 index 0000000..1038340 --- /dev/null +++ b/src/arroyosas/lse_reduction/tiled_results_publisher.py @@ -0,0 +1,514 @@ +import asyncio +import logging +import os +import re +import time +from datetime import datetime + +import numpy as np +import pandas as pd +import pytz +from arroyopy.publisher import Publisher +from arroyosas.schemas import SASStop +from tiled.client import from_uri + +from .schemas import LatentSpaceEvent + +logger = logging.getLogger("arroyo_reduction.tiled_results_publisher") + +# Environment variables for Tiled connections +RESULTS_TILED_URI = os.getenv("RESULTS_TILED_URI", "http://tiled:8000") +RESULTS_TILED_API_KEY = os.getenv("RESULTS_TILED_API_KEY", "") +# REMOVED: Get USER from environment +# Constants +# Timezone for log timestamps +CALIFORNIA_TZ = pytz.timezone("US/Pacific") +# Regex pattern to extract UUID from tiled_url +UUID_PATTERN = r"([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})" + + +class TiledResultsPublisher(Publisher): + """Publisher that saves latent space vectors to a Tiled server.""" + + def __init__( + self, tiled_uri=None, tiled_api_key=None, root_segments=None, tiled_prefix=None + ): + super().__init__() + self.tiled_uri = tiled_uri or RESULTS_TILED_URI + self.tiled_api_key = tiled_api_key or RESULTS_TILED_API_KEY + self.tiled_prefix = tiled_prefix # NEW: Add prefix support + self.root_segments = root_segments or ["lse_live_results"] + # REMOVED: self.user = USER + self.client = None + self.root_container = None + # REMOVED: self.user_container = None + # CHANGED: Split daily_container into Year/Month/Day hierarchy + self.year_container = None + self.month_container = None + self.day_container = None + + # Dictionary to store DataFrames by UUID + self.uuid_dataframes = {} + # Set to track UUIDs that already exist in Tiled + self.existing_uuids = set() + # Default table name if no UUID is available + self.default_table_name = "feature_vectors" + # Keep track of the current UUID + self.current_uuid = None + + # Track current experiment name (will be set from message) + self.current_experiment_name = "default_experiment" + + logger.info(f"Initialized publisher with UUID-based table grouping") + + async def start(self): + """Connect to Tiled server and initialize containers.""" + try: + # Run the entire initialization in a separate thread + await asyncio.to_thread(self._start_sync) + except Exception as e: + logger.error(f"Failed to initialize Tiled client: {e}") + import traceback + + logger.error(traceback.format_exc()) + + def _start_sync(self): + """Synchronous implementation of start() to be run in a thread.""" + try: + self.client = from_uri(self.tiled_uri, api_key=self.tiled_api_key) + + # NEW: Navigate to prefix first if specified - ERROR if it doesn't exist + container = self.client + if self.tiled_prefix: + prefix_segments = self.tiled_prefix.split("/") + for segment in prefix_segments: + if segment: # Skip empty strings + if segment in container: + logger.info(f"Using existing prefix container: {segment}") + container = container[segment] + else: + # Create the prefix path if it doesn't exist + logger.info(f"Creating prefix container: {segment}") + container = container.create_container(segment) + + # Navigate to the root container and create the hierarchy + self._setup_containers_sync(container) + + # List all existing tables in the day container (CHANGED from daily_container) + if self.day_container is not None: + table_keys = list(self.day_container) + logger.info(f"Found {len(table_keys)} existing tables in day container") + + # Add all existing tables to our set of existing UUIDs + self.existing_uuids.update(table_keys) + logger.info(f"Tracking {len(self.existing_uuids)} existing UUIDs") + + # Log some examples of existing UUIDs for debugging + if self.existing_uuids: + examples = list(self.existing_uuids)[:3] + logger.info(f"Examples of existing UUIDs: {', '.join(examples)}") + + logger.info(f"Connected to Tiled server at {self.tiled_uri}") + prefix_path = f"{self.tiled_prefix}/" if self.tiled_prefix else "" + # CHANGED: Remove user from path, log new path structure + now = datetime.now(CALIFORNIA_TZ) + logger.info( + f"Using container path: {prefix_path}{'/'.join(self.root_segments)}/{now.year}/{now.month:02d}/{now.day:02d}" + ) + except Exception as e: + logger.error(f"Error in _start_sync: {e}") + import traceback + + logger.error(traceback.format_exc()) + raise + + def _extract_uuid_from_url(self, url): + """Extract UUID from tiled_url.""" + if not url: + return self.default_table_name + + # Log the URL for debugging + logger.debug(f"Extracting UUID from URL: {url}") + + match = re.search(UUID_PATTERN, url) + if match: + uuid = match.group(1) + logger.debug(f"Extracted UUID: {uuid}") + return uuid + + logger.debug(f"No UUID found in URL, using default: {self.default_table_name}") + return self.default_table_name + + def _setup_containers_sync(self, starting_container=None): + """Set up the container structure without USER level (synchronous version).""" + try: + # NEW: Start from provided container or client + container = ( + starting_container if starting_container is not None else self.client + ) + + # Navigate through root_segments (these we can create) + for segment in self.root_segments: + if segment in container: + logger.info(f"Using existing container: {segment}") + container = container[segment] + else: + logger.info(f"Creating container: {segment}") + container = container.create_container(segment) + + # Store reference to the root container + self.root_container = container + + # REMOVED: Create or navigate to USER container + + # CHANGED: Replace single daily_run container with Year/Month/Day hierarchy + # Get current date components + now = datetime.now(CALIFORNIA_TZ) + year_str = str(now.year) + month_str = f"{now.month:02d}" + day_str = f"{now.day:02d}" + + # Create Year container + if year_str not in self.root_container: + logger.info(f"Creating year container: {year_str}") + self.root_container.create_container(year_str) + else: + logger.info(f"Using existing year container: {year_str}") + self.year_container = self.root_container[year_str] + + # Create Month container + if month_str not in self.year_container: + logger.info(f"Creating month container: {month_str}") + self.year_container.create_container(month_str) + else: + logger.info(f"Using existing month container: {month_str}") + self.month_container = self.year_container[month_str] + + # Create Day container + if day_str not in self.month_container: + logger.info(f"Creating day container: {day_str}") + self.month_container.create_container(day_str) + else: + logger.info(f"Using existing day container: {day_str}") + self.day_container = self.month_container[day_str] + + except Exception as e: + logger.error(f"Error setting up containers: {e}") + import traceback + + logger.error(traceback.format_exc()) + raise + + def _get_experiment_container(self, experiment_name=None): + """Get or create the experiment container based on experiment name""" + try: + # Use provided experiment_name, or fall back to current, or default + exp_name = ( + experiment_name or self.current_experiment_name or "default_experiment" + ) + + # Check if experiment container exists in day container (CHANGED from daily_container) + if exp_name not in self.day_container: + logger.info(f"Creating experiment container: {exp_name}") + self.day_container.create_container(exp_name) + + return self.day_container[exp_name] + except Exception as e: + logger.error(f"Error getting experiment container: {e}") + import traceback + + logger.error(traceback.format_exc()) + # Fallback to day container (CHANGED from daily_container) + return self.day_container + + async def publish(self, message): + """Publish a message to Tiled server.""" + + # Check for flush signal + if isinstance(message, LatentSpaceEvent): + if message.tiled_url == "FLUSH_SIGNAL": + logger.info("Received flush signal - writing pending data") + if ( + self.current_uuid + and self.current_uuid in self.uuid_dataframes + and not self.uuid_dataframes[self.current_uuid].empty + ): + await self.write_table_to_tiled(self.current_uuid) + logger.info(f"Flushed data for UUID {self.current_uuid}") + self.current_uuid = None + return + + if isinstance(message, SASStop): + logger.info("Received Stop message, writing any remaining data to Tiled") + await self.stop() + return + + if not isinstance(message, LatentSpaceEvent): + return + + try: + # Run the entire publish operation in a separate thread + uuid_to_write = await asyncio.to_thread(self._publish_sync, message) + + # If there's a UUID to write, write it + if uuid_to_write: + await self.write_table_to_tiled(uuid_to_write) + + except Exception as e: + logger.error(f"Error publishing to Tiled: {e}") + import traceback + + logger.error(traceback.format_exc()) + + def _publish_sync(self, message): + """Synchronous implementation of publish() to be run in a thread.""" + try: + # Ensure day container exists (CHANGED from daily_container) + if self.day_container is None: + logger.error("Day container not initialized, cannot publish") + return None + + # Format vector and metadata + vector = np.array(message.feature_vector, dtype=np.float32) + if vector.ndim == 1: + # Extract UUID from tiled_url + tiled_url = getattr(message, "tiled_url", None) + uuid = self._extract_uuid_from_url(tiled_url) + + # Get experiment name from message + experiment_name = getattr(message, "experiment_name", None) + if experiment_name: + self.current_experiment_name = experiment_name + + # Get experiment container + experiment_container = self._get_experiment_container(experiment_name) + + # NEW: Check if UUID container exists (not UUID/feature_vectors table) + if uuid in experiment_container: + uuid_container = experiment_container[uuid] + # Check if feature_vectors table exists inside UUID container + if "feature_vectors" in uuid_container: + logger.debug(f"Skipping vector for existing UUID: {uuid}") + return None + + # Check if this is a new UUID + uuid_to_write = None + + if ( + self.current_uuid is not None + and uuid != self.current_uuid + and self.current_uuid in self.uuid_dataframes + ): + # We have a new UUID, so write the data for the previous UUID + if not self.uuid_dataframes[self.current_uuid].empty: + # Check if the previous UUID's feature_vectors already exists + prev_uuid_container = experiment_container.get( + self.current_uuid + ) + should_write = True + if ( + prev_uuid_container + and "feature_vectors" in prev_uuid_container + ): + should_write = False + + if should_write: + logger.info( + f"New UUID detected, marking previous UUID for writing: {self.current_uuid}" + ) + uuid_to_write = self.current_uuid + + # Update current UUID + self.current_uuid = uuid + + # Initialize tracking for this UUID if needed + if uuid not in self.uuid_dataframes: + self.uuid_dataframes[uuid] = pd.DataFrame() + + # Create a record with metadata and the vector + record = { + "tiled_url": tiled_url, + "autoencoder_model": getattr(message, "autoencoder_model", None), + "dimred_model": getattr(message, "dimred_model", None), + "timestamp": getattr(message, "timestamp", time.time()), + "total_processing_time": getattr( + message, "total_processing_time", None + ), + "autoencoder_time": getattr(message, "autoencoder_time", None), + "dimred_time": getattr(message, "dimred_time", None), + } + + # Add vector elements as columns (limit to first 20 to keep it manageable) + for i, val in enumerate(vector[:20]): + record[f"feature_{i}"] = float(val) + + # Append to DataFrame for this UUID + new_row = pd.DataFrame([record]) + self.uuid_dataframes[uuid] = pd.concat( + [self.uuid_dataframes[uuid], new_row], ignore_index=True + ) + + logger.debug(f"Added vector to table '{uuid}'") + + return uuid_to_write + else: + logger.warning( + f"Received vector with unexpected dimensions: {vector.shape}" + ) + return None + except Exception as e: + logger.error(f"Error in _publish_sync: {e}") + import traceback + + logger.error(traceback.format_exc()) + return None + + async def write_table_to_tiled(self, table_key): + """Write the collected vectors for a specific UUID to Tiled.""" + try: + # Run the write operation in a separate thread + await asyncio.to_thread(self._write_table_to_tiled_sync, table_key) + except Exception as e: + logger.error(f"Error in write_table_to_tiled for {table_key}: {e}") + import traceback + + logger.error(traceback.format_exc()) + + def _write_table_to_tiled_sync(self, table_key): + """Synchronous implementation of write_table_to_tiled to be run in a thread.""" + try: + # Get experiment container instead of using daily_container + experiment_container = self._get_experiment_container( + self.current_experiment_name + ) + + # NEW: Check if UUID container exists, and if feature_vectors table exists inside it + if table_key in experiment_container: + uuid_container = experiment_container[table_key] + if "feature_vectors" in uuid_container: + logger.info( + f"Skipping write for existing UUID: {table_key} (feature_vectors already exists)" + ) + return + + # Get the DataFrame for this UUID + df = self.uuid_dataframes.get(table_key) + if df is None: + logger.warning(f"No DataFrame found for {table_key}") + return + + # Log DataFrame info for debugging (CHANGED: use current date instead of user) + now = datetime.now(CALIFORNIA_TZ) + logger.info( + f"Writing {len(df)} vectors to new table '{table_key}/feature_vectors' in {now.year}/{now.month:02d}/{now.day:02d}/{self.current_experiment_name}" + ) + + # Check if DataFrame is empty + if df.empty: + logger.warning(f"DataFrame for {table_key} is empty, nothing to write") + return + + # NEW: Create UUID container if it doesn't exist + if table_key not in experiment_container: + logger.info(f"Creating UUID container: {table_key}") + experiment_container.create_container(table_key) + + uuid_container = experiment_container[table_key] + + # Write the DataFrame as "feature_vectors" inside the UUID container + try: + uuid_container.write_dataframe(df, key="feature_vectors") + + logger.info( + f"Successfully wrote {len(df)} vectors to '{table_key}/feature_vectors'" + ) + + # Add this UUID to our set of existing UUIDs + self.existing_uuids.add(table_key) + + # Clear the DataFrame for this UUID + self.uuid_dataframes[table_key] = pd.DataFrame() + + except Exception as e: + logger.error(f"Error writing DataFrame for {table_key}: {e}") + import traceback + + logger.error(traceback.format_exc()) + + except Exception as e: + logger.error(f"Error in _write_table_to_tiled_sync for {table_key}: {e}") + import traceback + + logger.error(traceback.format_exc()) + + async def stop(self): + """Write any remaining data for new UUIDs before stopping.""" + try: + # Run the stopping operation in a separate thread to get UUID to write + uuid_to_write = await asyncio.to_thread(self._stop_sync) + + # If there's a UUID to write, write it + if uuid_to_write: + logger.info(f"Writing final data for UUID: {uuid_to_write}") + await self.write_table_to_tiled(uuid_to_write) + + logger.info("Publisher stopped") + except Exception as e: + logger.error(f"Error stopping publisher: {e}") + import traceback + + logger.error(traceback.format_exc()) + + def _stop_sync(self): + """Synchronous implementation of stop() to be run in a thread. + + Returns: + str or None: UUID that needs to be written, or None if no writing needed + """ + try: + logger.info("Publisher stopping, checking if current UUID needs writing") + + # Get experiment container to check existing UUIDs + experiment_container = self._get_experiment_container( + self.current_experiment_name + ) + + # Check if the current UUID needs writing + if ( + self.current_uuid is not None + and self.current_uuid in self.uuid_dataframes + and not self.uuid_dataframes[self.current_uuid].empty + ): + + # Check if UUID container and feature_vectors table already exist + if self.current_uuid in experiment_container: + uuid_container = experiment_container[self.current_uuid] + if "feature_vectors" in uuid_container: + logger.info( + f"UUID {self.current_uuid} already has feature_vectors, skipping write" + ) + return None + + return self.current_uuid + + return None + except Exception as e: + logger.error(f"Error in _stop_sync: {e}") + import traceback + + logger.error(traceback.format_exc()) + return None + + +def create_tiled_results_publisher( + tiled_uri=None, + tiled_api_key=None, + root_segments=None, + tiled_prefix=None): + + return TiledResultsPublisher( + tiled_uri=tiled_uri, + root_segments=root_segments, + tiled_prefix=tiled_prefix, + tiled_api_key = None + ) \ No newline at end of file diff --git a/src/arroyosas/lse_reduction/vector_save.py b/src/arroyosas/lse_reduction/vector_save.py new file mode 100644 index 0000000..7e7dee5 --- /dev/null +++ b/src/arroyosas/lse_reduction/vector_save.py @@ -0,0 +1,91 @@ +import logging +import json +import time +import aiosqlite + +from arroyopy.operator import Operator +from arroyopy.publisher import Publisher + +from .schemas import LatentSpaceEvent + +logger = logging.getLogger("arroyo_reduction.vector_save") + +class VectorSavePublisher(Publisher): + def __init__(self, db_path="vector_results.db"): + super().__init__() + self.db_path = db_path + self._db_initialized = False + self.db: aiosqlite.Connection = None + # Database will be initialized lazily in start() + + async def start(self): + logger.info(f"Starting VectorSavePublisher with DB path: {self.db_path}") + await self._init_db() + + async def _init_db(self): + if not self._db_initialized: + if self.db is None: + self.db = await aiosqlite.connect(self.db_path) + await self.db.execute(''' + CREATE TABLE IF NOT EXISTS vectors ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + tiled_url TEXT NOT NULL, + feature_vector TEXT NOT NULL, + autoencoder_model TEXT, + dimred_model TEXT, + experiment_name TEXT, + timestamp REAL, + total_processing_time REAL, + autoencoder_time REAL, + dimred_time REAL + ) + ''') + await self.db.commit() + self._db_initialized = True + + async def save_vector( + self, + tiled_url: str, + feature_vector: list[float], + autoencoder_model: str, + dimred_model: str, + experiment_name: str = None, # Add parameter + timestamp: float = None, + total_processing_time: float = None, + autoencoder_time: float = None, + dimred_time: float = None): + await self._init_db() + # Convert numpy array to JSON string for storage + vector_str = json.dumps(feature_vector) + + await self.db.execute( + "INSERT INTO vectors (tiled_url, feature_vector, autoencoder_model, dimred_model, experiment_name, timestamp, total_processing_time, autoencoder_time, dimred_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", + (tiled_url, vector_str, autoencoder_model, dimred_model, experiment_name, timestamp, total_processing_time, autoencoder_time, dimred_time) + ) + await self.db.commit() + + async def publish(self, message: LatentSpaceEvent) -> None: + if not isinstance(message, LatentSpaceEvent): + return None + + tiled_url = message.tiled_url + feature_vector = message.feature_vector + autoencoder_model = message.autoencoder_model + dimred_model = message.dimred_model + experiment_name = getattr(message, "experiment_name", None) # Get experiment name + timestamp = message.timestamp if hasattr(message, "timestamp") else time.time() + total_processing_time = message.total_processing_time if hasattr(message, "total_processing_time") else None + autoencoder_time = message.autoencoder_time if hasattr(message, "autoencoder_time") else None + dimred_time = message.dimred_time if hasattr(message, "dimred_time") else None + + await self.save_vector( + tiled_url=tiled_url, + feature_vector=feature_vector, + autoencoder_model=autoencoder_model, + dimred_model=dimred_model, + experiment_name=experiment_name, # Pass experiment name + timestamp=timestamp, + total_processing_time=total_processing_time, + autoencoder_time=autoencoder_time, + dimred_time=dimred_time + ) \ No newline at end of file diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket.py index 5d631e8..93f8983 100644 --- a/src/arroyosas/tiled/tiled_websocket.py +++ b/src/arroyosas/tiled/tiled_websocket.py @@ -8,7 +8,6 @@ # import numpy as np from arroyopy.listener import Listener -from arroyopy.operator import Operator from tiled.client import from_uri from tiled.client.base import BaseClient from tiled.client.stream import Subscription @@ -21,7 +20,6 @@ logger = logging.getLogger(__name__) - class TiledClientListener(Listener): """ A listener that subscribes to Tiled events and processes them @@ -33,14 +31,12 @@ class TiledClientListener(Listener): def __init__( self, - operator: Operator, tiled_client: BaseClient, stream_name: str, target: str = "img", create_run_logs: bool = True, log_dir: str = "tiled_logs", ): - self.operator = operator self.tiled_client = tiled_client self.stream_name = stream_name self.target = target @@ -168,7 +164,7 @@ async def stop(self) -> None: await super().stop() def send_to_operator(self, message: SASMessage) -> None: - asyncio.run(self.operator.process(message)) + asyncio.run(self.publish(message)) def publish_start(self, data: Dict[str, Any]) -> None: start = SASStart( @@ -235,34 +231,11 @@ def log_message_to_json( except Exception as e: logger.error(f"Failed to log event {event_name}: {e}") - @classmethod - def from_settings(cls, settings: Any, op: Operator) -> "TiledClientListener": - """Create a TiledClientListener from settings.""" - client = from_uri( - settings.uri, - api_key=settings.api_key, - ) - # for key in client.context.whoami()['api_keys']: - # client.context.revoke_api_key(key['first_eight']) - logger.info(f"#### Listening for runs at {settings.base_segments}") - # logger.info(f"#### Frames segments: {settings.frames_segments}") - - # Create log directory if specified in settings - log_dir = getattr(settings, "log_dir", "tiled_logs") - - return cls( - op, - client, - settings.stream_name, - settings.target, - log_dir, - ) - -def create_tiled_client_listener( - operator: Operator, +def create_tiled_websocket_listener( uri: str, stream_name: str, + operator = None, target: str = "img", create_run_logs: bool = True, log_dir: str = "tiled_logs", @@ -271,38 +244,4 @@ def create_tiled_client_listener( if api_key is None: api_key = os.environ.get("TILED_LIVE_API_KEY") client = from_uri(uri, api_key=api_key) - return TiledClientListener(operator, client, stream_name, target, create_run_logs, log_dir) - - -if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - # Example usage - settings = { - # "uri": "http://localhost:8000", - "uri": "https://tiled-dev.nsls2.bnl.gov/", - "api_key": None, # Replace with actual API key if needed - "base_segments": [], - # "frames_segments": ["primary", "data"], - "stream_name": "primary", - "target": "pil2M_image", - "log_dir": "tiled_event_logs", # Directory for JSON logs - } - - class Settings: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - settings = Settings(**settings) - - class NullOperator(Operator): - async def process(self, message: SASMessage) -> None: - # Dummy process method for demonstration - logger.info(f"Processing message: {message}") - - n_operator = NullOperator() # Replace with actual operator instance - listener = TiledClientListener.from_settings(settings, n_operator) - - asyncio.run(listener.start()) - - while True: - time.sleep(5) # Keep the script running + return TiledClientListener(client, stream_name, target, create_run_logs, log_dir) From a69dc5e5b556bc8e99a02bb007ab07f60fbb7c0e Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Wed, 1 Apr 2026 16:09:26 -0700 Subject: [PATCH 05/16] webocket listener for bl733 --- block_configs/lse_operator_block.yaml | 5 +- pixi.lock | 85 +-------- src/arroyosas/tiled/tiled_websocket_bl733.py | 165 ++++++++++++++++++ ...ebsocket.py => tiled_websocket_bluesky.py} | 0 4 files changed, 169 insertions(+), 86 deletions(-) create mode 100644 src/arroyosas/tiled/tiled_websocket_bl733.py rename src/arroyosas/tiled/{tiled_websocket.py => tiled_websocket_bluesky.py} (100%) diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml index faeabc0..c18d670 100644 --- a/block_configs/lse_operator_block.yaml +++ b/block_configs/lse_operator_block.yaml @@ -8,11 +8,10 @@ blocks: redis_port: 6666 listeners: - - class: arroyosas.tiled.tiled_websocket.create_tiled_websocket_listener + - class: arroyosas.tiled.tiled_websocket_bl733.create_tiled_websocket_listener kwargs: uri: "https://tiled-staging.computing.als.lbl.gov" - stream_name: "beamlines" - target: "img" + sub_path: "beamlines/bl733/dylan_test" # api_key: falls back to TILED_LIVE_API_KEY env var publishers: diff --git a/pixi.lock b/pixi.lock index 632fe13..a9276f3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -356,12 +356,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/4c/781267da3188db679e601de18112021a5cb16506fe86b246e22c5401a9c4/hf_xet-1.4.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl @@ -390,10 +388,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/9b/89/1a74ea99b180b7a5587b0301ed1b183a2937c4b4b67f7994689b5d36fc34/numba-0.64.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3a/79/f5458169690845eb014d21bbbaa855622064a7f28b06ab4ebbb1b2c263ae/opentelemetry_api-1.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl @@ -401,7 +395,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl @@ -431,7 +424,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/90/273b6c7ec78af547694eddeea9e05de771278bd20476525ab930cecaf7d8/tokenizers-0.21.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl @@ -822,12 +814,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl @@ -865,10 +855,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/fb/53/78c98ef5c8b2b784453487f3e4d6c017b20747c58b470393e230c78d18e8/numcodecs-0.16.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/79/f5458169690845eb014d21bbbaa855622064a7f28b06ab4ebbb1b2c263ae/opentelemetry_api-1.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/82/b03e1fdb7e0d52fc17f1cb7373e0b7fcb7d723b176ff162c14f394efce01/opentelemetry_sdk-1.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/09/560656591ba10d69c974d1c449e0bfcaaf697e0b849c2f098c9f56281e76/opentelemetry_semantic_conventions-0.37b0-py3-none-any.whl @@ -918,7 +904,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/a4/33a94f5755ec15c49de5f29e7dac3da91943b89e45c44ad6a2431904f987/tiled-0.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/90/273b6c7ec78af547694eddeea9e05de771278bd20476525ab930cecaf7d8/tokenizers-0.21.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -1086,17 +1071,12 @@ packages: timestamp: 1718551242397 - pypi: ../arroyopy name: arroyopy - version: 0.3.0a5 - sha256: bad032904e18179f4388aaa4b599137020a825c736289eeaaaf4d6bd5a0b049a + version: 0.3.0a7 + sha256: 76dc3179c409495f9e06776fc63c6c8572405029c82a82b1368b9ce9282c9500 requires_dist: - python-dotenv - pandas - numpy - - opentelemetry-api - - opentelemetry-sdk - - opentelemetry-exporter-jaeger - - opentelemetry-exporter-prometheus - - prometheus-client - pydantic>=2.0 - pyyaml - typer @@ -2538,14 +2518,6 @@ packages: version: 1.8.0 sha256: 14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/00/11/2a8d766a5b2378e243fdce6b7e74cc961594a8cf1c3d6ddab1ef99cbb717/googleapis_common_protos-1.56.1-py2.py3-none-any.whl - name: googleapis-common-protos - version: 1.56.1 - sha256: ddcd955b5bb6589368f659fa475373faa1ed7d09cde5ba25e88513d87007e174 - requires_dist: - - protobuf>=3.15.0 - - grpcio>=1.0.0 ; extra == 'grpc' - requires_python: '>=3.6' - pypi: https://files.pythonhosted.org/packages/66/e0/61d8e98007182e6b2aca7cf65904721fb2e4bce0192272ab9cb6f69d8812/graphene-3.4.3-py2.py3-none-any.whl name: graphene version: 3.4.3 @@ -2608,14 +2580,6 @@ packages: - psutil ; extra == 'test' - setuptools ; extra == 'test' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: grpcio - version: 1.80.0 - sha256: 4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411 - requires_dist: - - typing-extensions~=4.12 - - grpcio-tools>=1.80.0 ; extra == 'protobuf' - requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.26.10-h0363672_0.conda sha256: f43bc8fd2c8b0c4317cf771f2cf8a9e7eee47105c233bfed00158f6579e41340 md5: fd9738c3189541787bd967e19587de26 @@ -5260,42 +5224,6 @@ packages: - importlib-metadata>=5.0.0 ; python_full_version == '3.7.*' - setuptools>=16.0 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/bc/71/f45b52bde0cd0b316fd7ef034afa93d171c1de612923ea9e6be76dfe0d50/opentelemetry_exporter_jaeger-1.21.0-py3-none-any.whl - name: opentelemetry-exporter-jaeger - version: 1.21.0 - sha256: 3d645eff7e31461d917be5c6635803ad7913cbb7662feed014ba2fe6e005b209 - requires_dist: - - opentelemetry-exporter-jaeger-proto-grpc==1.21.0 - - opentelemetry-exporter-jaeger-thrift==1.21.0 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/77/2e/d062a7a009138a40dd748add1cbe1c761eebfc791440bc7a631b53f8e5bd/opentelemetry_exporter_jaeger_proto_grpc-1.21.0-py3-none-any.whl - name: opentelemetry-exporter-jaeger-proto-grpc - version: 1.21.0 - sha256: cf8ec4761c56d611e7bfb9538d4d85ea6a67cd1548f12deff83afaa5c447816e - requires_dist: - - googleapis-common-protos~=1.52,<1.60.0 - - grpcio>=1.0.0,<2.0.0 - - opentelemetry-api~=1.3 - - opentelemetry-sdk~=1.11 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/81/2b/c6ff9604f5b8469e1fabe2b6ee50c36dadf0f572a430494d8dd5ce37d99f/opentelemetry_exporter_jaeger_thrift-1.21.0-py3-none-any.whl - name: opentelemetry-exporter-jaeger-thrift - version: 1.21.0 - sha256: 4364b8dfa6965707c72c43d85942b1491982b7d44f0123d593513e8bedafa9e2 - requires_dist: - - opentelemetry-api~=1.3 - - opentelemetry-sdk~=1.11 - - thrift>=0.10.0 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/02/8a/f1b02abfb92391306c32db7d46175d8e9f7f948ce3f36982da564eb502e6/opentelemetry_exporter_prometheus-0.41b0-py3-none-any.whl - name: opentelemetry-exporter-prometheus - version: 0.41b0 - sha256: ca996f3bc15b0cbf3abd798e786095a202650202a5c0edd9e34bb9186a247b79 - requires_dist: - - opentelemetry-api~=1.12 - - opentelemetry-sdk~=1.12 - - prometheus-client>=0.5.0,<1.0.0 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl name: opentelemetry-proto version: 1.40.0 @@ -6949,15 +6877,6 @@ packages: version: 3.6.0 sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b2/c2/db648cc10dd7d15560f2eafd92a27cd280811924696e0b4a87175fb28c94/thrift-0.22.0.tar.gz - name: thrift - version: 0.22.0 - sha256: 42e8276afbd5f54fe1d364858b6877bc5e5a4a5ed69f6a005b94ca4918fe1466 - requires_dist: - - tornado>=4.0 ; extra == 'tornado' - - twisted ; extra == 'twisted' - - tornado>=4.0 ; extra == 'all' - - twisted ; extra == 'all' - pypi: https://files.pythonhosted.org/packages/1a/e4/e804505f87627cd8cdae9c010c47c4485fd8c1ce31a7dd0ab7fcc4707377/tifffile-2026.3.3-py3-none-any.whl name: tifffile version: 2026.3.3 diff --git a/src/arroyosas/tiled/tiled_websocket_bl733.py b/src/arroyosas/tiled/tiled_websocket_bl733.py new file mode 100644 index 0000000..121eced --- /dev/null +++ b/src/arroyosas/tiled/tiled_websocket_bl733.py @@ -0,0 +1,165 @@ +import asyncio +import json +import logging +import os +import time +from collections import defaultdict +from typing import Any, Dict + +# import numpy as np +from arroyopy.listener import Listener +from tiled.client import from_uri +from tiled.client.base import BaseClient +from tiled.client.stream import Subscription + +from arroyosas.schemas import ( + RawFrameEvent, + SASMessage, + SASStart, + SerializableNumpyArrayModel +) + +logger = logging.getLogger(__name__) + +class TiledClientListener(Listener): + """ + A listener that subscribes to Tiled events and processes them + These subscriptions are used to listen for new runs, streams, and nodes in the Tiled context. + It handles events by creating subscriptions and invoking callbacks for each event type. + + Subscriptiosns are over web sockets, allowing real-time updates from the Tiled server. + """ + + def __init__( + self, + operator, + tiled_client: BaseClient, + sub_path: str, + + ): + self.tiled_client = tiled_client + self.sub_path = sub_path + super().__init__(operator) # Operator will be set later when creating the listener + + async def start(self) -> None: + """Start the listener by calling _start method.""" + self._running = True + self._loop = asyncio.get_running_loop() + self._stop_event = asyncio.Event() + await asyncio.to_thread(self._start) + await self._stop_event.wait() + + + def _start(self) -> None: + try: + """Subscribe to the socket at the provided base segments level""" + node = self.tiled_client[self.sub_path] + catalog_sub = Subscription(node.context, node.path_parts) + catalog_sub.add_callback(self.on_new_data_collection) + catalog_sub.start() + logger.debug("TiledClientListener started and subscribed to base segments") if logger.isEnabledFor(logging.DEBUG) else None + except Exception as e: + logger.error(f"Error starting TiledClientListener: {e}") + + def on_new_data_collection(self, sub: Subscription, data: Dict[str, Any]): + """ + Handle new data collection events by creating a subscription for the data collection. + For 7.3.3, we assume all runs go into a single collection. A run is a collection and contains + 0 or more ArrayClients and maybe a Table or two. + """ + try: + logger.info(f"New data collection {data}") if logger.isEnabledFor(logging.INFO) else None + + # # Subscribe to the run + if data.get("key") is None: + # Does only happen once? + logger.warning("Received on_new_data_collection event without 'key' in data, skipping") + return + run_sub = Subscription(self.tiled_client.context, sub.segments + [data["key"]]) + run_sub.add_callback(self.on_new_data_item) + # breakpoint() + run_sub.start() + # Publish start event + self.publish_start(run_sub, data) + except Exception as e: + logger.exception(f"Error in on_new_data_collection: {e}") + + + def on_new_data_item(self, sub, data): + """ + Handle new data item. This is called when a new node is added to the run. We check if it's a stream node and if so, we subscribe to it. + For 7.3.3, we assume the stream node is directly under the run node. + """ + try: + logger.debug(data) if logger.isEnabledFor(logging.DEBUG) else None + if data.get("key") is None: + # Does only happen once? + logger.warning("Received on_new_data_item event without 'key' in data, skipping") + return + data_name = data["key"] + logger.info(f"new stream {data_name}") if logger.isEnabledFor( + logging.INFO + ) else None + + self.publish_event(sub, data) + except Exception as e: + logger.exception(f"Error in on_new_data_item: {e}") + + + async def stop(self) -> None: + """Stop the listener by calling _stop method.""" + self._running = False + if hasattr(self, "_stop_event"): + self._stop_event.set() + await super().stop() + + def send_to_operator(self, message: SASMessage) -> None: + try: + future = asyncio.run_coroutine_threadsafe(self.operator.publish(message), self._loop) + future.result() + except Exception as e: + logger.error(f"Error sending message to operator: {e}") + + def publish_start(self, sub: Subscription,data: Dict[str, Any]) -> None: + run_key = data["key"] + # breakpoint() + run_node = self.tiled_client["/".join(sub.segments)] + meta = run_node.metadata + start = SASStart( + run_id=run_key, + run_name=meta.get("run_name", run_key), + width=meta.get("width", 0), + height=meta.get("height", 0), + data_type=meta.get("data_type", ""), + tiled_url=str(self.tiled_client.context.base_url), + ) + self.send_to_operator(start) + + def publish_event(self, sub: Subscription, data: Dict[str, Any]) -> None: + """ + Publish an event to the operator. + """ + data_node = self.tiled_client["/".join(sub.segments + [data["key"]])] + event = RawFrameEvent( + image=SerializableNumpyArrayModel(array=data_node[:]), # Assuming the data node is an array-like object. Adjust as needed. + frame_number=data.get("sequence", 0), + tiled_url="", # Placeholder for actual URL if needed + ) + self.send_to_operator(event) + + def print_event(self, event_name: str, data: Dict[str, Any]) -> None: + """Print event information - placeholder method""" + print(f"Event: {event_name}, Data: {data}") + + + +def create_tiled_websocket_listener( + uri: str, + sub_path: str, + operator = None, + api_key: str = None, +) -> TiledClientListener: + if api_key is None: + api_key = os.environ.get("TILED_LIVE_API_KEY") + client = from_uri(uri, api_key=api_key) + return TiledClientListener(operator, client, sub_path) \ No newline at end of file diff --git a/src/arroyosas/tiled/tiled_websocket.py b/src/arroyosas/tiled/tiled_websocket_bluesky.py similarity index 100% rename from src/arroyosas/tiled/tiled_websocket.py rename to src/arroyosas/tiled/tiled_websocket_bluesky.py From 16a17c221a748767f2c3839ef2a8945da6d70480 Mon Sep 17 00:00:00 2001 From: Dylan McReynolds Date: Thu, 2 Apr 2026 16:16:31 -0700 Subject: [PATCH 06/16] test coverage and linting --- .github/workflows/python_app.yml | 8 +- .pre-commit-config.yaml | 18 +- block_configs/lse_operator_block.yaml | 2 +- docker-compose.yml | 3 +- frontend/src/components/InputSlider.jsx | 12 +- frontend/src/components/Mermaid.jsx | 22 +- frontend/src/components/PlotlyHeatMap.jsx | 10 +- frontend/src/components/Status.jsx | 3 +- frontend/src/components/TimelineHeatmap.jsx | 5 +- .../src/components/TimelineHeatmapScatter.jsx | 5 +- .../TimelineTiledHeatmapScatter.jsx | 14 +- frontend/src/hooks/useGISAXS.js | 4 +- frontend/src/hooks/useGISAXSAlternate.js | 2 +- frontend/src/pages/Home.jsx | 34 +- frontend/src/pages/HomeAlternate.jsx | 22 +- frontend/src/pages/Services.jsx | 2 +- frontend/src/utils/connectionHelper.js | 2 +- frontend/src/utils/plotHelper.js | 6 +- frontend/src/utils/tiledAPI.js | 2 +- notebooks/query.ipynb | 9 +- notebooks/tiled.ipynb | 24 +- notebooks/tiled_playground.ipynb | 34 +- notebooks/tiled_register.ipynb | 14 +- pixi.lock | 64 +-- pyproject.toml | 21 +- src/_test/test_app_frame_listener_sim.py | 62 +++ src/_test/test_app_ingest_local_images.py | 188 +++++++ src/_test/test_app_tiled_event_sim.py | 159 ++++++ src/_test/test_app_unified_sim.py | 235 +++++++++ src/_test/test_base_model_store.py | 81 +++ src/_test/test_config.py | 23 + src/_test/test_direct_websocket_sim.py | 155 ++++++ src/_test/test_log_utils.py | 55 ++ src/_test/test_lse_operator.py | 203 ++++++++ src/_test/test_lse_publisher.py | 139 ++++++ src/_test/test_lse_schemas.py | 100 ++++ src/_test/test_mlflow_utils.py | 278 +++++++++++ src/_test/test_redis_conn.py | 111 +++++ src/_test/test_redis_model_store.py | 200 ++++++++ src/_test/test_redis_proxy_client.py | 154 ++++++ src/_test/test_redis_proxy_client2.py | 241 +++++++++ src/_test/test_reducer.py | 197 ++++++++ src/_test/test_schemas.py | 4 +- src/_test/test_shared_settings.py | 69 +++ src/_test/test_tiled_ingestor.py | 184 +++++++ src/_test/test_tiled_poller_extended.py | 312 ++++++++++++ src/_test/test_tiled_poller_extra.py | 471 ++++++++++++++++++ src/_test/test_tiled_results_publisher.py | 274 ++++++++++ src/_test/test_tiled_results_publisher2.py | 404 +++++++++++++++ src/_test/test_tiled_websocket_bl733.py | 181 +++++++ src/_test/test_tiled_websocket_bluesky.py | 202 ++++++++ src/_test/test_unified_sim_inner.py | 374 ++++++++++++++ src/_test/test_unified_sim_run.py | 121 +++++ src/_test/test_vector_save.py | 123 +++++ src/_test/test_websockets.py | 212 ++++++++ src/_test/test_zmq.py | 261 ++++++++++ src/arroyosas/app/frame_listener_sim_cli.py | 11 +- src/arroyosas/app/ingest_local_images.py | 78 ++- src/arroyosas/app/lse.py | 2 - src/arroyosas/app/tiled_event_sim_cli.py | 123 ++--- src/arroyosas/app/unified_sim_cli.py | 295 ++++++----- src/arroyosas/config.py | 1 - src/arroyosas/directWebsocketSim.py | 80 ++- src/arroyosas/lse.py | 23 - src/arroyosas/lse_reduction/mlflow_utils.py | 139 +++--- src/arroyosas/lse_reduction/operator.py | 77 +-- src/arroyosas/lse_reduction/publisher.py | 9 +- .../lse_reduction/redis_model_store.py | 145 +++--- .../lse_reduction/redis_proxy_client.py | 21 +- src/arroyosas/lse_reduction/reducer.py | 143 +++--- src/arroyosas/lse_reduction/schemas.py | 13 +- .../lse_reduction/tiled_results_publisher.py | 80 +-- src/arroyosas/lse_reduction/vector_save.py | 51 +- src/arroyosas/one_d_reduction/conversions.py | 18 +- src/arroyosas/one_d_reduction/operator.py | 46 +- src/arroyosas/redis.py | 14 +- src/arroyosas/schemas.py | 4 +- src/arroyosas/tiled/ingestor.py | 15 +- src/arroyosas/tiled/tiled_poller.py | 50 +- src/arroyosas/tiled/tiled_websocket_bl733.py | 51 +- .../tiled/tiled_websocket_bluesky.py | 51 +- src/arroyosas/websockets.py | 21 +- src/arroyosas/zmq.py | 17 +- tiled_script.py | 2 +- 84 files changed, 6623 insertions(+), 1072 deletions(-) create mode 100644 src/_test/test_app_frame_listener_sim.py create mode 100644 src/_test/test_app_ingest_local_images.py create mode 100644 src/_test/test_app_tiled_event_sim.py create mode 100644 src/_test/test_app_unified_sim.py create mode 100644 src/_test/test_base_model_store.py create mode 100644 src/_test/test_config.py create mode 100644 src/_test/test_direct_websocket_sim.py create mode 100644 src/_test/test_log_utils.py create mode 100644 src/_test/test_lse_operator.py create mode 100644 src/_test/test_lse_publisher.py create mode 100644 src/_test/test_lse_schemas.py create mode 100644 src/_test/test_mlflow_utils.py create mode 100644 src/_test/test_redis_conn.py create mode 100644 src/_test/test_redis_model_store.py create mode 100644 src/_test/test_redis_proxy_client.py create mode 100644 src/_test/test_redis_proxy_client2.py create mode 100644 src/_test/test_reducer.py create mode 100644 src/_test/test_shared_settings.py create mode 100644 src/_test/test_tiled_ingestor.py create mode 100644 src/_test/test_tiled_poller_extended.py create mode 100644 src/_test/test_tiled_poller_extra.py create mode 100644 src/_test/test_tiled_results_publisher.py create mode 100644 src/_test/test_tiled_results_publisher2.py create mode 100644 src/_test/test_tiled_websocket_bl733.py create mode 100644 src/_test/test_tiled_websocket_bluesky.py create mode 100644 src/_test/test_unified_sim_inner.py create mode 100644 src/_test/test_unified_sim_run.py create mode 100644 src/_test/test_vector_save.py create mode 100644 src/_test/test_websockets.py create mode 100644 src/_test/test_zmq.py delete mode 100644 src/arroyosas/app/lse.py delete mode 100644 src/arroyosas/lse.py diff --git a/.github/workflows/python_app.yml b/.github/workflows/python_app.yml index 8e5018d..d582a8f 100644 --- a/.github/workflows/python_app.yml +++ b/.github/workflows/python_app.yml @@ -22,12 +22,10 @@ jobs: python -m pip install --upgrade pip pip install .[all] pip install .[dev] - - name: Lint with flake8 + - name: Lint with ruff run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + ruff check . + ruff format --check . - name: Test with pytest run: | diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e35b6f5..74d3647 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,20 +14,12 @@ repos: - id: check-yaml - id: debug-statements -- repo: https://github.com/pycqa/flake8 - rev: 6.1.0 +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.9.0 hooks: - - id: flake8 - -- repo: https://github.com/timothycrosley/isort - rev: 5.12.0 - hooks: - - id: isort - -- repo: https://github.com/psf/black - rev: 23.10.1 - hooks: - - id: black + - id: ruff + args: [--fix] + - id: ruff-format # - repo: https://github.com/pre-commit/mirrors-mypy # rev: v1.9.0 diff --git a/block_configs/lse_operator_block.yaml b/block_configs/lse_operator_block.yaml index c18d670..778dd0c 100644 --- a/block_configs/lse_operator_block.yaml +++ b/block_configs/lse_operator_block.yaml @@ -2,7 +2,7 @@ blocks: - name: LSE Operator description: 2D latent space operator for SAS Data operator: - class: arroyosas.lse.build_lse_operator + class: arroyosas.lse_reduction.operator.build_lse_operator kwargs: redis_host: 127.0.0.1 redis_port: 6666 diff --git a/docker-compose.yml b/docker-compose.yml index 0ce6faa..80e0849 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,7 +45,7 @@ services: - ./block_configs:/app/block_configs:Z networks: gisax_net1: - + # viz_operator: # command: python -m arroyosas.app.viz_operator_cli # build: @@ -85,4 +85,3 @@ services: networks: gisax_net1: driver: bridge - diff --git a/frontend/src/components/InputSlider.jsx b/frontend/src/components/InputSlider.jsx index e9372c2..d9956e7 100644 --- a/frontend/src/components/InputSlider.jsx +++ b/frontend/src/components/InputSlider.jsx @@ -110,8 +110,8 @@ export default function InputSlider({
- {/** Optional Input Box on Right of Slider*/} - {showSideInput && + {showSideInput &&
- -

{units}

+

{units}

}
diff --git a/frontend/src/components/Mermaid.jsx b/frontend/src/components/Mermaid.jsx index 7a8cfd1..b8bd520 100644 --- a/frontend/src/components/Mermaid.jsx +++ b/frontend/src/components/Mermaid.jsx @@ -25,14 +25,14 @@ export default function Mermaid() { const graph = ` flowchart LR style Mars1Group stroke:#bbb,stroke-width:4px,stroke-dasharray: 5,5,fill:none; - + btiled(Beamline Tiled) <--http--> framelisten(Frame Listener); - + subgraph Mars1Group["mars1.nsls2.bnl.gov"]; framelisten --zmq frame--> viz_op(Viz Operator); framelisten --zmq frame + tiledurl--> lse_op(LSE Operator); lse_op --websocket--> lse(Latent Space Explorer dash); - + lse <--http--> browser(Browser); viz_op --http 1D reductions--> tiled(Tiled); viz_op --websocket 2 tiled urls + data--> browser; @@ -40,14 +40,14 @@ export default function Mermaid() { lse_op <--zmq raw frame--> lse_worker2(LSE Worker 2); lse_op <--zmq raw frame--> lse_worker3(LSE Worker N); lse_op --http feature vec and url--> tiled; - + browser <--http get data--> tiled; tiled <----> postgres; wf_viz(Workflow Viz) <--http--> browser; wf_viz --> redis(Redis); redis --> viz_op; - - + + end; ` @@ -56,10 +56,10 @@ export default function Mermaid() { const callBackFunction = (event) => { console.log("Clicked element:", event.currentTarget); }; - + // Select all node elements const nodes = document.querySelectorAll("g.node"); - + // Attach the event handler to each node nodes.forEach(node => { node.addEventListener("click", callBackFunction); @@ -111,7 +111,7 @@ export default function Mermaid() { return false; } }; - + const changeBackgroundColor = (element, color="red") => { element.style.fill = color; } @@ -160,7 +160,7 @@ export default function Mermaid() { window.mermaid.contentLoaded(); attachEventHandler(); }); - } + } }, []); @@ -174,7 +174,7 @@ export default function Mermaid() {
- + ) } \ No newline at end of file diff --git a/frontend/src/components/PlotlyHeatMap.jsx b/frontend/src/components/PlotlyHeatMap.jsx index ce820f9..b67afa7 100644 --- a/frontend/src/components/PlotlyHeatMap.jsx +++ b/frontend/src/components/PlotlyHeatMap.jsx @@ -118,9 +118,9 @@ export default function PlotlyHeatMap({ title: yAxisTitle, range: [-0.5, array.length - 0.5], // Dynamically adjust y-axis range autorange: false, - tickmode: showTicks ? 'linear' : '', - tick0: 0, - dtick: showTicks ? tickStep : 10000, + tickmode: showTicks ? 'linear' : '', + tick0: 0, + dtick: showTicks ? tickStep : 10000, showticklabels: showTicks }, autosize: false, @@ -137,8 +137,8 @@ export default function PlotlyHeatMap({ { type: 'line', x0: Math.max(linecutData.x0, 0), - x1: Math.min(linecutData.x1, array[0].length - 1), - y0: linecutData.y0, + x1: Math.min(linecutData.x1, array[0].length - 1), + y0: linecutData.y0, y1: linecutData.y1, line: { color: 'red', diff --git a/frontend/src/components/Status.jsx b/frontend/src/components/Status.jsx index 28ac3a9..b2831ba 100644 --- a/frontend/src/components/Status.jsx +++ b/frontend/src/components/Status.jsx @@ -5,7 +5,7 @@ const images = [ "images/xrayIcon/gif3.png", "images/xrayIcon/gif4.png", ]; - + export default function Status({height='h-14', cycleTime=5, slideshow=true}) { return (
@@ -28,4 +28,3 @@ const images = [
); } - \ No newline at end of file diff --git a/frontend/src/components/TimelineHeatmap.jsx b/frontend/src/components/TimelineHeatmap.jsx index bd69fd8..aed7b14 100644 --- a/frontend/src/components/TimelineHeatmap.jsx +++ b/frontend/src/components/TimelineHeatmap.jsx @@ -29,7 +29,7 @@ export default function TimelineHeatmap ({cumulativeArrayData=[], demo=false}) { ) } - + if (demo) { var sampleCumulativeData = []; const samples = 7; @@ -51,7 +51,6 @@ export default function TimelineHeatmap ({cumulativeArrayData=[], demo=false}) { ) } - + } - \ No newline at end of file diff --git a/frontend/src/components/TimelineHeatmapScatter.jsx b/frontend/src/components/TimelineHeatmapScatter.jsx index 89b3606..4354298 100644 --- a/frontend/src/components/TimelineHeatmapScatter.jsx +++ b/frontend/src/components/TimelineHeatmapScatter.jsx @@ -61,7 +61,7 @@ export default function TimelineHeatmapScatter ({arrayData=[], scatterData=[], d return

Waiting for data

} } - + if (demo) { var sampleCumulativeData = []; const samples = 7; @@ -87,7 +87,6 @@ export default function TimelineHeatmapScatter ({arrayData=[], scatterData=[], d ) } - + } - \ No newline at end of file diff --git a/frontend/src/components/TimelineTiledHeatmapScatter.jsx b/frontend/src/components/TimelineTiledHeatmapScatter.jsx index ff0f316..d726692 100644 --- a/frontend/src/components/TimelineTiledHeatmapScatter.jsx +++ b/frontend/src/components/TimelineTiledHeatmapScatter.jsx @@ -76,12 +76,12 @@ export default function TimelineTiledHeatmapScatter ({tiledLinks=[], demo=false, } if (xValues.length > 0 && yValues.length > 0) { - const newScatterPlot = { + const newScatterPlot = { x: xValues, y: yValues, type: 'scatter', mode: 'lines+markers', - marker: {color: 'red'}, + marker: {color: 'red'}, }; setScatterPlot(newScatterPlot); } @@ -104,9 +104,9 @@ export default function TimelineTiledHeatmapScatter ({tiledLinks=[], demo=false,
{heatmapArray && @@ -128,7 +128,7 @@ export default function TimelineTiledHeatmapScatter ({tiledLinks=[], demo=false, return

Waiting for data

} } - + if (demo) { var sampleCumulativeData = []; const samples = 7; @@ -154,5 +154,5 @@ export default function TimelineTiledHeatmapScatter ({tiledLinks=[], demo=false,
) } - + } diff --git a/frontend/src/hooks/useGISAXS.js b/frontend/src/hooks/useGISAXS.js index a17c8c6..d94f569 100644 --- a/frontend/src/hooks/useGISAXS.js +++ b/frontend/src/hooks/useGISAXS.js @@ -100,7 +100,7 @@ export const useGISAXS = ({}) => { console.log('Exceeded allowable message prints, suppressing future websocket messages'); websocketMessageCount.current = websocketMessageCount.current + 1; } - }/* + }/* var websocketMessage = {} for (var key in newMessage) { if (key === 'raw_frame') { @@ -252,7 +252,7 @@ export const useGISAXS = ({}) => { if (newMessage.msg_type === 'start') { resetAllData(); setIsExperimentRunning(true); - + } if (newMessage.msg_type === 'stop') { setIsExperimentRunning(false); diff --git a/frontend/src/hooks/useGISAXSAlternate.js b/frontend/src/hooks/useGISAXSAlternate.js index 5b464bf..f3cb8ae 100644 --- a/frontend/src/hooks/useGISAXSAlternate.js +++ b/frontend/src/hooks/useGISAXSAlternate.js @@ -154,7 +154,7 @@ export const useGISAXSAlternate = ({}) => { if (newMessage.msg_type === 'start') { resetAllData(); setIsExperimentRunning(true); - + } if (newMessage.msg_type === 'stop') { setIsExperimentRunning(false); diff --git a/frontend/src/pages/Home.jsx b/frontend/src/pages/Home.jsx index d1b78c7..62d81d6 100644 --- a/frontend/src/pages/Home.jsx +++ b/frontend/src/pages/Home.jsx @@ -86,13 +86,13 @@ export default function Home() {
  • {warningMessage.length > 0 ?

    {warningMessage}

    : ''} - {socketStatus === 'closed' - ? -