diff --git a/.github/ISSUE_TEMPLATE/new_dataset.md b/.github/ISSUE_TEMPLATE/new_dataset.md new file mode 100644 index 0000000000..f66566062c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_dataset.md @@ -0,0 +1,30 @@ +--- +name: New dataset +about: Provide information about a new dataset you'd like to see in PUDL +title: '' +labels: new-data +assignees: '' +--- + +### Overview + +What is this dataset? + +Why do you want it in PUDL? + +Is it already partially in PUDL, or do we need to start from scratch? + +### Logistics + +Is this dataset publically available? + +Where can one download the actual data? + +How often does this dataset get updated? + +What licensing restrictions apply? + +### What do you know about it so far? + +What have you done with this dataset so far? Have you run into any problems with +it yet? diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 325f1bcb8a..24e2d667aa 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,49 +1,25 @@ +# Overview -# PR Overview +Closes #XXXX. - +# Testing -# PR Checklist +How did you make sure this worked? How can a reviewer verify this? -- [ ] Merge the most recent version of the branch you are merging into (probably `dev`). -- [ ] All CI checks are passing. [Run tests locally to debug failures](https://catalystcoop-pudl.readthedocs.io/en/latest/dev/testing.html#running-tests-with-tox) -- [ ] Make sure you've included good docstrings. +```[tasklist] +# To-do list +- [ ] Make sure full ETL runs & `make pytest-integration-full` passes locally - [ ] For major data coverage & analysis changes, [run data validation tests](https://catalystcoop-pudl.readthedocs.io/en/latest/dev/testing.html#data-validation) -- [ ] Include unit tests for new functions and classes. -- [ ] Defensive data quality/sanity checks in analyses & data processing functions. -- [ ] Update the [release notes](https://catalystcoop-pudl.readthedocs.io/en/latest/release_notes.html) and reference reference the PR and related issues. -- [ ] Do your own explanatory review of the PR to help the reviewer understand what's going on and identify issues preemptively. +- [ ] If updating analyses or data processing functions: make sure to update or write data validation tests +- [ ] Update the [release notes](../docs/release_notes.rst): reference the PR and related issues. +- [ ] Review the PR yourself and call out any questions or issues you have +``` diff --git a/.github/workflows/build-deploy-pudl.yml b/.github/workflows/build-deploy-pudl.yml index 2ac1654be5..eec4318ecf 100644 --- a/.github/workflows/build-deploy-pudl.yml +++ b/.github/workflows/build-deploy-pudl.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: push: tags: - - "v**" + - "v20*" schedule: - cron: "0 6 * * 1-5" # Weekdays at midnight on MST @@ -139,4 +139,5 @@ jobs: channel-id: "C03FHB9N0PQ" slack-message: "build-deploy-pudl status: ${{ job.status }}\n${{ env.COMMIT_TIME}}-${{ env.SHORT_SHA }}-${{ env.COMMIT_BRANCH }}" env: + channel-id: "C03FHB9N0PQ" SLACK_BOT_TOKEN: ${{ secrets.PUDL_DEPLOY_SLACK_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..7a6385c14d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,123 @@ +--- +name: release + +on: push + +jobs: + build-distribution: + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v4 + with: + fetch-depth: 2 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.11" + - name: Build source and wheel distributions + run: | + python -m pip install --upgrade build twine + python -m build + twine check --strict dist/* + - name: Store the distribution packages + uses: actions/upload-artifact@v3 + with: + name: python-package-distributions + path: dist/ + + publish-test-pypi: + name: Upload release to PyPI Test Server + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v20') + needs: + - build-distribution + runs-on: ubuntu-latest + environment: + name: test-pypi + url: https://test.pypi.org/p/catalystcoop.pudl + permissions: + id-token: write + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution to PyPI Test Server + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + + publish-pypi: + name: Upload release to PyPI + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v20') + needs: + - build-distribution + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/catalystcoop.pudl + permissions: + id-token: write + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + publish-github: + name: Release package on GitHub + needs: + - publish-test-pypi + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Sign dist with Sigstore + uses: sigstore/gh-action-sigstore-python@v2.1.0 + with: + inputs: ./dist/*.tar.gz ./dist/*.whl + - name: Upload artifact signatures to GitHub Release + env: + GITHUB_TOKEN: ${{ github.token }} + run: >- + gh release create '${{ github.ref_name }}' ./dist/*.tar.gz ./dist/*.whl + --title 'PUDL ${{ github.ref_name }}' + --discussion-category Announcements + --generate-notes + --repo '${{ github.repository }}' + + notify-slack: + runs-on: ubuntu-latest + needs: + - publish-github + if: ${{ always() }} + steps: + - name: Inform the Codemonkeys + uses: 8398a7/action-slack@v3 + continue-on-error: true + with: + status: custom + fields: workflow,job,commit,repo,ref,author,took + custom_payload: | + { + username: 'action-slack', + icon_emoji: ':octocat:', + attachments: [{ + color: '${{ needs.publish-github.result }}' === 'success' ? 'good' : '${{ needs.publish-github.result }}' === 'failure' ? 'danger' : 'warning', + text: `${process.env.AS_REPO}@${process.env.AS_REF}\n ${process.env.AS_WORKFLOW} (${process.env.AS_COMMIT})\n by ${process.env.AS_AUTHOR}\n Status: ${{ needs.publish-github.result }}`, + }] + } + env: + GITHUB_TOKEN: ${{ github.token }} # required + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required + MATRIX_CONTEXT: ${{ toJson(matrix) }} # required diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 614d22aaea..3bc8081313 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -80,7 +80,7 @@ repos: verbose: false pass_filenames: false always_run: true - entry: pytest --doctest-modules src/pudl test/unit + entry: pytest --doctest-modules src/pudl test/unit -m "not slow" # Configuration for pre-commit.ci ci: diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 0000000000..fc5e40359a --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,100 @@ +------------------------- +Contributing Code to PUDL +------------------------- + +Welcome! We're so glad you're interested in contributing to PUDL! We would love +some help making PUDL data as complete as possible. + +.. _after-intro: + +.. IMPORTANT:: Already have a dataset in mind? + + If you **need data that's not in PUDL**, `open an issue + `__ + to tell us more about it! + + If you've **already written some code to wrangle a dataset**, find us at + `office hours `__ and we + can talk through next steps. + + +Your first contribution +----------------------- + +**Setup** + +You'll need to fork this repository and get the +`dev environment set up `__. + +**Pick an issue** + +* Look for issues with the `good first issue + `__ + tag in our `Community Kanban Board + `__. These + are issues that don't require a ton of PUDL-specific context, and are + relatively tightly scoped. + +* Comment on the issue and tag ``@catalyst-cooperative/com-dev`` (our Community + Development Team) to let us know you're working on it. Feel free to ask any + questions you might have! + +* Once you have an idea of how you want to tackle this issue, write out your + plan so we can guide you around obstacles in your way! Post a comment outlining: + * what steps have you broken this down into? + * what is the output of each step? + * how will one know that each step is working? + +* Once you've talked through your plan with someone from Catalyst, go forth and + develop! + +**Work on it!** + +* Make a branch on your fork and open a draft pull request (PR) early so we can + discuss concrete code! **Set the base branch to ``dev`` unless there's a good + reason otherwise.** Please don't wait until it's all polished up - it's much + easier for us to help you when we can see the code evolve over time. + +* Please make sure to write tests and documentation for your code - if you run + into trouble with writing tests, let us know in the comments and we can help! + We automatically run the test suite for all PRs, but some of those will have + to be manually approved by Catalyst members for safety reasons. + +* **Try to keep your changes relatively small:** stuff happens, and one's + bandwidth for volunteer work can fluctuate frequently. If you make a bunch of + small changes, it's much easier to pause on a project without losing a ton of + context. We try to keep PRs to **less than 500 lines of code.** + +**Get it merged in!** + +* Turn the draft PR into a normal PR and tag ``@catalyst-cooperative/com-dev`` + in a comment. We'll try to get back to you within a few days - the + smaller/simpler the PR, the faster we'll be able to get back to you. + +* The reviewer will leave comments - if they request changes, address their + concerns and re-request review. + +* There will probably be some back-and-forth until your PR is approved - this + is normal and a sign of good communication on your part! Don't be shy about + asking us for updates and re-requesting review! + +* Don't accidentally "start a review" when responding to comments! If this does + happen, don't forget to submit the review you've started so the other PR + participants can see your comments (they are invisible to others if marked + "Pending"). + +Next contributions +------------------ + +Hooray! You made your first contribution! To find another issue to tackle, check +out the `Community Kanban board +`__ where +we've picked out some issues that are + +* useful to work on + +* unlikely to become super time-sensitive + +* have some context, success criteria, and next steps information. + +Pick one of these and follow the contribution flow above! diff --git a/docs/CONTRIBUTING.rst b/docs/CONTRIBUTING.rst index 9e5bffc4c3..0581d1cbe2 100644 --- a/docs/CONTRIBUTING.rst +++ b/docs/CONTRIBUTING.rst @@ -2,111 +2,79 @@ Contributing to PUDL =============================================================================== + Welcome! We're excited that you're interested in contributing to the Public Utility -Data Liberation effort! The work is currently being coordinated by the members of the -`Catalyst Cooperative `__. PUDL is meant to serve a wide -variety of public interests including academic research, climate advocacy, data -journalism, and public policy making. This open source project has been supported by -a combination of volunteer contributions, grant funding from the `Alfred P. Sloan -Foundation `__, and reinvestment of net income from the -cooperative's client projects. +Data Liberation effort! + +We need lots of help with :ref:`user-feedback`, we welcome :ref:`code-contribs`, and +it would be great to :ref:`connect-orgs` that we can work with. + +Finally, `financial donations +`__ +are welcome too! + +--------------- +Code of Conduct +--------------- Please make sure you review our :doc:`code of conduct `, which is based on the `Contributor Covenant `__. We want to make the PUDL project welcoming to contributors with different levels of experience and diverse personal backgrounds. -------------------------------------------------------------------------------- -How to Get Involved -------------------------------------------------------------------------------- +.. _user-feedback: + +------------- +User feedback +------------- -We welcome just about any kind of contribution to the project. Alone, we'll never be -able to understand every use case or integrate all the available data. The project -will serve the community better if other folks get involved. +PUDL's goal is to help people use data to make change in the US energy landscape. +As such, it's critical that we understand our users' needs! `GitHub Discussions +`__ is our main forum +for all this. Since it's publicly readable, any conversation here can +potentially benefit other users too! -There are lots of ways to contribute -- it's not all about code! +We'd love it if you could: -* If you need help, someone else might need it too - ask for help in `Github - Discussions +* Tell us what problems you're running into, in the `Help Me! `__ - and maybe the ensuing discussion will be useful to other people too! -* `Suggest new data and features `__ that would be useful. + discussion board +* Tell us about what data you're looking for by opening an `issue + `__ +* Tell us what you're trying to do with PUDL data in `this thread + `__ * `File bug reports `__ on Github. -* Help expand and improve the documentation, or create new - `example notebooks `__ -* Help us create more and better software :doc:`test cases `. -* Give us feedback on overall usability using `GitHub Discussions +* Tell us what you'd like to see in PUDL in the `Ideas `__ - -- what's confusing? -* Tell us a story about how you're using of the data. -* Point us at interesting publications related to open energy data, open source energy - system modeling, how energy policy can be affected by better data, or open source - tools we should check out. -* Cite PUDL using - `DOIs from Zenodo `__ - if you use the software or data in your own published work. + discussion board + +.. _code-contribs: + +-------------------- +Code contributions +-------------------- + +.. include:: ../CONTRIBUTING.rst + :start-after: after-intro: + +.. _connect-orgs: + +----------------------------------- +Connect us with other organizations +----------------------------------- + +For PUDL to make a bigger impact, we need to find more people who need the data. +Here's how you can help: + +* Cite PUDL using `DOIs from Zenodo + `__ if you use the + software or data in your own published work. * Point us toward appropriate grant funding opportunities and meetings where we might present our work. +* Point us at interesting publications related to open energy data, open source + energy system modeling, how energy policy can be affected by better data, or + open source tools we should check out. * Share your Jupyter notebooks and other analyses that use PUDL. * `Hire Catalyst `__ to do analysis for your organization using the PUDL data -- contract work helps us self-fund ongoing open source development. -* Contribute code via - `pull requests `__. - See the :doc:`developer setup ` for more details. -* And of course... we also appreciate - `financial contributions `__. - -.. seealso:: - - * :doc:`dev/dev_setup` for instructions on how to set up the PUDL - development environment. - -------------------------------------------------------------------------------- -Find us on GitHub -------------------------------------------------------------------------------- -Github is the primary platform we use to manage the project, integrate -contributions, write and publish documentation, answer user questions, automate -testing & deployment, etc. -`Signing up for a GitHub account `__ -(even if you don't intend to write code) will allow you to participate in -online discussions and track projects that you're interested in. - -Asking (and answering) questions is a valuable contribution! As noted in `How to -support open-source software and stay sane -`__, it's much more efficient to -ask and answer questions in a public forum because then other users and contributors -who are having the same problem can find answers without having to re-ask the same -question. The forum we're using is our `Github discussions -`__. - -Even if you feel like you have a basic question, we want you to feel -comfortable asking for help in public -- we (Catalyst) only recently came to -this data work from being activists and policy wonks -- so it's easy for us to -remember when it all seemed frustrating and alien! Sometimes it still does. We -want people to use the software and data to do good things in the world. We -want you to be able to access it. Using a public forum also enables the -community of users to help each other! - -Don't hesitate to post a discussion with a `feature request -`__, -a pointer to energy data that needs liberating, or a reference to documentation -that's out of date, unclear, or missing. Understanding how people are using the -software, and how they would *like* to be using the software, is very valuable and -will help us make it more useful and usable. - -------------------------------------------------------------------------------- -Our design process -------------------------------------------------------------------------------- - -We do our technical design out in the open, so that community members can weigh -in. Here's the process we usually follow: - -1. Someone has a problem they'd like to solve. They post in the `Ideas - `__ - forum with their problem and some context. - -2. Discussion ensues. - -3. When the open questions are answered, we create an issue from the discussion, - which holds the conclusions of the discussion. diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 8f7bf31f89..4ce9392005 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -3,7 +3,23 @@ PUDL Release Notes ======================================================================================= --------------------------------------------------------------------------------------- -v2023.XX.XX +v2023.12.XX +--------------------------------------------------------------------------------------- +* The ``epacems_to_parquet`` and ``state_demand`` scripts have been retired in favor of + using the Dagster UI. See :issue:`3107` and :pr:`3086`. Visualizations of hourly + state-level electricity demand have been moved into our example notebooks which can + be found both `on Kaggle `__ + and `on GitHub `__ +* The ``pudl_setup`` script has been retired. All input/output locations are now set + using the ``$PUDL_INPUT`` and ``$PUDL_OUTPUT`` environment variables. See + :issue:`3107` and :pr:`3086`. +* The :func:`pudl.analysis.service_territory.pudl_service_territories` script has been + fixed, and can be used to generate `GeoParquet `__ + outputs describing historical utility and balancing authority service territories. See + :issue:`1174` and :pr:`3086`. + +--------------------------------------------------------------------------------------- +v2023.12.01 --------------------------------------------------------------------------------------- Dagster Adoption @@ -207,7 +223,6 @@ Data Coverage centralized service companies. `FERC Form 60 will also be available on Datasette `__. - Data Cleaning ^^^^^^^^^^^^^ @@ -274,10 +289,6 @@ Analysis :ref:`compiled_geometry_utility_eia861`), and the estimated total hourly electricity demand for each US state in :ref:`predicted_state_hourly_demand`. See :issue:`1973` and :pr:`2550`. -* The :func:`pudl.analysis.service_territory.pudl_service_territories` script has been - fixed, and can be used to generate `GeoParquet `__ - outputs describing historical utility and balancing authority service territories. See - :issue:`1174` and :pr:`3086`. Deprecations ^^^^^^^^^^^^ @@ -317,14 +328,6 @@ Deprecations :mod:`pudl.settings` no longer have table attributes because the ETL no longer supports loading specific tables via settings. Use dagster to select subsets of tables to process. -* The ``epacems_to_parquet`` and ``state_demand`` scripts have been retired in favor of - using the Dagster UI. See :issue:`3107` and :pr:`3086`. Visualizations of hourly - state-level electricity demand have been moved into our example notebooks which can - be found both `on Kaggle `__ - and `on GitHub `__ -* The ``pudl_setup`` script has been retired. All input/output locations are now set - using the ``$PUDL_INPUT`` and ``$PUDL_OUTPUT`` environment variables. See - :issue:`3107` and :pr:`3086`. Miscellaneous ^^^^^^^^^^^^^ diff --git a/environments/conda-linux-64.lock.yml b/environments/conda-linux-64.lock.yml index 6024660317..b3a384bb41 100644 --- a/environments/conda-linux-64.lock.yml +++ b/environments/conda-linux-64.lock.yml @@ -62,7 +62,7 @@ dependencies: - lzo=2.10=h516909a_1000 - ncurses=6.4=h59595ed_2 - nspr=4.35=h27087fc_0 - - openssl=3.2.0=hd590300_1 + - openssl=3.1.4=hd590300_0 - pixman=0.42.2=h59595ed_0 - pthread-stubs=0.4=h36c2ea0_1001 - rdma-core=49.0=hd3aeb46_1 @@ -117,7 +117,7 @@ dependencies: - freetype=2.12.1=h267a509_2 - krb5=1.21.2=h659d440_0 - libarchive=3.7.2=h039dbb9_0 - - libglib=2.78.1=h783c2da_1 + - libglib=2.78.3=h783c2da_0 - libllvm15=15.0.7=h5cf9203_3 - libopenblas=0.3.25=pthreads_h413a1c8_0 - libthrift=0.19.0=hb90f79a_1 @@ -168,7 +168,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - distlib=0.3.7=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - - docutils=0.20.1=py311h38be061_2 + - docutils=0.20.1=py311h38be061_3 - entrypoints=0.4=pyhd8ed1ab_0 - et_xmlfile=1.1.0=pyhd8ed1ab_0 - exceptiongroup=1.2.0=pyhd8ed1ab_0 @@ -178,9 +178,9 @@ dependencies: - fontconfig=2.14.2=h14ed4e7_0 - freexl=2.0.0=h743c826_0 - frozenlist=1.4.0=py311h459d7ec_1 - - fsspec=2023.12.0=pyhca7485f_0 + - fsspec=2023.12.1=pyhca7485f_0 - gdk-pixbuf=2.42.10=h829c605_4 - - google-cloud-sdk=455.0.0=py311h38be061_0 + - google-cloud-sdk=456.0.0=py311h38be061_0 - greenlet=3.0.1=py311hb755f60_0 - gts=0.7.6=h977cf35_4 - hpack=4.0.0=pyh9f0ad1d_0 @@ -204,11 +204,11 @@ dependencies: - libblas=3.9.0=20_linux64_openblas - libcurl=8.4.0=hca28451_0 - libgrpc=1.59.2=hd6c4280_0 - - libpq=16.1=hfc447b1_2 + - libpq=16.1=hfc447b1_0 - libwebp=1.3.2=h658648e_1 - llvmlite=0.41.1=py311ha6695c7_0 - locket=1.0.0=pyhd8ed1ab_0 - - lxml=4.9.3=py311h1a07684_1 + - lxml=4.9.3=py311h1a07684_2 - marko=2.0.2=pyhd8ed1ab_0 - markupsafe=2.1.3=py311h459d7ec_1 - mdurl=0.1.0=pyhd8ed1ab_0 @@ -218,7 +218,6 @@ dependencies: - msgpack-python=1.0.7=py311h9547e67_0 - multidict=6.0.4=py311h459d7ec_1 - multimethod=1.9.1=pyhd8ed1ab_0 - - munch=4.0.0=pyhd8ed1ab_0 - munkres=1.1.4=pyh9f0ad1d_0 - mypy_extensions=1.0.0=pyha770c72_0 - nest-asyncio=1.5.8=pyhd8ed1ab_0 @@ -322,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.1=hbdc6101_0 + - cfitsio=4.3.0=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 @@ -368,7 +367,7 @@ dependencies: - pillow=10.1.0=py311ha6c5da5_0 - pint=0.22=pyhd8ed1ab_1 - pip=23.3.1=pyhd8ed1ab_0 - - postgresql=16.1=h8972f4a_2 + - postgresql=16.1=h8972f4a_0 - proj=9.3.0=h1d62c97_2 - prompt-toolkit=3.0.41=pyha770c72_0 - protobuf=4.24.4=py311h46cbc50_0 @@ -380,7 +379,7 @@ dependencies: - python-slugify=8.0.1=pyhd8ed1ab_2 - pyu2f=0.1.5=pyhd8ed1ab_0 - qtpy=2.4.1=pyhd8ed1ab_0 - - referencing=0.31.1=pyhd8ed1ab_0 + - referencing=0.32.0=pyhd8ed1ab_0 - restructuredtext_lint=1.4.0=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_0 - rsa=4.9=pyhd8ed1ab_0 @@ -403,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.7=pyhd8ed1ab_0 + - botocore=1.33.9=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311hcb13ee4_1 @@ -411,7 +410,7 @@ dependencies: - geotiff=1.7.1=hf074850_14 - gitpython=3.1.40=pyhd8ed1ab_0 - google-crc32c=1.1.2=py311h9b08b9c_5 - - googleapis-common-protos=1.61.0=pyhd8ed1ab_0 + - googleapis-common-protos=1.62.0=pyhd8ed1ab_0 - gql=3.4.1=pyhd8ed1ab_0 - graphql-relay=3.2.0=pyhd8ed1ab_0 - grpcio-health-checking=1.59.2=pyhd8ed1ab_0 @@ -427,7 +426,7 @@ dependencies: - numpy=1.26.2=py311h64a7726_0 - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311h459d7ec_6 - - poppler=23.12.0=h590f24d_0 + - poppler=23.11.0=h590f24d_0 - prompt_toolkit=3.0.41=hd8ed1ab_0 - psycopg2-binary=2.9.9=pyhd8ed1ab_0 - pybtex=0.24.0=pyhd8ed1ab_2 @@ -464,12 +463,12 @@ dependencies: - grpcio-status=1.59.2=pyhd8ed1ab_0 - h3-py=3.7.6=py311hb755f60_1 - httpx=0.25.2=pyhd8ed1ab_0 - - identify=2.5.32=pyhd8ed1ab_0 - - ipython=8.18.1=pyh31011fe_2 + - identify=2.5.33=pyhd8ed1ab_0 + - ipython=8.18.1=pyh707e725_3 - isoduration=20.11.0=pyhd8ed1ab_0 - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - - libgdal=3.8.1=hcae7082_1 + - libgdal=3.8.0=he7dcfe9_6 - numba=0.58.1=py311h96b013e_0 - numexpr=2.8.7=py311h039bad6_104 - oauthlib=3.2.2=pyhd8ed1ab_0 @@ -490,16 +489,16 @@ 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.6=pyhd8ed1ab_0 + - boto3=1.33.9=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - dagster=1.5.10=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.1=py311h815a124_1 + - gdal=3.8.0=py311h815a124_6 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.24.0=pyhca7485f_0 + - google-auth=2.25.1=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - gtk2=2.24.33=h90689f9_2 - ipykernel=6.26.0=pyhf8b6a83_0 @@ -513,14 +512,14 @@ dependencies: - pre-commit=3.5.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - - scikit-learn=1.3.2=py311hc009520_1 + - 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 - - fiona=1.9.5=py311hf8e0aa6_1 - - google-api-core=2.14.0=pyhd8ed1ab_0 + - fiona=1.9.5=py311hf8e0aa6_2 + - google-api-core=2.15.0=pyhd8ed1ab_0 - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 - graphviz=9.0.0=h78e8752_1 - jupyter_console=6.6.3=pyhd8ed1ab_0 @@ -533,7 +532,7 @@ dependencies: - tabulator=1.53.5=pyhd8ed1ab_0 - dagster-webserver=1.5.10=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - - google-cloud-core=2.3.3=pyhd8ed1ab_0 + - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-acero=14.0.1=h59595ed_3_cpu - libarrow-flight=14.0.1=h120cb0d_3_cpu - libarrow-gandiva=14.0.1=hacb8726_3_cpu @@ -543,11 +542,11 @@ dependencies: - tableschema=1.19.3=pyh9f0ad1d_0 - datapackage=1.15.2=pyh44b312d_0 - google-cloud-storage=2.13.0=pyhca7485f_0 - - jupyter_server=2.11.2=pyhd8ed1ab_0 + - jupyter_server=2.12.1=pyhd8ed1ab_0 - libarrow-dataset=14.0.1=h59595ed_3_cpu - libarrow-flight-sql=14.0.1=h61ff412_3_cpu - nbconvert-pandoc=7.12.0=pyhd8ed1ab_0 - - gcsfs=2023.12.0=pyhd8ed1ab_0 + - gcsfs=2023.12.1=pyhd8ed1ab_0 - jupyter-lsp=2.2.1=pyhd8ed1ab_0 - jupyter-resource-usage=1.0.1=pyhd8ed1ab_0 - jupyterlab_server=2.25.2=pyhd8ed1ab_0 diff --git a/environments/conda-lock.yml b/environments/conda-lock.yml index 6124d63cd0..485dd1c1da 100644 --- a/environments/conda-lock.yml +++ b/environments/conda-lock.yml @@ -1914,52 +1914,52 @@ package: category: main optional: false - name: boto3 - version: 1.33.6 + version: 1.33.9 manager: conda platform: linux-64 dependencies: - botocore: ">=1.33.6,<1.34.0" + botocore: ">=1.33.9,<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.6-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.9-pyhd8ed1ab_0.conda hash: - md5: fff8f43d8786f4e2a0ab4ed431f8c511 - sha256: 7fad398c6730cb751de3495b8204a7cd133aeecdd684273bc3359f31e1c01eca + md5: 0bc87faa4f6ff6321c4cef9b57e82041 + sha256: 685c90c40889cabc9bd03e67bd066546d019ba13667814d6b78352afe5dd751f category: main optional: false - name: boto3 - version: 1.33.6 + version: 1.33.9 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.6,<1.34.0" - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.6-pyhd8ed1ab_0.conda + botocore: ">=1.33.9,<1.34.0" + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.9-pyhd8ed1ab_0.conda hash: - md5: fff8f43d8786f4e2a0ab4ed431f8c511 - sha256: 7fad398c6730cb751de3495b8204a7cd133aeecdd684273bc3359f31e1c01eca + md5: 0bc87faa4f6ff6321c4cef9b57e82041 + sha256: 685c90c40889cabc9bd03e67bd066546d019ba13667814d6b78352afe5dd751f category: main optional: false - name: boto3 - version: 1.33.6 + version: 1.33.9 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.6,<1.34.0" - url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.6-pyhd8ed1ab_0.conda + botocore: ">=1.33.9,<1.34.0" + url: https://conda.anaconda.org/conda-forge/noarch/boto3-1.33.9-pyhd8ed1ab_0.conda hash: - md5: fff8f43d8786f4e2a0ab4ed431f8c511 - sha256: 7fad398c6730cb751de3495b8204a7cd133aeecdd684273bc3359f31e1c01eca + md5: 0bc87faa4f6ff6321c4cef9b57e82041 + sha256: 685c90c40889cabc9bd03e67bd066546d019ba13667814d6b78352afe5dd751f category: main optional: false - name: botocore - version: 1.33.7 + version: 1.33.9 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.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.9-pyhd8ed1ab_0.conda hash: - md5: a37114efb8799b3c885bb845ffe40b85 - sha256: 6fc3a3d9212db34e20a7496f8737b4c3e506caf37c1b0afa0a3dabb3c450109f + md5: 66b5f9da695d491e2df00c0045f073a3 + sha256: 7658e63b78ae37bb7e2047232a7f6d0d851e3a57231beeb32ea21a2da002e26b category: main optional: false - name: botocore - version: 1.33.7 + version: 1.33.9 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.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.9-pyhd8ed1ab_0.conda hash: - md5: a37114efb8799b3c885bb845ffe40b85 - sha256: 6fc3a3d9212db34e20a7496f8737b4c3e506caf37c1b0afa0a3dabb3c450109f + md5: 66b5f9da695d491e2df00c0045f073a3 + sha256: 7658e63b78ae37bb7e2047232a7f6d0d851e3a57231beeb32ea21a2da002e26b category: main optional: false - name: botocore - version: 1.33.7 + version: 1.33.9 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.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.9-pyhd8ed1ab_0.conda hash: - md5: a37114efb8799b3c885bb845ffe40b85 - sha256: 6fc3a3d9212db34e20a7496f8737b4c3e506caf37c1b0afa0a3dabb3c450109f + md5: 66b5f9da695d491e2df00c0045f073a3 + sha256: 7658e63b78ae37bb7e2047232a7f6d0d851e3a57231beeb32ea21a2da002e26b category: main optional: false - name: bottleneck @@ -2873,52 +2873,52 @@ package: category: main optional: false - name: cfitsio - version: 4.3.1 + version: 4.3.0 manager: conda platform: linux-64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.2.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.1-hbdc6101_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda hash: - md5: dcea02841b33a9c49f74ca9328de919a - sha256: b91003bff71351a0132c84d69fbb5afcfa90e57d83f76a180c6a5a0289099fb1 + md5: 797554b8b7603011e8677884381fbcc5 + sha256: c74938f1ade9b8f37b9fa8cc98a5b9262b325506f41d7492ad1d00146e0f1d08 category: main optional: false - name: cfitsio - version: 4.3.1 + version: 4.3.0 manager: conda platform: osx-64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.2.0,<9.0a0" libgfortran: 5.* - libgfortran5: ">=13.2.0" + libgfortran5: ">=12.2.0" libzlib: ">=1.2.13,<1.3.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.3.1-h60fb419_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/cfitsio-4.3.0-h66f91ea_0.conda hash: - md5: 03ab895afe3804b527c12193a9612cac - sha256: 5bd157478529ff4d05b8e8654de0580609177252eb11ecf5201b831effeeb2ec + md5: f540472ad8a8ea2b39a4c6ca14ebc1b5 + sha256: 0246d80ce305609c7e810514d1aa578ef498a1f05fd2dba5fa46ea845e4e57b9 category: main optional: false - name: cfitsio - version: 4.3.1 + version: 4.3.0 manager: conda platform: osx-arm64 dependencies: bzip2: ">=1.0.8,<2.0a0" - libcurl: ">=8.4.0,<9.0a0" + libcurl: ">=8.2.0,<9.0a0" libgfortran: 5.* - libgfortran5: ">=13.2.0" + libgfortran5: ">=12.3.0" libzlib: ">=1.2.13,<1.3.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.3.1-h808cd33_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.3.0-hca87796_0.conda hash: - md5: 22b61b2ad129db82da2eee76710f7551 - sha256: 9395bd24ef552ac6063e2d6a6fc57e5c7067a74b8d8ee3f06d8389baffacf016 + md5: a5a1019a6405052124e97999a5204a74 + sha256: 5d03f8d484d29f8d3bdd64afe22ed29d75c639834b40382f8a520f96a7af27c4 category: main optional: false - name: chardet @@ -4647,10 +4647,10 @@ package: dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_3.conda hash: - md5: 33f8066e53679dd4be2355fec849bf01 - sha256: 4e90bbc89f9ab192cb247d8b8ebe54c33e57652f8a057f9f176d9d9dd32993b9 + md5: 1c33f55e5cdcc2a2b973c432b5225bfe + sha256: 0011a2193a5995a6706936156ea5d1021153ec11eb8869b6abfe15a8f6f22ea8 category: main optional: false - name: docutils @@ -4660,10 +4660,10 @@ package: dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.20.1-py311h6eed73b_2.conda + url: https://conda.anaconda.org/conda-forge/osx-64/docutils-0.20.1-py311h6eed73b_3.conda hash: - md5: d56b49f1a2c908d05d1ca6b3f85d0fd5 - sha256: 869e919066b308794e399bc551fc508c175da5f9324b7a324eb259cef8adabf2 + md5: 2919376c4957faadc7b96f8894759bfb + sha256: 0fae62e203900a8a013ba2ede852645b87b1568980ddd8e11390c11dc24c3e3c category: main optional: false - name: docutils @@ -4673,10 +4673,10 @@ package: dependencies: python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/docutils-0.20.1-py311h267d04e_2.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/docutils-0.20.1-py311h267d04e_3.conda hash: - md5: e82ee6e9db96d5f7ddf289399744240d - sha256: 3bc810b946ef8f87681ea4bee2610e8c418f9f61772f5d1ff3ffa803ae7cfbb6 + md5: 29944e93a6f38b2e0fd4f6b743558959 + sha256: 21af625c067faa77cd3aa2bfd8ca2449cdacdb1b531da8b4cbb476f4a928fdd9 category: main optional: false - name: email-validator @@ -5027,26 +5027,24 @@ package: manager: conda platform: linux-64 dependencies: - attrs: ">=17" - click: ">=4.0" + attrs: ">=19.2.0" + click: ">=8.0,<9.dev0" click-plugins: ">=1.0" cligj: ">=0.5" gdal: "" - importlib-metadata: "" libgcc-ng: ">=12" libgdal: ">=3.8.0,<3.9.0a0" libstdcxx-ng: ">=12" - munch: "" numpy: ">=1.23.5,<2.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* setuptools: "" shapely: "" - six: ">=1.7" - url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_1.conda + six: "" + url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_2.conda hash: - md5: 961758d24e419de785e99b038033f9ae - sha256: 5579deb516af98c167e11b0f9250ce53e1780eade803b03ad9507fb41b295a5c + md5: 01464abc0630e2285a799a2fa8370a8e + sha256: b01852ee1d8b23276bc69829c3013cbc1fe2004917cf5c5855fe2a22674112d7 category: main optional: false - name: fiona @@ -5055,25 +5053,23 @@ package: platform: osx-64 dependencies: __osx: ">=10.9" - attrs: ">=17" - click: ">=4.0" + attrs: ">=19.2.0" + click: ">=8.0,<9.dev0" click-plugins: ">=1.0" cligj: ">=0.5" gdal: "" - importlib-metadata: "" libcxx: ">=16.0.6" libgdal: ">=3.8.0,<3.9.0a0" - munch: "" numpy: ">=1.23.5,<2.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* setuptools: "" shapely: "" - six: ">=1.7" - url: https://conda.anaconda.org/conda-forge/osx-64/fiona-1.9.5-py311h809632c_1.conda + six: "" + url: https://conda.anaconda.org/conda-forge/osx-64/fiona-1.9.5-py311h809632c_2.conda hash: - md5: fa38d43ecb08f4db5107fc6390949414 - sha256: 80cfa5135122c959a7ec656c7c1c1fcc60398669029d86fac1cb9a3d3c5cacc1 + md5: cbe710fd5d800f110896f829c3e73a73 + sha256: a6d7c1d5770ad0ebfb8e4642be9837f923853bc18be1dbf94c92ca36bd814e68 category: main optional: false - name: fiona @@ -5082,25 +5078,23 @@ package: platform: osx-arm64 dependencies: __osx: ">=10.9" - attrs: ">=17" - click: ">=4.0" + attrs: ">=19.2.0" + click: ">=8.0,<9.dev0" click-plugins: ">=1.0" cligj: ">=0.5" gdal: "" - importlib-metadata: "" libcxx: ">=16.0.6" libgdal: ">=3.8.0,<3.9.0a0" - munch: "" numpy: ">=1.23.5,<2.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* setuptools: "" shapely: "" - six: ">=1.7" - url: https://conda.anaconda.org/conda-forge/osx-arm64/fiona-1.9.5-py311h4760b73_1.conda + six: "" + url: https://conda.anaconda.org/conda-forge/osx-arm64/fiona-1.9.5-py311h4760b73_2.conda hash: - md5: 0232bf494596b3d10e1cf21fbcbc8615 - sha256: 9d0ad417f817677f113608aacdbac93fad06bf2a149233d299a6ada5c56c6600 + md5: 39ce132c143b433122e08c00f59c5a04 + sha256: 3c2fe9936438ca53e0720c00c384f34263b22c63f5d890bc7b4a8b0f01657b84 category: main optional: false - name: folium @@ -5738,39 +5732,39 @@ package: category: main optional: false - name: fsspec - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: linux-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.1-pyhca7485f_0.conda hash: - md5: 036539452871d3b0906ff194ad808c9b - sha256: 72c84d372aa5d60eb31c53c108bacefb0c6fb854047441b543738e144f1fae65 + md5: b38946846cdf39f9bce93f75f571d913 + sha256: 929e63a5916a8ebc50199d5404fdcedf75261580d8e229d9a1def57a05ef39eb category: main optional: false - name: fsspec - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: osx-64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.1-pyhca7485f_0.conda hash: - md5: 036539452871d3b0906ff194ad808c9b - sha256: 72c84d372aa5d60eb31c53c108bacefb0c6fb854047441b543738e144f1fae65 + md5: b38946846cdf39f9bce93f75f571d913 + sha256: 929e63a5916a8ebc50199d5404fdcedf75261580d8e229d9a1def57a05ef39eb category: main optional: false - name: fsspec - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: osx-arm64 dependencies: python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.1-pyhca7485f_0.conda hash: - md5: 036539452871d3b0906ff194ad808c9b - sha256: 72c84d372aa5d60eb31c53c108bacefb0c6fb854047441b543738e144f1fae65 + md5: b38946846cdf39f9bce93f75f571d913 + sha256: 929e63a5916a8ebc50199d5404fdcedf75261580d8e229d9a1def57a05ef39eb category: main optional: false - name: furo @@ -5822,26 +5816,26 @@ package: category: main optional: false - name: gcsfs - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: linux-64 dependencies: aiohttp: "" decorator: ">4.1.2" - fsspec: 2023.12.0 + fsspec: 2023.12.1 google-auth: ">=1.2" google-auth-oauthlib: "" google-cloud-storage: ">1.40" python: ">=3.7" requests: "" - url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.1-pyhd8ed1ab_0.conda hash: - md5: ad178e852250983982f3e2247635029d - sha256: 39dfbcb02360069206835f395cc0f169ead32005ff0c941a73526cdcfc18cd4b + md5: 2f48942fbcd4c2ef56af0fbf3cc56fb0 + sha256: b5e02b08137b4e90d97f4f2d5ff3e06d7076cdba6873061ca2b346576923b093 category: main optional: false - name: gcsfs - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: osx-64 dependencies: @@ -5852,15 +5846,15 @@ package: google-auth: ">=1.2" decorator: ">4.1.2" google-cloud-storage: ">1.40" - fsspec: 2023.12.0 - url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.0-pyhd8ed1ab_0.conda + fsspec: 2023.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.1-pyhd8ed1ab_0.conda hash: - md5: ad178e852250983982f3e2247635029d - sha256: 39dfbcb02360069206835f395cc0f169ead32005ff0c941a73526cdcfc18cd4b + md5: 2f48942fbcd4c2ef56af0fbf3cc56fb0 + sha256: b5e02b08137b4e90d97f4f2d5ff3e06d7076cdba6873061ca2b346576923b093 category: main optional: false - name: gcsfs - version: 2023.12.0 + version: 2023.12.1 manager: conda platform: osx-arm64 dependencies: @@ -5871,71 +5865,71 @@ package: google-auth: ">=1.2" decorator: ">4.1.2" google-cloud-storage: ">1.40" - fsspec: 2023.12.0 - url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.0-pyhd8ed1ab_0.conda + fsspec: 2023.12.1 + url: https://conda.anaconda.org/conda-forge/noarch/gcsfs-2023.12.1-pyhd8ed1ab_0.conda hash: - md5: ad178e852250983982f3e2247635029d - sha256: 39dfbcb02360069206835f395cc0f169ead32005ff0c941a73526cdcfc18cd4b + md5: 2f48942fbcd4c2ef56af0fbf3cc56fb0 + sha256: b5e02b08137b4e90d97f4f2d5ff3e06d7076cdba6873061ca2b346576923b093 category: main optional: false - name: gdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: linux-64 dependencies: - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libgcc-ng: ">=12" - libgdal: 3.8.1 + libgdal: 3.8.0 libstdcxx-ng: ">=12" libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py311h815a124_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.0-py311h815a124_6.conda hash: - md5: 6e9577466e5f1d18bd659746a5d948b7 - sha256: 6f1de976174089589b1ff7a6dd0d627f107f051a15cb046cb4703c0fc18480e3 + md5: a20379b7539caea4fd3ba6628d862138 + sha256: 7aab0e96f76d15a35b78704d13523f234a47cd8c653d8085c1219a8d7d45ef22 category: main optional: false - name: gdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: osx-64 dependencies: __osx: ">=10.9" - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libcxx: ">=16.0.6" - libgdal: 3.8.1 + libgdal: 3.8.0 libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.8.1-py311h5646c56_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.8.0-py311h5646c56_6.conda hash: - md5: 040c7cfdae3033444b9f193f9ac7dda2 - sha256: dc12757089d571dc33a5be6428bb50374fcfe2839230d8bc2b6aecf019545e64 + md5: 1cb3c8b063c0aca152dd7d7045e8ec2e + sha256: b9428ade4519d84f5ef68174f403cac65ee8d44ba10992809ea54ac56508457b category: main optional: false - name: gdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: osx-arm64 dependencies: __osx: ">=10.9" - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libcxx: ">=16.0.6" - libgdal: 3.8.1 + libgdal: 3.8.0 libxml2: ">=2.11.6,<2.12.0a0" numpy: ">=1.23.5,<2.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.1-py311h32a4f3d_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.0-py311h32a4f3d_6.conda hash: - md5: 22050ed6dfba916d82f470c4e5c820e9 - sha256: f6f8555e164a37371dc729b9aa0773e60716218ed706cd621b3f5cbfbe2ea51e + md5: b266b8795152cc1dfc9296ac95cb60ad + sha256: f8d113f50e12756c4b6640a8f70b2bccc54cc2e1a29b11f5e3cb3e4671d259be category: main optional: false - name: gdk-pixbuf @@ -6425,7 +6419,7 @@ package: category: main optional: false - name: google-api-core - version: 2.14.0 + version: 2.15.0 manager: conda platform: linux-64 dependencies: @@ -6434,14 +6428,14 @@ package: protobuf: ">=3.19.5,<5.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" python: ">=3.7" requests: ">=2.18.0,<3.0.0.dev0" - url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.15.0-pyhd8ed1ab_0.conda hash: - md5: cebe18c719a6818849b921748aa91750 - sha256: 4bc666e51fe40266435b8e8a4137e47278e044ca26be34c05260236552914ebc + md5: e132b54eb1a75c1e536edfbb5ee7684c + sha256: ffc427bab6dcb6c6282046ebc17d2ff6918ebe55789d77256d28f85611e32f09 category: main optional: false - name: google-api-core - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-64 dependencies: @@ -6450,14 +6444,14 @@ package: googleapis-common-protos: ">=1.56.2,<2.0.dev0" protobuf: ">=3.19.5,<5.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" requests: ">=2.18.0,<3.0.0.dev0" - url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.15.0-pyhd8ed1ab_0.conda hash: - md5: cebe18c719a6818849b921748aa91750 - sha256: 4bc666e51fe40266435b8e8a4137e47278e044ca26be34c05260236552914ebc + md5: e132b54eb1a75c1e536edfbb5ee7684c + sha256: ffc427bab6dcb6c6282046ebc17d2ff6918ebe55789d77256d28f85611e32f09 category: main optional: false - name: google-api-core - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-arm64 dependencies: @@ -6466,14 +6460,14 @@ package: googleapis-common-protos: ">=1.56.2,<2.0.dev0" protobuf: ">=3.19.5,<5.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" requests: ">=2.18.0,<3.0.0.dev0" - url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.15.0-pyhd8ed1ab_0.conda hash: - md5: cebe18c719a6818849b921748aa91750 - sha256: 4bc666e51fe40266435b8e8a4137e47278e044ca26be34c05260236552914ebc + md5: e132b54eb1a75c1e536edfbb5ee7684c + sha256: ffc427bab6dcb6c6282046ebc17d2ff6918ebe55789d77256d28f85611e32f09 category: main optional: false - name: google-auth - version: 2.24.0 + version: 2.25.1 manager: conda platform: linux-64 dependencies: @@ -6486,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.24.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda hash: - md5: 5c80374ea4c24d3bd6822108d43715d0 - sha256: c270d1866bd01f3fa97e5c65496b853af6b1c8d58479132c8b3397534fbb2919 + md5: ea4120e492a1b82f298419e0f2210a1e + sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd category: main optional: false - name: google-auth - version: 2.24.0 + version: 2.25.1 manager: conda platform: osx-64 dependencies: @@ -6506,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.24.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda hash: - md5: 5c80374ea4c24d3bd6822108d43715d0 - sha256: c270d1866bd01f3fa97e5c65496b853af6b1c8d58479132c8b3397534fbb2919 + md5: ea4120e492a1b82f298419e0f2210a1e + sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd category: main optional: false - name: google-auth - version: 2.24.0 + version: 2.25.1 manager: conda platform: osx-arm64 dependencies: @@ -6526,10 +6520,10 @@ 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.24.0-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.1-pyhca7485f_0.conda hash: - md5: 5c80374ea4c24d3bd6822108d43715d0 - sha256: c270d1866bd01f3fa97e5c65496b853af6b1c8d58479132c8b3397534fbb2919 + md5: ea4120e492a1b82f298419e0f2210a1e + sha256: 4626124ab555cd8620ff9ff0cd4e1e2f8a161667c00c1571241f9fc722b0b8bd category: main optional: false - name: google-auth-oauthlib @@ -6578,87 +6572,87 @@ package: category: main optional: false - name: google-cloud-core - version: 2.3.3 + version: 2.4.1 manager: conda platform: linux-64 dependencies: google-api-core: ">=1.31.6,<3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0" google-auth: ">=1.25.0,<3.0dev" grpcio: ">=1.38.0,<2.0.0dev" - python: ">=3.7" - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.3.3-pyhd8ed1ab_0.conda + python: ">=3.8" + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.1-pyhd8ed1ab_0.conda hash: - md5: a26b1fa8555cc1d2f0f7ff9985303e66 - sha256: e8a840361b23ca7a9cfa62c1885fc66aa5ad94e48556782e9a032678c9f4b76e + md5: 1853cdebbfe25fb6ee253855a44945a6 + sha256: d01b787bad2ec4da9536ce2cedb3e53ed092fe6a4a596c043ab358bb9b2fbcdd category: main optional: false - name: google-cloud-core - version: 2.3.3 + version: 2.4.1 manager: conda platform: osx-64 dependencies: - python: ">=3.7" + python: ">=3.8" google-auth: ">=1.25.0,<3.0dev" google-api-core: ">=1.31.6,<3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0" grpcio: ">=1.38.0,<2.0.0dev" - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.3.3-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.1-pyhd8ed1ab_0.conda hash: - md5: a26b1fa8555cc1d2f0f7ff9985303e66 - sha256: e8a840361b23ca7a9cfa62c1885fc66aa5ad94e48556782e9a032678c9f4b76e + md5: 1853cdebbfe25fb6ee253855a44945a6 + sha256: d01b787bad2ec4da9536ce2cedb3e53ed092fe6a4a596c043ab358bb9b2fbcdd category: main optional: false - name: google-cloud-core - version: 2.3.3 + version: 2.4.1 manager: conda platform: osx-arm64 dependencies: - python: ">=3.7" + python: ">=3.8" google-auth: ">=1.25.0,<3.0dev" google-api-core: ">=1.31.6,<3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0" grpcio: ">=1.38.0,<2.0.0dev" - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.3.3-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.1-pyhd8ed1ab_0.conda hash: - md5: a26b1fa8555cc1d2f0f7ff9985303e66 - sha256: e8a840361b23ca7a9cfa62c1885fc66aa5ad94e48556782e9a032678c9f4b76e + md5: 1853cdebbfe25fb6ee253855a44945a6 + sha256: d01b787bad2ec4da9536ce2cedb3e53ed092fe6a4a596c043ab358bb9b2fbcdd category: main optional: false - name: google-cloud-sdk - version: 455.0.0 + version: 456.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-455.0.0-py311h38be061_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/google-cloud-sdk-456.0.0-py311h38be061_0.conda hash: - md5: 1505ce6a9284c331e05de23b56d023ff - sha256: 17c439e5b01341a4aae55a2f1841878244d25b365cef52b39fb9bfd3e30c8315 + md5: 09eb149adf3420350bd241bda3d5fafe + sha256: f789db836de3cc6557c9250f5819ada0aaafa2f559c09b8fadd5bda703a2acdf category: main optional: false - name: google-cloud-sdk - version: 455.0.0 + version: 456.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-455.0.0-py311h6eed73b_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/google-cloud-sdk-456.0.0-py311h6eed73b_0.conda hash: - md5: 0a635aa75ccc84e4dd16e06b559d3d49 - sha256: 8e133ed925ed75409a354b564ff2ebc2ebb3ebdd659f2d190b4c198b164c6f8e + md5: 287686faa4f60a48dae2884822a232ef + sha256: 9ce703e2c3b9df7f01dee5e21c3b40da1088114670ced4347af9ee368f304d4b category: main optional: false - name: google-cloud-sdk - version: 455.0.0 + version: 456.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-455.0.0-py311h267d04e_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/google-cloud-sdk-456.0.0-py311h267d04e_0.conda hash: - md5: 2f60b4b18d39e85bdf3557f19bd407be - sha256: 9511a6c98a01a1e5013c73d8e7cb0d1200643e9d531cbc49ebebfb5cd9e71f27 + md5: 321f57034a4eb43fbe44c09d5a270eeb + sha256: 89e0793bafe2d57cf3c656bc22853f7a40eb05b03a34d6c308dcd5ff572ace04 category: main optional: false - name: google-cloud-storage @@ -6804,42 +6798,42 @@ package: category: main optional: false - name: googleapis-common-protos - version: 1.61.0 + version: 1.62.0 manager: conda platform: linux-64 dependencies: protobuf: ">=3.19.5,<5.0.0dev0,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" python: ">=3.7" - url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.61.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.62.0-pyhd8ed1ab_0.conda hash: - md5: f315d7fdc1905dcc2e18a1c7bed22fa9 - sha256: aa25665205e8d4895ff1bf042d2fc358a20c207271238069e13b87535f92184e + md5: ca3d0c7ba3a15e943d9c715aba03ae62 + sha256: 70da3fc08a742022c666d9807f0caba60be1ddbf09b6642c168001bace18c724 category: main optional: false - name: googleapis-common-protos - version: 1.61.0 + version: 1.62.0 manager: conda platform: osx-64 dependencies: python: ">=3.7" protobuf: ">=3.19.5,<5.0.0dev0,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" - url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.61.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.62.0-pyhd8ed1ab_0.conda hash: - md5: f315d7fdc1905dcc2e18a1c7bed22fa9 - sha256: aa25665205e8d4895ff1bf042d2fc358a20c207271238069e13b87535f92184e + md5: ca3d0c7ba3a15e943d9c715aba03ae62 + sha256: 70da3fc08a742022c666d9807f0caba60be1ddbf09b6642c168001bace18c724 category: main optional: false - name: googleapis-common-protos - version: 1.61.0 + version: 1.62.0 manager: conda platform: osx-arm64 dependencies: python: ">=3.7" protobuf: ">=3.19.5,<5.0.0dev0,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5" - url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.61.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.62.0-pyhd8ed1ab_0.conda hash: - md5: f315d7fdc1905dcc2e18a1c7bed22fa9 - sha256: aa25665205e8d4895ff1bf042d2fc358a20c207271238069e13b87535f92184e + md5: ca3d0c7ba3a15e943d9c715aba03ae62 + sha256: 70da3fc08a742022c666d9807f0caba60be1ddbf09b6642c168001bace18c724 category: main optional: false - name: gql @@ -8148,42 +8142,42 @@ package: category: main optional: false - name: identify - version: 2.5.32 + version: 2.5.33 manager: conda platform: linux-64 dependencies: python: ">=3.6" ukkonen: "" - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.32-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda hash: - md5: 3ef8e9bab1bfaf900bb0a5db8c0c742c - sha256: 0783aa58f43d1c113a2ec300a29ba3313184056f9893671c75037fbadaf9e546 + md5: 93c8f8ceb83827d88deeba796f07fba7 + sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f category: main optional: false - name: identify - version: 2.5.32 + version: 2.5.33 manager: conda platform: osx-64 dependencies: ukkonen: "" python: ">=3.6" - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.32-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda hash: - md5: 3ef8e9bab1bfaf900bb0a5db8c0c742c - sha256: 0783aa58f43d1c113a2ec300a29ba3313184056f9893671c75037fbadaf9e546 + md5: 93c8f8ceb83827d88deeba796f07fba7 + sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f category: main optional: false - name: identify - version: 2.5.32 + version: 2.5.33 manager: conda platform: osx-arm64 dependencies: ukkonen: "" python: ">=3.6" - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.32-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda hash: - md5: 3ef8e9bab1bfaf900bb0a5db8c0c742c - sha256: 0783aa58f43d1c113a2ec300a29ba3313184056f9893671c75037fbadaf9e546 + md5: 93c8f8ceb83827d88deeba796f07fba7 + sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f category: main optional: false - name: idna @@ -8539,10 +8533,10 @@ package: stack_data: "" traitlets: ">=5" typing_extensions: "" - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh31011fe_2.conda + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda hash: - md5: 5e23d20fc6e33061c063220146579990 - sha256: c956b70ed41b7f61a780a7e584f03f68e7e5073c8c138960bfbc5e705d9124b1 + md5: 15c6f45a45f7ac27f6d60b0b084f6761 + sha256: d98d615ac8ad71de698afbc50e8269570d4b89706821c4ff3058a4ceec69bd9b category: main optional: false - name: ipython @@ -8563,10 +8557,10 @@ package: jedi: ">=0.16" pexpect: ">4.3" prompt-toolkit: ">=3.0.41,<3.1.0" - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh31011fe_2.conda + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda hash: - md5: 5e23d20fc6e33061c063220146579990 - sha256: c956b70ed41b7f61a780a7e584f03f68e7e5073c8c138960bfbc5e705d9124b1 + md5: 15c6f45a45f7ac27f6d60b0b084f6761 + sha256: d98d615ac8ad71de698afbc50e8269570d4b89706821c4ff3058a4ceec69bd9b category: main optional: false - name: ipython @@ -8587,10 +8581,10 @@ package: jedi: ">=0.16" pexpect: ">4.3" prompt-toolkit: ">=3.0.41,<3.1.0" - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh31011fe_2.conda + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda hash: - md5: 5e23d20fc6e33061c063220146579990 - sha256: c956b70ed41b7f61a780a7e584f03f68e7e5073c8c138960bfbc5e705d9124b1 + md5: 15c6f45a45f7ac27f6d60b0b084f6761 + sha256: d98d615ac8ad71de698afbc50e8269570d4b89706821c4ff3058a4ceec69bd9b category: main optional: false - name: ipywidgets @@ -9709,7 +9703,7 @@ package: category: main optional: false - name: jupyter_server - version: 2.11.2 + version: 2.12.1 manager: conda platform: linux-64 dependencies: @@ -9732,14 +9726,14 @@ package: tornado: ">=6.2.0" traitlets: ">=5.6.0" websocket-client: "" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.11.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.1-pyhd8ed1ab_0.conda hash: - md5: c831341804aecf5abcdbb348be301f92 - sha256: 9e56c09fa7f4b95aab30b51008416d041c53cfd94ef3a4abc339d1eabb015df2 + md5: e9781be1e6c93b5df2c180a9f9242420 + sha256: c4aabe2041afb8fde1f049549c2e292265612d07dd4d1156f3e183ba6a6f007b category: main optional: false - name: jupyter_server - version: 2.11.2 + version: 2.12.1 manager: conda platform: osx-64 dependencies: @@ -9762,14 +9756,14 @@ package: anyio: ">=3.1.0" send2trash: ">=1.8.2" jupyter_events: ">=0.9.0" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.11.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.1-pyhd8ed1ab_0.conda hash: - md5: c831341804aecf5abcdbb348be301f92 - sha256: 9e56c09fa7f4b95aab30b51008416d041c53cfd94ef3a4abc339d1eabb015df2 + md5: e9781be1e6c93b5df2c180a9f9242420 + sha256: c4aabe2041afb8fde1f049549c2e292265612d07dd4d1156f3e183ba6a6f007b category: main optional: false - name: jupyter_server - version: 2.11.2 + version: 2.12.1 manager: conda platform: osx-arm64 dependencies: @@ -9792,10 +9786,10 @@ package: anyio: ">=3.1.0" send2trash: ">=1.8.2" jupyter_events: ">=0.9.0" - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.11.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.1-pyhd8ed1ab_0.conda hash: - md5: c831341804aecf5abcdbb348be301f92 - sha256: 9e56c09fa7f4b95aab30b51008416d041c53cfd94ef3a4abc339d1eabb015df2 + md5: e9781be1e6c93b5df2c180a9f9242420 + sha256: c4aabe2041afb8fde1f049549c2e292265612d07dd4d1156f3e183ba6a6f007b category: main optional: false - name: jupyter_server_terminals @@ -10055,7 +10049,7 @@ package: manager: conda platform: linux-64 dependencies: - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libgcc-ng: ">=12" libstdcxx-ng: ">=12" url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.2-hcd42e92_1.conda @@ -10069,7 +10063,7 @@ package: manager: conda platform: osx-64 dependencies: - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libcxx: ">=15.0.7" url: https://conda.anaconda.org/conda-forge/osx-64/kealib-1.5.2-h052fcf7_1.conda hash: @@ -10082,7 +10076,7 @@ package: manager: conda platform: osx-arm64 dependencies: - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libcxx: ">=15.0.7" url: https://conda.anaconda.org/conda-forge/osx-arm64/kealib-1.5.2-h47b5e36_1.conda hash: @@ -11505,19 +11499,19 @@ package: category: dev optional: true - name: libgdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: linux-64 dependencies: __glibc: ">=2.17,<3.0.a0" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.1,<4.3.2.0a0" + cfitsio: ">=4.3.0,<4.3.1.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.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" @@ -11534,7 +11528,7 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.2,<4.0a0" + libsqlite: ">=3.44.1,<4.0a0" libstdcxx-ng: ">=12" libtiff: ">=4.6.0,<4.7.0a0" libuuid: ">=2.38.1,<3.0a0" @@ -11543,35 +11537,35 @@ package: libzlib: ">=1.2.13,<1.3.0a0" lz4-c: ">=1.9.3,<1.10.0a0" openjpeg: ">=2.5.0,<3.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.12.0,<23.13.0a0" + poppler: ">=23.11.0,<23.12.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" tiledb: ">=2.16,<2.17.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.1-hcae7082_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.0-he7dcfe9_6.conda hash: - md5: e96d24ccc597439cda2859fe948aac77 - sha256: 9d6a19f03ea1437e951ba5e09c12faf11aa47a375a76f80f9bab1d2c3aed4aa9 + md5: 16ff703a847430fa074c5d53916740c1 + sha256: 06ccb879fc2783c371f1b02d062c4e90dfe4d8c5e9f2f83213bbef0fe27a00b0 category: main optional: false - name: libgdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: osx-64 dependencies: __osx: ">=10.9" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.1,<4.3.2.0a0" + cfitsio: ">=4.3.0,<4.3.1.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.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" @@ -11588,42 +11582,42 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.2,<4.0a0" + libsqlite: ">=3.44.1,<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.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.12.0,<23.13.0a0" + poppler: ">=23.11.0,<23.12.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" tiledb: ">=2.16,<2.17.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.1-hb7f764b_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/libgdal-3.8.0-h5b0c7d5_6.conda hash: - md5: eee8b19233a243e229af4399af2c4a10 - sha256: efe25d85efe856c1db71e2a40ce9736e07cf5c06e53285248866a62a43363a0d + md5: 01e293a419480a02fc7775f6c6afa530 + sha256: fc602de0bb3d5b7c0493b25b1e4345018fd68f26c672c8abff621c492f67abf4 category: main optional: false - name: libgdal - version: 3.8.1 + version: 3.8.0 manager: conda platform: osx-arm64 dependencies: __osx: ">=10.9" blosc: ">=1.21.5,<2.0a0" - cfitsio: ">=4.3.1,<4.3.2.0a0" + cfitsio: ">=4.3.0,<4.3.1.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.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" json-c: ">=0.17,<0.18.0a0" kealib: ">=1.5.2,<1.6.0a0" lerc: ">=4.0.0,<5.0a0" @@ -11640,26 +11634,26 @@ package: libpng: ">=1.6.39,<1.7.0a0" libpq: ">=16.1,<17.0a0" libspatialite: ">=5.1.0,<5.2.0a0" - libsqlite: ">=3.44.2,<4.0a0" + libsqlite: ">=3.44.1,<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.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" pcre2: ">=10.42,<10.43.0a0" - poppler: ">=23.12.0,<23.13.0a0" + poppler: ">=23.11.0,<23.12.0a0" postgresql: "" proj: ">=9.3.0,<9.3.1.0a0" tiledb: ">=2.16,<2.17.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.1-hac00559_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-3.8.0-h76f3012_6.conda hash: - md5: a65e999f85ab35663d7e9753ca7eaa13 - sha256: 636ff5b1f95edc083dc7b3ba9f35a87fe18695349b1bd57ae72c54d00ef5034e + md5: c7efc96733da609c84411293fa3a8457 + sha256: 34d8f93a03a58396074dbbcc832a0c84bb6192d9e0ddf70992c4fa40349366c5 category: main optional: false - name: libgfortran @@ -11735,7 +11729,7 @@ package: category: main optional: false - name: libglib - version: 2.78.1 + version: 2.78.3 manager: conda platform: linux-64 dependencies: @@ -11746,14 +11740,14 @@ package: libstdcxx-ng: ">=12" libzlib: ">=1.2.13,<1.3.0a0" pcre2: ">=10.42,<10.43.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda hash: - md5: 70052d6c1e84643e30ffefb21ab6950f - sha256: 4e6fa28002f834cfc30a64792e95c1701d835cc3d3a4bb18d6e8d16bb8aba05b + md5: 9bd06b12bbfa6fd1740fd23af4b0f0c7 + sha256: b1b594294a0fe4c9a51596ef027efed9268d60827e8ae61fb7545c521a631e33 category: main optional: false - name: libglib - version: 2.78.1 + version: 2.78.3 manager: conda platform: osx-64 dependencies: @@ -11764,14 +11758,14 @@ package: libiconv: ">=1.17,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" pcre2: ">=10.42,<10.43.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.78.1-h198397b_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.78.3-h198397b_0.conda hash: - md5: fb318c3fed632cf2de190fb10496fbd1 - sha256: 73bcb4ea07af4291221271aa7aaa0795d59d851a6f43d6e0df22601f61725e4b + md5: e18624e441743b0d744116885b70f092 + sha256: 90e58879873b05617e0678ecfbf47bc740c1a2ed7840b8f7cd1241813b9037db category: main optional: false - name: libglib - version: 2.78.1 + version: 2.78.3 manager: conda platform: osx-arm64 dependencies: @@ -11782,10 +11776,10 @@ package: libiconv: ">=1.17,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" pcre2: ">=10.42,<10.43.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.78.1-hb438215_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.78.3-hb438215_0.conda hash: - md5: 3ce7984906f2ba4be662c219e8def77e - sha256: 3d94b6d8d27301f23b0d0c8b078c5e0bf6fc4f5f6260f3794cfaf7e247fe9e20 + md5: 8c98b7018b434236e2c0f14d7cf3c113 + sha256: f26afb1003e810e768138b0c849e9408c0ae8635062aeaf7abae381903a84e53 category: main optional: false - name: libgomp @@ -12163,7 +12157,7 @@ package: blosc: ">=1.21.4,<2.0a0" bzip2: ">=1.0.8,<2.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libaec: ">=1.0.6,<2.0a0" libcurl: ">=8.2.1,<9.0a0" libgcc-ng: ">=12" @@ -12188,7 +12182,7 @@ package: blosc: ">=1.21.4,<2.0a0" bzip2: ">=1.0.8,<2.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libaec: ">=1.0.6,<2.0a0" libcurl: ">=8.2.1,<9.0a0" libcxx: ">=15.0.7" @@ -12212,7 +12206,7 @@ package: blosc: ">=1.21.4,<2.0a0" bzip2: ">=1.0.8,<2.0a0" hdf4: ">=4.2.15,<4.2.16.0a0" - hdf5: ">=1.14.2,<1.14.3.0a0" + hdf5: ">=1.14.2,<1.14.4.0a0" libaec: ">=1.0.6,<2.0a0" libcurl: ">=8.2.1,<9.0a0" libcxx: ">=15.0.7" @@ -12438,11 +12432,11 @@ package: krb5: ">=1.21.2,<1.22.0a0" libgcc-ng: ">=12" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" - url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda + openssl: ">=3.1.4,<3.2.0a0" + url: https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_0.conda hash: - md5: 3cfa1ceef6936e656677ba59480106ce - sha256: 6ce23d046522c39cda5c25e47d303b39f8b31a2aac2c59ea3e41710a072ff0bf + md5: 2b7f1893cf40b4ccdc0230bcd94d5ed9 + sha256: 8c92a8cce329a83cc9e94b19d18200c661957c00cfb464f26237d24730864585 category: main optional: false - name: libpq @@ -12452,11 +12446,11 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.1-h6dd4ff7_2.conda + openssl: ">=3.1.4,<3.2.0a0" + url: https://conda.anaconda.org/conda-forge/osx-64/libpq-16.1-h6dd4ff7_0.conda hash: - md5: 7aa484702ee6f49c7a728b578a544b27 - sha256: 13011b0b9b31771197155d3547dcdf2c5f8f8a91f86f2b4d45fbf8a4d6f53d0a + md5: 39de94ff4ccc306f3d24ef7aef13c689 + sha256: 1a51c9b3451eebf04ac1f7a7a58fec07c2e44d2298514a30f62b5b432a653c07 category: main optional: false - name: libpq @@ -12466,11 +12460,11 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-16.1-hd435d45_2.conda + openssl: ">=3.1.4,<3.2.0a0" + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-16.1-hd435d45_0.conda hash: - md5: b4d4402f19365ed54ad529e09bfa7cdb - sha256: 50e96d4014b59ef337a74322be4394e27e6be65c3c5356b98ee0be1f6f4086a1 + md5: 883bbf64780c91608f1a7df9203b79a5 + sha256: 1b5c86d5f247b3e154ae373dcebea6979368c4a0ee722d39ec33ee2fc8528c04 category: main optional: false - name: libprotobuf @@ -13501,15 +13495,15 @@ package: platform: linux-64 dependencies: libgcc-ng: ">=12" - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libxslt: ">=1.1.37,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_2.conda hash: - md5: aab51e50d994e58efdfa5382139b0468 - sha256: 9ee461843278f695c5e301b4575e7dd02f69021e85023b62b17f7dfe2cd173e4 + md5: 76405b658bdd57a05bbdcee11d4714d2 + sha256: 4d7dd680fd7a6d5f34ca26d188ab73fd44378ade96d7ac50f25ccd4015517fde category: main optional: false - name: lxml @@ -13517,15 +13511,15 @@ package: manager: conda platform: osx-64 dependencies: - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libxslt: ">=1.1.37,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/lxml-4.9.3-py311h19a211c_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/lxml-4.9.3-py311h719c1e2_2.conda hash: - md5: d3687d6ebe20ef8bf959dba786cdb28e - sha256: df952e80dc9ca98fbff11c2627288808135b51d18fc363a102f3e58eac8b4113 + md5: d3c23c905887e0c9999afb3a65650f85 + sha256: 37d48cbfac83c211c818a500b7c8852260146b2c2ed8006a4df8cc1b16a45ee2 category: main optional: false - name: lxml @@ -13533,15 +13527,15 @@ package: manager: conda platform: osx-arm64 dependencies: - libxml2: ">=2.11.5,<2.12.0a0" + libxml2: ">=2.11.6,<2.12.0a0" libxslt: ">=1.1.37,<2.0a0" libzlib: ">=1.2.13,<1.3.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-4.9.3-py311hbafe683_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-4.9.3-py311hdef8331_2.conda hash: - md5: 5cfed11a5103844a5654446cf4d3f42a - sha256: e7ac6818b94242a5a1800a66d362a5e0262473e2399e731dd2061737b88c09b5 + md5: 99b75b0287466b51cafc6de0a8921825 + sha256: a33f16b34943fca0e5f113cf0b8c3be32271bda2718fe857d6e5c01e515c2158 category: main optional: false - name: lz4-c @@ -14263,42 +14257,6 @@ package: sha256: 7fcfda7b4a1d74205fcfdefd93804226a6eaffc74a319414c7d8d88f9249db3b category: main optional: false - - name: munch - version: 4.0.0 - manager: conda - platform: linux-64 - dependencies: - python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: main - optional: false - - name: munch - version: 4.0.0 - manager: conda - platform: osx-64 - dependencies: - python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: main - optional: false - - name: munch - version: 4.0.0 - manager: conda - platform: osx-arm64 - dependencies: - python: ">=3.8" - url: https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda - hash: - md5: 376b32e8f9d3eacbd625f37d39bd507d - sha256: 093020ae2deb6c468120111a54909e1c576d70dfea6bc0eec5093e36d2fb8ff8 - category: main - optional: false - name: munkres version: 1.1.4 manager: conda @@ -15316,40 +15274,40 @@ package: category: main optional: false - name: openssl - version: 3.2.0 + version: 3.1.4 manager: conda platform: linux-64 dependencies: ca-certificates: "" libgcc-ng: ">=12" - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.4-hd590300_0.conda hash: - md5: 603827b39ea2b835268adb8c821b8570 - sha256: 80efc6f429bd8e622d999652e5cba2ca56fcdb9c16a439d2ce9b4313116e4a87 + md5: 412ba6938c3e2abaca8b1129ea82e238 + sha256: d15b3e83ce66c6f6fbb4707f2f5c53337124c01fb03bfda1cf25c5b41123efc7 category: main optional: false - name: openssl - version: 3.2.0 + version: 3.1.4 manager: conda platform: osx-64 dependencies: ca-certificates: "" - url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.0-hd75f5a5_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.1.4-hd75f5a5_0.conda hash: - md5: 06cb561619487c88891839b9beb5244c - sha256: 99161bf349f5dc80322f2a2c188588d11efa662566e4e19f2ac0a36d9fa3de25 + md5: bc9201da6eb1e0df4107901df5371347 + sha256: 1c436103a8de0dc82c9c56974badaa1b8b8f8cd9f37c2766bd50cd9899720f6b category: main optional: false - name: openssl - version: 3.2.0 + version: 3.1.4 manager: conda platform: osx-arm64 dependencies: ca-certificates: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.0-h0d3ecfb_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.1.4-h0d3ecfb_0.conda hash: - md5: 47d16d26100f19ca495882882b7bc93b - sha256: a53e1c6c058b621fd1d13cca6f9cccd534d2b3f4b4ac789fe26f7902031d6c41 + md5: 5a89552fececf4cd99628318ccbb67a3 + sha256: 3c715b1d4940c7ad6065935db18924b85a54048dde066f963cfc250340639457 category: main optional: false - name: orc @@ -15566,8 +15524,8 @@ package: dependencies: numpy: "" pandas: "" - typing_extensions: "" packaging: "" + typing_extensions: "" pydantic: "" wrapt: "" multimethod: "" @@ -15587,8 +15545,8 @@ package: dependencies: numpy: "" pandas: "" - typing_extensions: "" packaging: "" + typing_extensions: "" pydantic: "" wrapt: "" multimethod: "" @@ -16412,7 +16370,7 @@ package: category: main optional: false - name: poppler - version: 23.12.0 + version: 23.11.0 manager: conda platform: linux-64 dependencies: @@ -16423,7 +16381,7 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libgcc-ng: ">=12" - libglib: ">=2.78.1,<3.0a0" + libglib: ">=2.78.0,<3.0a0" libiconv: ">=1.17,<2.0a0" libjpeg-turbo: ">=3.0.0,<4.0a0" libpng: ">=1.6.39,<1.7.0a0" @@ -16431,17 +16389,17 @@ package: libtiff: ">=4.6.0,<4.7.0a0" libzlib: ">=1.2.13,<1.3.0a0" nspr: ">=4.35,<5.0a0" - nss: ">=3.95,<4.0a0" + nss: ">=3.94,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.12.0-h590f24d_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/poppler-23.11.0-h590f24d_0.conda hash: - md5: 480189ac126a8c6c61e14476c8ba7c9a - sha256: b313920277aca763b590dddf806c56b0aadcdff82f5ace39827cab4792ae4b20 + md5: 671439d8eca2084bb5a75561fff23a85 + sha256: 8050002e01be124efcb82e32e740676f5ed7dfe852f335408554e6dc3b060ad9 category: main optional: false - name: poppler - version: 23.12.0 + version: 23.11.0 manager: conda platform: osx-64 dependencies: @@ -16454,24 +16412,24 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libcxx: ">=16.0.6" - libglib: ">=2.78.1,<3.0a0" + libglib: ">=2.78.0,<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.95,<4.0a0" + nss: ">=3.94,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.12.0-hdd5a5e8_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/poppler-23.11.0-hdd5a5e8_0.conda hash: - md5: e1cb9f8e9e21dfa600b08be85d905e5f - sha256: 1271e3c8163125fc1ff14833ddba3f2c6465df5b1d13db76912415bd5a39b492 + md5: 60ffe2d3a09ff99eb2601487d6ddaeea + sha256: fb6a53ddac3fa8c097b4a0b7d2f40219b13bfa3324147aaf6c5a14ee5fb27521 category: main optional: false - name: poppler - version: 23.12.0 + version: 23.11.0 manager: conda platform: osx-arm64 dependencies: @@ -16484,20 +16442,20 @@ package: lcms2: ">=2.15,<3.0a0" libcurl: ">=8.4.0,<9.0a0" libcxx: ">=16.0.6" - libglib: ">=2.78.1,<3.0a0" + libglib: ">=2.78.0,<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.95,<4.0a0" + nss: ">=3.94,<4.0a0" openjpeg: ">=2.5.0,<3.0a0" poppler-data: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/poppler-23.12.0-hcdd998b_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/poppler-23.11.0-hcdd998b_0.conda hash: - md5: e072f524004eee193e30d243d68c520f - sha256: 13ebaac3bf9b77e92e777d3ed245c2f0a8ac93985e334b0cd797a39f321ae5dd + md5: 19386a03a7c57a378953bafb4f598156 + sha256: a6677b507cbdb6202c872aa461b4bf8cfcbe5791721fe1f42615b89205d4a4a6 category: main optional: false - name: poppler-data @@ -16541,17 +16499,17 @@ package: krb5: ">=1.21.2,<1.22.0a0" libgcc-ng: ">=12" libpq: "16.1" - libxml2: ">=2.11.6,<2.12.0a0" + libxml2: ">=2.11.5,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" zlib: "" - url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_0.conda hash: - md5: a175fe7a349a7e4cda81f4d7ae2bc2b2 - sha256: b2c258a78effab00f8db53e5dd04a43baf309c9a3c164c0d6f52de836b3baea5 + md5: 1e9ab0760262044fa00814088667e451 + sha256: 74dfb5793a00a0a9e85296ce0944d8af0f71758574b7c8f9e7d5590250441e24 category: main optional: false - name: postgresql @@ -16561,17 +16519,17 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libpq: "16.1" - libxml2: ">=2.11.6,<2.12.0a0" + libxml2: ">=2.11.5,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" zlib: "" - url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.1-h413614c_2.conda + url: https://conda.anaconda.org/conda-forge/osx-64/postgresql-16.1-h413614c_0.conda hash: - md5: ad5e3602657162ddcab580d052df0bd4 - sha256: 47282bff8ca6c64f72276401e8bcfff625cadcdcbfd3804bb08d9dcbe7485907 + md5: b7322d27093606b939fb92fa33b92beb + sha256: 612393024639882d7515429e639c85fa3b712d114c5a6b3a4b3891b061e1bc89 category: main optional: false - name: postgresql @@ -16581,17 +16539,17 @@ package: dependencies: krb5: ">=1.21.2,<1.22.0a0" libpq: "16.1" - libxml2: ">=2.11.6,<2.12.0a0" + libxml2: ">=2.11.5,<2.12.0a0" libzlib: ">=1.2.13,<1.3.0a0" - openssl: ">=3.2.0,<4.0a0" + openssl: ">=3.1.4,<4.0a0" readline: ">=8.2,<9.0a0" tzcode: "" tzdata: "" zlib: "" - url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-hc6ab77f_2.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-hc6ab77f_0.conda hash: - md5: a2562d92a27e19371e2655fe48e6952f - sha256: a896c5ab8930a4d9f980471b64d6eb254a22c46565ebb777d99e235c8c0fb7f9 + md5: 37398d1ad2fbeaa7733711b845da863e + sha256: 441f5ad3fac42e7daf9c246ad0dc0962c7f0b4c9ac1044038d3a053d339320bf category: main optional: false - name: pre-commit @@ -16950,33 +16908,33 @@ package: category: main optional: false - name: psycopg2 - version: 2.9.9 + version: 2.9.7 manager: conda platform: osx-64 dependencies: - libpq: ">=16.1,<17.0a0" - openssl: ">=3.2.0,<4.0a0" + libpq: ">=16.0,<17.0a0" + openssl: ">=3.1.3,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.9.9-py311h187f0af_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.9.7-py311h187f0af_1.conda hash: - md5: 2177c8943bbf9bfc45421ecaebd5be11 - sha256: 73c0cf543b0ddd41993956969f665999f5801e027e3d3524604892baedbd2626 + md5: f777a0c47ebe4c2cc2eca6f19aea9347 + sha256: dce8bdee2b563927c71493ad26997c9897939d8fbb0376df80b6c04154ce0412 category: main optional: false - name: psycopg2 - version: 2.9.9 + version: 2.9.7 manager: conda platform: osx-arm64 dependencies: - libpq: ">=16.1,<17.0a0" - openssl: ">=3.2.0,<4.0a0" + libpq: ">=16.0,<17.0a0" + openssl: ">=3.1.3,<4.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/psycopg2-2.9.9-py311h589e011_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/psycopg2-2.9.7-py311h589e011_1.conda hash: - md5: cf560a3c0e56cf6a168f885958ec31ff - sha256: a6340fa9458824b9681ba6cc1de0a618ffd6b19272c4eedcf787a6e627025aa5 + md5: e5fd933c7c34b5c02a95e28f05b07f46 + sha256: 30fb7c0c8e1651694dcb9b5b62b7cdc801ce45e06ead0a5d281ce950e1f498f5 category: main optional: false - name: psycopg2-binary @@ -16993,29 +16951,29 @@ package: category: main optional: false - name: psycopg2-binary - version: 2.9.9 + version: 2.9.7 manager: conda platform: osx-64 dependencies: python: ">=3.6" - psycopg2: ">=2.9.9,<2.9.10.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.9-pyhd8ed1ab_0.conda + psycopg2: ">=2.9.7,<2.9.8.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.7-pyhd8ed1ab_1.conda hash: - md5: c15b2ec0570f8988819eea58286dbc19 - sha256: bb6184a3de8a6fddaed9104539ada9ac7c5e2bd900284ccf96ef5e4e285e75db + md5: 0212a5c5ae1ab578853364bfc5d9f657 + sha256: 5d82cb8b90daff6c12a4b6e0848fd32172522d82ceb5f093bfd55bfec09b3797 category: main optional: false - name: psycopg2-binary - version: 2.9.9 + version: 2.9.7 manager: conda platform: osx-arm64 dependencies: python: ">=3.6" - psycopg2: ">=2.9.9,<2.9.10.0a0" - url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.9-pyhd8ed1ab_0.conda + psycopg2: ">=2.9.7,<2.9.8.0a0" + url: https://conda.anaconda.org/conda-forge/noarch/psycopg2-binary-2.9.7-pyhd8ed1ab_1.conda hash: - md5: c15b2ec0570f8988819eea58286dbc19 - sha256: bb6184a3de8a6fddaed9104539ada9ac7c5e2bd900284ccf96ef5e4e285e75db + md5: 0212a5c5ae1ab578853364bfc5d9f657 + sha256: 5d82cb8b90daff6c12a4b6e0848fd32172522d82ceb5f093bfd55bfec09b3797 category: main optional: false - name: pthread-stubs @@ -19146,45 +19104,45 @@ package: category: main optional: false - name: referencing - version: 0.31.1 + version: 0.32.0 manager: conda platform: linux-64 dependencies: attrs: ">=22.2.0" python: ">=3.8" rpds-py: ">=0.7.0" - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.31.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda hash: - md5: ae08039cf63eb82637b867aea3f04758 - sha256: efb91b7d2f6e729c01676e52e99071db819628a9f0a3a519c8969f0d2350a371 + md5: a7b5a535cd614e384594530aee7e6061 + sha256: dfd40282910a45e58882ed94b502b2a09f475efb04eaaa3bd8b3b5a9b21a19c3 category: main optional: false - name: referencing - version: 0.31.1 + version: 0.32.0 manager: conda platform: osx-64 dependencies: python: ">=3.8" attrs: ">=22.2.0" rpds-py: ">=0.7.0" - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.31.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda hash: - md5: ae08039cf63eb82637b867aea3f04758 - sha256: efb91b7d2f6e729c01676e52e99071db819628a9f0a3a519c8969f0d2350a371 + md5: a7b5a535cd614e384594530aee7e6061 + sha256: dfd40282910a45e58882ed94b502b2a09f475efb04eaaa3bd8b3b5a9b21a19c3 category: main optional: false - name: referencing - version: 0.31.1 + version: 0.32.0 manager: conda platform: osx-arm64 dependencies: python: ">=3.8" attrs: ">=22.2.0" rpds-py: ">=0.7.0" - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.31.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda hash: - md5: ae08039cf63eb82637b867aea3f04758 - sha256: efb91b7d2f6e729c01676e52e99071db819628a9f0a3a519c8969f0d2350a371 + md5: a7b5a535cd614e384594530aee7e6061 + sha256: dfd40282910a45e58882ed94b502b2a09f475efb04eaaa3bd8b3b5a9b21a19c3 category: main optional: false - name: regex @@ -19920,10 +19878,10 @@ package: python_abi: 3.11.* scipy: "" threadpoolctl: ">=2.0.0" - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py311hc009520_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py311hc009520_2.conda hash: - md5: 6b92d3d0680eae9d1d9860a721f7fb51 - sha256: 638253cba17e44081674b2dd7bee2025c202e91b653182da511ca57de942689d + md5: 9821f8e497a791858226f535e5e0be62 + sha256: 1133cd9209207528d4fdd88ffb300a04794942e5d474c607ed1f0578fe218fd2 category: main optional: false - name: scikit-learn @@ -19934,16 +19892,16 @@ package: __osx: ">=10.9" joblib: ">=1.1.1" libcxx: ">=16.0.6" - llvm-openmp: ">=16.0.6" + llvm-openmp: ">=17.0.6" numpy: ">=1.23.5,<2.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* scipy: "" threadpoolctl: ">=2.0.0" - url: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.3.2-py311h66081b9_1.conda + url: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.3.2-py311h66081b9_2.conda hash: - md5: a7053f3e86b6b9139593a027c54e3097 - sha256: 0b4aee092d4689d07aa95ed1d1071eeb74a5e011d34bc9ebd9b27e9b2166db7e + md5: a774c2628441ed6f4db9d7026ab1c7f4 + sha256: 8a2b2660524d06c32c7a2a5af9f3f918b17f34a01990f6190e1e7f37233cdb47 category: main optional: false - name: scikit-learn @@ -19954,16 +19912,16 @@ package: __osx: ">=10.9" joblib: ">=1.1.1" libcxx: ">=16.0.6" - llvm-openmp: ">=16.0.6" + llvm-openmp: ">=17.0.6" numpy: ">=1.23.5,<2.0a0" python: ">=3.11,<3.12.0a0" python_abi: 3.11.* scipy: "" threadpoolctl: ">=2.0.0" - url: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.3.2-py311ha25ca4d_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.3.2-py311ha25ca4d_2.conda hash: - md5: dea73952c589de24ec577c41fac181c5 - sha256: 589bca23648b8969b16a36f87d7114a12fbe88d665cde32427c7126e5b34e63c + md5: f427eff14595109354bd19c94a3d3624 + sha256: d24397673a1f0b609796a716c80b45e3971eb09b987b2a30519a30f5dabeae14 category: main optional: false - name: scipy diff --git a/environments/conda-osx-64.lock.yml b/environments/conda-osx-64.lock.yml index 40a519d401..b13e20814c 100644 --- a/environments/conda-osx-64.lock.yml +++ b/environments/conda-osx-64.lock.yml @@ -70,7 +70,7 @@ dependencies: - lz4-c=1.9.4=hf0c8a7f_0 - ncurses=6.4=h93d8f39_2 - nspr=4.35=hea0b92c_0 - - openssl=3.2.0=hd75f5a5_1 + - openssl=3.1.4=hd75f5a5_0 - pandoc=3.1.3=h9d075a6_0 - pcre2=10.42=h0ad2156_0 - pixman=0.42.2=he965462_0 @@ -90,7 +90,7 @@ dependencies: - libedit=3.1.20191231=h0678c8f_2 - libevent=2.1.12=ha90c15b_1 - libgfortran=5.0.0=13_2_0_h97931a8_1 - - libglib=2.78.1=h198397b_1 + - libglib=2.78.3=h198397b_0 - libkml=1.3.0=hab3ca0e_1018 - libllvm15=15.0.7=he4b1e75_3 - libnghttp2=1.58.0=h64cf6d3_0 @@ -159,7 +159,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - distlib=0.3.7=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - - docutils=0.20.1=py311h6eed73b_2 + - docutils=0.20.1=py311h6eed73b_3 - entrypoints=0.4=pyhd8ed1ab_0 - et_xmlfile=1.1.0=pyhd8ed1ab_0 - exceptiongroup=1.2.0=pyhd8ed1ab_0 @@ -167,8 +167,8 @@ dependencies: - executing=2.0.1=pyhd8ed1ab_0 - filelock=3.13.1=pyhd8ed1ab_0 - frozenlist=1.4.0=py311h2725bcf_1 - - fsspec=2023.12.0=pyhca7485f_0 - - google-cloud-sdk=455.0.0=py311h6eed73b_0 + - fsspec=2023.12.1=pyhca7485f_0 + - google-cloud-sdk=456.0.0=py311h6eed73b_0 - greenlet=3.0.1=py311hd39e593_0 - hpack=4.0.0=pyh9f0ad1d_0 - httptools=0.6.1=py311he705e18_0 @@ -190,10 +190,10 @@ dependencies: - libcurl=8.4.0=h726d00d_0 - libgd=2.3.3=h0dceb68_9 - libgrpc=1.59.2=ha7f534c_0 - - libpq=16.1=h6dd4ff7_2 + - libpq=16.1=h6dd4ff7_0 - llvmlite=0.41.1=py311hb5c2e0a_0 - locket=1.0.0=pyhd8ed1ab_0 - - lxml=4.9.3=py311h19a211c_1 + - lxml=4.9.3=py311h719c1e2_2 - marko=2.0.2=pyhd8ed1ab_0 - markupsafe=2.1.3=py311h2725bcf_1 - mdurl=0.1.0=pyhd8ed1ab_0 @@ -203,7 +203,6 @@ dependencies: - msgpack-python=1.0.7=py311h7bea37d_0 - multidict=6.0.4=py311h5547dcb_1 - multimethod=1.9.1=pyhd8ed1ab_0 - - munch=4.0.0=pyhd8ed1ab_0 - munkres=1.1.4=pyh9f0ad1d_0 - mypy_extensions=1.0.0=pyha770c72_0 - nest-asyncio=1.5.8=pyhd8ed1ab_0 @@ -301,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.1=h60fb419_0 + - cfitsio=4.3.0=h66f91ea_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 @@ -346,12 +345,12 @@ dependencies: - pexpect=4.8.0=pyh1a96a4e_2 - pint=0.22=pyhd8ed1ab_1 - pip=23.3.1=pyhd8ed1ab_0 - - poppler=23.12.0=hdd5a5e8_0 - - postgresql=16.1=h413614c_2 + - poppler=23.11.0=hdd5a5e8_0 + - postgresql=16.1=h413614c_0 - proj=9.3.0=h23b96cc_2 - prompt-toolkit=3.0.41=pyha770c72_0 - protobuf=4.24.4=py311h021eaf5_0 - - psycopg2=2.9.9=py311h187f0af_0 + - psycopg2=2.9.7=py311h187f0af_1 - pyasn1-modules=0.3.0=pyhd8ed1ab_0 - pyobjc-core=10.0=py311hf110eff_0 - pyproject_hooks=1.0.0=pyhd8ed1ab_0 @@ -360,7 +359,7 @@ dependencies: - python-slugify=8.0.1=pyhd8ed1ab_2 - pyu2f=0.1.5=pyhd8ed1ab_0 - qtpy=2.4.1=pyhd8ed1ab_0 - - referencing=0.31.1=pyhd8ed1ab_0 + - referencing=0.32.0=pyhd8ed1ab_0 - restructuredtext_lint=1.4.0=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_0 - rsa=4.9=pyhd8ed1ab_0 @@ -383,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.7=pyhd8ed1ab_0 + - botocore=1.33.9=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311h48c7838_1 @@ -391,7 +390,7 @@ dependencies: - geotiff=1.7.1=h889ec99_14 - gitpython=3.1.40=pyhd8ed1ab_0 - google-crc32c=1.1.2=py311h0b57020_5 - - googleapis-common-protos=1.61.0=pyhd8ed1ab_0 + - googleapis-common-protos=1.62.0=pyhd8ed1ab_0 - gql=3.4.1=pyhd8ed1ab_0 - graphql-relay=3.2.0=pyhd8ed1ab_0 - grpcio-health-checking=1.59.2=pyhd8ed1ab_0 @@ -408,7 +407,7 @@ dependencies: - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311h2725bcf_6 - prompt_toolkit=3.0.41=hd8ed1ab_0 - - psycopg2-binary=2.9.9=pyhd8ed1ab_0 + - psycopg2-binary=2.9.7=pyhd8ed1ab_1 - pybtex=0.24.0=pyhd8ed1ab_2 - pydantic-core=2.14.5=py311h5e0f0e4_0 - pyobjc-framework-cocoa=10.0=py311hf110eff_1 @@ -445,13 +444,13 @@ dependencies: - gtk2=2.24.33=h7c1209e_2 - h3-py=3.7.6=py311hdf8f085_1 - httpx=0.25.2=pyhd8ed1ab_0 - - identify=2.5.32=pyhd8ed1ab_0 - - ipython=8.18.1=pyh31011fe_2 + - identify=2.5.33=pyhd8ed1ab_0 + - ipython=8.18.1=pyh707e725_3 - isoduration=20.11.0=pyhd8ed1ab_0 - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - keyring=24.3.0=py311h6eed73b_0 - - libgdal=3.8.1=hb7f764b_1 + - libgdal=3.8.0=h5b0c7d5_6 - librsvg=2.56.3=hec3db73_0 - numba=0.58.1=py311h32f2313_0 - numexpr=2.8.7=py311h1eadf79_4 @@ -471,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.6=pyhd8ed1ab_0 + - boto3=1.33.9=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - dagster=1.5.10=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.1=py311h5646c56_1 + - gdal=3.8.0=py311h5646c56_6 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.24.0=pyhca7485f_0 + - google-auth=2.25.1=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - graphviz=9.0.0=hee74176_1 - ipykernel=6.26.0=pyh3cd1d5f_0 @@ -493,14 +492,14 @@ dependencies: - pre-commit=3.5.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - - scikit-learn=1.3.2=py311h66081b9_1 + - 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 - - fiona=1.9.5=py311h809632c_1 - - google-api-core=2.14.0=pyhd8ed1ab_0 + - fiona=1.9.5=py311h809632c_2 + - google-api-core=2.15.0=pyhd8ed1ab_0 - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 - jupyter_console=6.6.3=pyhd8ed1ab_0 - jupyter_events=0.9.0=pyhd8ed1ab_0 @@ -516,17 +515,17 @@ dependencies: - tabulator=1.53.5=pyhd8ed1ab_0 - dagster-webserver=1.5.10=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - - google-cloud-core=2.3.3=pyhd8ed1ab_0 + - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-dataset=14.0.1=hc222712_3_cpu - libarrow-flight-sql=14.0.1=h2cc6c1c_3_cpu - nbconvert-core=7.12.0=pyhd8ed1ab_0 - tableschema=1.19.3=pyh9f0ad1d_0 - datapackage=1.15.2=pyh44b312d_0 - google-cloud-storage=2.13.0=pyhca7485f_0 - - jupyter_server=2.11.2=pyhd8ed1ab_0 + - jupyter_server=2.12.1=pyhd8ed1ab_0 - libarrow-substrait=14.0.1=h2cc6c1c_3_cpu - nbconvert-pandoc=7.12.0=pyhd8ed1ab_0 - - gcsfs=2023.12.0=pyhd8ed1ab_0 + - gcsfs=2023.12.1=pyhd8ed1ab_0 - jupyter-lsp=2.2.1=pyhd8ed1ab_0 - jupyter-resource-usage=1.0.1=pyhd8ed1ab_0 - jupyterlab_server=2.25.2=pyhd8ed1ab_0 diff --git a/environments/conda-osx-arm64.lock.yml b/environments/conda-osx-arm64.lock.yml index 57b4d6b79e..9f64382dfb 100644 --- a/environments/conda-osx-arm64.lock.yml +++ b/environments/conda-osx-arm64.lock.yml @@ -71,7 +71,7 @@ dependencies: - lz4-c=1.9.4=hb7217d7_0 - ncurses=6.4=h463b476_2 - nspr=4.35=hb7217d7_0 - - openssl=3.2.0=h0d3ecfb_1 + - openssl=3.1.4=h0d3ecfb_0 - pcre2=10.42=h26f9a81_0 - pixman=0.42.2=h13dd4ca_0 - snappy=1.1.10=h17c5cce_0 @@ -90,7 +90,7 @@ dependencies: - libedit=3.1.20191231=hc8eb9b7_2 - libevent=2.1.12=h2757513_1 - libgfortran=5.0.0=13_2_0_hd922786_1 - - libglib=2.78.1=hb438215_1 + - libglib=2.78.3=hb438215_0 - libkml=1.3.0=h1eb4d9f_1018 - libllvm15=15.0.7=h504e6bf_3 - libnghttp2=1.58.0=ha4dd798_0 @@ -159,7 +159,7 @@ dependencies: - defusedxml=0.7.1=pyhd8ed1ab_0 - distlib=0.3.7=pyhd8ed1ab_0 - docstring_parser=0.15=pyhd8ed1ab_0 - - docutils=0.20.1=py311h267d04e_2 + - docutils=0.20.1=py311h267d04e_3 - entrypoints=0.4=pyhd8ed1ab_0 - et_xmlfile=1.1.0=pyhd8ed1ab_0 - exceptiongroup=1.2.0=pyhd8ed1ab_0 @@ -167,8 +167,8 @@ dependencies: - executing=2.0.1=pyhd8ed1ab_0 - filelock=3.13.1=pyhd8ed1ab_0 - frozenlist=1.4.0=py311heffc1b2_1 - - fsspec=2023.12.0=pyhca7485f_0 - - google-cloud-sdk=455.0.0=py311h267d04e_0 + - fsspec=2023.12.1=pyhca7485f_0 + - google-cloud-sdk=456.0.0=py311h267d04e_0 - greenlet=3.0.1=py311hbaf5611_0 - hpack=4.0.0=pyh9f0ad1d_0 - httptools=0.6.1=py311h05b510d_0 @@ -190,10 +190,10 @@ dependencies: - libcurl=8.4.0=h2d989ff_0 - libgd=2.3.3=hfdf3952_9 - libgrpc=1.59.2=hbcf6334_0 - - libpq=16.1=hd435d45_2 + - libpq=16.1=hd435d45_0 - llvmlite=0.41.1=py311hf5d242d_0 - locket=1.0.0=pyhd8ed1ab_0 - - lxml=4.9.3=py311hbafe683_1 + - lxml=4.9.3=py311hdef8331_2 - marko=2.0.2=pyhd8ed1ab_0 - markupsafe=2.1.3=py311heffc1b2_1 - mdurl=0.1.0=pyhd8ed1ab_0 @@ -203,7 +203,6 @@ dependencies: - msgpack-python=1.0.7=py311hd03642b_0 - multidict=6.0.4=py311he2be06e_1 - multimethod=1.9.1=pyhd8ed1ab_0 - - munch=4.0.0=pyhd8ed1ab_0 - munkres=1.1.4=pyh9f0ad1d_0 - mypy_extensions=1.0.0=pyha770c72_0 - nest-asyncio=1.5.8=pyhd8ed1ab_0 @@ -301,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.1=h808cd33_0 + - cfitsio=4.3.0=hca87796_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 @@ -346,12 +345,12 @@ dependencies: - pexpect=4.8.0=pyh1a96a4e_2 - pint=0.22=pyhd8ed1ab_1 - pip=23.3.1=pyhd8ed1ab_0 - - poppler=23.12.0=hcdd998b_0 - - postgresql=16.1=hc6ab77f_2 + - poppler=23.11.0=hcdd998b_0 + - postgresql=16.1=hc6ab77f_0 - proj=9.3.0=h52fb9d0_2 - prompt-toolkit=3.0.41=pyha770c72_0 - protobuf=4.24.4=py311h4d1eceb_0 - - psycopg2=2.9.9=py311h589e011_0 + - psycopg2=2.9.7=py311h589e011_1 - pyasn1-modules=0.3.0=pyhd8ed1ab_0 - pyobjc-core=10.0=py311hb702dc4_0 - pyproject_hooks=1.0.0=pyhd8ed1ab_0 @@ -360,7 +359,7 @@ dependencies: - python-slugify=8.0.1=pyhd8ed1ab_2 - pyu2f=0.1.5=pyhd8ed1ab_0 - qtpy=2.4.1=pyhd8ed1ab_0 - - referencing=0.31.1=pyhd8ed1ab_0 + - referencing=0.32.0=pyhd8ed1ab_0 - restructuredtext_lint=1.4.0=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_0 - rsa=4.9=pyhd8ed1ab_0 @@ -383,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.7=pyhd8ed1ab_0 + - botocore=1.33.9=pyhd8ed1ab_0 - branca=0.7.0=pyhd8ed1ab_1 - croniter=2.0.1=pyhd8ed1ab_0 - cryptography=41.0.7=py311h08c85a6_1 @@ -391,7 +390,7 @@ dependencies: - geotiff=1.7.1=h71398c0_14 - gitpython=3.1.40=pyhd8ed1ab_0 - google-crc32c=1.1.2=py311h533d1a3_5 - - googleapis-common-protos=1.61.0=pyhd8ed1ab_0 + - googleapis-common-protos=1.62.0=pyhd8ed1ab_0 - gql=3.4.1=pyhd8ed1ab_0 - graphql-relay=3.2.0=pyhd8ed1ab_0 - grpcio-health-checking=1.59.2=pyhd8ed1ab_0 @@ -408,7 +407,7 @@ dependencies: - pbr=6.0.0=pyhd8ed1ab_0 - pendulum=2.1.2=py311heffc1b2_6 - prompt_toolkit=3.0.41=hd8ed1ab_0 - - psycopg2-binary=2.9.9=pyhd8ed1ab_0 + - psycopg2-binary=2.9.7=pyhd8ed1ab_1 - pybtex=0.24.0=pyhd8ed1ab_2 - pydantic-core=2.14.5=py311h94f323b_0 - pyobjc-framework-cocoa=10.0=py311hb702dc4_1 @@ -445,13 +444,13 @@ dependencies: - gtk2=2.24.33=h57013de_2 - h3-py=3.7.6=py311ha891d26_1 - httpx=0.25.2=pyhd8ed1ab_0 - - identify=2.5.32=pyhd8ed1ab_0 - - ipython=8.18.1=pyh31011fe_2 + - identify=2.5.33=pyhd8ed1ab_0 + - ipython=8.18.1=pyh707e725_3 - isoduration=20.11.0=pyhd8ed1ab_0 - jsonschema=4.20.0=pyhd8ed1ab_0 - jupyter_client=8.6.0=pyhd8ed1ab_0 - keyring=24.3.0=py311h267d04e_0 - - libgdal=3.8.1=hac00559_1 + - libgdal=3.8.0=h76f3012_6 - librsvg=2.56.3=h0db3404_0 - numba=0.58.1=py311h9ec4793_0 - numexpr=2.8.7=py311h6e08293_4 @@ -471,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.6=pyhd8ed1ab_0 + - boto3=1.33.9=pyhd8ed1ab_0 - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0 - dagster=1.5.10=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.1=py311h32a4f3d_1 + - gdal=3.8.0=py311h32a4f3d_6 - geopandas-base=0.14.1=pyha770c72_0 - - google-auth=2.24.0=pyhca7485f_0 + - google-auth=2.25.1=pyhca7485f_0 - gql-with-requests=3.4.1=pyhd8ed1ab_0 - graphviz=9.0.0=h3face73_1 - ipykernel=6.26.0=pyh3cd1d5f_0 @@ -493,14 +492,14 @@ dependencies: - pre-commit=3.5.0=pyha770c72_0 - pydantic-settings=2.1.0=pyhd8ed1ab_1 - requests-oauthlib=1.3.1=pyhd8ed1ab_0 - - scikit-learn=1.3.2=py311ha25ca4d_1 + - 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 - - fiona=1.9.5=py311h4760b73_1 - - google-api-core=2.14.0=pyhd8ed1ab_0 + - fiona=1.9.5=py311h4760b73_2 + - google-api-core=2.15.0=pyhd8ed1ab_0 - google-auth-oauthlib=1.1.0=pyhd8ed1ab_0 - jupyter_console=6.6.3=pyhd8ed1ab_0 - jupyter_events=0.9.0=pyhd8ed1ab_0 @@ -516,17 +515,17 @@ dependencies: - tabulator=1.53.5=pyhd8ed1ab_0 - dagster-webserver=1.5.10=pyhd8ed1ab_0 - geopandas=0.14.1=pyhd8ed1ab_0 - - google-cloud-core=2.3.3=pyhd8ed1ab_0 + - google-cloud-core=2.4.1=pyhd8ed1ab_0 - libarrow-dataset=14.0.1=had9dd58_3_cpu - libarrow-flight-sql=14.0.1=h660fe36_3_cpu - nbconvert-core=7.12.0=pyhd8ed1ab_0 - tableschema=1.19.3=pyh9f0ad1d_0 - datapackage=1.15.2=pyh44b312d_0 - google-cloud-storage=2.13.0=pyhca7485f_0 - - jupyter_server=2.11.2=pyhd8ed1ab_0 + - jupyter_server=2.12.1=pyhd8ed1ab_0 - libarrow-substrait=14.0.1=h594d712_3_cpu - nbconvert-pandoc=7.12.0=pyhd8ed1ab_0 - - gcsfs=2023.12.0=pyhd8ed1ab_0 + - gcsfs=2023.12.1=pyhd8ed1ab_0 - jupyter-lsp=2.2.1=pyhd8ed1ab_0 - jupyter-resource-usage=1.0.1=pyhd8ed1ab_0 - jupyterlab_server=2.25.2=pyhd8ed1ab_0 diff --git a/pyproject.toml b/pyproject.toml index 187f474555..86a02af819 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -263,6 +263,9 @@ filterwarnings = [ "once:The behavior of DataFrame concatenation with empty or all-NA entries is deprecated.:FutureWarning", ] +markers = [ + "slow: marks tests as slow (deselect with '-m \"not slow\"')", +] # Oddly, despite the use of --cov-config=pyproject.toml here, pytest does not seem to # pick up the source directories specified in the [tool.coverage.run] section below. # (though it *does* pick up the omit parameters!). This means we need to specify the diff --git a/src/pudl/metadata/resources/ferc1_eia_record_linkage.py b/src/pudl/metadata/resources/ferc1_eia_record_linkage.py index e1a5f89032..c60ecedf3f 100644 --- a/src/pudl/metadata/resources/ferc1_eia_record_linkage.py +++ b/src/pudl/metadata/resources/ferc1_eia_record_linkage.py @@ -23,8 +23,8 @@ Because generators are often owned by multiple utilities, another dimension of this plant part table involves generating two records for each owner: one for the portion of the plant part they own and one for the plant part as a whole. The -portion records are labeled in the "ownership_record_type" column as "owned" -and the total records are labeled as "total". +portion records are labeled in the ``ownership_record_type`` column as ``owned`` +and the total records are labeled as ``total``. This table includes A LOT of duplicative information about EIA plants. It is primarily meant for use as an input into the record linkage between FERC1 plants and EIA.""", diff --git a/src/pudl/output/ferc1.py b/src/pudl/output/ferc1.py index 5f95bb600b..3594701306 100644 --- a/src/pudl/output/ferc1.py +++ b/src/pudl/output/ferc1.py @@ -70,8 +70,8 @@ ], group_metric_tolerances=GroupMetricTolerances( ungrouped=MetricTolerances( - error_frequency=0.014, - relative_error_magnitude=0.04, + error_frequency=0.011, + relative_error_magnitude=0.004, null_calculated_value_frequency=1.0, ), report_year=MetricTolerances( @@ -1074,6 +1074,27 @@ class NodeId(NamedTuple): plant_function: str | pandas_NAType +class OffByFactoid(NamedTuple): + """A calculated factoid which is off by one other factoid. + + A factoid where a sizeable majority of utilities are using a non-standard and + non-reported calculation to generate it. These calculated factoids are either + missing one factoid, or include an additional factoid not included in the FERC + metadata. Thus, the calculations are 'off by' this factoid. + """ + + table_name: str + xbrl_factoid: str + utility_type: str | pandas_NAType + plant_status: str | pandas_NAType + plant_function: str | pandas_NAType + table_name_off_by: str + xbrl_factoid_off_by: str + utility_type_off_by: str | pandas_NAType + plant_status_off_by: str | pandas_NAType + plant_function_off_by: str | pandas_NAType + + @asset def _out_ferc1__explosion_tags(table_dimensions_ferc1) -> pd.DataFrame: """Grab the stored tables of tags and add inferred dimension.""" @@ -1159,9 +1180,10 @@ def _aggregatable_dimension_tags( def exploded_table_asset_factory( root_table: str, - table_names_to_explode: list[str], + table_names: list[str], seed_nodes: list[NodeId], group_metric_checks: GroupMetricChecks, + off_by_facts: list[OffByFactoid], io_manager_key: str | None = None, ) -> AssetsDefinition: """Create an exploded table based on a set of related input tables.""" @@ -1172,7 +1194,7 @@ def exploded_table_asset_factory( ), "_out_ferc1__explosion_tags": AssetIn("_out_ferc1__explosion_tags"), } - ins |= {table_name: AssetIn(table_name) for table_name in table_names_to_explode} + ins |= {table_name: AssetIn(table_name) for table_name in table_names} @asset(name=f"exploded_{root_table}", ins=ins, io_manager_key=io_manager_key) def exploded_tables_asset( @@ -1189,6 +1211,7 @@ def exploded_tables_asset( "metadata_xbrl_ferc1", "calculation_components_xbrl_ferc1", "_out_ferc1__explosion_tags", + "off_by_facts", ] } return Exploder( @@ -1199,6 +1222,7 @@ def exploded_tables_asset( seed_nodes=seed_nodes, tags=tags, group_metric_checks=group_metric_checks, + off_by_facts=off_by_facts, ).boom(tables_to_explode=tables_to_explode) return exploded_tables_asset @@ -1214,7 +1238,7 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: explosion_args = [ { "root_table": "income_statement_ferc1", - "table_names_to_explode": [ + "table_names": [ "income_statement_ferc1", "depreciation_amortization_summary_ferc1", "electric_operating_expenses_ferc1", @@ -1232,10 +1256,11 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: plant_function=pd.NA, ), ], + "off_by_facts": [], }, { "root_table": "balance_sheet_assets_ferc1", - "table_names_to_explode": [ + "table_names": [ "balance_sheet_assets_ferc1", "utility_plant_summary_ferc1", "plant_in_service_ferc1", @@ -1253,10 +1278,48 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: plant_function=pd.NA, ) ], + "off_by_facts": [ + OffByFactoid( + "utility_plant_summary_ferc1", + "utility_plant_in_service_classified_and_property_under_capital_leases", + "electric", + pd.NA, + pd.NA, + "utility_plant_summary_ferc1", + "utility_plant_in_service_completed_construction_not_classified", + "electric", + pd.NA, + pd.NA, + ), + OffByFactoid( + "utility_plant_summary_ferc1", + "utility_plant_in_service_classified_and_property_under_capital_leases", + "electric", + pd.NA, + pd.NA, + "utility_plant_summary_ferc1", + "utility_plant_in_service_property_under_capital_leases", + "electric", + pd.NA, + pd.NA, + ), + OffByFactoid( + "utility_plant_summary_ferc1", + "depreciation_utility_plant_in_service", + "electric", + pd.NA, + pd.NA, + "utility_plant_summary_ferc1", + "amortization_of_other_utility_plant_utility_plant_in_service", + "electric", + pd.NA, + pd.NA, + ), + ], }, { "root_table": "balance_sheet_liabilities_ferc1", - "table_names_to_explode": [ + "table_names": [ "balance_sheet_liabilities_ferc1", "retained_earnings_ferc1", ], @@ -1272,6 +1335,7 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: plant_function=pd.NA, ) ], + "off_by_facts": [], }, ] return [exploded_table_asset_factory(**kwargs) for kwargs in explosion_args] @@ -1292,6 +1356,7 @@ def __init__( seed_nodes: list[NodeId], tags: pd.DataFrame = pd.DataFrame(), group_metric_checks: GroupMetricChecks = GroupMetricChecks(), + off_by_facts: list[OffByFactoid] = None, ): """Instantiate an Exploder class. @@ -1310,6 +1375,7 @@ def __init__( self.calculation_components_xbrl_ferc1 = calculation_components_xbrl_ferc1 self.seed_nodes = seed_nodes self.tags = tags + self.off_by_facts = off_by_facts @cached_property def exploded_calcs(self: Self): @@ -1360,7 +1426,7 @@ def exploded_calcs(self: Self): .sort_index() .reset_index() ) - + calc_explode = self.add_sizable_minority_corrections_to_calcs(calc_explode) ############################################################################## # Everything below here is error checking / debugging / temporary fixes dupes = calc_explode.duplicated(subset=parent_cols + calc_cols, keep=False) @@ -1394,6 +1460,39 @@ def exploded_calcs(self: Self): return calc_explode + def add_sizable_minority_corrections_to_calcs( + self: Self, exploded_calcs: pd.DataFrame + ) -> pd.DataFrame: + """Add correction calculation records for the sizable fuck up utilities.""" + if not self.off_by_facts: + return exploded_calcs + facts_to_fix = ( + pd.DataFrame(self.off_by_facts) + .rename(columns={col: f"{col}_parent" for col in NodeId._fields}) + .assign( + xbrl_factoid=( + lambda x: x.xbrl_factoid_parent + + "_off_by_" + + x.xbrl_factoid_off_by + + "_correction" + ), + weight=1, + is_total_to_subdimensions_calc=False, + # theses fixes rn are only from inter-table calcs. + # if they weren't we'd need to check within the group of + # the parent fact like in process_xbrl_metadata_calculations + is_within_table_calc=False, + ) + .drop(columns=["xbrl_factoid_off_by"]) + ) + facts_to_fix.columns = facts_to_fix.columns.str.removesuffix("_off_by") + return pd.concat( + [ + exploded_calcs, + facts_to_fix[exploded_calcs.columns].astype(exploded_calcs.dtypes), + ] + ) + @cached_property def exploded_meta(self: Self) -> pd.DataFrame: """Combine a set of interrelated table's metatada for use in :class:`Exploder`. @@ -1495,7 +1594,7 @@ def calculation_forest(self: Self) -> "XbrlCalculationForestFerc1": ) @cached_property - def other_dimensions(self: Self) -> list[str]: + def dimensions(self: Self) -> list[str]: """Get all of the column names for the other dimensions.""" return pudl.transform.ferc1.other_dimensions(table_names=self.table_names) @@ -1542,6 +1641,11 @@ def value_col(self: Self) -> str: value_col = list(set(value_cols))[0] return value_col + @property + def calc_idx(self: Self) -> list[str]: + """Primary key columns for calculations in this explosion.""" + return [col for col in list(NodeId._fields) if col in self.exploded_pks] + def boom(self: Self, tables_to_explode: dict[str, pd.DataFrame]) -> pd.DataFrame: """Explode a set of nested tables. @@ -1558,14 +1662,14 @@ def boom(self: Self, tables_to_explode: dict[str, pd.DataFrame]) -> pd.DataFrame """ exploded = ( self.initial_explosion_concatenation(tables_to_explode) + .pipe(self.calculate_intertable_non_total_calculations) + .pipe(self.add_sizable_minority_corrections) .pipe(self.reconcile_intertable_calculations) .pipe(self.calculation_forest.leafy_data, value_col=self.value_col) ) # Identify which columns should be kept in the output... # TODO: Define schema for the tables explicitly. - cols_to_keep = list( - set(self.exploded_pks + self.other_dimensions + [self.value_col]) - ) + cols_to_keep = list(set(self.exploded_pks + self.dimensions + [self.value_col])) if ("utility_type" in cols_to_keep) and ( "utility_type_other" in exploded.columns ): @@ -1632,6 +1736,122 @@ def initial_explosion_concatenation( ) return exploded + def calculate_intertable_non_total_calculations( + self, exploded: pd.DataFrame + ) -> pd.DataFrame: + """Calculate the inter-table non-total calculable xbrl_factoids.""" + # add the abs_diff column for the calculated fields + calculated_df = pudl.transform.ferc1.calculate_values_from_components( + calculation_components=self.exploded_calcs[ + ~self.exploded_calcs.is_within_table_calc + & ~self.exploded_calcs.is_total_to_subdimensions_calc + ], + data=exploded, + calc_idx=self.calc_idx, + value_col=self.value_col, + ) + return calculated_df + + def add_sizable_minority_corrections( + self: Self, calculated_df: pd.DataFrame + ) -> pd.DataFrame: + """Identify and fix the utilities that report calcs off-by one other fact. + + We noticed that there are a sizable minority of utilities that report some + calculated values with a different set of child subcomponents. Our tooling + for these calculation expects all utilities to report in the same manner. + So we have identified the handful of worst calculable ``xbrl_factiod`` + offenders :attr:`self.off_by_facts`. This method identifies data corrections + for those :attr:`self.off_by_facts` and adds them into the exploded data table. + + The data corrections are identified by calculating the absolute difference + between the reported value and calculable value from the standard set of + subcomponents (via :func:`pudl.transform.ferc1.calculate_values_from_components`) + and finding the child factiods that have the same value as the absolute difference. + This indicates that the calculable parent factiod is off by that cooresponding + child fact. + + Relatedly, :meth:`add_sizable_minority_corrections_to_calcs` adds these + :attr:`self.off_by_facts` to :attr:`self.exploded_calcs`. + """ + if not self.off_by_facts: + return calculated_df + + off_by = pd.DataFrame(self.off_by_facts) + not_close = ( + calculated_df[~np.isclose(calculated_df.abs_diff, 0)] + .set_index(list(NodeId._fields)) + # grab the parent side of the off_by facts + .loc[off_by.set_index(list(NodeId._fields)).index.unique()] + .reset_index() + ) + off_by_fact = ( + calculated_df[calculated_df.row_type_xbrl != "correction"] + .set_index(list(NodeId._fields)) + # grab the child side of the off_by facts + .loc[ + off_by.set_index( + [f"{col}_off_by" for col in list(NodeId._fields)] + ).index.unique() + ] + .reset_index() + ) + # Idenfity the calculations with one missing other fact + # when the diff is the same as the value of another fact, then that + # calculated value could have been perfect with the addition of the + # missing facoid. + data_corrections = ( + pd.merge( + left=not_close, + right=off_by_fact, + left_on=["report_year", "utility_id_ferc1", "abs_diff"], + right_on=["report_year", "utility_id_ferc1", self.value_col], + how="inner", + suffixes=("", "_off_by"), + ) + # use a dict/kwarg for assign so we can dynamically set the name of value_col + # the correction value is the diff - not the abs_diff from not_close or value_col + # from off_by_fact bc often the utility included a fact so this diff is negative + .assign( + **{ + "xbrl_factoid": ( + lambda x: x.xbrl_factoid + + "_off_by_" + + x.xbrl_factoid_off_by + + "_correction" + ), + self.value_col: lambda x: x["diff"], + "row_type_xbrl": "correction", + } + )[ + # drop all the _off_by and calc cols + list(NodeId._fields) + + ["report_year", "utility_id_ferc1", self.value_col, "row_type_xbrl"] + ] + ) + bad_utils = data_corrections.utility_id_ferc1.unique() + logger.info( + f"Adding {len(data_corrections)} from {len(bad_utils)} utilities that report differently." + ) + dtype_calced = { + col: dtype + for (col, dtype) in calculated_df.dtypes.items() + if col in data_corrections.columns + } + corrected = pd.concat( + [calculated_df, data_corrections.astype(dtype_calced)] + ).set_index(self.calc_idx) + # now we are going to re-calculate just the fixed facts + fixed_facts = corrected.loc[off_by.set_index(self.calc_idx).index.unique()] + unfixed_facts = corrected.loc[ + corrected.index.difference(off_by.set_index(self.calc_idx).index.unique()) + ].reset_index() + fixed_facts = self.calculate_intertable_non_total_calculations( + exploded=fixed_facts.drop(columns=["calculated_value"]).reset_index() + ) + + return pd.concat([unfixed_facts, fixed_facts.astype(unfixed_facts.dtypes)]) + def reconcile_intertable_calculations( self: Self, exploded: pd.DataFrame ) -> pd.DataFrame: @@ -1655,18 +1875,10 @@ def reconcile_intertable_calculations( f"{self.root_table}: Reconcile inter-table calculations: " f"{list(calculations_intertable.xbrl_factoid.unique())}." ) - calc_idx = [col for col in list(NodeId._fields) if col in self.exploded_pks] logger.info("Checking inter-table, non-total to subtotal calcs.") - calculated_df = pudl.transform.ferc1.calculate_values_from_components( - calculation_components=calculations_intertable[ - ~calculations_intertable.is_total_to_subdimensions_calc - ], - data=exploded, - calc_idx=calc_idx, - value_col=self.value_col, - ) + # we've added calculated fields via calculate_intertable_non_total_calculations calculated_df = pudl.transform.ferc1.check_calculation_metrics( - calculated_df=calculated_df, group_metric_checks=self.group_metric_checks + calculated_df=exploded, group_metric_checks=self.group_metric_checks ) calculated_df = pudl.transform.ferc1.add_corrections( calculated_df=calculated_df, @@ -1679,8 +1891,8 @@ def reconcile_intertable_calculations( calculation_components=calculations_intertable[ calculations_intertable.is_total_to_subdimensions_calc ], - data=exploded, - calc_idx=calc_idx, + data=exploded.drop(columns="calculated_value"), + calc_idx=self.calc_idx, value_col=self.value_col, ) subtotal_calcs = pudl.transform.ferc1.check_calculation_metrics( diff --git a/src/pudl/transform/ferc1.py b/src/pudl/transform/ferc1.py index b8b9843974..92d716ff69 100644 --- a/src/pudl/transform/ferc1.py +++ b/src/pudl/transform/ferc1.py @@ -1151,7 +1151,8 @@ def calculate_values_from_components( {value_col: "float64", "calculated_value": "float64"} ) calculated_df = calculated_df.assign( - abs_diff=lambda x: abs(x[value_col] - x.calculated_value), + diff=lambda x: x[value_col] - x.calculated_value, + abs_diff=lambda x: abs(x["diff"]), rel_diff=lambda x: np.where( (x[value_col] != 0.0), abs(x.abs_diff / x[value_col]), diff --git a/test/unit/io_managers_test.py b/test/unit/io_managers_test.py index eb407246c9..5cb8c863cd 100644 --- a/test/unit/io_managers_test.py +++ b/test/unit/io_managers_test.py @@ -242,6 +242,7 @@ def test_pudl_sqlite_io_manager_delete_stmt(fake_pudl_sqlite_io_manager_fixture) assert len(returned_df) == 1 +@pytest.mark.slow def test_migrations_match_metadata(tmp_path, monkeypatch): """If you create a `PudlSQLiteIOManager` that points at a non-existing `pudl.sqlite` - it will initialize the DB based on the `package`. @@ -422,7 +423,10 @@ def test_ferc_xbrl_sqlite_io_manager_dedupes(mocker, tmp_path): ) -@hypothesis.settings(print_blob=True, deadline=400) +# ridiculous deadline - dataframe generation is always slow and sometimes +# *very* slow +@pytest.mark.slow +@hypothesis.settings(print_blob=True, deadline=2_000) @hypothesis.given(example_schema.strategy(size=3)) def test_filter_for_freshest_data(df): # XBRL context is the identifying metadata for reported values diff --git a/test/unit/settings_test.py b/test/unit/settings_test.py index d2495be82d..c2034f7695 100644 --- a/test/unit/settings_test.py +++ b/test/unit/settings_test.py @@ -281,6 +281,7 @@ def test_partitions_with_json_normalize(pudl_etl_settings): ) +@pytest.mark.slow def test_partitions_for_datasource_table(pudl_etl_settings): """Test whether or not we can make the datasource table.""" ds = Datastore(local_cache_path=PudlPaths().data_dir)