From e833eeaeb2b20328ec4c082dcec1aaa7faad2ac3 Mon Sep 17 00:00:00 2001 From: jgunstone Date: Wed, 15 Oct 2025 11:02:38 +0100 Subject: [PATCH 1/8] fix ci --- .github/{ => workflows}/frictionless-validate.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/frictionless-validate.yml (100%) diff --git a/.github/frictionless-validate.yml b/.github/workflows/frictionless-validate.yml similarity index 100% rename from .github/frictionless-validate.yml rename to .github/workflows/frictionless-validate.yml From 354af7a16a89847363eebb51deda11965cda3d80 Mon Sep 17 00:00:00 2001 From: jgunstone Date: Wed, 5 Nov 2025 15:33:13 +0000 Subject: [PATCH 2/8] MAJOR UPDATE. - incorporate suggestions from #gabrielbdornas to frictionless validate data. - switch to using pixi for environment management in VSCode and GitHub Actions. - create python package for reference data as build time. --- .../frictionless-validate-failure.md | 4 + .github/workflows/frictionless-validate.yml | 21 - .github/workflows/pypi-publish.yml | 33 + .github/workflows/test-and-validate.yml | 29 + .gitignore | 4 + .vscode/settings.json | 12 +- README.md | 9 + pixi.lock | 1737 ++++++++++++----- pixi.toml | 16 - pyproject.toml | 33 + scripts/cp_data.py | 18 + scripts/get_eui.py | 27 +- .../__init__.py | 11 + tests/test_netzero_metrics_reference_data.py | 16 + 14 files changed, 1394 insertions(+), 576 deletions(-) create mode 100644 .github/workflows/frictionless-validate-failure.md delete mode 100644 .github/workflows/frictionless-validate.yml create mode 100644 .github/workflows/pypi-publish.yml create mode 100644 .github/workflows/test-and-validate.yml delete mode 100644 pixi.toml create mode 100644 pyproject.toml create mode 100644 scripts/cp_data.py create mode 100644 src/netzero_metrics_reference_data/__init__.py create mode 100644 tests/test_netzero_metrics_reference_data.py diff --git a/.github/workflows/frictionless-validate-failure.md b/.github/workflows/frictionless-validate-failure.md new file mode 100644 index 0000000..88c941a --- /dev/null +++ b/.github/workflows/frictionless-validate-failure.md @@ -0,0 +1,4 @@ +--- +title: Frictionless validate failure on {{ date | date() }} +labels: bug +--- \ No newline at end of file diff --git a/.github/workflows/frictionless-validate.yml b/.github/workflows/frictionless-validate.yml deleted file mode 100644 index 33e06c9..0000000 --- a/.github/workflows/frictionless-validate.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: package - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - - # Validate - - validate: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Validate data - uses: frictionlessdata/repository@v2 \ No newline at end of file diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml new file mode 100644 index 0000000..bd317c2 --- /dev/null +++ b/.github/workflows/pypi-publish.yml @@ -0,0 +1,33 @@ +# NOTE-1: This action builds the py pkg as per a pixi command `pixi run build` +# and publishes it to PyPI. Requires org / repo / action / env setup +# as a trusted publisher. +# NOTE-2: this can be copy and pasted between repos without edit +# provided that the repo name and pypi pkg name are the same +name: Publish to PyPI + +on: + push: + tags: + - '*' + - '!rc*' # Exclude release candidates + +jobs: + + pypi-publish: + name: Upload release to PyPI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.9.3 + with: + pixi-version: v0.59.0 + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + - run: pixi run build + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + environment: + name: pypi + url: https://pypi.org/p/${{ github.action.repository }} + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing \ No newline at end of file diff --git a/.github/workflows/test-and-validate.yml b/.github/workflows/test-and-validate.yml new file mode 100644 index 0000000..bd1632f --- /dev/null +++ b/.github/workflows/test-and-validate.yml @@ -0,0 +1,29 @@ +name: package + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + + pypi-publish: + name: Upload release to PyPI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.9.3 + with: + pixi-version: v0.59.0 + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + - run: pixi run tests + - run: pixi run frictionless-validate + - name: Workflow failure notification + uses: JasonEtco/create-an-issue@v2 + if: failure() + with: + filename: .github/frictionless-validate-failure.md \ No newline at end of file diff --git a/.gitignore b/.gitignore index ae849e6..2a49032 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ # pixi environments .pixi/* !.pixi/config.toml +src/netzero_metrics_reference_data/data +src/netzero_metrics_reference_data/__pycache__ +tests/__pycache__ +dist diff --git a/.vscode/settings.json b/.vscode/settings.json index ba2a6c0..de9885d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,10 @@ { - "python-envs.defaultEnvManager": "ms-python.python:system", - "python-envs.pythonProjects": [] -} \ No newline at end of file + "python-envs.defaultEnvManager": "renan-r-santos.pixi-code:pixi", + "python-envs.pythonProjects": [], + "python-envs.defaultPackageManager": "renan-r-santos.pixi-code:pixi", + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} diff --git a/README.md b/README.md index e69de29..2289cea 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,9 @@ +# NetZero Metrics Reference Data + +This repository provides reference data and resources for NetZero metrics calculations. + +The data is provided as a [datapackage](https://datapackage.org/) directly from the root of this repo. It has also been packaged as a Python package, which can be installed via pip: + +```bash +pip install netzero-metrics-reference-data +``` diff --git a/pixi.lock b/pixi.lock index 3755217..8036817 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,100 +3,147 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/casefy-1.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.10.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf01b4d8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/chardet-5.2.0-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.3-py314hb613cbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/et_xmlfile-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/frictionless-5.18.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.14.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.27.0-pypyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/isodate-0.7.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.25.1-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-ha97dd6f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-6.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.6.0-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.1-h32235b2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h47877c9_openblas.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/liblapack-3.9.0-38_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/marko-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.3-py313hf6604e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openpyxl-3.1.5-py313ha4be090_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openpyxl-3.1.5-py314hf3b76af_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py313h08cd8bf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/petl-1.7.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py314ha0b5721_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.2-pyh3cfb1c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.4-py313h843e2db_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.8-h2b335a9_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.0-h32b2ec7_102_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.27.1-py313h843e2db_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.0-py314hdafbbf9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/simpleeval-1.0.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stringcase-1.2.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.19.2-pyhef33e25_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.19.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.19.2-h6e3bb38_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2025.9.11.17-pyhd8ed1ab_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-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/validators-0.35.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313h54dd161_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.9.7-h30787bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py314h31f8a6b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-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/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-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/73/de/65dfc670e50c9db92b750db1d7c87292b8f3ba9be2c1154594d1a7d1afb4/marko-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9f/5c/ea831abc18dd3268046d7d9a0119f1f8ddc69642e0a5245f839602b8114d/petl-1.7.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/37/e84283b9e897e3adc46b4c88bb3f6ec92a43bd4d2f7ef5b13459963b2e9c/rpds_py-0.28.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl + - pypi: ./ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 license: None + purls: [] size: 2562 timestamp: 1578324546067 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 @@ -110,42 +157,62 @@ packages: - openmp_impl 9999 license: BSD-3-Clause license_family: BSD + purls: [] size: 23621 timestamp: 1650670423406 -- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 - md5: 2934f256a8acfe48f6ebb4fce6cde29c - depends: - - python >=3.9 - - typing-extensions >=4.0.0 - license: MIT - license_family: MIT - size: 18074 - timestamp: 1733247158254 -- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda - sha256: f6c3c19fa599a1a856a88db166c318b148cac3ee4851a9905ed8a04eeec79f45 - md5: c7944d55af26b6d2d7629e27e9a972c1 - depends: +- 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' +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda + sha256: 7378b5b9d81662d73a906fabfc2fb81daddffe8dc0680ed9cda7a9562af894b0 + md5: 814472b61da9792fae28156cb9ee54f5 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 - python >=3.10 + - sniffio >=1.1 + - typing_extensions >=4.5 + - python + constrains: + - trio >=0.31.0 + - uvloop >=0.21 license: MIT license_family: MIT - size: 60101 - timestamp: 1759762331492 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda - sha256: b1941426e564d326097ded7af8b525540be219be7a88ca961d58a8d4fc116db2 - md5: bc8624c405856b1d047dd0a81829b08c + purls: + - pkg:pypi/anyio?source=hash-mapping + size: 138159 + timestamp: 1758634638734 +- pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + name: attrs + version: 25.4.0 + sha256: adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_5.conda + sha256: e1c3dc8b5aa6e12145423fed262b4754d70fec601339896b9ccf483178f690a6 + md5: 767d508c1a67e02ae8f50e44cacfadb2 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - libbrotlicommon 1.1.0 hb03c661_4 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7069 + timestamp: 1733218168786 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.2.0-pyhd8ed1ab_1.conda + sha256: a0f41db6d7580cec3c850e5d1b82cb03197dd49a3179b1cee59c62cd2c761b36 + md5: df837d654933488220b454c6a3b0fad6 + depends: + - backports + - python >=3.9 license: MIT license_family: MIT - size: 353639 - timestamp: 1756599425945 + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 32786 + timestamp: 1733325872620 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 md5: 51a19bba1b8ebfb60df25cde030b7ebc @@ -154,6 +221,7 @@ packages: - libgcc >=14 license: bzip2-1.0.6 license_family: BSD + purls: [] size: 260341 timestamp: 1757437258798 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.10.5-hbd8a1cb_0.conda @@ -162,47 +230,56 @@ packages: depends: - __unix license: ISC + purls: [] size: 155907 timestamp: 1759649036195 +- conda: https://conda.anaconda.org/conda-forge/noarch/casefy-1.1.0-pyhd8ed1ab_0.conda + sha256: 06560908eb00a11446980ad17ed469f505a031a1ffa793bf9c2a628f2634fcc9 + md5: 32e3a03cc7f3e8761adf8e619118cfc3 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/casefy?source=hash-mapping + size: 12036 + timestamp: 1741451659659 - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.10.5-pyhd8ed1ab_0.conda sha256: 955bac31be82592093f6bc006e09822cd13daf52b28643c9a6abd38cd5f4a306 md5: 257ae203f1d204107ba389607d375ded depends: - python >=3.10 license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping size: 160248 timestamp: 1759648987029 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf01b4d8_0.conda - sha256: cbead764b88c986642578bb39f77d234fbc3890bd301ed29f849a6d3898ed0fc - md5: 062317cc1cd26fbf6454e86ddd3622c4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e + md5: cf45f4278afd6f4e6d03eda0f435d527 depends: - __glibc >=2.17,<3.0.a0 - - libffi >=3.4.6,<3.5.0a0 + - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - pycparser - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 license: MIT license_family: MIT - size: 298211 - timestamp: 1758716239290 -- conda: https://conda.anaconda.org/conda-forge/noarch/chardet-5.2.0-pyhd8ed1ab_3.conda - sha256: cfca3959d2bec9fcfec98350ecdd88b71dac6220d1002c257d65b40f6fbba87c - md5: 56bfd153e523d9b9d05e4cf3c1cfe01c - depends: - - python >=3.9 - license: LGPL-2.1-only - license_family: GPL - size: 132170 - timestamp: 1741798023836 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59 - md5: a22d1fd9bf98827e280a02875d9a007a - depends: - - python >=3.10 - license: MIT - size: 50965 - timestamp: 1760437331772 + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 300271 + timestamp: 1761203085220 +- pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + name: chardet + version: 5.2.0 + sha256: e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.4 + sha256: ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.0-pyh707e725_0.conda sha256: c6567ebc27c4c071a353acaf93eb82bb6d9a6961e40692a359045a89a61d02c0 md5: e76c4ba9e1837847679421b8d549b784 @@ -211,8 +288,77 @@ packages: - python >=3.10 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/click?source=compressed-mapping size: 91622 timestamp: 1758270534287 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.3-py314hb613cbf_0.conda + sha256: 4bf88483f944b5624269c926369002d58951627a369aeac1e2cd64a6aa00eb05 + md5: f291630db5dc438b6ce37c2bb1a96516 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.14 + - libgcc >=14 + - openssl >=3.5.4,<4.0a0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1721232 + timestamp: 1760605122244 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + sha256: 3b988146a50e165f0fa4e839545c679af88e4782ec284cc7b6d07dd226d6a068 + md5: 679616eb5ad4e521c83da4650860aba7 + depends: + - libstdcxx >=13 + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libexpat >=2.7.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.84.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 437860 + timestamp: 1747855126005 +- conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e + md5: 003b8ba0a94e2f1e117d0bd46aebc901 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 275642 + timestamp: 1752823081585 +- conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_1.conda + sha256: 8d4f908e670be360617d418c328213bc46e7100154c3742db085148141712f60 + md5: 2cf824fe702d88e641eec9f9f653e170 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10828 + timestamp: 1733208220327 - conda: https://conda.anaconda.org/conda-forge/noarch/et_xmlfile-2.0.0-pyhd8ed1ab_1.conda sha256: 2209534fbf2f70c20661ff31f57ab6a97b82ee98812e8a2dcb2b36a0d345727c md5: 71bf9646cbfabf3022c8da4b6b4da737 @@ -220,37 +366,117 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/et-xmlfile?source=hash-mapping size: 21908 timestamp: 1733749746332 -- conda: https://conda.anaconda.org/conda-forge/noarch/frictionless-5.18.1-pyhd8ed1ab_1.conda - sha256: 09c2bacb9e6215da2f7b893840639824c7ac5b87e5a6f53b637d6c8b056f7196 - md5: 4b2cae54d84f734c32837175d8ed2459 - depends: - - attrs >=22.2.0 - - chardet >=3.0 - - humanize >=4.2 - - isodate >=0.6 - - jinja2 >=3.0 - - jsonschema >=4.20 - - marko >=1.0 - - petl >=1.6 - - pydantic >=2.0 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca + md5: 72e42d28960d875c7654614f8b50939a + depends: - python >=3.9 - - python-dateutil >=2.8 - - python-slugify >=1.2 - - pyyaml >=5.3 - - requests >=2.10 - - rfc3986 >=1.4 - - simpleeval >=0.9.11 - - stringcase >=1.2 - - tabulate >=0.8.10 - - typer >=0.12 - - typing-extensions >=4.3 - - validators >=0.18 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21284 + timestamp: 1746947398083 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.0-pyhd8ed1ab_0.conda + sha256: 19025a4078ff3940d97eb0da29983d5e0deac9c3e09b0eabf897daeaf9d1114e + md5: 66b8b26023b8efdf8fcb23bac4b6325d + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17976 + timestamp: 1759948208140 +- pypi: https://files.pythonhosted.org/packages/a9/7a/dac76d31584bb4f874ae860490c9465f5b59bd8c110f68fbbb07aba48845/frictionless-5.18.1-py3-none-any.whl + name: frictionless + version: 5.18.1 + sha256: 3f4c87469a89bdb88e9cc318088553a26f3d14839098f95c183ea01fc89628dd + requires_dist: + - attrs>=22.2.0 + - chardet>=3.0 + - humanize>=4.2 + - isodate>=0.6 + - jinja2>=3.0 + - jsonschema>=4.20 + - marko>=1.0 + - petl>=1.6 + - pydantic>=2.0 + - python-dateutil>=2.8 + - python-slugify>=1.2 + - pyyaml>=5.3 + - requests>=2.10 + - rfc3986>=1.4 + - simpleeval>=0.9.11 + - tabulate>=0.8.10 + - typer>=0.12 + - typing-extensions>=4.3 + - validators>=0.18 + - boto3>=1.9 ; extra == 'aws' + - google-api-python-client>=1.12.1 ; extra == 'bigquery' + - frictionless-ckan-mapper>=1.0 ; extra == 'ckan' + - datasette>=0.64.2 ; extra == 'datasette' + - hatch ; extra == 'dev' + - httpx ; extra == 'dev' + - ipython ; extra == 'dev' + - livemark ; extra == 'dev' + - moto ; extra == 'dev' + - neovim ; extra == 'dev' + - oauth2client ; extra == 'dev' + - pyright==1.1.317 ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-dotenv ; extra == 'dev' + - pytest-lazy-fixtures ; extra == 'dev' + - pytest-mock ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-vcr ; extra == 'dev' + - requests-mock ; extra == 'dev' + - ruff ; extra == 'dev' + - yattag ; extra == 'dev' + - duckdb-engine>=0.7 ; extra == 'duckdb' + - duckdb>=0.8 ; extra == 'duckdb' + - sqlalchemy>=1.4,<=2.0.35 ; extra == 'duckdb' + - openpyxl>=3.0 ; extra == 'excel' + - tableschema-to-template>=0.0 ; extra == 'excel' + - xlrd>=1.2 ; extra == 'excel' + - xlwt>=1.2 ; extra == 'excel' + - pygithub>=1.50 ; extra == 'github' + - pygsheets>=2.0 ; extra == 'gsheets' + - pyquery>=1.4 ; extra == 'html' + - ijson>=3.0 ; extra == 'json' + - jsonlines>=1.2 ; extra == 'json' + - pymysql>=1.0 ; extra == 'mysql' + - sqlalchemy>=1.4 ; extra == 'mysql' + - ezodf>=0.3 ; extra == 'ods' + - lxml>=4.0 ; extra == 'ods' + - pandas>=1.0 ; extra == 'pandas' + - pyarrow>=14.0 ; extra == 'pandas' + - fastparquet>=0.8 ; extra == 'parquet' + - psycopg2>=2.9 ; extra == 'postgresql' + - psycopg>=3.0 ; extra == 'postgresql' + - sqlalchemy>=1.4 ; extra == 'postgresql' + - savreaderwriter>=3.0 ; extra == 'spss' + - sqlalchemy>=1.4 ; extra == 'sql' + - visidata>=2.10 ; extra == 'visidata' + - tatsu>=5.8.3 ; extra == 'wkt' + - pyzenodo3>=1.0 ; extra == 'zenodo' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhd8ed1ab_0.conda + sha256: f64b68148c478c3bfc8f8d519541de7d2616bf59d44485a5271041d40c061887 + md5: 4b69232755285701bc86a5afe4d9933a + depends: + - python >=3.9 + - typing_extensions license: MIT license_family: MIT - size: 270421 - timestamp: 1746631371669 + purls: + - pkg:pypi/h11?source=hash-mapping + size: 37697 + timestamp: 1745526482242 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -261,8 +487,56 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/h2?source=compressed-mapping size: 95967 timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.14.1-pyhd8ed1ab_0.conda + sha256: d245185287bdf5d3c808267aebda2cb7fbce779099493f92e368f813e6a157d4 + md5: 82f74ce5f4548c3627ed52dfac9da8ca + depends: + - click >=8.0.6 + - hatchling >=1.26.3 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5.dev0 + - platformdirs >=2.5.0 + - python >=3.9 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2.dev0 + - uv >=0.5.23 + - virtualenv >=20.26.6 + - zstandard <1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 178008 + timestamp: 1744039278512 +- conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.27.0-pypyhd8ed1ab_0.conda + sha256: e83420f81390535774ac33b83d05249b8993e5376b76b4d461f83a77549e493d + md5: b85c18ba6e927ae0da3fde426c893cc8 + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - python >=3.8 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 56598 + timestamp: 1734311718682 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba md5: 0a802cb9888dd14eeefc611f05c40b6e @@ -270,17 +544,51 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping size: 30731 timestamp: 1737618390337 -- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.13.0-pyhd8ed1ab_0.conda - sha256: 93f73896f9546e10241b07105148a9fe1d3c48914bfd03e98b4f7513959ada03 - md5: a42090530cf45654f8b37c7aab5e027b +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb depends: - - python >=3.10 - license: MIT - license_family: MIT - size: 67328 - timestamp: 1756127913874 + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 + - certifi + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 49483 + timestamp: 1745602916758 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 63082 + timestamp: 1733663449209 +- pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + name: humanize + version: 4.14.0 + sha256: d57701248d040ad456092820e6fde56c930f17749956ac47f4f655c0c547bfff + requires_dist: + - freezegun ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 md5: 8e6923fc12f1fe8f8c4e5c9f343256ac @@ -288,8 +596,35 @@ packages: - 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/noarch/hyperlink-21.0.0-pyh29332c3_1.conda + sha256: 6fc0a91c590b3055bfb7983e6521c7b780ab8b11025058eaf898049ea827d829 + md5: c27acdecaf3c311e5781b81fe02d9641 + depends: + - python >=3.9 + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 74751 + timestamp: 1733319972207 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 md5: 53abe63df7e10a6ba605dc5f9f961d36 @@ -297,94 +632,207 @@ packages: - 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/isodate-0.7.2-pyhd8ed1ab_1.conda - sha256: 845fc87dfaf3f96245ad6ad69c5e5b31b084979f64f9e32157888ee0a08f39ba - md5: 14c42a6334f38c412449f5a5e4043a5a +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 depends: - python >=3.9 - license: BSD-3-Clause - license_family: BSD - size: 23778 - timestamp: 1733230826126 -- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af - md5: 446bd6c8cb26050d528881df495ce646 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 34641 + timestamp: 1747934053147 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: c85c76dc67d75619a92f51dfbce06992 depends: - - markupsafe >=2.0 - python >=3.9 - license: BSD-3-Clause - license_family: BSD - size: 112714 - timestamp: 1741263433881 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.25.1-pyhe01879c_0.conda - sha256: ac377ef7762e49cb9c4f985f1281eeff471e9adc3402526eea78e6ac6589cf1d - md5: 341fd940c242cf33e832c0402face56f - depends: - - attrs >=22.2.0 - - jsonschema-specifications >=2023.3.6 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.5.2,<6.5.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 33781 + timestamp: 1736252433366 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 + md5: 9614359868482abba1bd15ce465e3c42 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=compressed-mapping + size: 13387 + timestamp: 1760831448842 +- pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + name: isodate + version: 0.7.2 + sha256: 28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_2.conda + sha256: 3d16a0fa55a29fe723c918a979b2ee927eb0bf9616381cdfd26fa9ea2b649546 + md5: ade6b25a6136661dadd1a43e4350b10b + depends: + - more-itertools - python >=3.9 - - referencing >=0.28.4 - - rpds-py >=0.7.1 - - python license: MIT license_family: MIT - size: 81688 - timestamp: 1755595646123 -- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 - md5: 439cd0f567d697b20a8f45cb70a1005a + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12109 + timestamp: 1733326001034 +- conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-6.0.1-pyhd8ed1ab_0.conda + sha256: bfaba92cd33a0ae2488ab64a1d4e062bcf52b26a71f88292c62386ccac4789d7 + md5: bcc023a32ea1c44a790bbf1eae473486 + depends: + - backports.tarfile + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12483 + timestamp: 1733382698758 +- conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.3.0-pyhd8ed1ab_0.conda + sha256: 89320bb2c6bef18f5109bee6cb07a193701cf00552a4cfc6f75073cf0d3e44f6 + md5: b86839fa387a5b904846e77c84167e57 + depends: + - more-itertools + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 16238 + timestamp: 1755584796828 +- conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + sha256: 00d37d85ca856431c67c8f6e890251e7cc9e5ef3724a0302b8d4a101f22aa27f + md5: b4b91eb14fbe2f850dd2c5fc20676c0d depends: - - python >=3.10 - - referencing >=0.31.0 - - python + - python >=3.9 license: MIT license_family: MIT - size: 19236 - timestamp: 1757335715225 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-ha97dd6f_2.conda - sha256: 707dfb8d55d7a5c6f95c772d778ef07a7ca85417d9971796f7d3daad0b615de8 - md5: 14bae321b8127b63cba276bd53fac237 + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 40015 + timestamp: 1740828380668 +- 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/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + name: jsonschema + version: 4.25.1 + sha256: 3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 + requires_dist: + - attrs>=22.2.0 + - jsonschema-specifications>=2023.3.6 + - referencing>=0.28.4 + - rpds-py>=0.7.1 + - 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.9' +- 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/keyring-25.6.0-pyha804496_0.conda + sha256: b6f57c17cf098022c32fe64e85e9615d427a611c48a5947cdfc357490210a124 + md5: cdd58ab99c214b55d56099108a914282 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.9 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36985 + timestamp: 1735210286595 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1aa0949_4.conda + sha256: 96b6900ca0489d9e5d0318a6b49f8eff43fd85fef6e07cb0c25344ee94cd7a3a + md5: c94ab6ff54ba5172cf1c58267005670f depends: - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 constrains: - binutils_impl_linux-64 2.44 license: GPL-3.0-only license_family: GPL - size: 747158 - timestamp: 1758810907507 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-37_h4a7cf45_openblas.conda - build_number: 37 - sha256: b8872684dc3a68273de2afda2a4a1c79ffa3aab45fcfc4f9b3621bd1cc1adbcc - md5: 8bc098f29d8a7e3517bac5b25aab39b1 + purls: [] + size: 742501 + timestamp: 1761335175964 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-38_h4a7cf45_openblas.conda + build_number: 38 + sha256: b26a32302194e05fa395d5135699fd04a905c6ad71f24333f97c64874e053623 + md5: 3509b5e2aaa5f119013c8969fdd9a905 depends: - libopenblas >=0.3.30,<0.3.31.0a0 - libopenblas >=0.3.30,<1.0a0 constrains: - - blas 2.137 openblas - - liblapacke 3.9.0 37*_openblas - - liblapack 3.9.0 37*_openblas - - mkl <2025 - - libcblas 3.9.0 37*_openblas + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas + - mkl <2026 + - liblapack 3.9.0 38*_openblas license: BSD-3-Clause license_family: BSD - size: 17477 - timestamp: 1760212730445 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-37_h0358290_openblas.conda - build_number: 37 - sha256: 8e5a6014424cc11389ebf3febedad937aa4a00e48464831ae4dec69f3c46c4ab - md5: 3794858d4d6910a7fc3c181519e0b77a - depends: - - libblas 3.9.0 37_h4a7cf45_openblas + purls: [] + size: 17522 + timestamp: 1761680084434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-38_h0358290_openblas.conda + build_number: 38 + sha256: 7fe653f45c01eb16d7b48ad934b068dad2885d6f4a7c41512b6a5f1f522bffe9 + md5: bcd928a9376a215cd9164a4312dd5e98 + depends: + - libblas 3.9.0 38_h4a7cf45_openblas constrains: - - blas 2.137 openblas - - liblapacke 3.9.0 37*_openblas - - liblapack 3.9.0 37*_openblas + - blas 2.138 openblas + - liblapack 3.9.0 38*_openblas + - liblapacke 3.9.0 38*_openblas license: BSD-3-Clause license_family: BSD - size: 17474 - timestamp: 1760212737633 + purls: [] + size: 17503 + timestamp: 1761680091587 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 md5: 4211416ecba1866fab0c6470986c22d6 @@ -395,18 +843,20 @@ packages: - expat 2.7.1.* license: MIT license_family: MIT + purls: [] size: 74811 timestamp: 1752719572741 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda - sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab - md5: ede4673863426c0883c0063d853bbd85 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + sha256: 25cbdfa65580cfab1b8d15ee90b4c9f1e0d72128f1661449c9a999d341377d54 + md5: 35f29eec58405aaf55e01cb470d8c26a depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 license: MIT license_family: MIT - size: 57433 - timestamp: 1743434498161 + purls: [] + size: 57821 + timestamp: 1760295480630 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-h767d61c_7.conda sha256: 08f9b87578ab981c7713e4e6a7d935e40766e10691732bba376d4964562bcb45 md5: c0374badb3a5d4b1372db28d19462c53 @@ -418,8 +868,19 @@ packages: - libgcc-ng ==15.2.0=*_7 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 822552 timestamp: 1759968052178 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_7.conda + sha256: 2045066dd8e6e58aaf5ae2b722fb6dfdbb57c862b5f34ac7bfb58c40ef39b6ad + md5: 280ea6eee9e2ddefde25ff799c4f0363 + depends: + - libgcc 15.2.0 h767d61c_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29313 + timestamp: 1759968065504 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_7.conda sha256: 9ca24328e31c8ef44a77f53104773b9fe50ea8533f4c74baa8489a12de916f02 md5: 8621a450add4e231f676646880703f49 @@ -429,6 +890,7 @@ packages: - libgfortran-ng ==15.2.0=*_7 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 29275 timestamp: 1759968110483 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-hcd61629_7.conda @@ -441,8 +903,25 @@ packages: - libgfortran 15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 1572758 timestamp: 1759968082504 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.1-h32235b2_1.conda + sha256: 2421c8a9ac34a7406cff53b7cb96752177edbd245b0782ee88ef3fee5a732aa4 + md5: 8eef974130690cf385b569ecdeed2cf0 + 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.46,<10.47.0a0 + constrains: + - glib 2.86.1 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 3945912 + timestamp: 1761874304703 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-h767d61c_7.conda sha256: e9fb1c258c8e66ee278397b5822692527c5f5786d372fe7a869b900853f3f5ca md5: f7b4d76975aac7e5d9e6ad13845f92fe @@ -450,22 +929,34 @@ packages: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 447919 timestamp: 1759967942498 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-37_h47877c9_openblas.conda - build_number: 37 - sha256: e37125ad315464a927578bf6ba3455a30a7f319d5e60e54ccc860ddd218d516d - md5: 8305e6a5ed432ad3e5a609e8024dbc17 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 depends: - - libblas 3.9.0 37_h4a7cf45_openblas + - __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/liblapack-3.9.0-38_h47877c9_openblas.conda + build_number: 38 + sha256: 63d6073dd4f82ab46943ad99a22fc4edda83b0f8fe6170bdaba7a43352bed007 + md5: 88f10bff57b423a3fd2d990c6055771e + depends: + - libblas 3.9.0 38_h4a7cf45_openblas constrains: - - blas 2.137 openblas - - liblapacke 3.9.0 37*_openblas - - libcblas 3.9.0 37*_openblas + - libcblas 3.9.0 38*_openblas + - blas 2.138 openblas + - liblapacke 3.9.0 38*_openblas license: BSD-3-Clause license_family: BSD - size: 17470 - timestamp: 1760212744703 + purls: [] + size: 17501 + timestamp: 1761680098660 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 md5: 1a580f7796c7bf6393fddb8bbbde58dc @@ -475,6 +966,7 @@ packages: constrains: - xz 5.8.1.* license: 0BSD + purls: [] size: 112894 timestamp: 1749230047870 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda @@ -485,11 +977,12 @@ packages: - libgcc >=13 license: BSD-2-Clause license_family: BSD + purls: [] size: 91183 timestamp: 1748393666725 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda - sha256: 1b51d1f96e751dc945cc06f79caa91833b0c3326efe24e9b506bd64ef49fc9b0 - md5: dfc5aae7b043d9f56ba99514d5e60625 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_3.conda + sha256: 200899e5acc01fa29550d2782258d9cf33e55ce4cbce8faed9c6fe0b774852aa + md5: ac2e4832427d6b159576e8a68305c722 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -499,18 +992,21 @@ packages: - openblas >=0.3.30,<0.3.31.0a0 license: BSD-3-Clause license_family: BSD - size: 5938936 - timestamp: 1755474342204 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda - sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da - md5: 0b367fad34931cb79e0d6b7e5c06bb1c + purls: [] + size: 5918287 + timestamp: 1761748180250 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.0-hee844dc_0.conda + sha256: 4c992dcd0e34b68f843e75406f7f303b1b97c248d18f3c7c330bdc0bc26ae0b3 + md5: 729a572a3ebb8c43933b30edcc628ceb depends: - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing - size: 932581 - timestamp: 1753948484112 + purls: [] + size: 945576 + timestamp: 1762299687230 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h8f9b012_7.conda sha256: 1b981647d9775e1cdeb2fab0a4dd9cd75a6b0de2963f6c3953dbd712f78334b3 md5: 5b767048b1b3ee9a954b06f4084f93dc @@ -521,8 +1017,19 @@ packages: - libstdcxx-ng ==15.2.0=*_7 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 3898269 timestamp: 1759968103436 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-h4852527_7.conda + sha256: 024fd46ac3ea8032a5ec3ea7b91c4c235701a8bf0e6520fe5e6539992a6bd05f + md5: f627678cf829bd70bccf141a19c3ad3e + depends: + - libstdcxx 15.2.0 h8f9b012_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29343 + timestamp: 1759968157195 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-he9a06e4_0.conda sha256: e5ec6d2ad7eef538ddcb9ea62ad4346fde70a4736342c4ad87bd713641eb9808 md5: 80c07c68d2f6870250959dcc95b209d1 @@ -531,6 +1038,7 @@ packages: - libgcc >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 37135 timestamp: 1758626800002 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda @@ -543,6 +1051,7 @@ packages: - zlib 1.3.1 *_2 license: Zlib license_family: Other + purls: [] size: 60963 timestamp: 1727963148474 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda @@ -553,31 +1062,24 @@ packages: - python >=3.10 license: MIT license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping size: 64736 timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/noarch/marko-2.2.1-pyhd8ed1ab_0.conda - sha256: e28dd042ab31e25c08ac12c98762bfbcb710674d7c503106e68d3c1ba1ab3651 - md5: a47020385ae61d862a078c9bf7fd4896 - depends: - - python >=3.10 - license: MIT - license_family: MIT - size: 39445 - timestamp: 1760328924549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - sha256: a530a411bdaaf0b1e4de8869dfaca46cb07407bc7dc0702a9e231b0e5ce7ca85 - md5: c14389156310b8ed3520d84f854be1ee - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - size: 25909 - timestamp: 1759055357045 +- pypi: https://files.pythonhosted.org/packages/73/de/65dfc670e50c9db92b750db1d7c87292b8f3ba9be2c1154594d1a7d1afb4/marko-2.2.1-py3-none-any.whl + name: marko + version: 2.2.1 + sha256: 31e9a18b35c113e506ace5594716fa3df2872f8955908e279bc551f3eb1f0db8 + requires_dist: + - python-slugify ; extra == 'toc' + - pygments ; extra == 'codehilite' + - objprint ; extra == 'repr' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: 457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -585,8 +1087,21 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 +- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhd8ed1ab_0.conda + sha256: fabe81c8f8f3e1d0ef227fc1306526c76189b3f1175f12302c707e0972dd707c + md5: d7620a15dc400b448e1c88a981b23ddd + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 65129 + timestamp: 1756855971031 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -594,39 +1109,52 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 license: X11 AND BSD-3-Clause + purls: [] size: 891641 timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.3-py313hf6604e3_0.conda - sha256: 88d45c6dbedabbc8ebb19555bb3d04b5e2846ae8a7dfc2c0204b54f5f6efaef7 - md5: 3122d20dc438287e125fb5acff1df170 +- pypi: ./ + name: netzero-metrics-reference-data + version: 0.1.0 + sha256: 51ae7691afffd850c74a1953c00ea67cfbc31be050693e441221a421e95f65ea + requires_dist: + - frictionless>=5.18.1,<6 + requires_python: '>=3.11' + editable: true +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.4-py314h2b28147_0.conda + sha256: c440f429b2e217cb3afbda92eb65a8a768aaf1be90657a133cf02871caa89fc4 + md5: 1a829816158b0129acfe809f2971c14e depends: - python - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - - python_abi 3.13.* *_cp313 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 - libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 8888776 - timestamp: 1757505485589 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openpyxl-3.1.5-py313ha4be090_2.conda - sha256: 0ad13c3302ad21e17859c42cefed2c1dedf4721a3a144c0049abe84e6b2a9aed - md5: b60c0b0eb91e1a7d6761f0a21219f468 + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8952104 + timestamp: 1761162099395 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openpyxl-3.1.5-py314hf3b76af_2.conda + sha256: 2a63e0039017f691eb70980a3c2e8dd6ceadab2014a3ec10581263365689fe99 + md5: 786f2bbecc834f4ea3715768f92aac07 depends: - et_xmlfile - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 + - python >=3.14.0rc2,<3.15.0a0 + - python_abi 3.14.* *_cp314 license: MIT license_family: MIT - size: 484978 - timestamp: 1757332189722 + purls: + - pkg:pypi/openpyxl?source=hash-mapping + size: 488167 + timestamp: 1757332209753 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.4-h26f9b46_0.conda sha256: e807f3bad09bdf4075dbb4168619e14b0c0360bacb2e12ef18641a834c8c5549 md5: 14edad12b59ccbfa3910d42c72adc2a0 @@ -636,67 +1164,166 @@ packages: - libgcc >=14 license: Apache-2.0 license_family: Apache + purls: [] size: 3119624 timestamp: 1759324353651 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py313h08cd8bf_1.conda - sha256: c4ce5f75d175cb264dc98af6db14378222b63955c63bf1b5e30e042e81624fae - md5: 9e87d4bda0c2711161d765332fa38781 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 62477 + timestamp: 1745345660407 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py314ha0b5721_1.conda + sha256: 8e4d81448484f3ae2ef54202a49bda0365093ac459045d43f3d151f88cfe4c23 + md5: 4e72e31689d2141ac77fd6a6dcb740d8 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - numpy >=1.22.4 - numpy >=1.23,<3 - - python >=3.13,<3.14.0a0 + - python >=3.14.0rc3,<3.15.0a0 - python-dateutil >=2.8.2 - python-tzdata >=2022.7 - - python_abi 3.13.* *_cp313 + - python_abi 3.14.* *_cp314 - pytz >=2020.1 constrains: - - xlrd >=2.0.1 - - scipy >=1.10.0 - - fsspec >=2022.11.0 - - odfpy >=1.4.1 + - psycopg2 >=2.9.6 + - blosc >=1.21.3 - beautifulsoup4 >=4.11.2 - - python-calamine >=0.1.7 - - numexpr >=2.8.4 - - pytables >=3.8.0 - - pandas-gbq >=0.19.0 - - tzdata >=2022.7 + - pyreadstat >=1.2.0 + - gcsfs >=2022.11.0 + - s3fs >=2022.11.0 - pyxlsb >=1.0.10 + - xlsxwriter >=3.0.5 + - matplotlib >=3.6.3 + - openpyxl >=3.1.0 + - sqlalchemy >=2.0.0 + - numexpr >=2.8.4 - xarray >=2022.12.0 - pyqt5 >=5.15.9 + - xlrd >=2.0.1 + - zstandard >=0.19.0 + - pytables >=3.8.0 + - odfpy >=1.4.1 - lxml >=4.9.2 - - matplotlib >=3.6.3 - - openpyxl >=3.1.0 - - qtpy >=2.3.0 - - psycopg2 >=2.9.6 - pyarrow >=10.0.1 - - tabulate >=0.9.0 - - zstandard >=0.19.0 - - html5lib >=1.1 - bottleneck >=1.3.6 - - numba >=0.56.4 - - sqlalchemy >=2.0.0 - - pyreadstat >=1.2.0 - - gcsfs >=2022.11.0 + - html5lib >=1.1 + - scipy >=1.10.0 + - fsspec >=2022.11.0 - fastparquet >=2022.12.0 - - s3fs >=2022.11.0 - - blosc >=1.21.3 - - xlsxwriter >=3.0.5 + - tabulate >=0.9.0 + - python-calamine >=0.1.7 + - qtpy >=2.3.0 + - numba >=0.56.4 + - tzdata >=2022.7 + - pandas-gbq >=0.19.0 license: BSD-3-Clause license_family: BSD - size: 15131510 - timestamp: 1759266202915 -- conda: https://conda.anaconda.org/conda-forge/noarch/petl-1.7.17-pyhd8ed1ab_0.conda - sha256: d339c53c4aa812fc53078e885740ee6c1b7e8c80165744810bbc2b48057114ee - md5: 4c2498dcda0d58cf25466e82f7287b32 + purls: + - pkg:pypi/pandas?source=hash-mapping + size: 15395500 + timestamp: 1759266072181 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee + md5: 617f15191456cc6a13db418a275435e5 depends: - - python >=3.6 + - python >=3.9 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41075 + timestamp: 1733233471940 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda + sha256: 5c7380c8fd3ad5fc0f8039069a45586aa452cf165264bc5a437ad80397b32934 + md5: 7fa07cb0fb1b625a089ccc01218ee5b1 + 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: 1209177 + timestamp: 1756742976157 +- pypi: https://files.pythonhosted.org/packages/9f/5c/ea831abc18dd3268046d7d9a0119f1f8ddc69642e0a5245f839602b8114d/petl-1.7.17-py3-none-any.whl + name: petl + version: 1.7.17 + sha256: 53785128bcdf46eb4472638ad572acc6d87cc83f80b567fed06ee4a947eea5d1 + requires_dist: + - fastavro>=0.24.0 ; extra == 'avro' + - bcolz>=1.2.1 ; extra == 'bcolz' + - sqlalchemy>=1.3.6,<2.0 ; extra == 'db' + - cython>=0.29.13 ; extra == 'hdf5' + - numpy>=1.16.4 ; extra == 'hdf5' + - numexpr>=2.6.9 ; extra == 'hdf5' + - tables>=3.5.2 ; extra == 'hdf5' + - aiohttp>=3.6.2 ; extra == 'http' + - requests ; extra == 'http' + - intervaltree>=3.0.2 ; extra == 'interval' + - numpy>=1.16.4 ; extra == 'numpy' + - pandas>=0.24.2 ; extra == 'pandas' + - fsspec>=0.7.4 ; extra == 'remote' + - smbprotocol>=1.0.1 ; extra == 'smb' + - xlrd>=2.0.1 ; extra == 'xls' + - xlwt>=1.3.0 ; extra == 'xls' + - openpyxl>=2.6.2 ; extra == 'xlsx' + - lxml>=4.4.0 ; extra == 'xpath' + - whoosh ; extra == 'whoosh' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea + depends: + - ptyprocess >=0.5 + - python >=3.9 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.0-pyhcf101f3_0.conda + sha256: 7efd51b48d908de2d75cbb3c4a2e80dd9454e1c5bb8191b261af3136f7fa5888 + md5: 5c7a868f8241e64e1cf5fdf4962f23e2 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 23625 + timestamp: 1759953252315 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc + md5: 7da7ccd349dbf6487a7778579d2bb971 + depends: + - python >=3.9 license: MIT license_family: MIT - size: 315640 - timestamp: 1752233037144 + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 24246 + timestamp: 1747339794916 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 19457 + timestamp: 1733302371990 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 md5: 12c566707c80111f9799308d9e265aef @@ -705,36 +1332,29 @@ packages: - python license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.2-pyh3cfb1c2_0.conda - sha256: 736deae13f14b18436e2bea9f5e8e60ad1b355965e09c0744fe4a0c8ab9691c4 - md5: fc3a3515b4e71b22b635c4ae34e2f3ea - depends: - - annotated-types >=0.6.0 - - pydantic-core 2.41.4 - - python >=3.10 - - typing-extensions >=4.6.1 - - typing-inspection >=0.4.2 - - typing_extensions >=4.14.1 - license: MIT - license_family: MIT - size: 318267 - timestamp: 1760489656956 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.4-py313h843e2db_0.conda - sha256: 66bf46c1ccafe4cfa2ea64aff4f9d18fee41ac47b942d88347ed9cc5373fdc75 - md5: d42ccdecefbe670d2a50ee3ce784166b - depends: - - python - - typing-extensions >=4.6.0,!=4.7.0 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - size: 1935806 - timestamp: 1760442414544 +- pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + name: pydantic + version: 2.12.4 + sha256: 92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e + 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/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.41.5 + sha256: 22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a md5: 6b6ece66ebcae2d5f326c77ef2c5a066 @@ -742,28 +1362,39 @@ packages: - python >=3.9 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping size: 889287 timestamp: 1750615908735 -- 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 - size: 21085 - timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.8-h2b335a9_101_cp313.conda - build_number: 101 - sha256: b429867f0faf5b9b71e2ebdbe8fedd6f84f4ba53fd2010a1f1458e1e1a038b98 - md5: ae8cf86b9140c7b6a6593a582a8eab8a +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda + sha256: 8979721b7f86b183d21103f3ec2734783847d317c1b754f462f407efc7c60886 + md5: a9d145de8c5f064b5fa68fb34725d9f4 + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy >=0.12,<2.0 + - python >=3.7 + - tomli >=1.0.0 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 244564 + timestamp: 1704035308916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.0-h32b2ec7_102_cp314.conda + build_number: 102 + sha256: 76d750045b94fded676323bfd01975a26a474023635735773d0e4d80aaa72518 + md5: 0a19d2cc6eb15881889b0c6fa7d6a78d depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - libexpat >=2.7.1,<3.0a0 - - libffi >=3.4.6,<3.5.0a0 + - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - liblzma >=5.8.1,<6.0a0 - libmpdec >=4.0.0,<5.0a0 @@ -772,14 +1403,16 @@ packages: - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - openssl >=3.5.4,<4.0a0 - - python_abi 3.13.* *_cp313 + - python_abi 3.14.* *_cp314 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata + - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 - size: 37149783 - timestamp: 1760366432739 - python_site_packages_path: lib/python3.13/site-packages + purls: [] + size: 36681389 + timestamp: 1761176838143 + python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 md5: 5b8d21249ff20967101ffa321cab24e8 @@ -789,22 +1422,18 @@ packages: - python license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping size: 233310 timestamp: 1751104122689 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_1.conda - sha256: a84f270426ae7661f79807b107dedb9829c79bd45f77a3033aa021e10556e87f - md5: a4059bc12930bddeb41aef71537ffaed - depends: - - python >=3.9 - - text-unidecode >=1.3 - constrains: - - slugify <0 - - unidecode >=1.1.1 - - awesome-slugify <0 - license: MIT - license_family: MIT - size: 18991 - timestamp: 1733756348165 +- pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + name: python-slugify + version: 8.0.4 + sha256: 276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8 + requires_dist: + - text-unidecode>=1.3 + - unidecode>=1.1.1 ; extra == 'unidecode' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0 md5: 88476ae6ebd24f39261e0854ac244f33 @@ -812,18 +1441,21 @@ packages: - python >=3.9 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/tzdata?source=hash-mapping size: 144160 timestamp: 1742745254292 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda build_number: 8 - sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 - md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 + md5: 0539938c55b6b1a59b560e843ad864a4 constrains: - - python 3.13.* *_cp313 + - python 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD - size: 7002 - timestamp: 1752805902938 + purls: [] + size: 6989 + timestamp: 1752805904792 - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 md5: bc8e3267d44011051f2eb14d22fb0960 @@ -831,21 +1463,15 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping size: 189015 timestamp: 1742920947249 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_0.conda - sha256: 40dcd6718dce5fbee8aabdd0519f23d456d8feb2e15ac352eaa88bbfd3a881af - md5: 4794ea0adaebd9f844414e594b142cb2 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - size: 207109 - timestamp: 1758892173548 +- pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c md5: 283b96675859b20a825f8fa30f311446 @@ -854,45 +1480,37 @@ packages: - ncurses >=6.5,<7.0a0 license: GPL-3.0-only license_family: GPL + purls: [] size: 282480 timestamp: 1740379431762 -- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 - md5: 870293df500ca7e18bedefa5838a22ab - depends: - - attrs >=22.2.0 - - python >=3.10 - - rpds-py >=0.7.0 - - typing_extensions >=4.4.0 - - python - license: MIT - license_family: MIT - size: 51788 - timestamp: 1760379115194 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda - sha256: 8dc54e94721e9ab545d7234aa5192b74102263d3e704e6d0c8aa7008f2da2a7b - md5: db0c6b99149880c8ba515cf4abe93ee4 - depends: - - certifi >=2017.4.17 - - charset-normalizer >=2,<4 - - idna >=2.5,<4 - - python >=3.9 - - urllib3 >=1.21.1,<3 - constrains: - - chardet >=3.0.2,<6 - license: Apache-2.0 - license_family: APACHE - size: 59263 - timestamp: 1755614348400 -- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-2.0.0-pyhd8ed1ab_1.conda - sha256: d617373ba1a5108336cb87754d030b9e384dcf91796d143fa60fe61e76e5cfb0 - md5: 43e14f832d7551e5a8910672bfc3d8c6 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - size: 38028 - timestamp: 1733921806657 +- 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/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + name: requests + version: 2.32.5 + sha256: 2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + name: rfc3986 + version: 2.0.0 + sha256: 50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd + requires_dist: + - idna ; extra == 'idna2008' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda sha256: edfb44d0b6468a8dfced728534c755101f06f1a9870a7ad329ec51389f16b086 md5: a247579d8a59931091b16a1e932bbed6 @@ -904,22 +1522,30 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/rich?source=compressed-mapping size: 200840 timestamp: 1760026188268 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.27.1-py313h843e2db_1.conda - sha256: a976e90dbd229f7dcd357b0f9a5b637bf85243f3a3e844c1e266472cae53e359 - md5: 06c117e49934b564ef9ff6e61f279301 - depends: - - python - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - size: 389189 - timestamp: 1756737629819 +- pypi: https://files.pythonhosted.org/packages/da/37/e84283b9e897e3adc46b4c88bb3f6ec92a43bd4d2f7ef5b13459963b2e9c/rpds_py-0.28.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: rpds-py + version: 0.28.0 + sha256: 5ae8ee156d6b586e4292491e885d41483136ab994e719a13458055bec14cf370 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.0-py314hdafbbf9_0.conda + sha256: 0ab46ded8647426fa6c2109b7f54787b3c6aee0a6205dfee76c7d20af0ed0c80 + md5: a804c54ce3a1aed268b13657b79825b8 + depends: + - cryptography >=2.0 + - dbus + - jeepney >=0.6 + - python >=3.14.0rc2,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 34100 + timestamp: 1757606849183 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef md5: 7c3c2a0f3ebdea2bbc35538d162b43bf @@ -927,17 +1553,15 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping size: 14462 timestamp: 1733301007770 -- conda: https://conda.anaconda.org/conda-forge/noarch/simpleeval-1.0.3-pyhd8ed1ab_0.conda - sha256: 19d1dab079746de0c38581d926e02306368b74d0683cd3e6b18ccabea54c7e07 - md5: 00cdd2e3ec6d3be6bc2b7d46470a10a1 - depends: - - python >=3.9 - license: MIT - license_family: MIT - size: 21558 - timestamp: 1751650049429 +- pypi: https://files.pythonhosted.org/packages/a0/e9/e58082fbb8cecbb6fb4133033c40cc50c248b1a331582be3a0f39138d65b/simpleeval-1.0.3-py3-none-any.whl + name: simpleeval + version: 1.0.3 + sha256: e3bdbb8c82c26297c9a153902d0fd1858a6c3774bf53ff4f134788c3f2035c38 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -946,8 +1570,21 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + md5: bf7a226e58dfb8346c70df36065d86c9 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15019 + timestamp: 1733244175724 - conda: https://conda.anaconda.org/conda-forge/noarch/stringcase-1.2.0-pyhd8ed1ab_2.conda sha256: 8184e801354ec82f686989f4664cc914d6a80686bb0856ac84bce8e82e8a0853 md5: 6c17c5b9a3f8cf44137bfca12e2574d7 @@ -955,26 +1592,21 @@ packages: - python >=3.9 license: MIT license_family: MIT + purls: + - pkg:pypi/stringcase?source=hash-mapping size: 10339 timestamp: 1734359694686 -- conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a - md5: 959484a66b4b76befcddc4fa97c95567 - depends: - - python >=3.9 - license: MIT - license_family: MIT - size: 37554 - timestamp: 1733589854804 -- conda: https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_2.conda - sha256: 4770807cc5a217638c9aea3f05ea55718a82c50f32462df196b5472aff02787f - md5: 23b4ba5619c4752976eb7ba1f5acb7e8 - depends: - - python >=3.9 - license: Artistic-1.0-Perl - license_family: OTHER - size: 65532 - timestamp: 1733750024391 +- pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl + name: tabulate + version: 0.9.0 + sha256: 024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f + requires_dist: + - wcwidth ; extra == 'widechars' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl + name: text-unidecode + version: '1.3' + sha256: 1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 md5: a0116df4f4ed05c303811a837d5b39d8 @@ -984,65 +1616,71 @@ packages: - libzlib >=1.3.1,<2.0a0 license: TCL license_family: BSD + purls: [] size: 3285204 timestamp: 1748387766691 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.19.2-pyhef33e25_0.conda - sha256: af84fb290bea38acba4210ecca00294c7c7fc158109f5748e1c48e6dcfb1e8d1 - md5: dad6001e0daae6af908857faeb3ea541 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda + sha256: cb77c660b646c00a48ef942a9e1721ee46e90230c7c570cdeb5a893b5cce9bff + md5: d2732eb636c264dc9aa4cbee404b1a53 depends: - - typer-slim-standard ==0.19.2 h6e3bb38_0 - python >=3.10 - python license: MIT license_family: MIT - size: 78588 - timestamp: 1758635560770 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.19.2-pyhcf101f3_0.conda - sha256: af4f9ae437fec180e2efacded58c5d080b60d80e7ffa1158c3d403a5f963e01e - md5: 375e664c2a0892eb4bdb33b0d03e5366 + purls: + - pkg:pypi/tomli?source=compressed-mapping + size: 20973 + timestamp: 1760014679845 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.2.0-pyhd8ed1ab_0.conda + sha256: 304834f2438017921d69f05b3f5a6394b42dc89a90a6128a46acbf8160d377f6 + md5: 32e37e8fe9ef45c637ee38ad51377769 depends: - - python >=3.10 - - click >=8.0.0 - - typing_extensions >=3.7.4.3 - - python - constrains: - - typer 0.19.2.* - - rich >=10.11.0 - - shellingham >=1.3.0 + - python >=3.9 license: MIT license_family: MIT - size: 47186 - timestamp: 1758635560770 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.19.2-h6e3bb38_0.conda - sha256: 0225117f9fdec038c7bcf96414fea6096463d8a34159c368584f3575a04c4bcb - md5: 3430c6397a612b9b54ec07d7fd6e0b18 - depends: - - typer-slim ==0.19.2 pyhcf101f3_0 - - rich - - shellingham + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12680 + timestamp: 1736962345843 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 + md5: 146402bf0f11cbeb8f781fa4309a95d3 + depends: + - python >=3.9 license: MIT license_family: MIT - size: 5300 - timestamp: 1758635560770 -- 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 - size: 91383 - timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_0.conda - sha256: 8aaf69b828c2b94d0784f18f70f11aa032950d304e57e88467120b45c18c24fd - md5: 399701494e731ce73fdd86c185a3d1b4 + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 38777 + timestamp: 1749127286558 +- conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2025.9.11.17-pyhd8ed1ab_0.conda + sha256: 74807fa88e811aeaf3d2acd6221665efd9469caf8c57b4ee370b61f0528ff0ae + md5: fc3b129397a910cfe1350075a7ad7432 depends: - python >=3.10 - - typing_extensions >=4.12.0 - license: MIT - license_family: MIT - size: 18799 - timestamp: 1759301271883 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 19575 + timestamp: 1757677773672 +- pypi: https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl + name: typer + version: 0.20.0 + sha256: 5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a + requires_dist: + - click>=8.0.0 + - typing-extensions>=3.7.4.3 + - shellingham>=1.3.0 + - rich>=10.11.0 + requires_python: '>=3.8' +- 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 @@ -1051,49 +1689,89 @@ packages: - 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-2025b-h78e105d_0.conda sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 md5: 4222072737ccff51314b5ece9c7d6f5a license: LicenseRef-Public-Domain + purls: [] size: 122968 timestamp: 1742727099393 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8 - md5: 436c165519e140cb08d246a4472a9d6a - depends: - - brotli-python >=1.0.9 - - h2 >=4,<5 - - pysocks >=1.5.6,<2.0,!=1.5.7 +- pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + name: urllib3 + version: 2.5.0 + sha256: e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.9.2-pyhd8ed1ab_0.conda + sha256: 26e53b42f7fa1127e6115a35b91c20e15f75984648b88f115136f27715d4a440 + md5: 946e3571aaa55e0870fec0dea13de3bf + depends: + - click - python >=3.9 - - zstandard >=0.18.0 license: MIT license_family: MIT - size: 101735 - timestamp: 1750271478254 -- conda: https://conda.anaconda.org/conda-forge/noarch/validators-0.35.0-pyhd8ed1ab_0.conda - sha256: a9cd585b86f41da98e4d67d75623916456d9df9dbd0ee27c4a722d89eb71cf13 - md5: 3449ef730c7d483adde81993994092b9 + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 14292 + timestamp: 1735925027874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.9.7-h30787bc_0.conda + sha256: 949e98185f68242eaf5e205925e59cede4890811b7fbd7891b65e7aca71f1ffe + md5: 5144aa8155f23052977571a63ce8d03f depends: - - python >=3.9 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 17163738 + timestamp: 1761878731952 +- pypi: https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl + name: validators + version: 0.35.0 + sha256: e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd + requires_dist: + - eth-hash[pycryptodome]>=0.7.0 ; extra == 'crypto-eth-addresses' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + sha256: 77193c99c6626c58446168d3700f9643d8c0dab1f6deb6b9dd039e6872781bfb + md5: cfccfd4e8d9de82ed75c8e2c91cab375 + depends: + - distlib >=0.3.7,<1 + - filelock >=3.12.2,<4 + - platformdirs >=3.9.1,<5 + - python >=3.10 + - typing_extensions >=4.13.2 license: MIT license_family: MIT - size: 40032 - timestamp: 1746267229282 -- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad - md5: a77f85f77be52ff59391544bfe73390a + purls: + - pkg:pypi/virtualenv?source=compressed-mapping + size: 4401341 + timestamp: 1761726489722 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad + md5: df5e78d904988eb55042c0c97446079f depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 + - python >=3.9 license: MIT license_family: MIT - size: 85189 - timestamp: 1753484064210 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313h54dd161_0.conda - sha256: 9d79d176afe50361cc3fd4366bedff20852dbea1e5b03f358b55f12aca22d60d - md5: 1fe43bd1fc86e22ad3eb0edec637f8a2 + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 22963 + timestamp: 1749421737203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py314h31f8a6b_0.conda + sha256: ec4e66b4e042ea9554b9db92b509358f75390f7dcbafb8eead940a2880486a63 + md5: 68bd13651618354987763f746ee1fadc depends: - python - cffi >=1.11 @@ -1101,11 +1779,13 @@ packages: - libgcc >=14 - __glibc >=2.17,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 - - python_abi 3.13.* *_cp313 + - python_abi 3.14.* *_cp314 license: BSD-3-Clause license_family: BSD - size: 471152 - timestamp: 1757930114245 + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 127864 + timestamp: 1757930108791 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 @@ -1116,5 +1796,6 @@ packages: - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 567578 timestamp: 1742433379869 diff --git a/pixi.toml b/pixi.toml deleted file mode 100644 index 697e1f4..0000000 --- a/pixi.toml +++ /dev/null @@ -1,16 +0,0 @@ -[workspace] -authors = ["jgunstone "] -channels = ["conda-forge"] -name = "uknzcb-eui-benchmarks" -platforms = ["linux-64"] -version = "0.1.0" - -[dependencies] -frictionless = ">=5.18.1,<6" -pandas = ">=2.3.3,<3" -stringcase = ">=1.2.0,<2" -openpyxl = ">=3.1.5,<4" - -[tasks] -get-eui = { cmd = "python get_eui.py", cwd = "scripts" } -create-datapackage = { cmd = "python create_datapackage.py", cwd = "scripts" } diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..c482faa --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,33 @@ +[project] +authors = [{name = "jgunstone", email = "j.gunstone@maxfordham.com"}] +dependencies = ["frictionless>=5.18.1,<6"] +name = "netzero-metrics-reference-data" +requires-python = ">= 3.11" +version = "0.1.0" + +[build-system] +build-backend = "hatchling.build" +requires = ["hatchling"] + +[tool.pixi.workspace] +channels = ["conda-forge"] +platforms = ["linux-64"] + +[tool.pixi.pypi-dependencies] +netzero_metrics_reference_data = { path = ".", editable = true } + +[tool.pixi.dependencies] +stringcase = ">=1.2.0,<2" +openpyxl = ">=3.1.5,<4" +pandas = ">=2.3,<3" +pytest = ">=7.2.2,<8" +hatch = ">=1.0.0,<2" +casefy = ">=1.0.0,<2" + +[tool.pixi.tasks] +get-eui = { cmd = "python get_eui.py", cwd = "scripts" } +create-datapackage = { cmd = "python create_datapackage.py", cwd = "scripts" } +cp-data = { cmd = "python scripts/cp_data.py"} #, cwd = "scripts" +tests = {cmd = "pytest", depends-on = ["cp-data"] } +build = "hatch build" +frictionless-validate = { cmd = "frictionless validate datapackage.yaml" } \ No newline at end of file diff --git a/scripts/cp_data.py b/scripts/cp_data.py new file mode 100644 index 0000000..4d2150b --- /dev/null +++ b/scripts/cp_data.py @@ -0,0 +1,18 @@ +import shutil +from pathlib import Path + +# Define source and destination directories +repo_root = Path(__file__).resolve().parent.parent +destination_dir = repo_root / "src" / "netzero_metrics_reference_data" / "data" + +# Ensure destination directory exists +destination_dir.mkdir(parents=True, exist_ok=True) + +# List of file extensions to copy +extensions = [".csv", ".json", ".yaml", ".txt"] + +# Copy matching files from repo root to destination +for file_path in repo_root.iterdir(): + if file_path.is_file() and any(file_path.name.endswith(ext) for ext in extensions): + dst_path = destination_dir / file_path.name + shutil.copy2(file_path, dst_path) diff --git a/scripts/get_eui.py b/scripts/get_eui.py index c9d3754..dc467c8 100644 --- a/scripts/get_eui.py +++ b/scripts/get_eui.py @@ -1,13 +1,14 @@ import pandas as pd import pathlib -import stringcase +import casefy CWD = pathlib.Path(__file__).parent.parent PTH_EUI_IN = CWD / "scripts" / "energy-use-intensity.xlsx" -DIR_OUT = CWD +DIR_OUT = CWD PTH_EUI = DIR_OUT / "energy-use-intensity.csv" PTH_BUILDING_TYPES = DIR_OUT / "building-types.txt" + def get_sheet_data(PTH, sheet_name): construction_deleivery_type = sheet_name meta = pd.read_excel(PTH, sheet_name=sheet_name, nrows=2) @@ -16,7 +17,9 @@ def get_sheet_data(PTH, sheet_name): .T.reset_index(drop=False) .rename(columns={"year": "building-type", "index": "building-type-shorthand"}) ) - col_index_w_gia = [0] + [n+1 for n,x in enumerate(meta.unit) if "GIA" in x] # +1 as yr is first column + col_index_w_gia = [0] + [ + n + 1 for n, x in enumerate(meta.unit) if "GIA" in x + ] # +1 as yr is first column data = pd.read_excel(PTH, sheet_name=sheet_name, skiprows=2) data = data.iloc[:, col_index_w_gia] if not data.columns.is_unique: @@ -26,9 +29,14 @@ def get_sheet_data(PTH, sheet_name): data, id_vars="year", var_name="building-type", value_name="benchmark-target" ) - data = data.join(meta.set_index('building-type'), on="building-type") + data = data.join(meta.set_index("building-type"), on="building-type") data["construction-delivery-type"] = construction_deleivery_type - cols = ["building-type","building-type-shorthand","unit","construction-delivery-type"] + cols = [ + "building-type", + "building-type-shorthand", + "unit", + "construction-delivery-type", + ] for x in cols: data[x] = data[x].str.strip() @@ -36,19 +44,22 @@ def get_sheet_data(PTH, sheet_name): data["building-type"] = data["building-type"].str.replace(x, "") li = [" ".join(x.split("-")) for x in data.columns] - data.columns = [stringcase.pascalcase(stringcase.snakecase(x)) for x in li] + data.columns = [casefy.pascalcase(casefy.snakecase(x)) for x in li] return data def get_eui_data(): sheet_names = ["newbuild", "retrofit-in-one-go", "retrofit-stepped"] - return pd.concat([get_sheet_data(PTH_EUI_IN, sheet_name=s) for s in sheet_names], axis=0) + return pd.concat( + [get_sheet_data(PTH_EUI_IN, sheet_name=s) for s in sheet_names], axis=0 + ) + def get_building_types(df_eui): return list(df_eui["BuildingType"].unique()) + df_eui = get_eui_data() df_eui.to_csv(PTH_EUI, index=False) PTH_BUILDING_TYPES.write_text("\n".join(get_building_types(df_eui))) - diff --git a/src/netzero_metrics_reference_data/__init__.py b/src/netzero_metrics_reference_data/__init__.py new file mode 100644 index 0000000..73995a3 --- /dev/null +++ b/src/netzero_metrics_reference_data/__init__.py @@ -0,0 +1,11 @@ +from importlib.resources import files +from frictionless import Package + +PTH_PKG = ( + files("netzero_metrics_reference_data") + .joinpath("data") + .joinpath("datapackage.yaml") +) +nzm_pkg = Package(PTH_PKG) + +__all__ = ["nzm_pkg"] diff --git a/tests/test_netzero_metrics_reference_data.py b/tests/test_netzero_metrics_reference_data.py new file mode 100644 index 0000000..794810e --- /dev/null +++ b/tests/test_netzero_metrics_reference_data.py @@ -0,0 +1,16 @@ +from netzero_metrics_reference_data import nzm_pkg + + +def test_nzm_pkg(): + assert nzm_pkg is not None + li = [ + "energy-use-intensity", + "building-types", + "life-cycle-modules", + "rics-building-element-category", + "color-energy-end-use", + "color-fuel-type", + ] + assert nzm_pkg.resource_names == li + + print("done") From 8bfbe40ab2605c984063a5602f20990a7d62de12 Mon Sep 17 00:00:00 2001 From: jgunstone Date: Wed, 5 Nov 2025 16:23:09 +0000 Subject: [PATCH 3/8] update workflow name. push invalid data to test frictionless validation step --- .github/workflows/test-and-validate.yml | 2 +- energy-use-intensity.csv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-validate.yml b/.github/workflows/test-and-validate.yml index bd1632f..dfa65ab 100644 --- a/.github/workflows/test-and-validate.yml +++ b/.github/workflows/test-and-validate.yml @@ -11,7 +11,7 @@ on: jobs: pypi-publish: - name: Upload release to PyPI + name: Run tests and validate data runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/energy-use-intensity.csv b/energy-use-intensity.csv index 51cf1aa..35021b1 100644 --- a/energy-use-intensity.csv +++ b/energy-use-intensity.csv @@ -8,7 +8,7 @@ Year,BuildingType,BenchmarkTarget,BuildingTypeShorthand,Unit,ConstructionDeliver 2031,Commercial Resi - Student Residential,65.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2032,Commercial Resi - Student Residential,64.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2033,Commercial Resi - Student Residential,62.0,Stud. Resi.,kWh/m²GIA/yr,newbuild -2034,Commercial Resi - Student Residential,60.0,Stud. Resi.,kWh/m²GIA/yr,newbuild +2034,Commercial Resi - Student Residential,x,Stud. Resi.,kWh/m²GIA/yr,newbuild 2035,Commercial Resi - Student Residential,59.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2036,Commercial Resi - Student Residential,57.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2037,Commercial Resi - Student Residential,55.0,Stud. Resi.,kWh/m²GIA/yr,newbuild From de21ed49e0e6c44f02a7c44546d2d276eb417ffc Mon Sep 17 00:00:00 2001 From: jgunstone Date: Thu, 6 Nov 2025 08:26:55 +0000 Subject: [PATCH 4/8] ad GH token for creation of issue --- .github/workflows/test-and-validate.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test-and-validate.yml b/.github/workflows/test-and-validate.yml index dfa65ab..c5ea006 100644 --- a/.github/workflows/test-and-validate.yml +++ b/.github/workflows/test-and-validate.yml @@ -23,6 +23,8 @@ jobs: - run: pixi run tests - run: pixi run frictionless-validate - name: Workflow failure notification + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} uses: JasonEtco/create-an-issue@v2 if: failure() with: From 2c5b8583f4a657d67df0cda9ba0de5fa0631e409 Mon Sep 17 00:00:00 2001 From: jgunstone Date: Thu, 6 Nov 2025 08:36:45 +0000 Subject: [PATCH 5/8] fix token placement --- .github/workflows/test-and-validate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-validate.yml b/.github/workflows/test-and-validate.yml index c5ea006..8efa0df 100644 --- a/.github/workflows/test-and-validate.yml +++ b/.github/workflows/test-and-validate.yml @@ -23,9 +23,9 @@ jobs: - run: pixi run tests - run: pixi run frictionless-validate - name: Workflow failure notification - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} uses: JasonEtco/create-an-issue@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} if: failure() with: filename: .github/frictionless-validate-failure.md \ No newline at end of file From 1c007ee8ca4d3b30812030fb3fb123e62b2aa152 Mon Sep 17 00:00:00 2001 From: jgunstone Date: Thu, 6 Nov 2025 08:42:11 +0000 Subject: [PATCH 6/8] move template --- .github/{workflows => }/frictionless-validate-failure.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{workflows => }/frictionless-validate-failure.md (100%) diff --git a/.github/workflows/frictionless-validate-failure.md b/.github/frictionless-validate-failure.md similarity index 100% rename from .github/workflows/frictionless-validate-failure.md rename to .github/frictionless-validate-failure.md From d02717510c168d7c713cd56c88e05691ea1f986b Mon Sep 17 00:00:00 2001 From: jgunstone Date: Mon, 10 Nov 2025 11:21:11 +0000 Subject: [PATCH 7/8] remove create issue on frictionless fail --- .github/workflows/test-and-validate.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test-and-validate.yml b/.github/workflows/test-and-validate.yml index 8efa0df..c29b8fd 100644 --- a/.github/workflows/test-and-validate.yml +++ b/.github/workflows/test-and-validate.yml @@ -7,9 +7,8 @@ on: pull_request: branches: - main - -jobs: +jobs: pypi-publish: name: Run tests and validate data runs-on: ubuntu-latest @@ -17,15 +16,16 @@ jobs: - uses: actions/checkout@v4 - uses: prefix-dev/setup-pixi@v0.9.3 with: - pixi-version: v0.59.0 - cache: true - cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + pixi-version: v0.59.0 + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} - run: pixi run tests - run: pixi run frictionless-validate - - name: Workflow failure notification - uses: JasonEtco/create-an-issue@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: failure() - with: - filename: .github/frictionless-validate-failure.md \ No newline at end of file + # TODO + # - name: Workflow failure notification + # uses: JasonEtco/create-an-issue@v2 + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # if: failure() + # with: + # filename: .github/frictionless-validate-failure.md From 1779cb5ec04dd0cc7e6efcdf2a0681469965516c Mon Sep 17 00:00:00 2001 From: jgunstone Date: Mon, 10 Nov 2025 11:27:18 +0000 Subject: [PATCH 8/8] fix artificial error added to data to test CI --- energy-use-intensity.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/energy-use-intensity.csv b/energy-use-intensity.csv index 35021b1..51cf1aa 100644 --- a/energy-use-intensity.csv +++ b/energy-use-intensity.csv @@ -8,7 +8,7 @@ Year,BuildingType,BenchmarkTarget,BuildingTypeShorthand,Unit,ConstructionDeliver 2031,Commercial Resi - Student Residential,65.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2032,Commercial Resi - Student Residential,64.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2033,Commercial Resi - Student Residential,62.0,Stud. Resi.,kWh/m²GIA/yr,newbuild -2034,Commercial Resi - Student Residential,x,Stud. Resi.,kWh/m²GIA/yr,newbuild +2034,Commercial Resi - Student Residential,60.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2035,Commercial Resi - Student Residential,59.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2036,Commercial Resi - Student Residential,57.0,Stud. Resi.,kWh/m²GIA/yr,newbuild 2037,Commercial Resi - Student Residential,55.0,Stud. Resi.,kWh/m²GIA/yr,newbuild