diff --git a/.github/workflows/bot-auto-merge.yml b/.github/workflows/bot-auto-merge.yml index 898775e50a..a8b216a008 100644 --- a/.github/workflows/bot-auto-merge.yml +++ b/.github/workflows/bot-auto-merge.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Impersonate auto merge PR bot - uses: tibdex/github-app-token@v1 + uses: tibdex/github-app-token@v2 id: generate-token with: app_id: ${{ secrets.BOT_AUTO_MERGE_PRS_APP_ID }} diff --git a/.github/workflows/build-deploy-pudl.yml b/.github/workflows/build-deploy-pudl.yml index eec4318ecf..1dfa75b644 100644 --- a/.github/workflows/build-deploy-pudl.yml +++ b/.github/workflows/build-deploy-pudl.yml @@ -45,7 +45,7 @@ jobs: - name: Docker Metadata id: docker_metadata - uses: docker/metadata-action@v4.4.0 + uses: docker/metadata-action@v5.3.0 with: images: catalystcoop/pudl-etl flavor: | @@ -83,7 +83,7 @@ jobs: # Setup gcloud CLI - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v1 + uses: google-github-actions/setup-gcloud@v2 - name: Determine commit information run: |- diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index d82ebf74cf..6cc14b8d58 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -17,7 +17,7 @@ jobs: - name: Docker Metadata id: docker_metadata - uses: docker/metadata-action@v4.4.0 + uses: docker/metadata-action@v5.3.0 with: images: catalystcoop/pudl-etl flavor: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7a6385c14d..458bac69f4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: with: fetch-depth: 2 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.11" - name: Build source and wheel distributions diff --git a/.github/workflows/run-etl.yml b/.github/workflows/run-etl.yml index d8876e940c..014c3ccb6c 100644 --- a/.github/workflows/run-etl.yml +++ b/.github/workflows/run-etl.yml @@ -16,7 +16,7 @@ jobs: uses: actions/checkout@v4 - name: Docker Metadata id: docker_metadata - uses: docker/metadata-action@v4.4.0 + uses: docker/metadata-action@v5.3.0 # TODO(rousik): we could consider YYYY-MM-DD-HHMM-branch-sha with: images: catalystcoop/pudl-etl-ci diff --git a/.github/workflows/zenodo-cache-sync.yml b/.github/workflows/zenodo-cache-sync.yml index f52d74be78..d4d68c115d 100644 --- a/.github/workflows/zenodo-cache-sync.yml +++ b/.github/workflows/zenodo-cache-sync.yml @@ -69,7 +69,7 @@ jobs: service_account: "zenodo-cache-manager@catalyst-cooperative-pudl.iam.gserviceaccount.com" - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v1 + uses: google-github-actions/setup-gcloud@v2 - name: Update GCS cache with any new Zenodo archives run: | diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3bc8081313..57f096d3d9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,7 +29,7 @@ repos: # Formatters: hooks that re-write Python & documentation files #################################################################################### - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.1.6 + rev: v0.1.7 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] diff --git a/devtools/sqlite-table-diff.ipynb b/devtools/sqlite-table-diff.ipynb new file mode 100644 index 0000000000..a5fef66f71 --- /dev/null +++ b/devtools/sqlite-table-diff.ipynb @@ -0,0 +1,102 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"Example of diffing tables across multiple different SQLite DBs.\n", + "\n", + "The tables must have the same name/schema. This is intended for use in\n", + "investigating validation test errors.\n", + "\"\"\"\n", + "import sqlite3\n", + "from pathlib import Path\n", + "from typing import Iterable\n", + "\n", + "import pandas as pd\n", + "\n", + "from pudl.helpers import diff_wide_tables, TableDiff\n", + "from pudl.metadata.classes import Resource\n", + "from pudl.metadata.fields import apply_pudl_dtypes\n", + "\n", + "\n", + "def table_diff(\n", + " table_name: str,\n", + " old_conn,\n", + " new_conn,\n", + " ignore_cols: Iterable[str] = (\"plant_id_ferc1\",),\n", + " addl_key_cols: Iterable[str] = (),\n", + " ) -> TableDiff:\n", + " \"\"\"Diff two versions of the same table that live in SQL databases.\n", + "\n", + " The table has to have the same name + columns in both DBs.\n", + "\n", + " Args:\n", + " table_name: the name, in the SQL database, of the table you want to compare.\n", + " old_conn: SQLite connection to the old version of the database.\n", + " new_conn: SQLite connection to the new version of the database.\n", + " ignore_cols: a list of columns that you would like to ignore diffs in.\n", + " addl_key_cols: \n", + " columns that aren't necessarily in the primary key, but that you'd\n", + " like to use as key columns for the diff - for example, if your\n", + " table only uses `record_id` as primary_key, but you want to group\n", + " the rows by `record_year` and `utility_id` as well, you would pass\n", + " those in.\n", + " \"\"\"\n", + " query = f\"SELECT * FROM {table_name}\" # noqa: S608\n", + " old_table = apply_pudl_dtypes(pd.read_sql(query, old_conn))\n", + " new_table = apply_pudl_dtypes(pd.read_sql(query, new_conn))\n", + "\n", + " cols = list(set(old_table.columns) - set(ignore_cols))\n", + "\n", + " primary_key = list(set(Resource.from_id(table_name).schema.primary_key).union(set(addl_key_cols)))\n", + " return diff_wide_tables(primary_key, old_table[cols], new_table[cols])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "new_db = sqlite3.connect(Path(\"~/Downloads/pudl.sqlite\").expanduser())\n", + "old_db = sqlite3.connect(Path(\"~/Downloads/pudl (2).sqlite\").expanduser())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "table_name = \"denorm_plants_steam_ferc1\"\n", + "diff = table_diff(table_name, old_db, new_db, ignore_cols=(\"plant_id_ferc1\", \"plant_id_pudl\"), addl_key_cols=(\"report_year\", \"utility_id_pudl\"))\n", + "diff.changed" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pudl-dev", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 78fe2922af..9737ce3eeb 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -18,6 +18,12 @@ v2023.12.XX outputs describing historical utility and balancing authority service territories. See :issue:`1174` and :pr:`3086`. +Data Coverage +^^^^^^^^^^^^^ +* Updated :doc:`data_sources/epacems` to switch to pulling the quarterly updates of + CEMS instead of the annual files. Integrates CEMS through 2023q3. See issue + :issue:`2973` & PR :pr:`3096`. + --------------------------------------------------------------------------------------- v2023.12.01 --------------------------------------------------------------------------------------- diff --git a/environments/conda-linux-64.lock.yml b/environments/conda-linux-64.lock.yml index 1e2f208e53..060b8dc2c3 100644 --- a/environments/conda-linux-64.lock.yml +++ b/environments/conda-linux-64.lock.yml @@ -43,11 +43,11 @@ dependencies: - libbrotlicommon=1.1.0=hd590300_1 - libcrc32c=1.1.2=h9c3ff4c_0 - libdeflate=1.19=hd590300_0 - - libev=4.33=h516909a_1 + - libev=4.33=hd590300_2 - libexpat=2.5.0=hcb278e6_1 - libffi=3.4.2=h7f98852_5 - libgfortran5=13.2.0=ha4646dd_3 - - libiconv=1.17=h166bdaf_0 + - libiconv=1.17=hd590300_1 - libjpeg-turbo=3.0.0=hd590300_1 - libnsl=2.0.1=hd590300_0 - libnuma=2.0.16=h0b41bf4_1 @@ -62,7 +62,7 @@ dependencies: - lzo=2.10=h516909a_1000 - ncurses=6.4=h59595ed_2 - nspr=4.35=h27087fc_0 - - openssl=3.1.4=hd590300_0 + - openssl=3.2.0=hd590300_1 - pixman=0.42.2=h59595ed_0 - pthread-stubs=0.4=h36c2ea0_1001 - rdma-core=49.0=hd3aeb46_1 @@ -92,7 +92,7 @@ dependencies: - libgfortran-ng=13.2.0=h69a702a_3 - libkml=1.3.0=h01aab08_1018 - libllvm14=14.0.6=hcd5def8_4 - - libnghttp2=1.58.0=h47da74e_0 + - libnghttp2=1.58.0=h47da74e_1 - libpng=1.6.39=h753d276_0 - libprotobuf=4.24.4=hf27288f_0 - libre2-11=2023.06.02=h7a70373_0 @@ -136,7 +136,7 @@ dependencies: - alabaster=0.7.13=pyhd8ed1ab_0 - anyascii=0.3.2=pyhd8ed1ab_0 - appdirs=1.4.4=pyh9f0ad1d_0 - - astroid=3.0.1=py311h38be061_0 + - astroid=3.0.2=py311h38be061_0 - atk-1.0=2.38.0=hd4edc92_1 - attrs=23.1.0=pyh71513ae_1 - aws-c-event-stream=0.3.2=h1fff966_7 @@ -160,13 +160,13 @@ dependencies: - colorama=0.4.6=pyhd8ed1ab_0 - crashtest=0.4.1=pyhd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_0 - - dagster-pipes=1.5.10=pyhd8ed1ab_0 + - dagster-pipes=1.5.12=pyhd8ed1ab_0 - dataclasses=0.8=pyhc8e2a94_3 - dbus=1.13.6=h5008d03_3 - debugpy=1.8.0=py311hb755f60_1 - decorator=5.1.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - - distlib=0.3.7=pyhd8ed1ab_0 + - distlib=0.3.8=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - docutils=0.20.1=py311h38be061_3 - entrypoints=0.4=pyhd8ed1ab_0 @@ -180,8 +180,8 @@ dependencies: - frozenlist=1.4.0=py311h459d7ec_1 - fsspec=2023.12.1=pyhca7485f_0 - gdk-pixbuf=2.42.10=h829c605_4 - - google-cloud-sdk=456.0.0=py311h38be061_0 - - greenlet=3.0.1=py311hb755f60_0 + - google-cloud-sdk=457.0.0=py311h38be061_0 + - greenlet=3.0.2=py311hb755f60_0 - gts=0.7.6=h977cf35_4 - hpack=4.0.0=pyh9f0ad1d_0 - httptools=0.6.1=py311h459d7ec_0 @@ -202,9 +202,9 @@ dependencies: - kiwisolver=1.4.5=py311h9547e67_1 - lcms2=2.16=hb7c19ff_0 - libblas=3.9.0=20_linux64_openblas - - libcurl=8.4.0=hca28451_0 + - libcurl=8.5.0=hca28451_0 - libgrpc=1.59.2=hd6c4280_0 - - libpq=16.1=hfc447b1_0 + - libpq=16.1=h33b98f1_7 - libwebp=1.3.2=h658648e_1 - llvmlite=0.41.1=py311ha6695c7_0 - locket=1.0.0=pyhd8ed1ab_0 @@ -233,7 +233,7 @@ dependencies: - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - platformdirs=4.1.0=pyhd8ed1ab_0 - pluggy=1.3.0=pyhd8ed1ab_0 - - prettier=3.1.0=h31abb78_0 + - prettier=3.1.1=h31abb78_0 - prometheus_client=0.19.0=pyhd8ed1ab_0 - psutil=5.9.5=py311h459d7ec_1 - ptyprocess=0.7.0=pyhd3deb0d_0 @@ -287,7 +287,7 @@ dependencies: - traitlets=5.14.0=pyhd8ed1ab_0 - types-python-dateutil=2.8.19.14=pyhd8ed1ab_0 - types-pyyaml=6.0.12.12=pyhd8ed1ab_0 - - typing_extensions=4.8.0=pyha770c72_0 + - typing_extensions=4.9.0=pyha770c72_0 - typing_utils=0.1.0=pyhd8ed1ab_0 - unicodecsv=0.14.1=pyhd8ed1ab_2 - uri-template=1.3.0=pyhd8ed1ab_0 @@ -321,7 +321,7 @@ dependencies: - cached-property=1.5.2=hd8ed1ab_1 - cairo=1.18.0=h3faef2a_0 - cffi=1.16.0=py311hb3a22ac_0 - - cfitsio=4.3.0=hbdc6101_0 + - cfitsio=4.3.1=hbdc6101_0 - click-default-group=1.2.4=pyhd8ed1ab_0 - click-default-group-wheel=1.2.2=pyhd8ed1ab_0 - click-plugins=1.1.1=py_0 @@ -330,16 +330,16 @@ dependencies: - coloredlogs=14.0=pyhd8ed1ab_3 - comm=0.1.4=pyhd8ed1ab_0 - coverage=7.3.2=py311h459d7ec_0 - - curl=8.4.0=hca28451_0 + - curl=8.5.0=hca28451_0 - fonttools=4.46.0=py311h459d7ec_0 - gitdb=4.0.11=pyhd8ed1ab_0 - graphql-core=3.2.3=pyhd8ed1ab_0 - grpcio=1.59.2=py311ha6695c7_0 - h11=0.14.0=pyhd8ed1ab_0 - h2=4.1.0=pyhd8ed1ab_0 - - hdf5=1.14.2=nompi_h4f84152_100 + - hdf5=1.14.3=nompi_h4f84152_100 - html5lib=1.1=pyh9f0ad1d_0 - - hypothesis=6.91.1=pyha770c72_0 + - hypothesis=6.92.0=pyha770c72_0 - importlib-metadata=7.0.0=pyha770c72_0 - importlib_resources=6.1.1=pyhd8ed1ab_0 - isodate=0.6.1=pyhd8ed1ab_0 @@ -365,11 +365,11 @@ dependencies: - partd=1.4.1=pyhd8ed1ab_0 - pexpect=4.8.0=pyh1a96a4e_2 - pillow=10.1.0=py311ha6c5da5_0 - - pint=0.22=pyhd8ed1ab_1 + - pint=0.23=pyhd8ed1ab_0 - pip=23.3.1=pyhd8ed1ab_0 - - postgresql=16.1=h8972f4a_0 + - postgresql=16.1=h8972f4a_7 - proj=9.3.0=h1d62c97_2 - - prompt-toolkit=3.0.41=pyha770c72_0 + - prompt-toolkit=3.0.42=pyha770c72_0 - protobuf=4.24.4=py311h46cbc50_0 - psycopg2=2.9.9=py311h03dec38_0 - pyasn1-modules=0.3.0=pyhd8ed1ab_0 @@ -387,7 +387,7 @@ dependencies: - terminado=0.18.0=pyh0d859eb_0 - tinycss2=1.2.1=pyhd8ed1ab_0 - tqdm=4.66.1=pyhd8ed1ab_0 - - typing-extensions=4.8.0=hd8ed1ab_0 + - typing-extensions=4.9.0=hd8ed1ab_0 - typing_inspect=0.9.0=pyhd8ed1ab_0 - universal_pathlib=0.1.4=pyhd8ed1ab_0 - urllib3=1.26.18=pyhd8ed1ab_0 @@ -402,7 +402,7 @@ dependencies: - arrow=1.3.0=pyhd8ed1ab_0 - async-timeout=4.0.3=pyhd8ed1ab_0 - aws-c-s3=0.4.1=hfadff92_0 - - botocore=1.33.10=pyhd8ed1ab_0 + - botocore=1.33.12=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311hcb13ee4_1 @@ -418,7 +418,7 @@ dependencies: - httpcore=1.0.2=pyhd8ed1ab_0 - importlib_metadata=7.0.0=hd8ed1ab_0 - jsonschema-specifications=2023.11.2=pyhd8ed1ab_0 - - jupyter_server_terminals=0.4.4=pyhd8ed1ab_1 + - jupyter_server_terminals=0.5.0=pyhd8ed1ab_0 - kealib=1.5.2=hcd42e92_1 - libnetcdf=4.9.2=nompi_h80fb2b6_112 - libspatialite=5.1.0=h7385560_2 @@ -426,8 +426,8 @@ dependencies: - numpy=1.26.2=py311h64a7726_0 - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311h459d7ec_6 - - poppler=23.11.0=h590f24d_0 - - prompt_toolkit=3.0.41=hd8ed1ab_0 + - poppler=23.12.0=h590f24d_0 + - prompt_toolkit=3.0.42=hd8ed1ab_0 - psycopg2-binary=2.9.9=pyhd8ed1ab_0 - pybtex=0.24.0=pyhd8ed1ab_2 - pydantic-core=2.14.5=py311h46250e7_0 @@ -442,7 +442,7 @@ dependencies: - sqlalchemy=2.0.23=py311h459d7ec_0 - stack_data=0.6.2=pyhd8ed1ab_0 - starlette=0.33.0=pyhd8ed1ab_0 - - tiledb=2.16.3=h8c794c1_3 + - tiledb=2.18.2=h8c794c1_0 - ukkonen=1.0.1=py311h9547e67_4 - uvicorn=0.24.0.post1=py311h38be061_0 - watchfiles=0.21.0=py311h46250e7_0 @@ -468,7 +468,7 @@ dependencies: - isoduration=20.11.0=pyhd8ed1ab_0 - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - - libgdal=3.8.0=he7dcfe9_6 + - libgdal=3.8.1=hd0089ee_2 - numba=0.58.1=py311h96b013e_0 - numexpr=2.8.7=py311h039bad6_104 - oauthlib=3.2.2=pyhd8ed1ab_0 @@ -489,18 +489,18 @@ dependencies: - typer=0.9.0=pyhd8ed1ab_0 - uvicorn-standard=0.24.0.post1=h38be061_0 - aws-sdk-cpp=1.11.182=h8beafcf_7 - - boto3=1.33.10=pyhd8ed1ab_0 + - boto3=1.33.12=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - - dagster=1.5.10=pyhd8ed1ab_0 + - dagster=1.5.12=pyhd8ed1ab_0 - datasette=0.64.4=pyhd8ed1ab_1 - doc8=1.1.1=pyhd8ed1ab_0 - email-validator=2.1.0.post1=pyhd8ed1ab_0 - frictionless=4.40.8=pyh6c4a22f_0 - - gdal=3.8.0=py311h815a124_6 + - gdal=3.8.1=py311h67923c1_2 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.25.1=pyhca7485f_0 + - google-auth=2.25.2=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - - gtk2=2.24.33=h90689f9_2 + - gtk2=2.24.33=h7f000aa_3 - ipykernel=6.26.0=pyhf8b6a83_0 - ipywidgets=8.1.1=pyhd8ed1ab_0 - jsonschema-with-format-nongpl=4.20.0=pyhd8ed1ab_0 @@ -509,18 +509,18 @@ dependencies: - matplotlib-base=3.8.2=py311h54ef318_0 - nbformat=5.9.2=pyhd8ed1ab_0 - pandera-core=0.17.2=pyhd8ed1ab_1 - - pre-commit=3.5.0=pyha770c72_0 + - pre-commit=3.6.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - scikit-learn=1.3.2=py311hc009520_2 - timezonefinder=6.2.0=py311h459d7ec_2 - catalystcoop.ferc_xbrl_extractor=1.3.1=pyhd8ed1ab_0 - conda-lock=2.5.1=pyhd8ed1ab_0 - - dagster-graphql=1.5.10=pyhd8ed1ab_0 - - dagster-postgres=0.21.10=pyhd8ed1ab_0 + - dagster-graphql=1.5.12=pyhd8ed1ab_0 + - dagster-postgres=0.21.12=pyhd8ed1ab_0 - fiona=1.9.5=py311hf8e0aa6_2 - google-api-core=2.15.0=pyhd8ed1ab_0 - - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 + - google-auth-oauthlib=1.2.0=pyhd8ed1ab_0 - graphviz=9.0.0=h78e8752_1 - jupyter_console=6.6.3=pyhd8ed1ab_0 - jupyter_events=0.9.0=pyhd8ed1ab_0 @@ -530,7 +530,7 @@ dependencies: - qtconsole-base=5.5.1=pyha770c72_0 - recordlinkage=0.16=pyhd8ed1ab_0 - tabulator=1.53.5=pyhd8ed1ab_0 - - dagster-webserver=1.5.10=pyhd8ed1ab_0 + - dagster-webserver=1.5.12=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-acero=14.0.1=h59595ed_3_cpu diff --git a/environments/conda-lock.yml b/environments/conda-lock.yml index f6dd94647e..30c112c77d 100644 --- a/environments/conda-lock.yml +++ b/environments/conda-lock.yml @@ -804,42 +804,42 @@ package: category: main optional: false - name: astroid - version: 3.0.1 + version: 3.0.2 manager: conda platform: linux-64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.0.1-py311h38be061_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.0.2-py311h38be061_0.conda hash: - md5: 1cfd7512ea9cf20a14568c6991da262f - sha256: 5aa75c004f51dab842c28f1003e4bf5d6d725867e25474a722aa9fe331649301 + md5: f8811b77ac1d389d28f8fb4960eee238 + sha256: b0946bb0eaa24022e4a627e8e9ef595478333d594f5de7136333417f6be040d1 category: main optional: false - name: astroid - version: 3.0.1 + version: 3.0.2 manager: conda platform: osx-64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/astroid-3.0.1-py311h6eed73b_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/astroid-3.0.2-py311h6eed73b_0.conda hash: - md5: 39aff7722673b4083e5b0d9aa7e33681 - sha256: 9b3233dda23466616bdab742c890062ec757e985f9314c93b5244d5c624b3c1f + md5: a2e76b577f7db434f81b40bb64176478 + sha256: bb3e7ec8fcfecf374549403b69948d423751a11bc047c130ffb85a724c42e1bd category: main optional: false - name: astroid - version: 3.0.1 + version: 3.0.2 manager: conda platform: osx-arm64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/astroid-3.0.1-py311h267d04e_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/astroid-3.0.2-py311h267d04e_0.conda hash: - md5: 1f1ed24d8d83b882f223403c119a1e44 - sha256: 97c2611101771a148a8c0b4fff48e93e2e969a2f5998f21d6aa034ca339fc209 + md5: fc693fad14bdfb471f4538b4b02b7167 + sha256: 9948ee58536c7d8ce9fbbaa250ffcbaed383eaef2b3477a9047f62ad6bb62cb5 category: main optional: false - name: asttokens @@ -1914,52 +1914,52 @@ package: category: main optional: false - name: boto3 - version: 1.33.10 + version: 1.33.12 manager: conda platform: linux-64 dependencies: - botocore: ">=1.33.10,<1.34.0" + botocore: ">=1.33.12,<1.34.0" jmespath: ">=0.7.1,<2.0.0" python: ">=3.7" s3transfer: ">=0.8.2,<0.9.0" - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.12-pyhd8ed1ab_0.conda hash: - md5: b301c93c5187a705bf3d0c57608a06b6 - sha256: 0948d60bf8e1462cded842ef858582fa0b9116a5ac7a86eb478104516ab224e0 + md5: 84feffcfe4266580673fd337e54b5af4 + sha256: 59926f5d8f80116ad393a33772c4ad5c00f56173cb7189e8a293af3630e2052e category: main optional: false - name: boto3 - version: 1.33.10 + version: 1.33.12 manager: conda platform: osx-64 dependencies: python: ">=3.7" jmespath: ">=0.7.1,<2.0.0" s3transfer: ">=0.8.2,<0.9.0" - botocore: ">=1.33.10,<1.34.0" - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.10-pyhd8ed1ab_0.conda + botocore: ">=1.33.12,<1.34.0" + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.12-pyhd8ed1ab_0.conda hash: - md5: b301c93c5187a705bf3d0c57608a06b6 - sha256: 0948d60bf8e1462cded842ef858582fa0b9116a5ac7a86eb478104516ab224e0 + md5: 84feffcfe4266580673fd337e54b5af4 + sha256: 59926f5d8f80116ad393a33772c4ad5c00f56173cb7189e8a293af3630e2052e category: main optional: false - name: boto3 - version: 1.33.10 + version: 1.33.12 manager: conda platform: osx-arm64 dependencies: python: ">=3.7" jmespath: ">=0.7.1,<2.0.0" s3transfer: ">=0.8.2,<0.9.0" - botocore: ">=1.33.10,<1.34.0" - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.10-pyhd8ed1ab_0.conda + botocore: ">=1.33.12,<1.34.0" + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.12-pyhd8ed1ab_0.conda hash: - md5: b301c93c5187a705bf3d0c57608a06b6 - sha256: 0948d60bf8e1462cded842ef858582fa0b9116a5ac7a86eb478104516ab224e0 + md5: 84feffcfe4266580673fd337e54b5af4 + sha256: 59926f5d8f80116ad393a33772c4ad5c00f56173cb7189e8a293af3630e2052e category: main optional: false - name: botocore - version: 1.33.10 + version: 1.33.12 manager: conda platform: linux-64 dependencies: @@ -1967,14 +1967,14 @@ package: python: ">=3.7" python-dateutil: ">=2.1,<3.0.0" urllib3: ">=1.25.4,<1.27" - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.12-pyhd8ed1ab_0.conda hash: - md5: aad4954508523bf01b9e6dcf15ab9414 - sha256: 9b26c05b984a87f3a76924829119d46456215b07c68135c5b361a8fe53ab70cc + md5: f3c9a95fcbb0be6fe2dc536ab44807bf + sha256: 2b906a0a248c11c5e15b7afff88cfe640b734dcc692aaa149ff2385f13ff351d category: main optional: false - name: botocore - version: 1.33.10 + version: 1.33.12 manager: conda platform: osx-64 dependencies: @@ -1982,14 +1982,14 @@ package: python-dateutil: ">=2.1,<3.0.0" jmespath: ">=0.7.1,<2.0.0" urllib3: ">=1.25.4,<1.27" - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.12-pyhd8ed1ab_0.conda hash: - md5: aad4954508523bf01b9e6dcf15ab9414 - sha256: 9b26c05b984a87f3a76924829119d46456215b07c68135c5b361a8fe53ab70cc + md5: f3c9a95fcbb0be6fe2dc536ab44807bf + sha256: 2b906a0a248c11c5e15b7afff88cfe640b734dcc692aaa149ff2385f13ff351d category: main optional: false - name: botocore - version: 1.33.10 + version: 1.33.12 manager: conda platform: osx-arm64 dependencies: @@ -1997,10 +1997,10 @@ package: python-dateutil: ">=2.1,<3.0.0" jmespath: ">=0.7.1,<2.0.0" urllib3: ">=1.25.4,<1.27" - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.12-pyhd8ed1ab_0.conda hash: - md5: aad4954508523bf01b9e6dcf15ab9414 - sha256: 9b26c05b984a87f3a76924829119d46456215b07c68135c5b361a8fe53ab70cc + md5: f3c9a95fcbb0be6fe2dc536ab44807bf + sha256: 2b906a0a248c11c5e15b7afff88cfe640b734dcc692aaa149ff2385f13ff351d category: main optional: false - name: bottleneck @@ -2873,52 +2873,52 @@ package: category: main optional: false - name: cfitsio - version: 4.3.0 + version: 4.3.1 manager: conda platform: linux-64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.2.0,<9.0a0" + libcurl: ">=8.4.0,<9.0a0" libgcc-ng: ">=12" libgfortran-ng: "" libgfortran5: ">=12.3.0" libzlib: ">=1.2.13,<1.3.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.1-hbdc6101_0.conda hash: - md5: 797554b8b7603011e8677884381fbcc5 - sha256: c74938f1ade9b8f37b9fa8cc98a5b9262b325506f41d7492ad1d00146e0f1d08 + md5: dcea02841b33a9c49f74ca9328de919a + sha256: b91003bff71351a0132c84d69fbb5afcfa90e57d83f76a180c6a5a0289099fb1 category: main optional: false - name: cfitsio - version: 4.3.0 + version: 4.3.1 manager: conda platform: osx-64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.2.0,<9.0a0" + libcurl: ">=8.4.0,<9.0a0" libgfortran: 5.* - libgfortran5: ">=12.2.0" + libgfortran5: ">=13.2.0" libzlib: ">=1.2.13,<1.3.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.3.0-h66f91ea_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.3.1-h60fb419_0.conda hash: - md5: f540472ad8a8ea2b39a4c6ca14ebc1b5 - sha256: 0246d80ce305609c7e810514d1aa578ef498a1f05fd2dba5fa46ea845e4e57b9 + md5: 03ab895afe3804b527c12193a9612cac + sha256: 5bd157478529ff4d05b8e8654de0580609177252eb11ecf5201b831effeeb2ec category: main optional: false - name: cfitsio - version: 4.3.0 + version: 4.3.1 manager: conda platform: osx-arm64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.2.0,<9.0a0" + libcurl: ">=8.4.0,<9.0a0" libgfortran: 5.* - libgfortran5: ">=12.3.0" + libgfortran5: ">=13.2.0" libzlib: ">=1.2.13,<1.3.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.3.0-hca87796_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.3.1-h808cd33_0.conda hash: - md5: a5a1019a6405052124e97999a5204a74 - sha256: 5d03f8d484d29f8d3bdd64afe22ed29d75c639834b40382f8a520f96a7af27c4 + md5: 22b61b2ad129db82da2eee76710f7551 + sha256: 9395bd24ef552ac6063e2d6a6fc57e5c7067a74b8d8ee3f06d8389baffacf016 category: main optional: false - name: chardet @@ -3704,55 +3704,55 @@ package: category: main optional: false - name: curl - version: 8.4.0 + version: 8.5.0 manager: conda platform: linux-64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libcurl: 8.4.0 + libcurl: 8.5.0 libgcc-ng: ">=12" libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/curl-8.4.0-hca28451_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/curl-8.5.0-hca28451_0.conda hash: - md5: 2bcf7689cae931dd35d9a45626f49fce - sha256: 373c50b5b668cf39a71d17a42a96144d5efc1e62e7d81c1dd830e2493cefc8cc + md5: e5e83fb15e752dbc8f54c4ac7da7d0f1 + sha256: febf098d6ca901b589d02c58eedcf5cb77d8fa4bfe35a52109f5909980b426db category: main optional: false - name: curl - version: 8.4.0 + version: 8.5.0 manager: conda platform: osx-64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libcurl: 8.4.0 + libcurl: 8.5.0 libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/curl-8.4.0-h726d00d_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/curl-8.5.0-h726d00d_0.conda hash: - md5: e1de44cac6e7774dd2c1e074f5d637a9 - sha256: 32cb23c91dd4cd88d3e6c7adb38ea3d1a1e5da79c63a20ec27d3d0924fcf644c + md5: a4440b9488f87d4da98c1a4cb121931a + sha256: f9e59c964945f5526cec0beb98e9983cee40da2a1e189f174af3da25a7c38c09 category: main optional: false - name: curl - version: 8.4.0 + version: 8.5.0 manager: conda platform: osx-arm64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libcurl: 8.4.0 + libcurl: 8.5.0 libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/curl-8.4.0-h2d989ff_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/curl-8.5.0-h2d989ff_0.conda hash: - md5: ae975c2ea5334bd8a8ddecb5013a30c6 - sha256: d0fa5d1a7a6d0e9dcf930db1e4a750991244567ea5e09a15a00c163a52113465 + md5: e69501791fc0552a668adf28344bb2b1 + sha256: b74a05b0e0f606e8fe6def4bec62cdcc9ae4c08152e0b298252ae033019432d5 category: main optional: false - name: cycler @@ -3792,7 +3792,7 @@ package: category: main optional: false - name: dagster - version: 1.5.10 + version: 1.5.12 manager: conda platform: linux-64 dependencies: @@ -3800,7 +3800,7 @@ package: click: ">=5.0" coloredlogs: ">=6.1,<=14.0" croniter: ">=0.3.34" - dagster-pipes: ">=1.5.10,<1.5.11.0a0" + dagster-pipes: ">=1.5.12,<1.5.13.0a0" docstring_parser: "" grpcio: ">=1.44.0" grpcio-health-checking: ">=1.44.0" @@ -3826,14 +3826,14 @@ package: typing_extensions: ">=4.4.0" universal_pathlib: "" watchdog: ">=0.8.3" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.12-pyhd8ed1ab_0.conda hash: - md5: bcf42b675edb2999669116bc3b1ed789 - sha256: dcee8473cbd1823005285f5fc82fbb16d9d1b2b46bcdf8371ee4fe2fdb0ad50c + md5: a2ed0674a7dfb3b153148cc816855a4a + sha256: 027a55889f14722a2a4d2e9296d1390fa9521f2a908147333834359096dd3444 category: main optional: false - name: dagster - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-64 dependencies: @@ -3866,15 +3866,15 @@ package: alembic: ">=1.2.1,!=1.6.3,!=1.7.0,!=1.11.0" pydantic: ">1.10.0,!=1.10.7" pendulum: <3 - dagster-pipes: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.10-pyhd8ed1ab_0.conda + dagster-pipes: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.12-pyhd8ed1ab_0.conda hash: - md5: bcf42b675edb2999669116bc3b1ed789 - sha256: dcee8473cbd1823005285f5fc82fbb16d9d1b2b46bcdf8371ee4fe2fdb0ad50c + md5: a2ed0674a7dfb3b153148cc816855a4a + sha256: 027a55889f14722a2a4d2e9296d1390fa9521f2a908147333834359096dd3444 category: main optional: false - name: dagster - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-arm64 dependencies: @@ -3907,32 +3907,32 @@ package: alembic: ">=1.2.1,!=1.6.3,!=1.7.0,!=1.11.0" pydantic: ">1.10.0,!=1.10.7" pendulum: <3 - dagster-pipes: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.10-pyhd8ed1ab_0.conda + dagster-pipes: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-1.5.12-pyhd8ed1ab_0.conda hash: - md5: bcf42b675edb2999669116bc3b1ed789 - sha256: dcee8473cbd1823005285f5fc82fbb16d9d1b2b46bcdf8371ee4fe2fdb0ad50c + md5: a2ed0674a7dfb3b153148cc816855a4a + sha256: 027a55889f14722a2a4d2e9296d1390fa9521f2a908147333834359096dd3444 category: main optional: false - name: dagster-graphql - version: 1.5.10 + version: 1.5.12 manager: conda platform: linux-64 dependencies: - dagster: ">=1.5.10,<1.5.11.0a0" + dagster: ">=1.5.12,<1.5.13.0a0" gql-with-requests: ">=3.0.0" graphene: ">=3" python: ">=3.8" requests: "" starlette: "" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.12-pyhd8ed1ab_0.conda hash: - md5: fd3569582db65a0c88fbc7d1bb803853 - sha256: a142f082da2b7905713b09e0ad19eef971a5d4f66063ba7a2b19247e3932e129 + md5: f516bf51aaa40ccc15add9302a659ec2 + sha256: f1b4d4608e72dced9f1fe3f44673324eaa47abd1c4dea6a31c7aba5f6a2d8e47 category: dev optional: true - name: dagster-graphql - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-64 dependencies: @@ -3941,15 +3941,15 @@ package: python: ">=3.8" graphene: ">=3" gql-with-requests: ">=3.0.0" - dagster: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.10-pyhd8ed1ab_0.conda + dagster: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.12-pyhd8ed1ab_0.conda hash: - md5: fd3569582db65a0c88fbc7d1bb803853 - sha256: a142f082da2b7905713b09e0ad19eef971a5d4f66063ba7a2b19247e3932e129 + md5: f516bf51aaa40ccc15add9302a659ec2 + sha256: f1b4d4608e72dced9f1fe3f44673324eaa47abd1c4dea6a31c7aba5f6a2d8e47 category: dev optional: true - name: dagster-graphql - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-arm64 dependencies: @@ -3958,110 +3958,110 @@ package: python: ">=3.8" graphene: ">=3" gql-with-requests: ">=3.0.0" - dagster: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.10-pyhd8ed1ab_0.conda + dagster: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-graphql-1.5.12-pyhd8ed1ab_0.conda hash: - md5: fd3569582db65a0c88fbc7d1bb803853 - sha256: a142f082da2b7905713b09e0ad19eef971a5d4f66063ba7a2b19247e3932e129 + md5: f516bf51aaa40ccc15add9302a659ec2 + sha256: f1b4d4608e72dced9f1fe3f44673324eaa47abd1c4dea6a31c7aba5f6a2d8e47 category: dev optional: true - name: dagster-pipes - version: 1.5.10 + version: 1.5.12 manager: conda platform: linux-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 69600c68efc23fb84c05c2e9c1c05947 - sha256: a98a8b2501af4bc112d5b2f5e3edea6c22a084651cc720786c405877b8507630 + md5: 1c66ca63de735589ae01017033df2034 + sha256: 561c86c9aa3211b37cc5675c7c8d719cb027525846c4dc2b879517a4558efa77 category: main optional: false - name: dagster-pipes - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 69600c68efc23fb84c05c2e9c1c05947 - sha256: a98a8b2501af4bc112d5b2f5e3edea6c22a084651cc720786c405877b8507630 + md5: 1c66ca63de735589ae01017033df2034 + sha256: 561c86c9aa3211b37cc5675c7c8d719cb027525846c4dc2b879517a4558efa77 category: main optional: false - name: dagster-pipes - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-arm64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-pipes-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 69600c68efc23fb84c05c2e9c1c05947 - sha256: a98a8b2501af4bc112d5b2f5e3edea6c22a084651cc720786c405877b8507630 + md5: 1c66ca63de735589ae01017033df2034 + sha256: 561c86c9aa3211b37cc5675c7c8d719cb027525846c4dc2b879517a4558efa77 category: main optional: false - name: dagster-postgres - version: 0.21.10 + version: 0.21.12 manager: conda platform: linux-64 dependencies: - dagster: 1.5.10.* + dagster: 1.5.12.* psycopg2-binary: "" python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.12-pyhd8ed1ab_0.conda hash: - md5: ec155b3a7172590ccbc89f461427b5aa - sha256: 4eb986655ef547d4dc72cd34b60687c9c3c390806493c15187c4d26d89d58fc0 + md5: 3e77306199e15b093ad06f02c4b31947 + sha256: 9b4ddf5b96c96b8208a7b627bdfb78ff472cd54c380c111f3ec85bb877147499 category: main optional: false - name: dagster-postgres - version: 0.21.10 + version: 0.21.12 manager: conda platform: osx-64 dependencies: psycopg2-binary: "" python: ">=3.8" - dagster: 1.5.10.* - url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.10-pyhd8ed1ab_0.conda + dagster: 1.5.12.* + url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.12-pyhd8ed1ab_0.conda hash: - md5: ec155b3a7172590ccbc89f461427b5aa - sha256: 4eb986655ef547d4dc72cd34b60687c9c3c390806493c15187c4d26d89d58fc0 + md5: 3e77306199e15b093ad06f02c4b31947 + sha256: 9b4ddf5b96c96b8208a7b627bdfb78ff472cd54c380c111f3ec85bb877147499 category: main optional: false - name: dagster-postgres - version: 0.21.10 + version: 0.21.12 manager: conda platform: osx-arm64 dependencies: psycopg2-binary: "" python: ">=3.8" - dagster: 1.5.10.* - url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.10-pyhd8ed1ab_0.conda + dagster: 1.5.12.* + url: https://conda.anaconda.org/conda-forge/noarch/dagster-postgres-0.21.12-pyhd8ed1ab_0.conda hash: - md5: ec155b3a7172590ccbc89f461427b5aa - sha256: 4eb986655ef547d4dc72cd34b60687c9c3c390806493c15187c4d26d89d58fc0 + md5: 3e77306199e15b093ad06f02c4b31947 + sha256: 9b4ddf5b96c96b8208a7b627bdfb78ff472cd54c380c111f3ec85bb877147499 category: main optional: false - name: dagster-webserver - version: 1.5.10 + version: 1.5.12 manager: conda platform: linux-64 dependencies: click: ">=7.0,<9.0" - dagster: ">=1.5.10,<1.5.11.0a0" - dagster-graphql: ">=1.5.10,<1.5.11.0a0" + dagster: ">=1.5.12,<1.5.13.0a0" + dagster-graphql: ">=1.5.12,<1.5.13.0a0" python: ">=3.8" starlette: "" uvicorn-standard: "" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.10-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 6161623733c03c21098dce0af904ea6b - sha256: 975173f6a39f40d5fa505354007200741689714bb1eaf1cba8e52fab1a2bfc88 + md5: 92f1a728da0e353b6981455a63ba2523 + sha256: bb72a39afb99dc3d5bcbc9ab723daeb7a1926b3b20153d255f3ae058b1306593 category: dev optional: true - name: dagster-webserver - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-64 dependencies: @@ -4069,16 +4069,16 @@ package: uvicorn-standard: "" python: ">=3.8" click: ">=7.0,<9.0" - dagster: ">=1.5.10,<1.5.11.0a0" - dagster-graphql: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.10-pyhd8ed1ab_0.conda + dagster: ">=1.5.12,<1.5.13.0a0" + dagster-graphql: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 6161623733c03c21098dce0af904ea6b - sha256: 975173f6a39f40d5fa505354007200741689714bb1eaf1cba8e52fab1a2bfc88 + md5: 92f1a728da0e353b6981455a63ba2523 + sha256: bb72a39afb99dc3d5bcbc9ab723daeb7a1926b3b20153d255f3ae058b1306593 category: dev optional: true - name: dagster-webserver - version: 1.5.10 + version: 1.5.12 manager: conda platform: osx-arm64 dependencies: @@ -4086,12 +4086,12 @@ package: uvicorn-standard: "" python: ">=3.8" click: ">=7.0,<9.0" - dagster: ">=1.5.10,<1.5.11.0a0" - dagster-graphql: ">=1.5.10,<1.5.11.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.10-pyhd8ed1ab_0.conda + dagster: ">=1.5.12,<1.5.13.0a0" + dagster-graphql: ">=1.5.12,<1.5.13.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/dagster-webserver-1.5.12-pyhd8ed1ab_0.conda hash: - md5: 6161623733c03c21098dce0af904ea6b - sha256: 975173f6a39f40d5fa505354007200741689714bb1eaf1cba8e52fab1a2bfc88 + md5: 92f1a728da0e353b6981455a63ba2523 + sha256: bb72a39afb99dc3d5bcbc9ab723daeb7a1926b3b20153d255f3ae058b1306593 category: dev optional: true - name: dask-core @@ -4470,39 +4470,39 @@ package: category: main optional: false - name: distlib - version: 0.3.7 + version: 0.3.8 manager: conda platform: linux-64 dependencies: python: 2.7|>=3.6 - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda hash: - md5: 12d8aae6994f342618443a8f05c652a0 - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 + md5: db16c66b759a64dc5183d69cc3745a52 + sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e category: main optional: false - name: distlib - version: 0.3.7 + version: 0.3.8 manager: conda platform: osx-64 dependencies: python: 2.7|>=3.6 - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda hash: - md5: 12d8aae6994f342618443a8f05c652a0 - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 + md5: db16c66b759a64dc5183d69cc3745a52 + sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e category: main optional: false - name: distlib - version: 0.3.7 + version: 0.3.8 manager: conda platform: osx-arm64 dependencies: python: 2.7|>=3.6 - url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda hash: - md5: 12d8aae6994f342618443a8f05c652a0 - sha256: 13c887cb4a29e1e853a118cfc0e42b72a7e1d1c50c66c0974885d37f0db30619 + md5: db16c66b759a64dc5183d69cc3745a52 + sha256: 3ff11acdd5cc2f80227682966916e878e45ced94f59c402efb94911a5774e84e category: main optional: false - name: dnspython @@ -5873,63 +5873,63 @@ package: category: main optional: false - name: gdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: linux-64 dependencies: - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" libgcc-ng: ">=12" - libgdal: 3.8.0 + libgdal: 3.8.1 libstdcxx-ng: ">=12" libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.0-py311h815a124_6.conda + url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py311h67923c1_2.conda hash: - md5: a20379b7539caea4fd3ba6628d862138 - sha256: 7aab0e96f76d15a35b78704d13523f234a47cd8c653d8085c1219a8d7d45ef22 + md5: 36bdf6d2872decceaa4e5c97e128351c + sha256: 18e1c4276dfa5c7b11a796f4317a57b288b1bca82dcab5c466c16694773afff2 category: main optional: false - name: gdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: osx-64 dependencies: __osx: ">=10.9" - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" libcxx: ">=16.0.6" - libgdal: 3.8.0 + libgdal: 3.8.1 libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.8.0-py311h5646c56_6.conda + url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.8.1-py311h06f03dd_2.conda hash: - md5: 1cb3c8b063c0aca152dd7d7045e8ec2e - sha256: b9428ade4519d84f5ef68174f403cac65ee8d44ba10992809ea54ac56508457b + md5: 9db36469ab5aad24176f0579c83d837c + sha256: 1f821540d3856eb0e341746acd7b506a137214030816b01df96b6272617c8d03 category: main optional: false - name: gdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: osx-arm64 dependencies: __osx: ">=10.9" - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" libcxx: ">=16.0.6" - libgdal: 3.8.0 + libgdal: 3.8.1 libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.0-py311h32a4f3d_6.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.1-py311hff5d751_2.conda hash: - md5: b266b8795152cc1dfc9296ac95cb60ad - sha256: f8d113f50e12756c4b6640a8f70b2bccc54cc2e1a29b11f5e3cb3e4671d259be + md5: bacb4115610a2238864ae8cdbd13e040 + sha256: bc852f0ec27d10a03334f2dceef34dfb8be05f76623a28d3fb51e20b0e096920 category: main optional: false - name: gdk-pixbuf @@ -6467,7 +6467,7 @@ package: category: main optional: false - name: google-auth - version: 2.25.1 + version: 2.25.2 manager: conda platform: linux-64 dependencies: @@ -6480,14 +6480,14 @@ package: pyu2f: ">=0.1.5" requests: ">=2.20.0,<3.0.0" rsa: ">=3.1.4,<5" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.2-pyhca7485f_0.conda hash: - md5: ea4120e492a1b82f298419e0f2210a1e - sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd + md5: ef008fe13beb99a47cbe5a7a68a1f0ea + sha256: 928960978bfdb77a912db60659ec30ec7e04d1ec12ba12f38ac61134158320d0 category: main optional: false - name: google-auth - version: 2.25.1 + version: 2.25.2 manager: conda platform: osx-64 dependencies: @@ -6500,14 +6500,14 @@ package: cachetools: ">=2.0.0,<6.0" aiohttp: ">=3.6.2,<4.0.0" cryptography: ">=38.0.3" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.2-pyhca7485f_0.conda hash: - md5: ea4120e492a1b82f298419e0f2210a1e - sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd + md5: ef008fe13beb99a47cbe5a7a68a1f0ea + sha256: 928960978bfdb77a912db60659ec30ec7e04d1ec12ba12f38ac61134158320d0 category: main optional: false - name: google-auth - version: 2.25.1 + version: 2.25.2 manager: conda platform: osx-arm64 dependencies: @@ -6520,14 +6520,14 @@ package: cachetools: ">=2.0.0,<6.0" aiohttp: ">=3.6.2,<4.0.0" cryptography: ">=38.0.3" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.2-pyhca7485f_0.conda hash: - md5: ea4120e492a1b82f298419e0f2210a1e - sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd + md5: ef008fe13beb99a47cbe5a7a68a1f0ea + sha256: 928960978bfdb77a912db60659ec30ec7e04d1ec12ba12f38ac61134158320d0 category: main optional: false - name: google-auth-oauthlib - version: 1.1.0 + version: 1.2.0 manager: conda platform: linux-64 dependencies: @@ -6535,14 +6535,14 @@ package: google-auth: ">=2.15.0" python: ">=3.6" requests-oauthlib: ">=0.7.0" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.2.0-pyhd8ed1ab_0.conda hash: - md5: ffa1e2fd52bc00ec0fc5680a2f4bd167 - sha256: fc12c5a06b4d073c855cc2c43edff0b444af7b0db860f578fee1486769af0f21 + md5: 2057f12885a73b4d621c075423cec969 + sha256: 39d031780d9ac2da430ead078a40ff67db3ad57e24ab1e3c68b4e0f2b48a2311 category: main optional: false - name: google-auth-oauthlib - version: 1.1.0 + version: 1.2.0 manager: conda platform: osx-64 dependencies: @@ -6550,14 +6550,14 @@ package: requests-oauthlib: ">=0.7.0" click: ">=6.0.0" google-auth: ">=2.15.0" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.2.0-pyhd8ed1ab_0.conda hash: - md5: ffa1e2fd52bc00ec0fc5680a2f4bd167 - sha256: fc12c5a06b4d073c855cc2c43edff0b444af7b0db860f578fee1486769af0f21 + md5: 2057f12885a73b4d621c075423cec969 + sha256: 39d031780d9ac2da430ead078a40ff67db3ad57e24ab1e3c68b4e0f2b48a2311 category: main optional: false - name: google-auth-oauthlib - version: 1.1.0 + version: 1.2.0 manager: conda platform: osx-arm64 dependencies: @@ -6565,10 +6565,10 @@ package: requests-oauthlib: ">=0.7.0" click: ">=6.0.0" google-auth: ">=2.15.0" - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.2.0-pyhd8ed1ab_0.conda hash: - md5: ffa1e2fd52bc00ec0fc5680a2f4bd167 - sha256: fc12c5a06b4d073c855cc2c43edff0b444af7b0db860f578fee1486769af0f21 + md5: 2057f12885a73b4d621c075423cec969 + sha256: 39d031780d9ac2da430ead078a40ff67db3ad57e24ab1e3c68b4e0f2b48a2311 category: main optional: false - name: google-cloud-core @@ -6617,42 +6617,42 @@ package: category: main optional: false - name: google-cloud-sdk - version: 456.0.0 + version: 457.0.0 manager: conda platform: linux-64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/google-cloud-sdk-456.0.0-py311h38be061_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/google-cloud-sdk-457.0.0-py311h38be061_0.conda hash: - md5: 09eb149adf3420350bd241bda3d5fafe - sha256: f789db836de3cc6557c9250f5819ada0aaafa2f559c09b8fadd5bda703a2acdf + md5: 6948263c6cdb11b0c423e7fdb609fe9c + sha256: 289e354e0875d9bfef3615bbdacae94010b4fc48085f0c6a18adc1dab1f18023 category: main optional: false - name: google-cloud-sdk - version: 456.0.0 + version: 457.0.0 manager: conda platform: osx-64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/google-cloud-sdk-456.0.0-py311h6eed73b_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/google-cloud-sdk-457.0.0-py311h6eed73b_0.conda hash: - md5: 287686faa4f60a48dae2884822a232ef - sha256: 9ce703e2c3b9df7f01dee5e21c3b40da1088114670ced4347af9ee368f304d4b + md5: dbbacfc479d3a156ef297edcb93b217c + sha256: fe1141fbb6339163d08c9174838777a9db6c7628d890cf5cff947494768f304b category: main optional: false - name: google-cloud-sdk - version: 456.0.0 + version: 457.0.0 manager: conda platform: osx-arm64 dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/google-cloud-sdk-456.0.0-py311h267d04e_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/google-cloud-sdk-457.0.0-py311h267d04e_0.conda hash: - md5: 321f57034a4eb43fbe44c09d5a270eeb - sha256: 89e0793bafe2d57cf3c656bc22853f7a40eb05b03a34d6c308dcd5ff572ace04 + md5: 7ceca26a434b734268312a5103b40b04 + sha256: fbdb5fd25fa1e7d2e1dcafff647572b63596f5859141a1e6b04159b841b4859d category: main optional: false - name: google-cloud-storage @@ -7168,7 +7168,7 @@ package: category: dev optional: true - name: greenlet - version: 3.0.1 + version: 3.0.2 manager: conda platform: linux-64 dependencies: @@ -7176,14 +7176,14 @@ package: libstdcxx-ng: ">=12" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.1-py311hb755f60_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.2-py311hb755f60_0.conda hash: - md5: 7c82abd17036c6ca0f02f2a8935c5572 - sha256: 8470a1c15889f4830df38966e29e3a7aa4473681b7b5997d916428c929544d74 + md5: 59bf81c0e43e96ff1ebb5140ccc135b5 + sha256: e11f4bf977c21d3c70bb772c57bb800319f1353a8f0bd947f7561e28eae8d808 category: main optional: false - name: greenlet - version: 3.0.1 + version: 3.0.2 manager: conda platform: osx-64 dependencies: @@ -7191,14 +7191,14 @@ package: libcxx: ">=16.0.6" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/greenlet-3.0.1-py311hd39e593_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/greenlet-3.0.2-py311hd39e593_0.conda hash: - md5: 447a2de59f80041e6f63c222d5a5e77f - sha256: 872e40b28dce3abf5d3df621a99247a79d3e642eaf1db284c8a43888e1c7f74b + md5: 6005605b11c7db35cd5d4d04e645ecd3 + sha256: 1120b061eb3216f3c2fd4db8a2150c5185742941c1a66c1e05a8bb26bfa9d026 category: main optional: false - name: greenlet - version: 3.0.1 + version: 3.0.2 manager: conda platform: osx-arm64 dependencies: @@ -7206,10 +7206,10 @@ package: libcxx: ">=16.0.6" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/greenlet-3.0.1-py311hbaf5611_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/greenlet-3.0.2-py311hbaf5611_0.conda hash: - md5: 9136cd518f65a952b2a37c80645ef610 - sha256: 6c8e2e5024ee26099d396a95a55c49ffe3eb8985c764ce875e95f01711f4c2a7 + md5: a2c6cc57bc11c771364d436fe6508c89 + sha256: 47ef5de059adf8ccfb99ef03e5e0337198c06c78c32bcafbf4432276dfac640b category: main optional: false - name: grpcio @@ -7355,17 +7355,17 @@ package: manager: conda platform: linux-64 dependencies: - atk-1.0: ">=2.36.0" - cairo: ">=1.16.0,<2.0.0a0" - gdk-pixbuf: ">=2.42.6,<3.0a0" - gettext: ">=0.19.8.1,<1.0a0" - libgcc-ng: ">=9.4.0" - libglib: ">=2.70.2,<3.0a0" - pango: ">=1.50.3,<1.51.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2 + atk-1.0: ">=2.38.0" + cairo: ">=1.18.0,<2.0a0" + gdk-pixbuf: ">=2.42.10,<3.0a0" + gettext: ">=0.21.1,<1.0a0" + libgcc-ng: ">=12" + libglib: ">=2.78.3,<3.0a0" + pango: ">=1.50.14,<2.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h7f000aa_3.conda hash: - md5: 957a0255ab58aaf394a91725d73ab422 - sha256: 66d189ec36d67309fa3eb52d14d77b82359c10303c400eecc14f8eaca5939b87 + md5: 0abfa7f9241a0f4fd732bc15773cfb0c + sha256: e659f5eca2a5f21d5fe859d8d1dae132a284800eb017b8b4e2286b252a230527 category: dev optional: true - name: gtk2 @@ -7373,16 +7373,16 @@ package: manager: conda platform: osx-64 dependencies: - atk-1.0: ">=2.36.0" - cairo: ">=1.16.0,<2.0.0a0" - gdk-pixbuf: ">=2.42.6,<3.0a0" - gettext: ">=0.19.8.1,<1.0a0" - libglib: ">=2.70.2,<3.0a0" - pango: ">=1.50.3,<1.51.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/gtk2-2.24.33-h7c1209e_2.tar.bz2 + atk-1.0: ">=2.38.0" + cairo: ">=1.18.0,<2.0a0" + gdk-pixbuf: ">=2.42.10,<3.0a0" + gettext: ">=0.21.1,<1.0a0" + libglib: ">=2.78.3,<3.0a0" + pango: ">=1.50.14,<2.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/gtk2-2.24.33-h8ca4665_3.conda hash: - md5: 307614630946527e302b7dd042a5cfa2 - sha256: 4f5f5116c5c81a4bfcc01ea9eb9e489346a87d7248eb44963f6552ae0fb3a984 + md5: e13eed1e66893d4e76f9e735536ea2a4 + sha256: f98e984eff98dd69cb1b379a75819ea97c0af737cd147f5e89a671123171dbbb category: dev optional: true - name: gtk2 @@ -7390,16 +7390,16 @@ package: manager: conda platform: osx-arm64 dependencies: - atk-1.0: ">=2.36.0" - cairo: ">=1.16.0,<2.0.0a0" - gdk-pixbuf: ">=2.42.6,<3.0a0" - gettext: ">=0.19.8.1,<1.0a0" - libglib: ">=2.70.2,<3.0a0" - pango: ">=1.50.3,<1.51.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/gtk2-2.24.33-h57013de_2.tar.bz2 + atk-1.0: ">=2.38.0" + cairo: ">=1.18.0,<2.0a0" + gdk-pixbuf: ">=2.42.10,<3.0a0" + gettext: ">=0.21.1,<1.0a0" + libglib: ">=2.78.3,<3.0a0" + pango: ">=1.50.14,<2.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/gtk2-2.24.33-h7895bb2_3.conda hash: - md5: 144fb77338d90012ebe80d3dd13fc725 - sha256: 4bebd9809bb7e76b46af054f594eda5f280a796b7ec7f5870bd185ad5b3da338 + md5: e3d35c8b7a8fdb840c286ccaf0f082b2 + sha256: 63062472f3173991ce521f045f3a5dd5c7e147d127476b0c3a20a2aca03339e6 category: dev optional: true - name: gts @@ -7667,58 +7667,60 @@ package: category: main optional: false - name: hdf5 - version: 1.14.2 + version: 1.14.3 manager: conda platform: linux-64 dependencies: - libaec: ">=1.0.6,<2.0a0" - libcurl: ">=8.2.1,<9.0a0" + libaec: ">=1.1.2,<2.0a0" + libcurl: ">=8.4.0,<9.0a0" libgcc-ng: ">=12" libgfortran-ng: "" libgfortran5: ">=12.3.0" libstdcxx-ng: ">=12" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.2,<4.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.2-nompi_h4f84152_100.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda hash: - md5: 2de6a9bc8083b49f09b2f6eb28d3ba3c - sha256: f70f18291f912ba019cbb736bb87b6487021154733cd109147a6d9672790b6b8 + md5: d471a5c3abc984b662d9bae3bb7fd8a5 + sha256: b814f8f9598cc6e50127533ec256725183ba69db5fd8cf5443223627f19e3e59 category: main optional: false - name: hdf5 - version: 1.14.2 + version: 1.14.3 manager: conda platform: osx-64 dependencies: - libaec: ">=1.0.6,<2.0a0" - libcurl: ">=8.2.1,<9.0a0" - libcxx: ">=15.0.7" + __osx: ">=10.9" + libaec: ">=1.1.2,<2.0a0" + libcurl: ">=8.4.0,<9.0a0" + libcxx: ">=16.0.6" libgfortran: 5.* - libgfortran5: ">=12.3.0" + libgfortran5: ">=13.2.0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.2,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.2-nompi_hedada53_100.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.14.3-nompi_h691f4bf_100.conda hash: - md5: 2b1d4f355b60eb10c5cb435b9f0e664f - sha256: 08ab97d63ab4be60c92d3f5931effc565ae6ee0cd686eba81b9d20daf5f181ff + md5: 8e2ac4ae815a8c9743fe37d70f48f075 + sha256: 158dd2ab901659b47e8f7ee0ec1d9e45a1fedc4871391a44a1c8b9e8ba4c9c6b category: main optional: false - name: hdf5 - version: 1.14.2 + version: 1.14.3 manager: conda platform: osx-arm64 dependencies: - libaec: ">=1.0.6,<2.0a0" - libcurl: ">=8.2.1,<9.0a0" - libcxx: ">=15.0.7" + __osx: ">=10.9" + libaec: ">=1.1.2,<2.0a0" + libcurl: ">=8.4.0,<9.0a0" + libcxx: ">=16.0.6" libgfortran: 5.* - libgfortran5: ">=12.3.0" + libgfortran5: ">=13.2.0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.2,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.2-nompi_h3aba7b3_100.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/hdf5-1.14.3-nompi_h5bb55e9_100.conda hash: - md5: 842c5b010b219058098ebfe5aa5891b9 - sha256: 2749910e21a7d1f88a81dc4709fc3565a4a3954eadb4409e7a5be1fc13a5b7ca + md5: 120fefd1da806c4d708ecdfe31263f0c + sha256: 22331a0ac71a4dd1868f05f8197c36815a41a9f2dcfd01b73ff0d87d9e0ea087 category: main optional: false - name: hpack @@ -8053,7 +8055,7 @@ package: category: main optional: false - name: hypothesis - version: 6.91.1 + version: 6.92.0 manager: conda platform: linux-64 dependencies: @@ -8064,14 +8066,14 @@ package: python: ">=3.8" setuptools: "" sortedcontainers: ">=2.1.0,<3.0.0" - url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.91.1-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.92.0-pyha770c72_0.conda hash: - md5: 59604e3ff667ea8d7fcdb3af5e76c1cb - sha256: efad34de94fe652681bd28f0cfe00243b27d68d7f807205ed758e2e9b49f0211 + md5: af99a4aaa4d7abf306f6799b13a1c018 + sha256: 1fec99d75cc291bb2582a2936fa8d8aab59d43a2cda88186ce50fb1d39d208b8 category: main optional: false - name: hypothesis - version: 6.91.1 + version: 6.92.0 manager: conda platform: osx-64 dependencies: @@ -8082,14 +8084,14 @@ package: sortedcontainers: ">=2.1.0,<3.0.0" backports.zoneinfo: ">=0.2.1" exceptiongroup: ">=1.0.0rc8" - url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.91.1-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.92.0-pyha770c72_0.conda hash: - md5: 59604e3ff667ea8d7fcdb3af5e76c1cb - sha256: efad34de94fe652681bd28f0cfe00243b27d68d7f807205ed758e2e9b49f0211 + md5: af99a4aaa4d7abf306f6799b13a1c018 + sha256: 1fec99d75cc291bb2582a2936fa8d8aab59d43a2cda88186ce50fb1d39d208b8 category: main optional: false - name: hypothesis - version: 6.91.1 + version: 6.92.0 manager: conda platform: osx-arm64 dependencies: @@ -8100,10 +8102,10 @@ package: sortedcontainers: ">=2.1.0,<3.0.0" backports.zoneinfo: ">=0.2.1" exceptiongroup: ">=1.0.0rc8" - url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.91.1-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/hypothesis-6.92.0-pyha770c72_0.conda hash: - md5: 59604e3ff667ea8d7fcdb3af5e76c1cb - sha256: efad34de94fe652681bd28f0cfe00243b27d68d7f807205ed758e2e9b49f0211 + md5: af99a4aaa4d7abf306f6799b13a1c018 + sha256: 1fec99d75cc291bb2582a2936fa8d8aab59d43a2cda88186ce50fb1d39d208b8 category: main optional: false - name: icu @@ -9793,42 +9795,42 @@ package: category: main optional: false - name: jupyter_server_terminals - version: 0.4.4 + version: 0.5.0 manager: conda platform: linux-64 dependencies: python: ">=3.8" terminado: ">=0.8.3" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.0-pyhd8ed1ab_0.conda hash: - md5: 7c0965e1d4a0ee1529e8eaa03a78a5b3 - sha256: 9f4c5fef9beef9fceed628db7a10b888f3308b37ae257ad3d50046088317ebf1 + md5: 37a8b4098d428ecd40e58f8ec8a8e77d + sha256: b2c769977c258e5a81d541fd526d01083fc6b8c8dfdd4822795a898626bc81e6 category: main optional: false - name: jupyter_server_terminals - version: 0.4.4 + version: 0.5.0 manager: conda platform: osx-64 dependencies: python: ">=3.8" terminado: ">=0.8.3" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.0-pyhd8ed1ab_0.conda hash: - md5: 7c0965e1d4a0ee1529e8eaa03a78a5b3 - sha256: 9f4c5fef9beef9fceed628db7a10b888f3308b37ae257ad3d50046088317ebf1 + md5: 37a8b4098d428ecd40e58f8ec8a8e77d + sha256: b2c769977c258e5a81d541fd526d01083fc6b8c8dfdd4822795a898626bc81e6 category: main optional: false - name: jupyter_server_terminals - version: 0.4.4 + version: 0.5.0 manager: conda platform: osx-arm64 dependencies: python: ">=3.8" terminado: ">=0.8.3" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.0-pyhd8ed1ab_0.conda hash: - md5: 7c0965e1d4a0ee1529e8eaa03a78a5b3 - sha256: 9f4c5fef9beef9fceed628db7a10b888f3308b37ae257ad3d50046088317ebf1 + md5: 37a8b4098d428ecd40e58f8ec8a8e77d + sha256: b2c769977c258e5a81d541fd526d01083fc6b8c8dfdd4822795a898626bc81e6 category: main optional: false - name: jupyterlab @@ -11127,55 +11129,55 @@ package: category: main optional: false - name: libcurl - version: 8.4.0 + version: 8.5.0 manager: conda platform: linux-64 dependencies: krb5: ">=1.21.2,<1.22.0a0" libgcc-ng: ">=12" - libnghttp2: ">=1.52.0,<2.0a0" + libnghttp2: ">=1.58.0,<2.0a0" libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.5.0-hca28451_0.conda hash: - md5: 1158ac1d2613b28685644931f11ee807 - sha256: 25f4b6a8827d7b17a66e0bd9b5d194bf9a9e4a46fb14e2ef472fdad4b39426a6 + md5: 7144d5a828e2cae218e0e3c98d8a0aeb + sha256: 00a6bea5ff90ca58eeb15ebc98e08ffb88bddaff27396bb62640064f59d29cf0 category: main optional: false - name: libcurl - version: 8.4.0 + version: 8.5.0 manager: conda platform: osx-64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libnghttp2: ">=1.52.0,<2.0a0" + libnghttp2: ">=1.58.0,<2.0a0" libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.4.0-h726d00d_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.5.0-h726d00d_0.conda hash: - md5: 2c17b4dedf0039736951471f493353bd - sha256: cd3400ecb42fc420acb18e2d836535c44ebd501ebeb4e0bf3830776e9b4ca650 + md5: 86d749e27fe00fa6b7d790a6feaa22a2 + sha256: 7ec7e026be90da0965dfa6b92bbc905c852c13b27f3f83c47156db66ed0668f0 category: main optional: false - name: libcurl - version: 8.4.0 + version: 8.5.0 manager: conda platform: osx-arm64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libnghttp2: ">=1.52.0,<2.0a0" + libnghttp2: ">=1.58.0,<2.0a0" libssh2: ">=1.11.0,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.3,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.4.0-h2d989ff_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.5.0-h2d989ff_0.conda hash: - md5: afabb3372209028627ec03e206f4d967 - sha256: 5ca24ab030b1c56ce07921bf901ea99076e8b7e45586b4a04e5187cc67c87273 + md5: f1211ed00947a84e15a964a8f459f620 + sha256: f1c04be217aaf161ce3c99a8d618871295b5dc1eae2f7ff7b32078af50303f5b category: main optional: false - name: libcxx @@ -11276,11 +11278,11 @@ package: manager: conda platform: linux-64 dependencies: - libgcc-ng: ">=7.5.0" - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 + libgcc-ng: ">=12" + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda hash: - md5: 6f8720dff19e17ce5d48cfe7f3d2f0a3 - sha256: 8c9635aa0ea28922877dc96358f9547f6a55fc7e2eb75a556b05f1725496baf9 + md5: 172bf1cd1ff8629f2b1179945ed45055 + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 category: main optional: false - name: libev @@ -11288,10 +11290,10 @@ package: manager: conda platform: osx-64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-haf1e3a3_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda hash: - md5: 79dc2be110b2a3d1e97ec21f691c50ad - sha256: c4154d424431898d84d6afb8b32e3ba749fe5d270d322bb0af74571a3cb09c6b + md5: 899db79329439820b7e8f8de41bca902 + sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 category: main optional: false - name: libev @@ -11299,10 +11301,10 @@ package: manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h642e427_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda hash: - md5: 566dbf70fe79eacdb3c3d3d195a27f55 - sha256: eb7325eb2e6bd4c291cb9682781b35b8c0f68cb72651c35a5b9dd22707ebd25c + md5: 36d33e440c31857372a72137f78bacf5 + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f category: main optional: false - name: libevent @@ -11499,25 +11501,25 @@ package: category: dev optional: true - name: libgdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: linux-64 dependencies: __glibc: ">=2.17,<3.0.a0" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.0,<4.3.1.0a0" + cfitsio: ">=4.3.1,<4.3.2.0a0" freexl: ">=2.0.0,<3.0a0" geos: ">=3.12.1,<3.12.2.0a0" geotiff: ">=1.7.1,<1.8.0a0" giflib: ">=5.2.1,<5.3.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" libaec: ">=1.1.2,<2.0a0" libarchive: ">=3.7.2,<3.8.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.5.0,<9.0a0" libdeflate: ">=1.19,<1.20.0a0" libexpat: ">=2.5.0,<3.0a0" libgcc-ng: ">=12" @@ -11528,7 +11530,7 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.1,<4.0a0" + libsqlite: ">=3.44.2,<4.0a0" libstdcxx-ng: ">=12" libtiff: ">=4.6.0,<4.7.0a0" libuuid: ">=2.38.1,<3.0a0" @@ -11537,41 +11539,41 @@ package: libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" openjpeg: ">=2.5.0,<3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.11.0,<23.12.0a0" + poppler: ">=23.12.0,<23.13.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" - tiledb: ">=2.16,<2.17.0a0" + tiledb: ">=2.18.2,<2.19.0a0" xerces-c: ">=3.2.4,<3.3.0a0" xz: ">=5.2.6,<6.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.0-he7dcfe9_6.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hd0089ee_2.conda hash: - md5: 16ff703a847430fa074c5d53916740c1 - sha256: 06ccb879fc2783c371f1b02d062c4e90dfe4d8c5e9f2f83213bbef0fe27a00b0 + md5: feb838eaf49fd1608413759f7b54c74c + sha256: ba4431f8bf3ae13130827c4f81520ce49f9b22f6f44da137b516a1f51b9bdcb8 category: main optional: false - name: libgdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: osx-64 dependencies: __osx: ">=10.9" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.0,<4.3.1.0a0" + cfitsio: ">=4.3.1,<4.3.2.0a0" freexl: ">=2.0.0,<3.0a0" geos: ">=3.12.1,<3.12.2.0a0" geotiff: ">=1.7.1,<1.8.0a0" giflib: ">=5.2.1,<5.3.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" libaec: ">=1.1.2,<2.0a0" libarchive: ">=3.7.2,<3.8.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.5.0,<9.0a0" libcxx: ">=16.0.6" libdeflate: ">=1.19,<1.20.0a0" libexpat: ">=2.5.0,<3.0a0" @@ -11582,48 +11584,48 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.1,<4.0a0" + libsqlite: ">=3.44.2,<4.0a0" libtiff: ">=4.6.0,<4.7.0a0" libwebp-base: ">=1.3.2,<2.0a0" libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" openjpeg: ">=2.5.0,<3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.11.0,<23.12.0a0" + poppler: ">=23.12.0,<23.13.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" - tiledb: ">=2.16,<2.17.0a0" + tiledb: ">=2.18.2,<2.19.0a0" xerces-c: ">=3.2.4,<3.3.0a0" xz: ">=5.2.6,<6.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libgdal-3.8.0-h5b0c7d5_6.conda + url: https://conda.anaconda.org/conda-forge/osx-64/libgdal-3.8.1-h7bb8e92_2.conda hash: - md5: 01e293a419480a02fc7775f6c6afa530 - sha256: fc602de0bb3d5b7c0493b25b1e4345018fd68f26c672c8abff621c492f67abf4 + md5: bf37886bd95ab0afcf6e07b51ae6b813 + sha256: b34bd433ae5a2378e472daa2ffdef4201ecbd654b1c62261e6c77d948efb689e category: main optional: false - name: libgdal - version: 3.8.0 + version: 3.8.1 manager: conda platform: osx-arm64 dependencies: __osx: ">=10.9" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.0,<4.3.1.0a0" + cfitsio: ">=4.3.1,<4.3.2.0a0" freexl: ">=2.0.0,<3.0a0" geos: ">=3.12.1,<3.12.2.0a0" geotiff: ">=1.7.1,<1.8.0a0" giflib: ">=5.2.1,<5.3.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.4.0a0" + hdf5: ">=1.14.3,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" libaec: ">=1.1.2,<2.0a0" libarchive: ">=3.7.2,<3.8.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.5.0,<9.0a0" libcxx: ">=16.0.6" libdeflate: ">=1.19,<1.20.0a0" libexpat: ">=2.5.0,<3.0a0" @@ -11634,26 +11636,26 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.1,<4.0a0" + libsqlite: ">=3.44.2,<4.0a0" libtiff: ">=4.6.0,<4.7.0a0" libwebp-base: ">=1.3.2,<2.0a0" libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" openjpeg: ">=2.5.0,<3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.11.0,<23.12.0a0" + poppler: ">=23.12.0,<23.13.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" - tiledb: ">=2.16,<2.17.0a0" + tiledb: ">=2.18.2,<2.19.0a0" xerces-c: ">=3.2.4,<3.3.0a0" xz: ">=5.2.6,<6.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-3.8.0-h76f3012_6.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-3.8.1-h1ac08d9_2.conda hash: - md5: c7efc96733da609c84411293fa3a8457 - sha256: 34d8f93a03a58396074dbbcc832a0c84bb6192d9e0ddf70992c4fa40349366c5 + md5: 01eb49a277330eaa5aba72efcfd78b85 + sha256: 8b4f6b74de89820dc02905ab97e0277ae654c062dd7b2106829bf9b7ffb545ed category: main optional: false - name: libgfortran @@ -11916,11 +11918,11 @@ package: manager: conda platform: linux-64 dependencies: - libgcc-ng: ">=10.3.0" - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 + libgcc-ng: ">=12" + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda hash: - md5: b62b52da46c39ee2bc3c162ac7f1804d - sha256: 6a81ebac9f1aacdf2b4f945c87ad62b972f0f69c8e0981d68e111739e6720fd7 + md5: 4b06b43d0eca61db2899e4d7a289c302 + sha256: a9364735ef2542558ed59aa5f404707dab674df465cbdf312edeaf5e827b55ed category: main optional: false - name: libiconv @@ -11928,10 +11930,10 @@ package: manager: conda platform: osx-64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hac89ed1_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_1.conda hash: - md5: 691d103d11180486154af49c037b7ed9 - sha256: 4a3294037d595754f7da7c11a41f3922f995aaa333f3cb66f02d8afa032a7bc2 + md5: c4069fa5c051d41093d3fd52caffa285 + sha256: c479e7e0df4a59117ee02152fb85565aa6e4091bbb8e044f3367e52b0ccd8970 category: main optional: false - name: libiconv @@ -11939,10 +11941,10 @@ package: manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-he4db4b2_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_1.conda hash: - md5: 686f9c755574aa221f29fbcf36a67265 - sha256: 2eb33065783b802f71d52bef6f15ce0fafea0adc8506f10ebd0d490244087bec + md5: df3fbfc1fddc8fa40122206a4e47ea4e + sha256: d407ebd1e72ebb20716ea325cdebdd018bdc3c3d3424e67825db3eaa8809164e category: main optional: false - name: libjpeg-turbo @@ -12227,16 +12229,16 @@ package: manager: conda platform: linux-64 dependencies: - c-ares: ">=1.21.0,<2.0a0" - libev: ">=4.33,<4.34.0a0" + c-ares: ">=1.23.0,<2.0a0" + libev: ">=4.33,<5.0a0" libgcc-ng: ">=12" libstdcxx-ng: ">=12" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda hash: - md5: 9b13d5ee90fc9f09d54fd403247342b4 - sha256: 151b18e4f92dcca263a6d23e4beb0c4e2287aa1c7d0587ff71ef50035ed34aca + md5: 700ac6ea6d53d5510591c4344d5c989a + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb category: main optional: false - name: libnghttp2 @@ -12245,15 +12247,15 @@ package: platform: osx-64 dependencies: __osx: ">=10.9" - c-ares: ">=1.21.0,<2.0a0" + c-ares: ">=1.23.0,<2.0a0" libcxx: ">=16.0.6" - libev: ">=4.33,<4.34.0a0" + libev: ">=4.33,<5.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda hash: - md5: 864e23fba3678000154f53bbf6d476a2 - sha256: b2b94cdaffa0d4fddd73c04262fdb1d1bcd6f8783979281ccfdb832e159cac4e + md5: faecc55c2a8155d9ff1c0ff9a0fef64f + sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380 category: main optional: false - name: libnghttp2 @@ -12262,15 +12264,15 @@ package: platform: osx-arm64 dependencies: __osx: ">=10.9" - c-ares: ">=1.21.0,<2.0a0" + c-ares: ">=1.23.0,<2.0a0" libcxx: ">=16.0.6" - libev: ">=4.33,<4.34.0a0" + libev: ">=4.33,<5.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda hash: - md5: b93d94874cfd44bc96496c2ee69f82a9 - sha256: 3597032667444f91ae59343c553da6e93f2b3359bc2c0dd6b7f8260e41572e9c + md5: 1813e066bfcef82de579a0be8a766df4 + sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd category: main optional: false - name: libnsl @@ -12431,12 +12433,11 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libgcc-ng: ">=12" - libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<3.2.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda hash: - md5: 2b7f1893cf40b4ccdc0230bcd94d5ed9 - sha256: 8c92a8cce329a83cc9e94b19d18200c661957c00cfb464f26237d24730864585 + md5: 675317e46167caea24542d85c72f19a3 + sha256: 833fd96338dffc6784fb5f79ab805fa5a4c2cabf5c08c4f1d5caf4e290e39c28 category: main optional: false - name: libpq @@ -12445,12 +12446,11 @@ package: platform: osx-64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<3.2.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.1-h6dd4ff7_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.1-ha925e61_7.conda hash: - md5: 39de94ff4ccc306f3d24ef7aef13c689 - sha256: 1a51c9b3451eebf04ac1f7a7a58fec07c2e44d2298514a30f62b5b432a653c07 + md5: ad8be4619f57504e8c243e00ab315ad6 + sha256: addce7453b4ac80faf46ecec76db74d98f57d9711624df600399c56e147b7903 category: main optional: false - name: libpq @@ -12459,12 +12459,11 @@ package: platform: osx-arm64 dependencies: krb5: ">=1.21.2,<1.22.0a0" - libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<3.2.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-16.1-hd435d45_0.conda + openssl: ">=3.2.0,<4.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-16.1-h0f8b458_7.conda hash: - md5: 883bbf64780c91608f1a7df9203b79a5 - sha256: 1b5c86d5f247b3e154ae373dcebea6979368c4a0ee722d39ec33ee2fc8528c04 + md5: c94283997b390fc897936edf2c1f0d55 + sha256: 2e71c5efc57ec7da59efcb747b615ccde1f70d12eb25128720817a3f3482d622 category: main optional: false - name: libprotobuf @@ -15274,40 +15273,40 @@ package: category: main optional: false - name: openssl - version: 3.1.4 + version: 3.2.0 manager: conda platform: linux-64 dependencies: ca-certificates: "" libgcc-ng: ">=12" - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.4-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda hash: - md5: 412ba6938c3e2abaca8b1129ea82e238 - sha256: d15b3e83ce66c6f6fbb4707f2f5c53337124c01fb03bfda1cf25c5b41123efc7 + md5: 603827b39ea2b835268adb8c821b8570 + sha256: 80efc6f429bd8e622d999652e5cba2ca56fcdb9c16a439d2ce9b4313116e4a87 category: main optional: false - name: openssl - version: 3.1.4 + version: 3.2.0 manager: conda platform: osx-64 dependencies: ca-certificates: "" - url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.1.4-hd75f5a5_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.0-hd75f5a5_1.conda hash: - md5: bc9201da6eb1e0df4107901df5371347 - sha256: 1c436103a8de0dc82c9c56974badaa1b8b8f8cd9f37c2766bd50cd9899720f6b + md5: 06cb561619487c88891839b9beb5244c + sha256: 99161bf349f5dc80322f2a2c188588d11efa662566e4e19f2ac0a36d9fa3de25 category: main optional: false - name: openssl - version: 3.1.4 + version: 3.2.0 manager: conda platform: osx-arm64 dependencies: ca-certificates: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.1.4-h0d3ecfb_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.0-h0d3ecfb_1.conda hash: - md5: 5a89552fececf4cd99628318ccbb67a3 - sha256: 3c715b1d4940c7ad6065935db18924b85a54048dde066f963cfc250340639457 + md5: 47d16d26100f19ca495882882b7bc93b + sha256: a53e1c6c058b621fd1d13cca6f9cccd534d2b3f4b4ac789fe26f7902031d6c41 category: main optional: false - name: orc @@ -15478,7 +15477,7 @@ package: category: main optional: false - name: pandas - version: 2.1.3 + version: 2.1.4 manager: conda platform: osx-arm64 dependencies: @@ -15490,10 +15489,10 @@ package: python-tzdata: ">=2022a" python_abi: 3.11.* pytz: ">=2020.1" - url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.1.3-py311h6e08293_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.1.4-py311h6e08293_0.conda hash: - md5: 0d0ecc6bac2b7a4007bf4d96b125d674 - sha256: eacddc0866e26372578fdeb5059e6f7edf4c6c8f59f494a8d5e64caa032b2600 + md5: 5130445e7fe8465365dab3ed3694c770 + sha256: fa6c79cf5252c22ef8141a405ea9650ea9df2d6436c003b279086e146eaef1e5 category: main optional: false - name: pandera-core @@ -16108,42 +16107,42 @@ package: category: main optional: false - name: pint - version: "0.22" + version: "0.23" manager: conda platform: linux-64 dependencies: python: ">=3.9" typing_extensions: "" - url: https://conda.anaconda.org/conda-forge/noarch/pint-0.22-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/pint-0.23-pyhd8ed1ab_0.conda hash: - md5: a719c3f3959c529e558e9ed9f98c3f30 - sha256: 49795ff6e5e634523aafe34e869c425e2cdc4a1fcb11aa294d7983035bc38622 + md5: d47f9170e3933e53368e0d447c16856f + sha256: c26dfa2094949782db6ddbce2b6e03aff1e9e64c808fef68f66cfea72be18e1d category: main optional: false - name: pint - version: "0.22" + version: "0.23" manager: conda platform: osx-64 dependencies: typing_extensions: "" python: ">=3.9" - url: https://conda.anaconda.org/conda-forge/noarch/pint-0.22-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/pint-0.23-pyhd8ed1ab_0.conda hash: - md5: a719c3f3959c529e558e9ed9f98c3f30 - sha256: 49795ff6e5e634523aafe34e869c425e2cdc4a1fcb11aa294d7983035bc38622 + md5: d47f9170e3933e53368e0d447c16856f + sha256: c26dfa2094949782db6ddbce2b6e03aff1e9e64c808fef68f66cfea72be18e1d category: main optional: false - name: pint - version: "0.22" + version: "0.23" manager: conda platform: osx-arm64 dependencies: typing_extensions: "" python: ">=3.9" - url: https://conda.anaconda.org/conda-forge/noarch/pint-0.22-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/pint-0.23-pyhd8ed1ab_0.conda hash: - md5: a719c3f3959c529e558e9ed9f98c3f30 - sha256: 49795ff6e5e634523aafe34e869c425e2cdc4a1fcb11aa294d7983035bc38622 + md5: d47f9170e3933e53368e0d447c16856f + sha256: c26dfa2094949782db6ddbce2b6e03aff1e9e64c808fef68f66cfea72be18e1d category: main optional: false - name: pip @@ -16370,7 +16369,7 @@ package: category: main optional: false - name: poppler - version: 23.11.0 + version: 23.12.0 manager: conda platform: linux-64 dependencies: @@ -16381,7 +16380,7 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libgcc-ng: ">=12" - libglib: ">=2.78.0,<3.0a0" + libglib: ">=2.78.1,<3.0a0" libiconv: ">=1.17,<2.0a0" libjpeg-turbo: ">=3.0.0,<4.0a0" libpng: ">=1.6.39,<1.7.0a0" @@ -16389,17 +16388,17 @@ package: libtiff: ">=4.6.0,<4.7.0a0" libzlib: ">=1.2.13,<1.3.0a0" nspr: ">=4.35,<5.0a0" - nss: ">=3.94,<4.0a0" + nss: ">=3.95,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.11.0-h590f24d_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.12.0-h590f24d_0.conda hash: - md5: 671439d8eca2084bb5a75561fff23a85 - sha256: 8050002e01be124efcb82e32e740676f5ed7dfe852f335408554e6dc3b060ad9 + md5: 480189ac126a8c6c61e14476c8ba7c9a + sha256: b313920277aca763b590dddf806c56b0aadcdff82f5ace39827cab4792ae4b20 category: main optional: false - name: poppler - version: 23.11.0 + version: 23.12.0 manager: conda platform: osx-64 dependencies: @@ -16412,24 +16411,24 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libcxx: ">=16.0.6" - libglib: ">=2.78.0,<3.0a0" + libglib: ">=2.78.1,<3.0a0" libiconv: ">=1.17,<2.0a0" libjpeg-turbo: ">=3.0.0,<4.0a0" libpng: ">=1.6.39,<1.7.0a0" libtiff: ">=4.6.0,<4.7.0a0" libzlib: ">=1.2.13,<1.3.0a0" nspr: ">=4.35,<5.0a0" - nss: ">=3.94,<4.0a0" + nss: ">=3.95,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.11.0-hdd5a5e8_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.12.0-hdd5a5e8_0.conda hash: - md5: 60ffe2d3a09ff99eb2601487d6ddaeea - sha256: fb6a53ddac3fa8c097b4a0b7d2f40219b13bfa3324147aaf6c5a14ee5fb27521 + md5: e1cb9f8e9e21dfa600b08be85d905e5f + sha256: 1271e3c8163125fc1ff14833ddba3f2c6465df5b1d13db76912415bd5a39b492 category: main optional: false - name: poppler - version: 23.11.0 + version: 23.12.0 manager: conda platform: osx-arm64 dependencies: @@ -16442,20 +16441,20 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libcxx: ">=16.0.6" - libglib: ">=2.78.0,<3.0a0" + libglib: ">=2.78.1,<3.0a0" libiconv: ">=1.17,<2.0a0" libjpeg-turbo: ">=3.0.0,<4.0a0" libpng: ">=1.6.39,<1.7.0a0" libtiff: ">=4.6.0,<4.7.0a0" libzlib: ">=1.2.13,<1.3.0a0" nspr: ">=4.35,<5.0a0" - nss: ">=3.94,<4.0a0" + nss: ">=3.95,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/poppler-23.11.0-hcdd998b_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/poppler-23.12.0-hcdd998b_0.conda hash: - md5: 19386a03a7c57a378953bafb4f598156 - sha256: a6677b507cbdb6202c872aa461b4bf8cfcbe5791721fe1f42615b89205d4a4a6 + md5: e072f524004eee193e30d243d68c520f + sha256: 13ebaac3bf9b77e92e777d3ed245c2f0a8ac93985e334b0cd797a39f321ae5dd category: main optional: false - name: poppler-data @@ -16499,17 +16498,16 @@ package: krb5: ">=1.21.2,<1.22.0a0" libgcc-ng: ">=12" libpq: "16.1" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" - zlib: "" - url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_7.conda hash: - md5: 1e9ab0760262044fa00814088667e451 - sha256: 74dfb5793a00a0a9e85296ce0944d8af0f71758574b7c8f9e7d5590250441e24 + md5: 672069c684190f10e5a9bbb5b10d82bb + sha256: fbc18253dbc920034cebbee1ba8080e3e2edb7c0d01d5b2f7d37538da71bf8b7 category: main optional: false - name: postgresql @@ -16519,17 +16517,16 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libpq: "16.1" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" - zlib: "" - url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.1-h413614c_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.1-h413614c_7.conda hash: - md5: b7322d27093606b939fb92fa33b92beb - sha256: 612393024639882d7515429e639c85fa3b712d114c5a6b3a4b3891b061e1bc89 + md5: 6f83d0483ca6044b227a5547ea5b65df + sha256: 6aceedd6f5a72a0d2e64607b545acfafa015ab74e1264a58a4884ff189631680 category: main optional: false - name: postgresql @@ -16539,105 +16536,104 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libpq: "16.1" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.1.4,<4.0a0" + openssl: ">=3.2.0,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" - zlib: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-hc6ab77f_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-hc6ab77f_7.conda hash: - md5: 37398d1ad2fbeaa7733711b845da863e - sha256: 441f5ad3fac42e7daf9c246ad0dc0962c7f0b4c9ac1044038d3a053d339320bf + md5: bba5c8dd372e5e2cf81bf71e6104fa7b + sha256: 5830151c5b72e95ecbff45b36a88405875514ea27cfce1b5381e98d6cee9974a category: main optional: false - name: pre-commit - version: 3.5.0 + version: 3.6.0 manager: conda platform: linux-64 dependencies: cfgv: ">=2.0.0" identify: ">=1.0.0" nodeenv: ">=0.11.1" - python: ">=3.8" + python: ">=3.9" pyyaml: ">=5.1" virtualenv: ">=20.10.0" - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.5.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda hash: - md5: 964e3d762e427661c59263435a14c492 - sha256: 51a4a17334a15ec92805cd075776563ff93b3b6c20732c4cb607c98a761ae02f + md5: 473a7cfca197da0a10cff3f6dded7d4b + sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 category: main optional: false - name: pre-commit - version: 3.5.0 + version: 3.6.0 manager: conda platform: osx-64 dependencies: - python: ">=3.8" + python: ">=3.9" pyyaml: ">=5.1" identify: ">=1.0.0" nodeenv: ">=0.11.1" cfgv: ">=2.0.0" virtualenv: ">=20.10.0" - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.5.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda hash: - md5: 964e3d762e427661c59263435a14c492 - sha256: 51a4a17334a15ec92805cd075776563ff93b3b6c20732c4cb607c98a761ae02f + md5: 473a7cfca197da0a10cff3f6dded7d4b + sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 category: main optional: false - name: pre-commit - version: 3.5.0 + version: 3.6.0 manager: conda platform: osx-arm64 dependencies: - python: ">=3.8" + python: ">=3.9" pyyaml: ">=5.1" identify: ">=1.0.0" nodeenv: ">=0.11.1" cfgv: ">=2.0.0" virtualenv: ">=20.10.0" - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.5.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda hash: - md5: 964e3d762e427661c59263435a14c492 - sha256: 51a4a17334a15ec92805cd075776563ff93b3b6c20732c4cb607c98a761ae02f + md5: 473a7cfca197da0a10cff3f6dded7d4b + sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 category: main optional: false - name: prettier - version: 3.1.0 + version: 3.1.1 manager: conda platform: linux-64 dependencies: __glibc: ">=2.17,<3.0.a0" - nodejs: ">=20.8.1,<21.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/prettier-3.1.0-h31abb78_0.conda + nodejs: ">=20.9.0,<21.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/prettier-3.1.1-h31abb78_0.conda hash: - md5: 825c43da21ded31f538a695cca2961ee - sha256: a836d8d87734c76e04b64f66d2a72262ac09ce7e23c92b3f77d47bdc20267a21 + md5: 9943537898b6e9763fde439fe40f481f + sha256: 3bd2b360fc709008f39315f92c6fbbbbe70f75f6665cf3ddf050130f7614d11a category: main optional: false - name: prettier - version: 3.1.0 + version: 3.1.1 manager: conda platform: osx-64 dependencies: - nodejs: ">=20.8.1,<21.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/prettier-3.1.0-hbd11d21_0.conda + nodejs: ">=20.9.0,<21.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/prettier-3.1.1-hbd11d21_0.conda hash: - md5: 0f2d6f2c329df13e0ff0bd3748b2f74f - sha256: 9dfd2b3d2d4c3cbdeb341263d5107b7018197ad167633387832def6f68154e55 + md5: bbc22967cb92235dfd93d9db8faed04f + sha256: 15d29a0e576acc8a37a7b00551ea6fd44819007cc77e4d7f55efb3ddd2a0a09f category: main optional: false - name: prettier - version: 3.1.0 + version: 3.1.1 manager: conda platform: osx-arm64 dependencies: - nodejs: ">=20.8.1,<21.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-3.1.0-hb67532b_0.conda + nodejs: ">=20.9.0,<21.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-3.1.1-hb67532b_0.conda hash: - md5: dfa0c94c177b8163579301aa4672f245 - sha256: c71c69ba2420da67a4bc1a5a85deab03e3c37cb4dea44a3bef01cc91e24bb1da + md5: c833fb7f54410404e1396868d5272da1 + sha256: de3504e85790bd79ff6206ad0708ddc68d26ce72a0b3478e7a084c6b8af93415 category: main optional: false - name: proj @@ -16724,78 +16720,78 @@ package: category: main optional: false - name: prompt-toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: linux-64 dependencies: python: ">=3.7" wcwidth: "" - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.41-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda hash: - md5: f511a993aa4336bef9dd874ee3403e67 - sha256: e26a5554883a0eada3641b6d861d8cb4895e2c7fcc17a587de07b8b1ecbfff0f + md5: 0bf64bf10eee21f46ac83c161917fa86 + sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 category: main optional: false - name: prompt-toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: osx-64 dependencies: wcwidth: "" python: ">=3.7" - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.41-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda hash: - md5: f511a993aa4336bef9dd874ee3403e67 - sha256: e26a5554883a0eada3641b6d861d8cb4895e2c7fcc17a587de07b8b1ecbfff0f + md5: 0bf64bf10eee21f46ac83c161917fa86 + sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 category: main optional: false - name: prompt-toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: osx-arm64 dependencies: wcwidth: "" python: ">=3.7" - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.41-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda hash: - md5: f511a993aa4336bef9dd874ee3403e67 - sha256: e26a5554883a0eada3641b6d861d8cb4895e2c7fcc17a587de07b8b1ecbfff0f + md5: 0bf64bf10eee21f46ac83c161917fa86 + sha256: 58525b2a9305fb154b2b0d43a48b9a6495441b80e4fbea44f2a34a597d2cef16 category: main optional: false - name: prompt_toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: linux-64 dependencies: - prompt-toolkit: ">=3.0.41,<3.0.42.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.41-hd8ed1ab_0.conda + prompt-toolkit: ">=3.0.42,<3.0.43.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda hash: - md5: b1387bd091fa0420557f801a78587678 - sha256: dd2fea25930d258159441ad4a45e5d3274f0d2f1dea92fe25b44b48c486aa969 + md5: 85a2189ecd2fcdd86e92b2d4ea8fe461 + sha256: fd2185d501bf34cb4c121f2f5ade9157ac75e1644a9da81355c4c8f9c1b82d4d category: main optional: false - name: prompt_toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: osx-64 dependencies: - prompt-toolkit: ">=3.0.41,<3.0.42.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.41-hd8ed1ab_0.conda + prompt-toolkit: ">=3.0.42,<3.0.43.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda hash: - md5: b1387bd091fa0420557f801a78587678 - sha256: dd2fea25930d258159441ad4a45e5d3274f0d2f1dea92fe25b44b48c486aa969 + md5: 85a2189ecd2fcdd86e92b2d4ea8fe461 + sha256: fd2185d501bf34cb4c121f2f5ade9157ac75e1644a9da81355c4c8f9c1b82d4d category: main optional: false - name: prompt_toolkit - version: 3.0.41 + version: 3.0.42 manager: conda platform: osx-arm64 dependencies: - prompt-toolkit: ">=3.0.41,<3.0.42.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.41-hd8ed1ab_0.conda + prompt-toolkit: ">=3.0.42,<3.0.43.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda hash: - md5: b1387bd091fa0420557f801a78587678 - sha256: dd2fea25930d258159441ad4a45e5d3274f0d2f1dea92fe25b44b48c486aa969 + md5: 85a2189ecd2fcdd86e92b2d4ea8fe461 + sha256: fd2185d501bf34cb4c121f2f5ade9157ac75e1644a9da81355c4c8f9c1b82d4d category: main optional: false - name: protobuf @@ -16908,33 +16904,33 @@ package: category: main optional: false - name: psycopg2 - version: 2.9.7 + version: 2.9.9 manager: conda platform: osx-64 dependencies: - libpq: ">=16.0,<17.0a0" - openssl: ">=3.1.3,<4.0a0" + libpq: ">=16.1,<17.0a0" + openssl: ">=3.2.0,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.9.7-py311h187f0af_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.9.9-py311h187f0af_0.conda hash: - md5: f777a0c47ebe4c2cc2eca6f19aea9347 - sha256: dce8bdee2b563927c71493ad26997c9897939d8fbb0376df80b6c04154ce0412 + md5: 2177c8943bbf9bfc45421ecaebd5be11 + sha256: 73c0cf543b0ddd41993956969f665999f5801e027e3d3524604892baedbd2626 category: main optional: false - name: psycopg2 - version: 2.9.7 + version: 2.9.9 manager: conda platform: osx-arm64 dependencies: - libpq: ">=16.0,<17.0a0" - openssl: ">=3.1.3,<4.0a0" + libpq: ">=16.1,<17.0a0" + openssl: ">=3.2.0,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/psycopg2-2.9.7-py311h589e011_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/psycopg2-2.9.9-py311h589e011_0.conda hash: - md5: e5fd933c7c34b5c02a95e28f05b07f46 - sha256: 30fb7c0c8e1651694dcb9b5b62b7cdc801ce45e06ead0a5d281ce950e1f498f5 + md5: cf560a3c0e56cf6a168f885958ec31ff + sha256: a6340fa9458824b9681ba6cc1de0a618ffd6b19272c4eedcf787a6e627025aa5 category: main optional: false - name: psycopg2-binary @@ -16951,29 +16947,29 @@ package: category: main optional: false - name: psycopg2-binary - version: 2.9.7 + version: 2.9.9 manager: conda platform: osx-64 dependencies: python: ">=3.6" - psycopg2: ">=2.9.7,<2.9.8.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.7-pyhd8ed1ab_1.conda + psycopg2: ">=2.9.9,<2.9.10.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.9-pyhd8ed1ab_0.conda hash: - md5: 0212a5c5ae1ab578853364bfc5d9f657 - sha256: 5d82cb8b90daff6c12a4b6e0848fd32172522d82ceb5f093bfd55bfec09b3797 + md5: c15b2ec0570f8988819eea58286dbc19 + sha256: bb6184a3de8a6fddaed9104539ada9ac7c5e2bd900284ccf96ef5e4e285e75db category: main optional: false - name: psycopg2-binary - version: 2.9.7 + version: 2.9.9 manager: conda platform: osx-arm64 dependencies: python: ">=3.6" - psycopg2: ">=2.9.7,<2.9.8.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.7-pyhd8ed1ab_1.conda + psycopg2: ">=2.9.9,<2.9.10.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.9-pyhd8ed1ab_0.conda hash: - md5: 0212a5c5ae1ab578853364bfc5d9f657 - sha256: 5d82cb8b90daff6c12a4b6e0848fd32172522d82ceb5f093bfd55bfec09b3797 + md5: c15b2ec0570f8988819eea58286dbc19 + sha256: bb6184a3de8a6fddaed9104539ada9ac7c5e2bd900284ccf96ef5e4e285e75db category: main optional: false - name: pthread-stubs @@ -17643,7 +17639,7 @@ package: category: main optional: false - name: pyobjc-core - version: "10.0" + version: "10.1" manager: conda platform: osx-64 dependencies: @@ -17651,14 +17647,14 @@ package: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* setuptools: "" - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.0-py311hf110eff_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.1-py311h9b70068_0.conda hash: - md5: d26705887703d13c655a6098516e06e2 - sha256: 031b8c48866f1f97a4a12d6a3ea0dc94cb6a735918871460b26f4779f5a01125 + md5: e5a3b39d0ad3ec4cad4438ca51ce6a65 + sha256: b3c7c35b52460bf64cf7854ea5dc083370419f16f3b4d5b16081be623bc52118 category: main optional: false - name: pyobjc-core - version: "10.0" + version: "10.1" manager: conda platform: osx-arm64 dependencies: @@ -17666,40 +17662,40 @@ package: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* setuptools: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.0-py311hb702dc4_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.1-py311h665608e_0.conda hash: - md5: 5c441ab09e2d9faf6e875ea9c446b445 - sha256: d3bb68f8da77bffad5fa690d2cc1aeb0be0608ed0b6e08a96d8fc3613f2e7135 + md5: fbf6e60c57d27283b5e616a458e11ecf + sha256: 11437e8835d8637fce58bdb98a6f8e60455c7f11eea2fc2b85d38822c5a4c80f category: main optional: false - name: pyobjc-framework-cocoa - version: "10.0" + version: "10.1" manager: conda platform: osx-64 dependencies: libffi: ">=3.4,<4.0a0" - pyobjc-core: 10.0.* + pyobjc-core: 10.1.* python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-10.0-py311hf110eff_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-10.1-py311h9b70068_0.conda hash: - md5: 8fb67274a648901045368717d6221aed - sha256: 54530c1b3bfc361e027adbd8f9d9a23e7c102c7f58c04a169da1457f82975724 + md5: 03de24825bd26bf77746aa3eacb6f980 + sha256: 0062a6ec46b41845a97ca689e056e010fba98a0deaec0ff5d7dfe47eb14ccec4 category: main optional: false - name: pyobjc-framework-cocoa - version: "10.0" + version: "10.1" manager: conda platform: osx-arm64 dependencies: libffi: ">=3.4,<4.0a0" - pyobjc-core: 10.0.* + pyobjc-core: 10.1.* python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-10.0-py311hb702dc4_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-10.1-py311h665608e_0.conda hash: - md5: ee9430e4e9b69a6270c966bb7439c9a0 - sha256: 31a7542b8ced5cb3bc236be0b5777dab4bc0e57fbfc5423e9d0ae09ce8eae16c + md5: 8cbae911599bc02a8ce3b1b33d95abb0 + sha256: 81a15d9449d9570e997ee0cfd7e25c85ceb263915e34235900a1d12bc22c9f30 category: main optional: false - name: pyopenssl @@ -21537,65 +21533,66 @@ package: category: main optional: false - name: tiledb - version: 2.16.3 + version: 2.18.2 manager: conda platform: linux-64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libabseil: ">=20230802.0,<20230803.0a0" + libabseil: ">=20230802.1,<20230803.0a0" libgcc-ng: ">=12" libgoogle-cloud: ">=2.12.0,<2.13.0a0" libstdcxx-ng: ">=12" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" - openssl: ">=3.1.2,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h8c794c1_0.conda hash: - md5: 7de728789b0aba16018f726dc5ddbec2 - sha256: f021df4b9cfd1a54aac87a6c0bac604edc8ffb36d5b2c4aa20bf2d759ae04a11 + md5: e824b951c15a74d0a2d3e42676370791 + sha256: c73704c36661193a040e4f1c454ef181277b97d3dc225febac9f3093e60f36bf category: main optional: false - name: tiledb - version: 2.16.3 + version: 2.18.2 manager: conda platform: osx-64 dependencies: - __osx: ">=10.13" + __osx: ">=10.9" bzip2: ">=1.0.8,<2.0a0" - libabseil: ">=20230802.0,<20230803.0a0" - libcxx: ">=15.0.7" + libabseil: ">=20230802.1,<20230803.0a0" + libcxx: ">=16.0.6" libgoogle-cloud: ">=2.12.0,<2.13.0a0" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" - openssl: ">=3.1.2,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/tiledb-2.16.3-hd3a41d5_3.conda + url: https://conda.anaconda.org/conda-forge/osx-64/tiledb-2.18.2-h9fe0a6a_0.conda hash: - md5: 53c2d2746f21a60d0c498c36fb32ec56 - sha256: 9144ad40adb982107dd4f5084d1e488b216025eed91a3feeb3506ee4d5bc98dd + md5: 0615fdde1c114affe6a0250b9d342328 + sha256: daccccc133c363360379e9efa525835cd20ed8ca12381641ccb1353c3d7c34c0 category: main optional: false - name: tiledb - version: 2.16.3 + version: 2.18.2 manager: conda platform: osx-arm64 dependencies: + __osx: ">=10.9" bzip2: ">=1.0.8,<2.0a0" - libabseil: ">=20230802.0,<20230803.0a0" - libcxx: ">=15.0.7" + libabseil: ">=20230802.1,<20230803.0a0" + libcxx: ">=16.0.6" libgoogle-cloud: ">=2.12.0,<2.13.0a0" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" - openssl: ">=3.1.2,<4.0a0" + openssl: ">=3.2.0,<4.0a0" zstd: ">=1.5.5,<1.6.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/tiledb-2.16.3-he15c4da_3.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/tiledb-2.18.2-h555b8a3_0.conda hash: - md5: fcf3711dd1817fd6e8ab59be86aa8dd9 - sha256: c2576bf0344b441f4c7d9212cfa68fe64de88dc9da735cb541c7faa0595d260f + md5: c223398e541fce9cfe1abe47df687909 + sha256: da9227601b2bf5607fee33b62ed364561363f994ba41fd82e48d45a2f584210e category: main optional: false - name: timezonefinder @@ -22187,75 +22184,75 @@ package: category: main optional: false - name: typing-extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: linux-64 dependencies: - typing_extensions: 4.8.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda + typing_extensions: 4.9.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda hash: - md5: 384462e63262a527bda564fa2d9126c0 - sha256: d6e1dddd0c372218ef15912383d351ac8c73465cbf16238017f0269813cafe2d + md5: c16524c1b7227dc80b36b4fa6f77cc86 + sha256: d795c1eb1db4ea147f01ece74e5a504d7c2e8d5ee8c11ec987884967dd938f9c category: main optional: false - name: typing-extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: osx-64 dependencies: - typing_extensions: 4.8.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda + typing_extensions: 4.9.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda hash: - md5: 384462e63262a527bda564fa2d9126c0 - sha256: d6e1dddd0c372218ef15912383d351ac8c73465cbf16238017f0269813cafe2d + md5: c16524c1b7227dc80b36b4fa6f77cc86 + sha256: d795c1eb1db4ea147f01ece74e5a504d7c2e8d5ee8c11ec987884967dd938f9c category: main optional: false - name: typing-extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: osx-arm64 dependencies: - typing_extensions: 4.8.0 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda + typing_extensions: 4.9.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda hash: - md5: 384462e63262a527bda564fa2d9126c0 - sha256: d6e1dddd0c372218ef15912383d351ac8c73465cbf16238017f0269813cafe2d + md5: c16524c1b7227dc80b36b4fa6f77cc86 + sha256: d795c1eb1db4ea147f01ece74e5a504d7c2e8d5ee8c11ec987884967dd938f9c category: main optional: false - name: typing_extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: linux-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda hash: - md5: 5b1be40a26d10a06f6d4f1f9e19fa0c7 - sha256: 38d16b5c53ec1af845d37d22e7bb0e6c934c7f19499123507c5a470f6f8b7dde + md5: a92a6440c3fe7052d63244f3aba2a4a7 + sha256: f3c5be8673bfd905c4665efcb27fa50192f24f84fa8eff2f19cba5d09753d905 category: main optional: false - name: typing_extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: osx-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda hash: - md5: 5b1be40a26d10a06f6d4f1f9e19fa0c7 - sha256: 38d16b5c53ec1af845d37d22e7bb0e6c934c7f19499123507c5a470f6f8b7dde + md5: a92a6440c3fe7052d63244f3aba2a4a7 + sha256: f3c5be8673bfd905c4665efcb27fa50192f24f84fa8eff2f19cba5d09753d905 category: main optional: false - name: typing_extensions - version: 4.8.0 + version: 4.9.0 manager: conda platform: osx-arm64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda hash: - md5: 5b1be40a26d10a06f6d4f1f9e19fa0c7 - sha256: 38d16b5c53ec1af845d37d22e7bb0e6c934c7f19499123507c5a470f6f8b7dde + md5: a92a6440c3fe7052d63244f3aba2a4a7 + sha256: f3c5be8673bfd905c4665efcb27fa50192f24f84fa8eff2f19cba5d09753d905 category: main optional: false - name: typing_inspect diff --git a/environments/conda-osx-64.lock.yml b/environments/conda-osx-64.lock.yml index 547833bf29..fa93adfc7c 100644 --- a/environments/conda-osx-64.lock.yml +++ b/environments/conda-osx-64.lock.yml @@ -22,10 +22,10 @@ dependencies: - libbrotlicommon=1.1.0=h0dc2134_1 - libcxx=16.0.6=hd57cbcb_0 - libdeflate=1.19=ha4e1b8e_0 - - libev=4.33=haf1e3a3_1 + - libev=4.33=h10d778d_2 - libexpat=2.5.0=hf0c8a7f_1 - libffi=3.4.2=h0d85af4_5 - - libiconv=1.17=hac89ed1_0 + - libiconv=1.17=hd75f5a5_1 - libjpeg-turbo=3.0.0=h0dc2134_1 - libsodium=1.0.18=hbcb3906_1 - libutf8proc=2.8.0=hb7f2c08_0 @@ -70,7 +70,7 @@ dependencies: - lz4-c=1.9.4=hf0c8a7f_0 - ncurses=6.4=h93d8f39_2 - nspr=4.35=hea0b92c_0 - - openssl=3.1.4=hd75f5a5_0 + - openssl=3.2.0=hd75f5a5_1 - pandoc=3.1.3=h9d075a6_0 - pcre2=10.42=h0ad2156_0 - pixman=0.42.2=he965462_0 @@ -93,7 +93,7 @@ dependencies: - libglib=2.78.3=h198397b_0 - libkml=1.3.0=hab3ca0e_1018 - libllvm15=15.0.7=he4b1e75_3 - - libnghttp2=1.58.0=h64cf6d3_0 + - libnghttp2=1.58.0=h64cf6d3_1 - libprotobuf=4.24.4=h0ee05dc_0 - libre2-11=2023.06.02=h4694dbf_0 - librttopo=1.1.0=hf05f67e_15 @@ -120,7 +120,7 @@ dependencies: - libwebp=1.3.2=h44782d1_1 - openjpeg=2.5.0=ha4da562_3 - orc=1.9.0=hd1092d7_4 - - prettier=3.1.0=hbd11d21_0 + - prettier=3.1.1=hbd11d21_0 - python=3.11.6=h30d4d87_0_cpython - re2=2023.06.02=hd34609a_0 - sqlite=3.44.2=h7461747_0 @@ -129,7 +129,7 @@ dependencies: - anyascii=0.3.2=pyhd8ed1ab_0 - appdirs=1.4.4=pyh9f0ad1d_0 - appnope=0.1.3=pyhd8ed1ab_0 - - astroid=3.0.1=py311h6eed73b_0 + - astroid=3.0.2=py311h6eed73b_0 - attrs=23.1.0=pyh71513ae_1 - aws-c-auth=0.7.7=h9ac2572_1 - aws-c-mqtt=0.9.10=h10c2427_1 @@ -152,12 +152,12 @@ dependencies: - colorama=0.4.6=pyhd8ed1ab_0 - crashtest=0.4.1=pyhd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_0 - - dagster-pipes=1.5.10=pyhd8ed1ab_0 + - dagster-pipes=1.5.12=pyhd8ed1ab_0 - dataclasses=0.8=pyhc8e2a94_3 - debugpy=1.8.0=py311hdf8f085_1 - decorator=5.1.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - - distlib=0.3.7=pyhd8ed1ab_0 + - distlib=0.3.8=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - docutils=0.20.1=py311h6eed73b_3 - entrypoints=0.4=pyhd8ed1ab_0 @@ -168,8 +168,8 @@ dependencies: - filelock=3.13.1=pyhd8ed1ab_0 - frozenlist=1.4.0=py311h2725bcf_1 - fsspec=2023.12.1=pyhca7485f_0 - - google-cloud-sdk=456.0.0=py311h6eed73b_0 - - greenlet=3.0.1=py311hd39e593_0 + - google-cloud-sdk=457.0.0=py311h6eed73b_0 + - greenlet=3.0.2=py311hd39e593_0 - hpack=4.0.0=pyh9f0ad1d_0 - httptools=0.6.1=py311he705e18_0 - humanfriendly=10.0=pyhd8ed1ab_6 @@ -187,10 +187,10 @@ dependencies: - jupyterlab_widgets=3.0.9=pyhd8ed1ab_0 - kiwisolver=1.4.5=py311h5fe6e05_1 - libblas=3.9.0=20_osx64_openblas - - libcurl=8.4.0=h726d00d_0 + - libcurl=8.5.0=h726d00d_0 - libgd=2.3.3=h0dceb68_9 - libgrpc=1.59.2=ha7f534c_0 - - libpq=16.1=h6dd4ff7_0 + - libpq=16.1=ha925e61_7 - llvmlite=0.41.1=py311hb5c2e0a_0 - locket=1.0.0=pyhd8ed1ab_0 - lxml=4.9.3=py311h719c1e2_2 @@ -270,7 +270,7 @@ dependencies: - traitlets=5.14.0=pyhd8ed1ab_0 - types-python-dateutil=2.8.19.14=pyhd8ed1ab_0 - types-pyyaml=6.0.12.12=pyhd8ed1ab_0 - - typing_extensions=4.8.0=pyha770c72_0 + - typing_extensions=4.9.0=pyha770c72_0 - typing_utils=0.1.0=pyhd8ed1ab_0 - unicodecsv=0.14.1=pyhd8ed1ab_2 - uri-template=1.3.0=pyhd8ed1ab_0 @@ -300,7 +300,7 @@ dependencies: - bleach=6.1.0=pyhd8ed1ab_0 - cached-property=1.5.2=hd8ed1ab_1 - cffi=1.16.0=py311hc0b63fd_0 - - cfitsio=4.3.0=h66f91ea_0 + - cfitsio=4.3.1=h60fb419_0 - click-default-group=1.2.4=pyhd8ed1ab_0 - click-default-group-wheel=1.2.2=pyhd8ed1ab_0 - click-plugins=1.1.1=py_0 @@ -309,7 +309,7 @@ dependencies: - coloredlogs=14.0=pyhd8ed1ab_3 - comm=0.1.4=pyhd8ed1ab_0 - coverage=7.3.2=py311h2725bcf_0 - - curl=8.4.0=h726d00d_0 + - curl=8.5.0=h726d00d_0 - fonttools=4.46.0=py311he705e18_0 - gitdb=4.0.11=pyhd8ed1ab_0 - graphql-core=3.2.3=pyhd8ed1ab_0 @@ -317,9 +317,9 @@ dependencies: - h11=0.14.0=pyhd8ed1ab_0 - h2=4.1.0=pyhd8ed1ab_0 - harfbuzz=8.3.0=hf45c392_0 - - hdf5=1.14.2=nompi_hedada53_100 + - hdf5=1.14.3=nompi_h691f4bf_100 - html5lib=1.1=pyh9f0ad1d_0 - - hypothesis=6.91.1=pyha770c72_0 + - hypothesis=6.92.0=pyha770c72_0 - importlib-metadata=7.0.0=pyha770c72_0 - importlib_resources=6.1.1=pyhd8ed1ab_0 - isodate=0.6.1=pyhd8ed1ab_0 @@ -343,16 +343,16 @@ dependencies: - overrides=7.4.0=pyhd8ed1ab_0 - partd=1.4.1=pyhd8ed1ab_0 - pexpect=4.8.0=pyh1a96a4e_2 - - pint=0.22=pyhd8ed1ab_1 + - pint=0.23=pyhd8ed1ab_0 - pip=23.3.1=pyhd8ed1ab_0 - - poppler=23.11.0=hdd5a5e8_0 - - postgresql=16.1=h413614c_0 + - poppler=23.12.0=hdd5a5e8_0 + - postgresql=16.1=h413614c_7 - proj=9.3.0=h23b96cc_2 - - prompt-toolkit=3.0.41=pyha770c72_0 + - prompt-toolkit=3.0.42=pyha770c72_0 - protobuf=4.24.4=py311h021eaf5_0 - - psycopg2=2.9.7=py311h187f0af_1 + - psycopg2=2.9.9=py311h187f0af_0 - pyasn1-modules=0.3.0=pyhd8ed1ab_0 - - pyobjc-core=10.0=py311hf110eff_0 + - pyobjc-core=10.1=py311h9b70068_0 - pyproject_hooks=1.0.0=pyhd8ed1ab_0 - pytest=7.4.3=pyhd8ed1ab_0 - python-dateutil=2.8.2=pyhd8ed1ab_0 @@ -367,7 +367,7 @@ dependencies: - terminado=0.18.0=pyh31c8845_0 - tinycss2=1.2.1=pyhd8ed1ab_0 - tqdm=4.66.1=pyhd8ed1ab_0 - - typing-extensions=4.8.0=hd8ed1ab_0 + - typing-extensions=4.9.0=hd8ed1ab_0 - typing_inspect=0.9.0=pyhd8ed1ab_0 - universal_pathlib=0.1.4=pyhd8ed1ab_0 - urllib3=1.26.18=pyhd8ed1ab_0 @@ -382,7 +382,7 @@ dependencies: - arrow=1.3.0=pyhd8ed1ab_0 - async-timeout=4.0.3=pyhd8ed1ab_0 - aws-crt-cpp=0.24.7=hf3941dc_6 - - botocore=1.33.10=pyhd8ed1ab_0 + - botocore=1.33.12=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311h48c7838_1 @@ -397,7 +397,7 @@ dependencies: - httpcore=1.0.2=pyhd8ed1ab_0 - importlib_metadata=7.0.0=hd8ed1ab_0 - jsonschema-specifications=2023.11.2=pyhd8ed1ab_0 - - jupyter_server_terminals=0.4.4=pyhd8ed1ab_1 + - jupyter_server_terminals=0.5.0=pyhd8ed1ab_0 - kealib=1.5.2=h052fcf7_1 - libnetcdf=4.9.2=nompi_h6a32802_112 - libspatialite=5.1.0=hf63aa75_2 @@ -406,11 +406,11 @@ dependencies: - pango=1.50.14=h19c1c8a_2 - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311h2725bcf_6 - - prompt_toolkit=3.0.41=hd8ed1ab_0 - - psycopg2-binary=2.9.7=pyhd8ed1ab_1 + - prompt_toolkit=3.0.42=hd8ed1ab_0 + - psycopg2-binary=2.9.9=pyhd8ed1ab_0 - pybtex=0.24.0=pyhd8ed1ab_2 - pydantic-core=2.14.5=py311h5e0f0e4_0 - - pyobjc-framework-cocoa=10.0=py311hf110eff_1 + - pyobjc-framework-cocoa=10.1=py311h9b70068_0 - pyproj=3.6.1=py311he36daed_4 - pytest-console-scripts=1.4.1=pyhd8ed1ab_0 - pytest-cov=4.1.0=pyhd8ed1ab_0 @@ -422,7 +422,7 @@ dependencies: - sqlalchemy=2.0.23=py311he705e18_0 - stack_data=0.6.2=pyhd8ed1ab_0 - starlette=0.33.0=pyhd8ed1ab_0 - - tiledb=2.16.3=hd3a41d5_3 + - tiledb=2.18.2=h9fe0a6a_0 - ukkonen=1.0.1=py311h5fe6e05_4 - uvicorn=0.24.0.post1=py311h6eed73b_0 - watchfiles=0.21.0=py311h5e0f0e4_0 @@ -441,7 +441,7 @@ dependencies: - google-resumable-media=2.6.0=pyhd8ed1ab_0 - graphene=3.3=pyhd8ed1ab_0 - grpcio-status=1.59.2=pyhd8ed1ab_0 - - gtk2=2.24.33=h7c1209e_2 + - gtk2=2.24.33=h8ca4665_3 - h3-py=3.7.6=py311hdf8f085_1 - httpx=0.25.2=pyhd8ed1ab_0 - identify=2.5.33=pyhd8ed1ab_0 @@ -450,7 +450,7 @@ dependencies: - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - keyring=24.3.0=py311h6eed73b_0 - - libgdal=3.8.0=h5b0c7d5_6 + - libgdal=3.8.1=h7bb8e92_2 - librsvg=2.56.3=hec3db73_0 - numba=0.58.1=py311h32f2313_0 - numexpr=2.8.7=py311h1eadf79_4 @@ -470,16 +470,16 @@ dependencies: - typeguard=4.1.5=pyhd8ed1ab_1 - typer=0.9.0=pyhd8ed1ab_0 - uvicorn-standard=0.24.0.post1=h6eed73b_0 - - boto3=1.33.10=pyhd8ed1ab_0 + - boto3=1.33.12=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - - dagster=1.5.10=pyhd8ed1ab_0 + - dagster=1.5.12=pyhd8ed1ab_0 - datasette=0.64.4=pyhd8ed1ab_1 - doc8=1.1.1=pyhd8ed1ab_0 - email-validator=2.1.0.post1=pyhd8ed1ab_0 - frictionless=4.40.8=pyh6c4a22f_0 - - gdal=3.8.0=py311h5646c56_6 + - gdal=3.8.1=py311h06f03dd_2 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.25.1=pyhca7485f_0 + - google-auth=2.25.2=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - graphviz=9.0.0=hee74176_1 - ipykernel=6.26.0=pyh3cd1d5f_0 @@ -489,18 +489,18 @@ dependencies: - matplotlib-base=3.8.2=py311hd316c10_0 - nbformat=5.9.2=pyhd8ed1ab_0 - pandera-core=0.17.2=pyhd8ed1ab_1 - - pre-commit=3.5.0=pyha770c72_0 + - pre-commit=3.6.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - scikit-learn=1.3.2=py311h66081b9_2 - timezonefinder=6.2.0=py311he705e18_2 - catalystcoop.ferc_xbrl_extractor=1.3.1=pyhd8ed1ab_0 - conda-lock=2.5.1=pyhd8ed1ab_0 - - dagster-graphql=1.5.10=pyhd8ed1ab_0 - - dagster-postgres=0.21.10=pyhd8ed1ab_0 + - dagster-graphql=1.5.12=pyhd8ed1ab_0 + - dagster-postgres=0.21.12=pyhd8ed1ab_0 - fiona=1.9.5=py311h809632c_2 - google-api-core=2.15.0=pyhd8ed1ab_0 - - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 + - google-auth-oauthlib=1.2.0=pyhd8ed1ab_0 - jupyter_console=6.6.3=pyhd8ed1ab_0 - jupyter_events=0.9.0=pyhd8ed1ab_0 - libarrow-acero=14.0.1=hc222712_3_cpu @@ -513,7 +513,7 @@ dependencies: - qtconsole-base=5.5.1=pyha770c72_0 - recordlinkage=0.16=pyhd8ed1ab_0 - tabulator=1.53.5=pyhd8ed1ab_0 - - dagster-webserver=1.5.10=pyhd8ed1ab_0 + - dagster-webserver=1.5.12=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-dataset=14.0.1=hc222712_3_cpu diff --git a/environments/conda-osx-arm64.lock.yml b/environments/conda-osx-arm64.lock.yml index 6234f14f3b..d305810804 100644 --- a/environments/conda-osx-arm64.lock.yml +++ b/environments/conda-osx-arm64.lock.yml @@ -22,10 +22,10 @@ dependencies: - libbrotlicommon=1.1.0=hb547adb_1 - libcxx=16.0.6=h4653b0c_0 - libdeflate=1.19=hb547adb_0 - - libev=4.33=h642e427_1 + - libev=4.33=h93a5062_2 - libexpat=2.5.0=hb7217d7_1 - libffi=3.4.2=h3422bc3_5 - - libiconv=1.17=he4db4b2_0 + - libiconv=1.17=h0d3ecfb_1 - libjpeg-turbo=3.0.0=hb547adb_1 - libsodium=1.0.18=h27ca646_1 - libutf8proc=2.8.0=h1a8c8d9_0 @@ -71,7 +71,7 @@ dependencies: - lz4-c=1.9.4=hb7217d7_0 - ncurses=6.4=h463b476_2 - nspr=4.35=hb7217d7_0 - - openssl=3.1.4=h0d3ecfb_0 + - openssl=3.2.0=h0d3ecfb_1 - pcre2=10.42=h26f9a81_0 - pixman=0.42.2=h13dd4ca_0 - snappy=1.1.10=h17c5cce_0 @@ -93,7 +93,7 @@ dependencies: - libglib=2.78.3=hb438215_0 - libkml=1.3.0=h1eb4d9f_1018 - libllvm15=15.0.7=h504e6bf_3 - - libnghttp2=1.58.0=ha4dd798_0 + - libnghttp2=1.58.0=ha4dd798_1 - libprotobuf=4.24.4=hc9861d8_0 - libre2-11=2023.06.02=h1753957_0 - librttopo=1.1.0=hc8f776e_15 @@ -120,7 +120,7 @@ dependencies: - libwebp=1.3.2=hf30222e_1 - openjpeg=2.5.0=h4c1507b_3 - orc=1.9.0=h7c018df_4 - - prettier=3.1.0=hb67532b_0 + - prettier=3.1.1=hb67532b_0 - python=3.11.6=h47c9636_0_cpython - re2=2023.06.02=h6135d0a_0 - sqlite=3.44.2=hf2abe2d_0 @@ -129,7 +129,7 @@ dependencies: - anyascii=0.3.2=pyhd8ed1ab_0 - appdirs=1.4.4=pyh9f0ad1d_0 - appnope=0.1.3=pyhd8ed1ab_0 - - astroid=3.0.1=py311h267d04e_0 + - astroid=3.0.2=py311h267d04e_0 - attrs=23.1.0=pyh71513ae_1 - aws-c-auth=0.7.7=h886c30d_1 - aws-c-mqtt=0.9.10=h8d54690_1 @@ -152,12 +152,12 @@ dependencies: - colorama=0.4.6=pyhd8ed1ab_0 - crashtest=0.4.1=pyhd8ed1ab_0 - cycler=0.12.1=pyhd8ed1ab_0 - - dagster-pipes=1.5.10=pyhd8ed1ab_0 + - dagster-pipes=1.5.12=pyhd8ed1ab_0 - dataclasses=0.8=pyhc8e2a94_3 - debugpy=1.8.0=py311ha891d26_1 - decorator=5.1.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - - distlib=0.3.7=pyhd8ed1ab_0 + - distlib=0.3.8=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - docutils=0.20.1=py311h267d04e_3 - entrypoints=0.4=pyhd8ed1ab_0 @@ -168,8 +168,8 @@ dependencies: - filelock=3.13.1=pyhd8ed1ab_0 - frozenlist=1.4.0=py311heffc1b2_1 - fsspec=2023.12.1=pyhca7485f_0 - - google-cloud-sdk=456.0.0=py311h267d04e_0 - - greenlet=3.0.1=py311hbaf5611_0 + - google-cloud-sdk=457.0.0=py311h267d04e_0 + - greenlet=3.0.2=py311hbaf5611_0 - hpack=4.0.0=pyh9f0ad1d_0 - httptools=0.6.1=py311h05b510d_0 - humanfriendly=10.0=pyhd8ed1ab_6 @@ -187,10 +187,10 @@ dependencies: - jupyterlab_widgets=3.0.9=pyhd8ed1ab_0 - kiwisolver=1.4.5=py311he4fd1f5_1 - libblas=3.9.0=20_osxarm64_openblas - - libcurl=8.4.0=h2d989ff_0 + - libcurl=8.5.0=h2d989ff_0 - libgd=2.3.3=hfdf3952_9 - libgrpc=1.59.2=hbcf6334_0 - - libpq=16.1=hd435d45_0 + - libpq=16.1=h0f8b458_7 - llvmlite=0.41.1=py311hf5d242d_0 - locket=1.0.0=pyhd8ed1ab_0 - lxml=4.9.3=py311hdef8331_2 @@ -270,7 +270,7 @@ dependencies: - traitlets=5.14.0=pyhd8ed1ab_0 - types-python-dateutil=2.8.19.14=pyhd8ed1ab_0 - types-pyyaml=6.0.12.12=pyhd8ed1ab_0 - - typing_extensions=4.8.0=pyha770c72_0 + - typing_extensions=4.9.0=pyha770c72_0 - typing_utils=0.1.0=pyhd8ed1ab_0 - unicodecsv=0.14.1=pyhd8ed1ab_2 - uri-template=1.3.0=pyhd8ed1ab_0 @@ -300,7 +300,7 @@ dependencies: - bleach=6.1.0=pyhd8ed1ab_0 - cached-property=1.5.2=hd8ed1ab_1 - cffi=1.16.0=py311h4a08483_0 - - cfitsio=4.3.0=hca87796_0 + - cfitsio=4.3.1=h808cd33_0 - click-default-group=1.2.4=pyhd8ed1ab_0 - click-default-group-wheel=1.2.2=pyhd8ed1ab_0 - click-plugins=1.1.1=py_0 @@ -309,7 +309,7 @@ dependencies: - coloredlogs=14.0=pyhd8ed1ab_3 - comm=0.1.4=pyhd8ed1ab_0 - coverage=7.3.2=py311heffc1b2_0 - - curl=8.4.0=h2d989ff_0 + - curl=8.5.0=h2d989ff_0 - fonttools=4.46.0=py311h05b510d_0 - gitdb=4.0.11=pyhd8ed1ab_0 - graphql-core=3.2.3=pyhd8ed1ab_0 @@ -317,9 +317,9 @@ dependencies: - h11=0.14.0=pyhd8ed1ab_0 - h2=4.1.0=pyhd8ed1ab_0 - harfbuzz=8.3.0=h8f0ba13_0 - - hdf5=1.14.2=nompi_h3aba7b3_100 + - hdf5=1.14.3=nompi_h5bb55e9_100 - html5lib=1.1=pyh9f0ad1d_0 - - hypothesis=6.91.1=pyha770c72_0 + - hypothesis=6.92.0=pyha770c72_0 - importlib-metadata=7.0.0=pyha770c72_0 - importlib_resources=6.1.1=pyhd8ed1ab_0 - isodate=0.6.1=pyhd8ed1ab_0 @@ -343,16 +343,16 @@ dependencies: - overrides=7.4.0=pyhd8ed1ab_0 - partd=1.4.1=pyhd8ed1ab_0 - pexpect=4.8.0=pyh1a96a4e_2 - - pint=0.22=pyhd8ed1ab_1 + - pint=0.23=pyhd8ed1ab_0 - pip=23.3.1=pyhd8ed1ab_0 - - poppler=23.11.0=hcdd998b_0 - - postgresql=16.1=hc6ab77f_0 + - poppler=23.12.0=hcdd998b_0 + - postgresql=16.1=hc6ab77f_7 - proj=9.3.0=h52fb9d0_2 - - prompt-toolkit=3.0.41=pyha770c72_0 + - prompt-toolkit=3.0.42=pyha770c72_0 - protobuf=4.24.4=py311h4d1eceb_0 - - psycopg2=2.9.7=py311h589e011_1 + - psycopg2=2.9.9=py311h589e011_0 - pyasn1-modules=0.3.0=pyhd8ed1ab_0 - - pyobjc-core=10.0=py311hb702dc4_0 + - pyobjc-core=10.1=py311h665608e_0 - pyproject_hooks=1.0.0=pyhd8ed1ab_0 - pytest=7.4.3=pyhd8ed1ab_0 - python-dateutil=2.8.2=pyhd8ed1ab_0 @@ -367,7 +367,7 @@ dependencies: - terminado=0.18.0=pyh31c8845_0 - tinycss2=1.2.1=pyhd8ed1ab_0 - tqdm=4.66.1=pyhd8ed1ab_0 - - typing-extensions=4.8.0=hd8ed1ab_0 + - typing-extensions=4.9.0=hd8ed1ab_0 - typing_inspect=0.9.0=pyhd8ed1ab_0 - universal_pathlib=0.1.4=pyhd8ed1ab_0 - urllib3=1.26.18=pyhd8ed1ab_0 @@ -382,7 +382,7 @@ dependencies: - arrow=1.3.0=pyhd8ed1ab_0 - async-timeout=4.0.3=pyhd8ed1ab_0 - aws-crt-cpp=0.24.7=hba4ac3b_6 - - botocore=1.33.10=pyhd8ed1ab_0 + - botocore=1.33.12=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311h08c85a6_1 @@ -397,7 +397,7 @@ dependencies: - httpcore=1.0.2=pyhd8ed1ab_0 - importlib_metadata=7.0.0=hd8ed1ab_0 - jsonschema-specifications=2023.11.2=pyhd8ed1ab_0 - - jupyter_server_terminals=0.4.4=pyhd8ed1ab_1 + - jupyter_server_terminals=0.5.0=pyhd8ed1ab_0 - kealib=1.5.2=h47b5e36_1 - libnetcdf=4.9.2=nompi_hb2fb864_112 - libspatialite=5.1.0=h66af7d6_2 @@ -406,11 +406,11 @@ dependencies: - pango=1.50.14=hcf40dda_2 - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311heffc1b2_6 - - prompt_toolkit=3.0.41=hd8ed1ab_0 - - psycopg2-binary=2.9.7=pyhd8ed1ab_1 + - prompt_toolkit=3.0.42=hd8ed1ab_0 + - psycopg2-binary=2.9.9=pyhd8ed1ab_0 - pybtex=0.24.0=pyhd8ed1ab_2 - pydantic-core=2.14.5=py311h94f323b_0 - - pyobjc-framework-cocoa=10.0=py311hb702dc4_1 + - pyobjc-framework-cocoa=10.1=py311h665608e_0 - pyproj=3.6.1=py311h20a9b75_4 - pytest-console-scripts=1.4.1=pyhd8ed1ab_0 - pytest-cov=4.1.0=pyhd8ed1ab_0 @@ -422,7 +422,7 @@ dependencies: - sqlalchemy=2.0.23=py311h05b510d_0 - stack_data=0.6.2=pyhd8ed1ab_0 - starlette=0.33.0=pyhd8ed1ab_0 - - tiledb=2.16.3=he15c4da_3 + - tiledb=2.18.2=h555b8a3_0 - ukkonen=1.0.1=py311he4fd1f5_4 - uvicorn=0.24.0.post1=py311h267d04e_0 - watchfiles=0.21.0=py311h94f323b_0 @@ -441,7 +441,7 @@ dependencies: - google-resumable-media=2.6.0=pyhd8ed1ab_0 - graphene=3.3=pyhd8ed1ab_0 - grpcio-status=1.59.2=pyhd8ed1ab_0 - - gtk2=2.24.33=h57013de_2 + - gtk2=2.24.33=h7895bb2_3 - h3-py=3.7.6=py311ha891d26_1 - httpx=0.25.2=pyhd8ed1ab_0 - identify=2.5.33=pyhd8ed1ab_0 @@ -450,12 +450,12 @@ dependencies: - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - keyring=24.3.0=py311h267d04e_0 - - libgdal=3.8.0=h76f3012_6 + - libgdal=3.8.1=h1ac08d9_2 - librsvg=2.56.3=h0db3404_0 - numba=0.58.1=py311h9ec4793_0 - numexpr=2.8.7=py311h6e08293_4 - oauthlib=3.2.2=pyhd8ed1ab_0 - - pandas=2.1.3=py311h6e08293_0 + - pandas=2.1.4=py311h6e08293_0 - pybtex-docutils=1.0.3=py311h267d04e_1 - pydantic=2.5.2=pyhd8ed1ab_0 - pyopenssl=23.3.0=pyhd8ed1ab_0 @@ -470,16 +470,16 @@ dependencies: - typeguard=4.1.5=pyhd8ed1ab_1 - typer=0.9.0=pyhd8ed1ab_0 - uvicorn-standard=0.24.0.post1=ha1ab1f8_0 - - boto3=1.33.10=pyhd8ed1ab_0 + - boto3=1.33.12=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - - dagster=1.5.10=pyhd8ed1ab_0 + - dagster=1.5.12=pyhd8ed1ab_0 - datasette=0.64.4=pyhd8ed1ab_1 - doc8=1.1.1=pyhd8ed1ab_0 - email-validator=2.1.0.post1=pyhd8ed1ab_0 - frictionless=4.40.8=pyh6c4a22f_0 - - gdal=3.8.0=py311h32a4f3d_6 + - gdal=3.8.1=py311hff5d751_2 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.25.1=pyhca7485f_0 + - google-auth=2.25.2=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - graphviz=9.0.0=h3face73_1 - ipykernel=6.26.0=pyh3cd1d5f_0 @@ -489,18 +489,18 @@ dependencies: - matplotlib-base=3.8.2=py311hfdba5f6_0 - nbformat=5.9.2=pyhd8ed1ab_0 - pandera-core=0.17.2=pyhd8ed1ab_1 - - pre-commit=3.5.0=pyha770c72_0 + - pre-commit=3.6.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - scikit-learn=1.3.2=py311ha25ca4d_2 - timezonefinder=6.2.0=py311h05b510d_2 - catalystcoop.ferc_xbrl_extractor=1.3.1=pyhd8ed1ab_0 - conda-lock=2.5.1=pyhd8ed1ab_0 - - dagster-graphql=1.5.10=pyhd8ed1ab_0 - - dagster-postgres=0.21.10=pyhd8ed1ab_0 + - dagster-graphql=1.5.12=pyhd8ed1ab_0 + - dagster-postgres=0.21.12=pyhd8ed1ab_0 - fiona=1.9.5=py311h4760b73_2 - google-api-core=2.15.0=pyhd8ed1ab_0 - - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 + - google-auth-oauthlib=1.2.0=pyhd8ed1ab_0 - jupyter_console=6.6.3=pyhd8ed1ab_0 - jupyter_events=0.9.0=pyhd8ed1ab_0 - libarrow-acero=14.0.1=had9dd58_3_cpu @@ -513,7 +513,7 @@ dependencies: - qtconsole-base=5.5.1=pyha770c72_0 - recordlinkage=0.16=pyhd8ed1ab_0 - tabulator=1.53.5=pyhd8ed1ab_0 - - dagster-webserver=1.5.10=pyhd8ed1ab_0 + - dagster-webserver=1.5.12=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-dataset=14.0.1=had9dd58_3_cpu diff --git a/src/pudl/etl/__init__.py b/src/pudl/etl/__init__.py index ce9f2cc4a2..006d4e0cd1 100644 --- a/src/pudl/etl/__init__.py +++ b/src/pudl/etl/__init__.py @@ -88,6 +88,23 @@ "epacems_io_manager": epacems_io_manager, } +# By default, limit CEMS year processing concurrency to prevent memory overload. +default_config = { + "execution": { + "config": { + "multiprocess": { + "tag_concurrency_limits": [ + { + "key": "datasource", + "value": "epacems", + "limit": 2, + } + ], + }, + } + } +} + def create_non_cems_selection(all_assets: list[AssetsDefinition]) -> AssetSelection: """Create a selection of assets excluding CEMS and all downstream assets. @@ -127,7 +144,9 @@ def load_dataset_settings_from_file(setting_filename: str) -> dict: resources=default_resources, jobs=[ define_asset_job( - name="etl_full", description="This job executes all years of all assets." + name="etl_full", + description="This job executes all years of all assets.", + config=default_config, ), define_asset_job( name="etl_full_no_cems", @@ -137,7 +156,8 @@ def load_dataset_settings_from_file(setting_filename: str) -> dict: ), define_asset_job( name="etl_fast", - config={ + config=default_config + | { "resources": { "dataset_settings": { "config": load_dataset_settings_from_file("etl_fast") diff --git a/src/pudl/etl/epacems_assets.py b/src/pudl/etl/epacems_assets.py index 9b66e29531..603ac37fb3 100644 --- a/src/pudl/etl/epacems_assets.py +++ b/src/pudl/etl/epacems_assets.py @@ -17,13 +17,15 @@ from dagster import AssetIn, DynamicOut, DynamicOutput, asset, graph_asset, op import pudl +from pudl.extract.epacems import EpaCemsPartition from pudl.metadata.classes import Resource +from pudl.metadata.enums import EPACEMS_STATES from pudl.workspace.setup import PudlPaths logger = pudl.logging_helpers.get_logger(__name__) -YearPartitions = namedtuple("YearPartitions", ["year", "states"]) +YearPartitions = namedtuple("YearPartitions", ["year_quarters"]) @op( @@ -37,11 +39,17 @@ def get_years_from_settings(context): parallel. """ epacems_settings = context.resources.dataset_settings.epacems - for year in epacems_settings.years: + years = { + EpaCemsPartition(year_quarter=yq).year for yq in epacems_settings.year_quarters + } + for year in years: yield DynamicOutput(year, mapping_key=str(year)) -@op(required_resource_keys={"datastore", "dataset_settings"}) +@op( + required_resource_keys={"datastore", "dataset_settings"}, + tags={"datasource": "epacems"}, +) def process_single_year( context, year, @@ -64,23 +72,29 @@ def process_single_year( partitioned_path = PudlPaths().output_dir / "hourly_emissions_epacems" partitioned_path.mkdir(exist_ok=True) - for state in epacems_settings.states: - logger.info(f"Processing EPA CEMS hourly data for {year}-{state}") - df = pudl.extract.epacems.extract(year=year, state=state, ds=ds) + year_quarters_in_year = { + yq + for yq in epacems_settings.year_quarters + if EpaCemsPartition(year_quarter=yq).year == year + } + + for year_quarter in year_quarters_in_year: + logger.info(f"Processing EPA CEMS hourly data for {year_quarter}") + df = pudl.extract.epacems.extract(year_quarter=year_quarter, ds=ds) if not df.empty: # If state-year combination has data df = pudl.transform.epacems.transform(df, epacamd_eia, plants_entity_eia) table = pa.Table.from_pandas(df, schema=schema, preserve_index=False) # Write to a directory of partitioned parquet files with pq.ParquetWriter( - where=partitioned_path / f"epacems-{year}-{state}.parquet", + where=partitioned_path / f"epacems-{year_quarter}.parquet", schema=schema, compression="snappy", version="2.6", ) as partitioned_writer: partitioned_writer.write_table(table) - return YearPartitions(year, epacems_settings.states) + return YearPartitions(year_quarters_in_year) @op @@ -98,12 +112,21 @@ def consolidate_partitions(context, partitions: list[YearPartitions]) -> None: with pq.ParquetWriter( where=monolithic_path, schema=schema, compression="snappy", version="2.6" ) as monolithic_writer: - for year, states in partitions: - for state in states: + for year_partition in partitions: + for state in EPACEMS_STATES: monolithic_writer.write_table( - pq.read_table( - source=partitioned_path / f"epacems-{year}-{state}.parquet", - schema=schema, + # Concat a slice of each state's data from all quarters in a year + # and write to parquet to create year-state row groups + pa.concat_tables( + [ + pq.read_table( + source=partitioned_path + / f"epacems-{year_quarter}.parquet", + filters=[[("state", "=", state.upper())]], + schema=schema, + ) + for year_quarter in year_partition.year_quarters + ] ) ) diff --git a/src/pudl/etl/static_assets.py b/src/pudl/etl/static_assets.py index 9d21e649b7..ee64f34dc5 100644 --- a/src/pudl/etl/static_assets.py +++ b/src/pudl/etl/static_assets.py @@ -12,7 +12,7 @@ def _read_static_encoding_tables( - etl_group: Literal["static_eia", "static_ferc1"] + etl_group: Literal["static_eia", "static_ferc1"], ) -> dict[str, pd.DataFrame]: """Build dataframes of static tables from a data source for use as foreign keys. diff --git a/src/pudl/extract/epacems.py b/src/pudl/extract/epacems.py index 8e60dfd159..312bb454eb 100644 --- a/src/pudl/extract/epacems.py +++ b/src/pudl/extract/epacems.py @@ -20,9 +20,10 @@ during the transform process with help from the crosswalk. """ from pathlib import Path -from typing import NamedTuple +from typing import Annotated import pandas as pd +from pydantic import BaseModel, StringConstraints import pudl.logging_helpers from pudl.metadata.classes import Resource @@ -97,32 +98,35 @@ """Set: The set of EPA CEMS columns to ignore when reading data.""" -class EpaCemsPartition(NamedTuple): +class EpaCemsPartition(BaseModel): """Represents EpaCems partition identifying unique resource file.""" - year: str - state: str + year_quarter: Annotated[ + str, StringConstraints(strict=True, pattern=r"^(19|20)\d{2}[q][1-4]$") + ] - def get_key(self): - """Returns hashable key for use with EpaCemsDatastore.""" - return (self.year, self.state.lower()) + @property + def year(self): + """Return the year associated with the year_quarter.""" + return pd.to_datetime(self.year_quarter).year def get_filters(self): """Returns filters for retrieving given partition resource from Datastore.""" - return {"year": self.year, "state": self.state.lower()} + return {"year_quarter": self.year_quarter} - def get_annual_file(self) -> Path: + def get_quarterly_file(self) -> Path: """Return the name of the CSV file that holds annual hourly data.""" - return Path(f"epacems-{self.year}-{self.state.lower()}.csv") + return Path( + f"epacems-{self.year}-{pd.to_datetime(self.year_quarter).quarter}.csv" + ) class EpaCemsDatastore: """Helper class to extract EpaCems resources from datastore. - EpaCems resources are identified by a year and a state. Each of these zip files - contain monthly zip files that in turn contain csv files. This class implements - get_data_frame method that will concatenate tables for a given state and month - across all months. + EpaCems resources are identified by a year and a quarter. Each of these zip files + contains one csv file. This class implements get_data_frame method that will + rename columns for a quarterly CSV file. """ def __init__(self, datastore: Datastore): @@ -130,23 +134,16 @@ def __init__(self, datastore: Datastore): self.datastore = datastore def get_data_frame(self, partition: EpaCemsPartition) -> pd.DataFrame: - """Constructs dataframe from a zipfile for a given (year, state) partition.""" + """Constructs dataframe from a zipfile for a given (year_quarter) partition.""" archive = self.datastore.get_zipfile_resource( "epacems", **partition.get_filters() ) - # Get names of files in zip file - files = self.datastore.get_zipfile_file_names(archive) - - # If archive has one csv file in it, this is a yearly CSV (archived after 08/23) - # and this CSV does not need to be concatenated. - if len(files) == 1 and files[0].endswith(".csv"): - with archive.open(str(partition.get_annual_file()), "r") as csv_file: - df = self._csv_to_dataframe( - csv_file, ignore_cols=API_IGNORE_COLS, rename_dict=API_RENAME_DICT - ) - return df - raise AssertionError(f"Unexpected archive format. Found files: {files}.") + with archive.open(str(partition.get_quarterly_file()), "r") as csv_file: + df = self._csv_to_dataframe( + csv_file, ignore_cols=API_IGNORE_COLS, rename_dict=API_RENAME_DICT + ) + return df def _csv_to_dataframe( self, csv_file: Path, ignore_cols: dict[str, str], rename_dict: dict[str, str] @@ -167,25 +164,24 @@ def _csv_to_dataframe( ).rename(columns=rename_dict) -def extract(year: int, state: str, ds: Datastore): +def extract(year_quarter: str, ds: Datastore) -> pd.DataFrame: """Coordinate the extraction of EPA CEMS hourly DataFrames. Args: - year: report year of the data to extract - state: report state of the data to extract + year_quarter: report year and quarter of the data to extract ds: Initialized datastore Yields: - pandas.DataFrame: A single state-year of EPA CEMS hourly emissions data. + A single quarter of EPA CEMS hourly emissions data. """ ds = EpaCemsDatastore(ds) - partition = EpaCemsPartition(state=state, year=year) + partition = EpaCemsPartition(year_quarter=year_quarter) + year = partition.year # We have to assign the reporting year for partitioning purposes try: df = ds.get_data_frame(partition).assign(year=year) - except KeyError: # If no state-year combination found, return empty df. - logger.warning( - f"No data found for {state} in {year}. Returning empty dataframe." - ) + # If the requested quarter is not found, return an empty df with expected columns: + except KeyError: + logger.warning(f"No data found for {year_quarter}. Returning empty dataframe.") res = Resource.from_id("hourly_emissions_epacems") df = res.format_df(pd.DataFrame()) return df diff --git a/src/pudl/extract/ferc714.py b/src/pudl/extract/ferc714.py index 9e6c8ac6d7..b442bec6cb 100644 --- a/src/pudl/extract/ferc714.py +++ b/src/pudl/extract/ferc714.py @@ -2,7 +2,7 @@ from collections import OrderedDict import pandas as pd -from dagster import AssetOut, Output, multi_asset +from dagster import AssetsDefinition, asset import pudl @@ -63,40 +63,40 @@ """Dictionary mapping PUDL tables to FERC-714 filenames and character encodings.""" -@multi_asset( - outs={"raw_ferc714__" + table_name: AssetOut() for table_name in FERC714_FILES}, - required_resource_keys={"datastore", "dataset_settings"}, -) -def extract_ferc714(context): - """Extract the raw FERC Form 714 dataframes from their original CSV files. +def generate_raw_ferc714_asset(table_name: str) -> AssetsDefinition: + """Generates an asset for building the raw FERC 714 dataframe.""" + assert table_name in FERC714_FILES - Args: - context: dagster keyword that provides access to resources and config. + @asset( + name=f"raw_ferc714__{table_name}", + required_resource_keys={"datastore", "dataset_settings"}, + ) + def _extract_raw_ferc714(context): + """Extract the raw FERC Form 714 dataframes from their original CSV files. - Returns: - A tuple of extracted FERC-714 dataframes. - """ - ds = context.resources.datastore - ferc714_settings = context.resources.dataset_settings.ferc714 - years = ", ".join(map(str, ferc714_settings.years)) + Args: + context: dagster keyword that provides access to resources and config. + """ + ds = context.resources.datastore + ferc714_settings = context.resources.dataset_settings.ferc714 + years = ", ".join(map(str, ferc714_settings.years)) - raw_dfs: OrderedDict[str, pd.DataFrame] = OrderedDict({}) - for table_name in FERC714_FILES: logger.info( f"Extracting {table_name} from CSV into pandas DataFrame (years: {years})." ) - with ds.get_zipfile_resource("ferc714", name="ferc714.zip").open( - FERC714_FILES[table_name]["name"] - ) as f: - raw_dfs[table_name] = pd.read_csv( - f, encoding=FERC714_FILES[table_name]["encoding"] - ) + df = pd.read_csv( + ds.get_zipfile_resource("ferc714", name="ferc714.zip").open( + FERC714_FILES[table_name]["name"] + ), + encoding=FERC714_FILES[table_name]["encoding"], + ) if table_name != "respondent_id": - raw_dfs[table_name] = raw_dfs[table_name].query( - "report_yr in @ferc714_settings.years" - ) + df = df.query("report_yr in @ferc714_settings.years") + return df - return ( - Output(output_name="raw_ferc714__" + table_name, value=df) - for table_name, df in raw_dfs.items() - ) + return _extract_raw_ferc714 + + +raw_ferc714_assets = [ + generate_raw_ferc714_asset(table_name) for table_name in FERC714_FILES +] diff --git a/src/pudl/helpers.py b/src/pudl/helpers.py index 4e1fb73f5d..abf5288935 100644 --- a/src/pudl/helpers.py +++ b/src/pudl/helpers.py @@ -15,7 +15,7 @@ from collections.abc import Generator, Iterable from functools import partial from io import BytesIO -from typing import Any, Literal +from typing import Any, Literal, NamedTuple import addfips import numpy as np @@ -1857,3 +1857,52 @@ def assert_cols_areclose( f"{message} Mismatch ratio {mismatch_ratio:.01%} > " f"threshold {mismatch_threshold:.01%}." ) + + +class TableDiff(NamedTuple): + """Represent a diff between two versions of the same table.""" + + deleted: pd.DataFrame + added: pd.DataFrame + changed: pd.DataFrame + old_df: pd.DataFrame + new_df: pd.DataFrame + + +def diff_wide_tables( + primary_key: Iterable[str], old: pd.DataFrame, new: pd.DataFrame +) -> TableDiff: + """Diff values across multiple iterations of the same wide table. + + We often have tables with many value columns; a straightforward comparison of two + versions of the same table will show you that two rows are different, but + won't show which of the many values changed. + + So we melt the table based on some sort of primary key columns then diff + the old and new values. + """ + old_melted = old.melt(id_vars=primary_key, var_name="field").set_index( + primary_key + ["field"] + ) + new_melted = new.melt(id_vars=primary_key, var_name="field").set_index( + primary_key + ["field"] + ) + old_aligned, new_aligned = old_melted.align(new_melted) + comparison = old_aligned.compare(new_aligned, result_names=("old", "new")) + if comparison.empty: + return TableDiff( + deleted=pd.DataFrame(), + added=pd.DataFrame(), + changed=pd.DataFrame(), + old_df=old, + new_df=new, + ) + + old_values = comparison[("value", "old")] + new_values = comparison[("value", "new")] + added = comparison[old_values.isna() & new_values.notna()] + deleted = comparison[old_values.notna() & new_values.isna()] + changed = comparison[old_values.notna() & new_values.notna()] + return TableDiff( + deleted=deleted, added=added, changed=changed, old_df=old, new_df=new + ) diff --git a/src/pudl/metadata/helpers.py b/src/pudl/metadata/helpers.py index 23b2003fa7..68e4c3c256 100644 --- a/src/pudl/metadata/helpers.py +++ b/src/pudl/metadata/helpers.py @@ -87,7 +87,7 @@ def _parse_foreign_key_rule(rule: dict, name: str, key: list[str]) -> list[dict] def _build_foreign_key_tree( - resources: dict[str, dict] + resources: dict[str, dict], ) -> dict[str, dict[tuple[str, ...], dict]]: """Build foreign key tree. diff --git a/src/pudl/metadata/sources.py b/src/pudl/metadata/sources.py index f941b6a6e6..11f8fcc1d6 100644 --- a/src/pudl/metadata/sources.py +++ b/src/pudl/metadata/sources.py @@ -1,8 +1,9 @@ """Metadata and operational constants.""" from typing import Any +import pandas as pd + from pudl.metadata.constants import CONTRIBUTORS, KEYWORDS, LICENSES -from pudl.metadata.enums import EPACEMS_STATES SOURCES: dict[str, Any] = { "censusdp1tract": { @@ -272,8 +273,10 @@ }, "field_namespace": "epacems", "working_partitions": { - "years": sorted(set(range(1995, 2023))), - "states": sorted(EPACEMS_STATES), + "year_quarters": [ + str(q).lower() + for q in pd.period_range(start="1995q1", end="2023q3", freq="Q") + ] }, "contributors": [ CONTRIBUTORS["catalyst-cooperative"], diff --git a/src/pudl/output/epacems.py b/src/pudl/output/epacems.py index 564c2fadc1..0d063761e7 100644 --- a/src/pudl/output/epacems.py +++ b/src/pudl/output/epacems.py @@ -5,7 +5,6 @@ import dask.dataframe as dd -from pudl.settings import EpaCemsSettings from pudl.workspace.setup import PudlPaths @@ -123,10 +122,9 @@ def epacems( from :mod:`pudl.workspace` Returns: - The requested epacems data + The requested epacems data. If requested states or years are not available, no + error will be raised. """ - epacems_settings = EpaCemsSettings(states=states, years=years) - # columns=None is handled by dd.read_parquet; gives all columns if columns is not None: # nonexistent columns are handled by dd.read_parquet; raises ValueError @@ -142,8 +140,8 @@ def epacems( index=False, split_row_groups=True, filters=year_state_filter( - states=epacems_settings.states, - years=epacems_settings.years, + states=states, + years=years, ), ) return epacems diff --git a/src/pudl/output/ferc714.py b/src/pudl/output/ferc714.py index 55431238c7..2a6a6bd525 100644 --- a/src/pudl/output/ferc714.py +++ b/src/pudl/output/ferc714.py @@ -1,5 +1,4 @@ """Functions & classes for compiling derived aspects of the FERC Form 714 data.""" -from datetime import datetime from typing import Any import geopandas as gpd @@ -83,41 +82,6 @@ ################################################################################ -def add_dates(rids_ferc714: pd.DataFrame, report_dates: list[datetime]) -> pd.DataFrame: - """Broadcast respondent data across dates. - - Args: - rids_ferc714: A simple FERC 714 Respondent ID dataframe, - without any date information. - report_dates: Dates for which each respondent - should be given a record. - - Raises: - ValueError: if a ``report_date`` column exists in ``rids_ferc714``. - - Returns: - A Dataframe having all the same columns as the input - ``rids_ferc714`` with the addition of a ``report_date`` column, but with all - records associated with each ``respondent_id_ferc714`` duplicated on a per-date - basis. - """ - if "report_date" in rids_ferc714.columns: - raise ValueError("report_date already present, can't be added again!") - # Create DataFrame with all report_date and respondent_id_ferc714 combos - logger.info(f"Got {len(report_dates)} report_dates.") - unique_rids = rids_ferc714.respondent_id_ferc714.unique() - logger.info(f"found {len(unique_rids)} unique FERC-714 respondent IDs.") - dates_rids_df = pd.DataFrame( - index=pd.MultiIndex.from_product( - [report_dates, unique_rids], - names=["report_date", "respondent_id_ferc714"], - ) - ).reset_index() - rids_with_dates = pd.merge(rids_ferc714, dates_rids_df, on="respondent_id_ferc714") - logger.info(f"Generated {len(rids_with_dates)} report_date + respondent_id rows.") - return rids_with_dates - - def categorize_eia_code( eia_codes: list[int], ba_ids: list[int], @@ -370,28 +334,31 @@ def filled_service_territory_eia861( ) -@asset(compute_kind="Python") +@asset( + compute_kind="Python", + required_resource_keys={"dataset_settings"}, +) def annualized_respondents_ferc714( - demand_hourly_pa_ferc714: pd.DataFrame, respondent_id_ferc714: pd.DataFrame + context, respondent_id_ferc714: pd.DataFrame ) -> pd.DataFrame: """Broadcast respondent data across all years with reported demand. The FERC 714 Respondent IDs and names are reported in their own table, without any refence to individual years, but much of the information we are associating with them varies annually. This method creates an annualized version of the respondent - table, with each respondent having an entry corresponding to every year in which - hourly demand was reported in the FERC 714 dataset as a whole -- this necessarily - means that many of the respondents will end up having entries for years in which - they reported no demand, and that's fine. They can be filtered later. + table, with each respondent having an entry corresponding to every year for which + FERC 714 has been processed. This means that many of the respondents will end up + having entries for years in which they reported no demand, and that's fine. + They can be filtered later. """ - # Calculate the total demand per respondent, per year: - report_dates = [ - time for time in demand_hourly_pa_ferc714.report_date.unique() if pd.notna(time) - ] - annualized_respondents_ferc714 = respondent_id_ferc714.pipe( - add_dates, report_dates - ).pipe(apply_pudl_dtypes) - return annualized_respondents_ferc714 + if "report_date" in respondent_id_ferc714.columns: + raise AssertionError("report_date already present, can't be added again!") + + ferc714_settings = context.resources.dataset_settings.ferc714 + report_dates = pd.DataFrame( + {"report_date": pd.to_datetime(sorted(ferc714_settings.years), format="%Y")} + ) + return respondent_id_ferc714.merge(report_dates, how="cross") @asset( diff --git a/src/pudl/package_data/settings/etl_fast.yml b/src/pudl/package_data/settings/etl_fast.yml index 59b1cb928a..a70bfc3180 100644 --- a/src/pudl/package_data/settings/etl_fast.yml +++ b/src/pudl/package_data/settings/etl_fast.yml @@ -75,5 +75,4 @@ datasets: # Note that the CEMS data relies on EIA 860 data for plant locations, # so if you're loading CEMS data for a particular year, you should # also load the EIA 860 data for that year if possible - states: [ID, ME] - years: [2020, 2022] + year_quarters: ["2022q1"] diff --git a/src/pudl/package_data/settings/etl_full.yml b/src/pudl/package_data/settings/etl_full.yml index 8e4e7a1630..a6fd0454ac 100644 --- a/src/pudl/package_data/settings/etl_full.yml +++ b/src/pudl/package_data/settings/etl_full.yml @@ -270,35 +270,4 @@ datasets: # Note that the CEMS data relies on EIA 860 data for plant locations, # so if you're loading CEMS data for a particular year, you should # also load the EIA 860 data for that year if possible - states: [all] - years: - [ - 1995, - 1996, - 1997, - 1998, - 1999, - 2000, - 2001, - 2002, - 2003, - 2004, - 2005, - 2006, - 2007, - 2008, - 2009, - 2010, - 2011, - 2012, - 2013, - 2014, - 2015, - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - ] + year_quarters: ["all"] diff --git a/src/pudl/settings.py b/src/pudl/settings.py index 6c5205e03b..78dc76ea43 100644 --- a/src/pudl/settings.py +++ b/src/pudl/settings.py @@ -1,5 +1,4 @@ """Module for validating pudl etl settings.""" -import itertools import json from enum import Enum, unique from typing import Any, ClassVar, Self @@ -96,11 +95,8 @@ def partitions(cls) -> list[None | dict[str, str]]: # noqa: N805 ``pd.json_normalize``. """ partitions = [] - if hasattr(cls, "years") and hasattr(cls, "states"): - partitions = [ - {"year": year, "state": state} - for year, state in itertools.product(cls.years, cls.states) - ] + if hasattr(cls, "year_quarters"): + partitions = [{"year_quarters": part} for part in cls.year_quarters] elif hasattr(cls, "years"): partitions = [{"year": part} for part in cls.years] return partitions @@ -149,24 +145,19 @@ class EpaCemsSettings(GenericDatasetSettings): Args: data_source: DataSource metadata object - years: list of years to validate. - states: list of states to validate. - partition: Whether to output year-state partitioned Parquet files. If True, - all available threads / CPUs will be used in parallel. + year_quarters: list of year_quarters to validate. """ data_source: ClassVar[DataSource] = DataSource.from_id("epacems") + year_quarters: list[str] = data_source.working_partitions["year_quarters"] - years: list[int] = data_source.working_partitions["years"] - states: list[str] = data_source.working_partitions["states"] - - @field_validator("states") + @field_validator("year_quarters") @classmethod - def allow_all_keyword(cls, states): # noqa: N805 - """Allow users to specify ['all'] to get all states.""" - if states == ["all"]: - states = cls.data_source.working_partitions["states"] - return states + def allow_all_keyword_year_quarters(cls, year_quarters): + """Allow users to specify ['all'] to get all quarters.""" + if year_quarters == ["all"]: + year_quarters = cls.data_source.working_partitions["year_quarters"] + return year_quarters class Eia923Settings(GenericDatasetSettings): @@ -215,7 +206,7 @@ class Eia860Settings(GenericDatasetSettings): @field_validator("eia860m") @classmethod - def check_eia860m_date(cls, eia860m: bool) -> bool: # noqa: N805 + def check_eia860m_date(cls, eia860m: bool) -> bool: """Check 860m date-year is exactly one year after most recent working 860 year. Args: diff --git a/src/pudl/transform/epacems.py b/src/pudl/transform/epacems.py index fa6dc5fb37..07171e4ee1 100644 --- a/src/pudl/transform/epacems.py +++ b/src/pudl/transform/epacems.py @@ -55,7 +55,6 @@ def harmonize_eia_epa_orispl( ).filter( lambda x: x.plant_id_eia.nunique() > 1 # noqa: PD101 ) - if not one_to_many.empty: raise AssertionError( "The epacamd_eia crosswalk has more than one plant_id_eia value per " @@ -181,11 +180,11 @@ def transform( """Transform EPA CEMS hourly data and ready it for export to Parquet. Args: - raw_df: An extracted by not yet transformed state-year of EPA CEMS data. + raw_df: An extracted by not yet transformed year_quarter of EPA CEMS data. pudl_engine: SQLAlchemy connection engine for connecting to an existing PUDL DB. Returns: - A single year-state of EPA CEMS data + A single year_quarter of EPA CEMS data """ # Create all the table inputs used for the subtransform functions below diff --git a/src/pudl/transform/ferc1.py b/src/pudl/transform/ferc1.py index 92d716ff69..26f49930ca 100644 --- a/src/pudl/transform/ferc1.py +++ b/src/pudl/transform/ferc1.py @@ -48,7 +48,7 @@ @asset def clean_xbrl_metadata_json( - raw_xbrl_metadata_json: dict[str, dict[str, list[dict[str, Any]]]] + raw_xbrl_metadata_json: dict[str, dict[str, list[dict[str, Any]]]], ) -> dict[str, dict[str, list[dict[str, Any]]]]: """Generate cleaned json xbrl metadata. @@ -58,7 +58,7 @@ def clean_xbrl_metadata_json( def add_source_tables_to_xbrl_metadata( - raw_xbrl_metadata_json: dict[str, dict[str, list[dict[str, Any]]]] + raw_xbrl_metadata_json: dict[str, dict[str, list[dict[str, Any]]]], ) -> dict[str, dict[str, list[dict[str, Any]]]]: """Add a ``source_tables`` field into metadata calculation components. diff --git a/src/pudl/workspace/datastore.py b/src/pudl/workspace/datastore.py index 809e490e7a..144c187aeb 100644 --- a/src/pudl/workspace/datastore.py +++ b/src/pudl/workspace/datastore.py @@ -177,7 +177,7 @@ class ZenodoDoiSettings(BaseSettings): eia923: ZenodoDoi = "10.5281/zenodo.10067550" eia_bulk_elec: ZenodoDoi = "10.5281/zenodo.7067367" epacamd_eia: ZenodoDoi = "10.5281/zenodo.7900974" - epacems: ZenodoDoi = "10.5281/zenodo.8235497" + epacems: ZenodoDoi = "10.5281/zenodo.10306114" ferc1: ZenodoDoi = "10.5281/zenodo.8326634" ferc2: ZenodoDoi = "10.5281/zenodo.8326697" ferc6: ZenodoDoi = "10.5281/zenodo.8326696" @@ -194,7 +194,6 @@ class ZenodoFetcher: _descriptor_cache: dict[str, DatapackageDescriptor] zenodo_dois: ZenodoDoiSettings timeout: float - http: requests.Session def __init__( self: Self, zenodo_dois: ZenodoDoiSettings | None = None, timeout: float = 15.0 diff --git a/src/pudl/workspace/resource_cache.py b/src/pudl/workspace/resource_cache.py index 745345b507..0eb8e72019 100644 --- a/src/pudl/workspace/resource_cache.py +++ b/src/pudl/workspace/resource_cache.py @@ -102,6 +102,7 @@ def get(self, resource: PudlResourceKey) -> bytes: def add(self, resource: PudlResourceKey, content: bytes): """Adds (or updates) resource to the cache with given value.""" + logger.debug(f"Adding {resource} to {self._resource_path}") if self.is_read_only(): logger.debug(f"Read only cache: ignoring set({resource})") return @@ -154,6 +155,7 @@ def get(self, resource: PudlResourceKey) -> bytes: def add(self, resource: PudlResourceKey, value: bytes): """Adds (or updates) resource to the cache with given value.""" + logger.debug(f"Adding {resource} to {self._blob.__name__}") return self._blob(resource).upload_from_string(value) def delete(self, resource: PudlResourceKey): diff --git a/test/integration/epacems_test.py b/test/integration/epacems_test.py index 64c466e4d0..3e95c5a1be 100644 --- a/test/integration/epacems_test.py +++ b/test/integration/epacems_test.py @@ -1,85 +1,61 @@ """Tests for pudl/output/epacems.py loading functions.""" +from pathlib import Path + import dask.dataframe as dd +import pandas as pd import pytest +import sqlalchemy as sa from dagster import build_init_resource_context +from pydantic import ValidationError from pudl.extract.epacems import extract from pudl.io_managers import epacems_io_manager -from pudl.metadata.classes import Resource from pudl.output.epacems import epacems, year_state_filter +from pudl.settings import EpaCemsSettings, EtlSettings @pytest.fixture(scope="module") -def epacems_year_and_state(etl_settings): - """Find the year and state defined in pudl/package_data/settings/etl_*.yml.""" +def epacems_settings(etl_settings: EtlSettings) -> EpaCemsSettings: + """Find the year and quarter defined in pudl/package_data/settings/etl_*.yml.""" # the etl_settings data structure alternates dicts and lists so indexing is a pain. return etl_settings.datasets.epacems @pytest.fixture(scope="session") -def epacems_parquet_path( - pudl_engine, # implicit dependency; ensures .parquet files exist -): - """Get path to the directory of EPA CEMS .parquet data.""" +def epacems_parquet_path(pudl_engine: sa.Engine) -> Path: + """Get path to the directory of EPA CEMS .parquet data. + + Args: + pudl_engine: An implicit dependency that ensures the .parquet files exist. + """ context = build_init_resource_context() return epacems_io_manager(context)._base_path / "hourly_emissions_epacems.parquet" -def test_epacems_subset(epacems_year_and_state, epacems_parquet_path): - """Minimal integration test of epacems(). - - Check if it returns a DataFrame. - """ - if not epacems_year_and_state: +def test_epacems_subset(epacems_settings: EpaCemsSettings, epacems_parquet_path: Path): + """Check that epacems output retrieves a non-empty dataframe.""" + if not epacems_settings: pytest.skip("EPA CEMS not in settings file and so is not being tested.") path = epacems_parquet_path - years = epacems_year_and_state.years - # Use only Idaho if multiple states are given - states = ( - epacems_year_and_state.states - if len(epacems_year_and_state.states) == 1 - else ["ID"] - ) + years = [yq.year for yq in pd.to_datetime(epacems_settings.year_quarters)] + states = ["ID"] # Test on Idaho, one of the smallest states actual = epacems( - columns=["gross_load_mw"], epacems_path=path, years=years, states=states + columns=["year", "state", "gross_load_mw"], + epacems_path=path, + years=years, + states=states, ) - assert isinstance(actual, dd.DataFrame) # nosec: B101 - assert actual.shape[0].compute() > 0 # nosec: B101 n rows + assert isinstance(actual, dd.DataFrame) + assert "gross_load_mw" in actual.columns + assert "state" in actual.columns + assert "year" in actual.columns + assert actual.shape[0].compute() > 0 def test_epacems_missing_partition(pudl_datastore_fixture): - """Check that missing partitions return an empty data frame. - - Note that this should pass for both the Fast and Full ETL because the behavior - towards a missing file is identical.""" - df = extract(year=1996, state="UT", ds=pudl_datastore_fixture) - epacems_res = Resource.from_id("hourly_emissions_epacems") - expected_cols = list(epacems_res.get_field_names()) - assert df.shape[0] == 0 # Check that no rows of data are there - # Check that all columns expected of EPACEMS data are present. - assert sorted(df.columns) == sorted(expected_cols) - - -def test_epacems_subset_input_validation(epacems_year_and_state, epacems_parquet_path): - """Check if invalid inputs raise exceptions.""" - if not epacems_year_and_state: - pytest.skip("EPA CEMS not in settings file and so is not being tested.") - path = epacems_parquet_path - valid_year = epacems_year_and_state.years[-1] - valid_state = epacems_year_and_state.states[-1] - valid_column = "gross_load_mw" - - invalid_state = "confederacy" - invalid_year = 1775 - invalid_column = "clean_coal" - combos = [ - {"years": [valid_year], "states": [valid_state], "columns": [invalid_column]}, - {"years": [valid_year], "states": [invalid_state], "columns": [valid_column]}, - {"years": [invalid_year], "states": [valid_state], "columns": [valid_column]}, - ] - for combo in combos: - with pytest.raises(ValueError): - epacems(epacems_path=path, **combo) + """Check that trying to extract a non-working partition raises ValidationError""" + with pytest.raises(ValidationError): + _ = extract(year_quarter="1994Q4", ds=pudl_datastore_fixture) def test_epacems_parallel(pudl_engine, epacems_parquet_path): @@ -89,9 +65,19 @@ def test_epacems_parallel(pudl_engine, epacems_parquet_path): # monolithic outputs. df = dd.read_parquet( epacems_parquet_path, - filters=year_state_filter(years=[2020], states=["ME"]), + filters=year_state_filter(years=[2022], states=["ME"]), index=False, engine="pyarrow", split_row_groups=True, ).compute() - assert df.shape == (96_624, 16) # nosec: B101 + assert df.year.unique() == [2022] + assert df.state.unique() == ["ME"] + + +def test_missing_cems_partition(pudl_datastore_fixture): + """Test that the extract step returns an empty df. + + Note: This could be a unit test, but it interacts with zenodo which is sometimes + slow. It must retrive the datapacakge.json associated with the archive. + """ + assert extract("2051q4", ds=pudl_datastore_fixture).empty diff --git a/test/unit/helpers_test.py b/test/unit/helpers_test.py index 3ca5671b41..ddf6d32029 100644 --- a/test/unit/helpers_test.py +++ b/test/unit/helpers_test.py @@ -14,6 +14,7 @@ convert_df_to_excel_file, convert_to_date, date_merge, + diff_wide_tables, expand_timeseries, fix_eia_na, flatten_list, @@ -666,3 +667,68 @@ def test_convert_col_to_bool(df): .isin([False, np.nan]) .all() ) + + +def test_diff_wide_tables(): + # has 2020-2021 data for utils 1 and 2; fact 2 for utility 1 just never reported + old = pd.DataFrame.from_records( + [ + {"u_id": 1, "year": 2020, "fact1": "u1f1y20"}, + {"u_id": 1, "year": 2021, "fact1": "u1f1y21"}, + {"u_id": 2, "year": 2020, "fact1": "u2f1y20", "fact2": "u2f2y20"}, + {"u_id": 2, "year": 2021, "fact1": "u2f1y21", "fact2": "u2f2y21"}, + ] + ) + + # has 2020-2022 data for utils 1 and 2, but: + # - utility 1 is missing 2020 data for fact 1 and fact 2; otherwise, just missing fact 2 as usual + # - utility 2 has an updated value for 2021 fact 1 + new = pd.DataFrame.from_records( + [ + {"u_id": 1, "year": 2020}, + {"u_id": 1, "year": 2021, "fact1": "u1f1y21"}, + {"u_id": 1, "year": 2022, "fact1": "u1f1y22"}, + {"u_id": 2, "year": 2020, "fact1": "u2f1y20", "fact2": "u2f2y20"}, + {"u_id": 2, "year": 2021, "fact1": "u2f1y21_updated", "fact2": "u2f2y21"}, + {"u_id": 2, "year": 2022, "fact1": "u2f1y22", "fact2": "u2f2y22"}, + ] + ) + + empty_diff = diff_wide_tables(primary_key=["u_id", "year"], old=old, new=old) + assert empty_diff.added.empty + assert empty_diff.deleted.empty + assert empty_diff.changed.empty + + def assert_diff_equal(observed, expected): + observed_reshaped = observed.droplevel(level=0, axis="columns") + expected_reshaped = expected.set_index(observed_reshaped.index.names) + assert_frame_equal(observed_reshaped, expected_reshaped) + + diff_output = diff_wide_tables(primary_key=["u_id", "year"], old=old, new=new) + + expected_deleted = pd.DataFrame.from_records( + [{"u_id": 1, "year": 2020, "field": "fact1", "old": "u1f1y20", "new": None}] + ) + assert_diff_equal(diff_output.deleted, expected_deleted) + + expected_added = pd.DataFrame.from_records( + [ + {"u_id": 1, "year": 2022, "field": "fact1", "old": None, "new": "u1f1y22"}, + {"u_id": 2, "year": 2022, "field": "fact1", "old": None, "new": "u2f1y22"}, + {"u_id": 2, "year": 2022, "field": "fact2", "old": None, "new": "u2f2y22"}, + ] + ) + assert_diff_equal(diff_output.added, expected_added) + + expected_changed = pd.DataFrame.from_records( + [ + { + "u_id": 2, + "year": 2021, + "field": "fact1", + "old": "u2f1y21", + "new": "u2f1y21_updated", + } + ] + ) + assert_diff_equal(diff_output.changed, expected_changed) diff --git a/test/unit/settings_test.py b/test/unit/settings_test.py index c2034f7695..e858b9871d 100644 --- a/test/unit/settings_test.py +++ b/test/unit/settings_test.py @@ -91,34 +91,37 @@ def test_default_years(self: Self): class TestEpaCemsSettings: """Test EpaCems settings validation.""" - def test_not_working_state(self: Self): - """Make sure a validation error is being thrown when given an invalid state.""" + def test_not_working_quarter(self: Self): + """Make sure a validation error is being thrown when given an invalid quarter.""" with pytest.raises(ValidationError): - EpaCemsSettings(states=["fake_state"]) + EpaCemsSettings(year_quarters=["1990q4"]) - def test_duplicate_sort_states(self: Self): - """Test states are sorted and deduplicated.""" + def test_duplicate_quarters(self: Self): + """Test year_quarters are deduplicated.""" with pytest.raises(ValidationError): - _ = EpaCemsSettings(states=["CA", "CA", "AL"]) + _ = EpaCemsSettings(year_quarters=["1999q4", "1999q4"]) - def test_default_states(self: Self): - """Test all states are used as default.""" + def test_default_quarters(self: Self): + """Test all quarters are used as default.""" returned_settings = EpaCemsSettings() - expected_states = DataSource.from_id("epacems").working_partitions["states"] - assert expected_states == returned_settings.states + expected_year_quarters = DataSource.from_id("epacems").working_partitions[ + "year_quarters" + ] + assert expected_year_quarters == returned_settings.year_quarters - def test_all_states(self: Self): - """Test all states are used as default.""" - returned_settings = EpaCemsSettings(states=["all"]) + def test_all_year_quarters(self: Self): + """Test the `all` option for the cems settings.""" + epacems_settings_all = EpaCemsSettings(year_quarters=["all"]) + working_partitions_all = DataSource.from_id("epacems").working_partitions[ + "year_quarters" + ] + assert epacems_settings_all.year_quarters == working_partitions_all - expected_states = DataSource.from_id("epacems").working_partitions["states"] - assert expected_states == returned_settings.states - - def test_none_states_raise(self: Self): + def test_none_quarters_raise(self: Self): """Test that setting a required partition to None raises an error.""" with pytest.raises(ValidationError): - _ = EpaCemsSettings(states=None) + _ = EpaCemsSettings(quarters=None) class TestEIA860Settings: @@ -255,10 +258,10 @@ def test_invalid_field_type(self: Self): def test_default_values(self: Self): """Test the correct default values are created for dagster config.""" - expected_states = EpaCemsSettings().states + expected_year_quarters = EpaCemsSettings().year_quarters assert ( - dataset_settings.config_schema.default_value["epacems"]["states"] - == expected_states + dataset_settings.config_schema.default_value["epacems"]["year_quarters"] + == expected_year_quarters ) @@ -274,9 +277,9 @@ def test_partitions_with_json_normalize(pudl_etl_settings): ) cems_parts = json_normalize(datasets["epacems"].partitions) - if list(cems_parts.columns) != ["year", "state"]: + if list(cems_parts.columns) != ["year_quarters"]: raise AssertionError( - "CEMS paritions should have year and state columns only, found:" + "CEMS paritions should have year_quarters columns only, found:" f"{cems_parts}" ) diff --git a/test/unit/workspace/datastore_test.py b/test/unit/workspace/datastore_test.py index 4583c6aff1..45db296ae8 100644 --- a/test/unit/workspace/datastore_test.py +++ b/test/unit/workspace/datastore_test.py @@ -234,8 +234,11 @@ class TestZenodoFetcher(unittest.TestCase): }, ] } - PROD_EPACEMS_DOI = "10.5281/zenodo.8235497" - PROD_EPACEMS_ZEN_ID = 8235497 # This is the last numeric part of doi + PROD_EPACEMS_DOI = datastore.ZenodoDoiSettings().epacems + # last numeric part of doi + PROD_EPACEMS_ZEN_ID = re.search( + r"^10\.(5072|5281)/zenodo\.(\d+)$", PROD_EPACEMS_DOI + ).group(2) def setUp(self): """Constructs mockable Zenodo fetcher based on MOCK_EPACEMS_DATAPACKAGE."""