From ee0a9e5212b90732a8eab58095a81f3fee02c845 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Tue, 28 May 2024 14:37:25 -0400 Subject: [PATCH 01/56] recategorize changes into "Common Changelog" groups, format headings, and use imperative mood According to --- CHANGELOG.md | 426 +++++++++++++++++++++++++++------------------------ 1 file changed, 229 insertions(+), 197 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aabad758..219275a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,224 +2,256 @@ ## [Unreleased] -* Changes +### Changed +- [#555](https://github.com/nsidc/earthaccess/issues/555): YAML formatting is + now performed with `yamlfmt` instead of `prettier`. +- [#511](https://github.com/nsidc/earthaccess/issues/511): Replace `print` + calls with `logging` calls where appropriate and add T20 Ruff rule. +- [#508](https://github.com/nsidc/earthaccess/issues/508): Correct and + enhance static type hints for functions and methods that make CMR queries + or handle CMR query results. +- [#562](https://github.com/nsidc/earthaccess/issues/562): The destination + path is now created prior to direct S3 downloads, if it doesn't already + exist. + +### Added +- [#483](https://github.com/nsidc/earthaccess/issues/483): Now using + [Search After](https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after) + for collection and granule searches to support deep-paging through large + result sets. +- [#421](https://github.com/nsidc/earthaccess/issues/421): Enable queries to + Earthdata User Acceptance Testing (UAT) system for authenticated accounts. - * [#421](https://github.com/nsidc/earthaccess/issues/421): Removed the +### Removed +- **Breaking:**: [#421](https://github.com/nsidc/earthaccess/issues/421): Remove the `get_user_profile` method and the `email_address` and `profile` attributes from the `Auth` class. Calling the EDL API to get user profile information is not intended for library access and is not necessary for this library's intended use cases. - * [#555](https://github.com/nsidc/earthaccess/issues/555): YAML formatting is - now performed with `yamlfmt` instead of `prettier`. - * [#511](https://github.com/nsidc/earthaccess/issues/511): Replaced `print` - calls with `logging` calls where appropriate and added T20 Ruff rule. -* Enhancements +## [0.9.0] - 2024-02-28 - * [#483](https://github.com/nsidc/earthaccess/issues/483): Now using - [Search After](https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after) - for collection and granule searches to support deep-paging through large - result sets. - * [#508](https://github.com/nsidc/earthaccess/issues/508): Corrected and - enhanced static type hints for functions and methods that make CMR queries - or handle CMR query results. - * [#421](https://github.com/nsidc/earthaccess/issues/421): Enabled queries to - Earthdata User Acceptance Testing (UAT) system for authenticated accounts. - * [#562](https://github.com/nsidc/earthaccess/issues/562): The destination - path is now created prior to direct S3 downloads, if it doesn't already - exist. +### Added +- Address #427 by adding parameters to collection query +- Add user-agent in the request to track usage, closes #436 + +### Fixed +- Fix #439 by implementing more trusted domains in the SessionWithRedirection +- Fix #438 by using an authenticated session for hits() -## [v0.9.0] 2024-02-28 - -* Bug fixes: - * fixed #439 by implementing more trusted domains in the SessionWithRedirection - * fixed #438 by using an authenticated session for hits() -* Enhancements: - * addressing #427 by adding parameters to collection query - * added user-agent in the request to track usage, closes #436 - -## [v0.8.2] 2023-12-06 -* Bug fixes: - * Enable AWS check with IMDSv2 - * Add region to running in AWS check - * Handle opening multi-file granules -* Maintenance: - * Add CI tests with minimum supported versions - * Update poetry lockfile - * Add `python-dateutil` as a direct dependency - * Remove binder PR comments - * Add YAML formatting (prettier) - -## [v0.8.1] 2023-12-01 -* New Features: - * Add `kerchunk` metadata consolidation utility. -* Enhancements: - * Handle S3 credential expiration more gracefully. -* Maintenanece: - * Use dependabot to update Github Actions. - * Consolidate dependabot updates. - * Switch to `ruff` for formatting. - -## [v0.8.0] 2023-11-29 -* Bug fixes: - * Fix zero granules being reported for restricted datasets. -* Enhancements: - * earthaccess will `raise` errors instead of `print`ing them in more cases. - * `daac` and `provider` parameters are now normalized to uppercase, since lowercase +## [0.8.2] - 2023-12-06 + +### Changed +- Update poetry lockfile +- Use YAML formatting (prettier) + +### Added +- Add CI tests with minimum supported versions +- Add `python-dateutil` as a direct dependency + +### Removed +- Remove binder PR comments + +### Fixed +- Enable AWS check with IMDSv2 +- Add region to running in AWS check +- Handle opening multi-file granules + +## [0.8.1] - 2023-12-01 + +### Changed +- Handle S3 credential expiration more gracefully. +- Use dependabot to update Github Actions. +- Consolidate dependabot updates. +- Switch to `ruff` for formatting. + +### Added +- Add `kerchunk` metadata consolidation utility. + +## [0.8.0] - 2023-11-29 + +### Changed +- earthaccess will `raise` errors instead of `print`ing them in more cases. +- `daac` and `provider` parameters are now normalized to uppercase, since lowercase characters are never valid. -## [v0.7.1] 2023-11-08 -* Bug Fixes: - * Treat granules without `RelatedUrls` as not cloud-hosted. +### Fixed +- Fix zero granules being reported for restricted datasets. -## [v0.7.0] 2023-10-31 -* Bug Fixes: - * Fix spelling mistake in `access` variable assignment (`direc` -> `direct`) - in `earthaccess.store._get_granules`. - * Pass `threads` arg to `_open_urls_https` in - `earthaccess.store._open_urls`, replacing the hard-coded value of 8. - * Return S3 data links by default when in region. -* Enhancements: - * `earthaccess.download` now accepts a single granule as input in addition to a list of granules. - * `earthaccess.download` now returns fully qualified local file paths. -* New Features: - * Earthaccess will now automatically search for Earthdata authentication. ``earthaccess.login()`` +## [0.7.1] - 2023-11-08 + +### Fixed +- Treat granules without `RelatedUrls` as not cloud-hosted. + +## [0.7.0] - 2023-10-31 + +### Changed +- `earthaccess.download` now accepts a single granule as input in addition to a list of granules. +- `earthaccess.download` now returns fully qualified local file paths. + +### Added +- Earthaccess will now automatically search for Earthdata authentication. ``earthaccess.login()`` still works as before, but is no longer required if you have a ``~/.netrc`` file for have set ``EARTHDATA_USERNAME`` and ``EARTHDATA_PASSWORD`` environment variables. - * Add `earthaccess.auth_environ()` utility for getting Earthdata authentication environment variables. - -## [v0.6.0] 2023-09-20 -* bug fixes: - * earthaccess.search_datasets() and earthaccess.search_data() can find restricted datasets #296 - * distributed serialization fixed for EarthAccessFile #301 and #276 -* new features: - * earthaccess.get_s3fs_session() can use the results to find the right set of S3 credentials - -## [v0.5.3] 2023-08-01 -* bug fixes: - * granule's size() returned zero - * Added exception handling for fsspec sessions, thanks to @jrbourbeau -* CI changes: - * integration tests are now only run when we push to main (after a merge) - * unit tests run for any branch and opened PR - -## [v0.5.2] 2023-04-21 -* bug fixes: - * Fixing #230 by removing Benedict as the dict handler, thanks to @psarka! - * S3 credential endpoints are tried with tokens and basic auth until all the DAACs accept the same auth - -* Core dependencies: - * Removed Benedict as the default dict for JSON coming from CMR. - -## [v0.5.1] 2023-03-20 - -* bug fixes: - * get_s3_credentials() only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 - * including tests for all DAAC S3 endpoints - * Notebooks updated to use the new top level API - * removed magic from dependencies (not available in windows and not used but just in tests) - -* CI changes: - * documentation for readthedocs fixed by including poetry as the default tool - * injected new secrets to test Auth using the icepyx convention (EARTHDATA_USERNAME) -* New Features - * we can get the user's profile with auth.user_profile which includes the user email - * added LAAD as a supported DAAC -## [v0.5.0] 2023-02-23 - -* bug fixes: - * @JessicaS11 fixed a bug where the Auth class was invoked without the proper parameters - * if a user specifies the netrc strategy and there is no netrc an exception is raised - * S3 URLs broke the Store class when opened outside AWS - * Opening files using URLs was not working properly on AWS, thanks to @amfriesz for reporting it! -* CI changes: - * documentation is now only built for the main, dev and documentation branches - * noteboks are executed every time the documentation gets published! -* New features: - * we can now use the top level API to get S3 credentials, authenticated fsspec and requests sessions! - * ASF direct access for Sentinel1 products is now available - -## [v0.4.7] 2022-12-11 - -* bug fixes: - * fixed open() for direct access - * python-magic is a test dependency so moved to the dev section. - * Minor edits in the README - -## [v0.4.6] 2022-12-08 - -* Features: - * search collections by DOI - * new API documentation and simplified notation to access data -* CI changes: - * only run the publish workflow after a release on github - -## [v0.4.1] 2022-11-02 - -* improved documentation: - * reimplemented python_cmr methods for docstring compatibility - * added types to method signatures -* Using `CMR-Search-After` see #145 - -* CI changes: - * Poetry is installed using the new script - * Dependabot alerts to monthly - -* Added GES_DISC S3 endpoint - -## [v0.4.0] 2022-08-17 - -* `store` - * uses fsspec s3fs for in cloud access and https sessions for out of region access - * we can open files with fsspec in and out of region (stream into xarray) -* `auth` - * we can persist our credentials into a `.netrc` file - -* Documentation - * added store, auth to docs and updated mkdocs congif - - -## [v0.3.0] 2022-04-28 - -- Fixed bug with CMR tokens -- dropped python 3.7 support -- updated python-cmr to NASA fork -- added documentation for readthedocs and github -- verifying git tag and poetry version are the same before publish to pypi +- Add `earthaccess.auth_environ()` utility for getting Earthdata authentication environment variables. + +### Fixed +- Fix spelling mistake in `access` variable assignment (`direc` -> `direct`) + in `earthaccess.store._get_granules`. +- Pass `threads` arg to `_open_urls_https` in + `earthaccess.store._open_urls`, replacing the hard-coded value of 8. +- Return S3 data links by default when in region. + +## [0.6.0] - 2023-09-20 + +### Added +- earthaccess.get_s3fs_session() can use the results to find the right set of S3 credentials + +### Fixed +- earthaccess.search_datasets() and earthaccess.search_data() can find restricted datasets #296 +- distributed serialization fixed for EarthAccessFile #301 and #276 + +## [0.5.3] - 2023-08-01 + +### Changed +- For CI, integration tests are now only run when we push to main (after a merge) +- For CI, unit tests are run for any branch and opened PR + +### Fixed +- granule's size() returned zero +- Add exception handling for fsspec sessions, thanks to @jrbourbeau + +## [0.5.2] - 2023-04-21 + +### Removed +- Remove Benedict (core dependency) as the default dict for JSON coming from CMR. + +### Fixed +- Fix #230 by removing Benedict as the dict handler, thanks to @psarka! +- S3 credential endpoints are tried with tokens and basic auth until all the DAACs accept the same auth + +## [0.5.1] - 2023-03-20 + +### Changed +- For CI, documentation for readthedocs fixed by including poetry as the default tool +- For CI, injected new secrets to test Auth using the icepyx convention (EARTHDATA_USERNAME) + +### Added +- Add ability to get the user's profile with auth.user_profile which includes the user email +- Add LAAD as a supported DAAC + +### Fixed +- get_s3_credentials() only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 +- including tests for all DAAC S3 endpoints +- Notebooks updated to use the new top level API +- removed magic from dependencies (not available in windows and not used but just in tests) + +## [0.5.0] - 2023-02-23 + +### Changed +- For CI, documentation is now only built for the main, dev and documentation branches +- For CI, noteboks are executed every time the documentation gets published! + +### Added +- Add ability to use the top level API to get S3 credentials, authenticated fsspec and requests sessions! +- Make available ASF direct access for Sentinel1 products + +### Fixed +- @JessicaS11 fixed a bug where the Auth class was invoked without the proper parameters +- if a user specifies the netrc strategy and there is no netrc an exception is raised +- S3 URLs broke the Store class when opened outside AWS +- Opening files using URLs was not working properly on AWS, thanks to @amfriesz for reporting it! + +## [0.4.7] - 2022-12-11 + +### Fixed +- Fix open() for direct access +- Move python-magic to the dev section because it is a test dependency +- Make minor edits in the README + +## [0.4.6] - 2022-12-08 + +### Changed +- For CI, only run the publish workflow after a release on GitHub + +### Added +- Add feature to search collections by DOI +- Add new API documentation and simplify notation to access data + +## [0.4.1] - 2022-11-02 + +### Changed +- For CI, install Poetry using the new script +- For CI, change dependabot alerts to monthly +- Improve documentation by reimplementing python_cmr methods for docstring compatibility +- Use `CMR-Search-After` see #145 + +### Added +- Add GES_DISC S3 endpoint +- Improve documentation by adding types to method signatures + +## [0.4.0] - 2022-08-17 + +### Added +- Add store, auth to docs and update mkdocs congif +- For `auth`, add ability to persist credentials into a `.netrc` file +- For `store`, use fsspec s3fs for in cloud access and https sessions for out of region access +- For `store`, can open files with fsspec in and out of region (stream into xarray) + +## [0.3.0] - 2022-04-28 + +### Changed +- Update python-cmr to NASA fork +- Drop unused `pydantic` dependency - Auth can refresh CMR tokens -- Dropped unused `pydantic` dependency -- Added missing `python-datutil` dependency +- Verify git tag and poetry version are the same before publish to pypi + +### Added +- Add documentation for readthedocs and GitHub + +### Removed +- **Breaking**: Dropped python 3.7 support -## [v0.2.2] 2022-03-23 -- Bug fixes to store to download multi-file granules +### Fixed +- Fix bug with CMR tokens +- Add missing `python-datutil` dependency + +## [0.2.2] - 2022-03-23 + +### Fixed +- Fix store to download multi-file granules - Fix granule formatting -## [v0.2.1] 2022-03-19 -- Renamed Accessor to Store -- relaxed dependency requirements +## [0.2.1] - 2022-03-19 + +### Changed +- Rename Accessor to Store +- Relax dependency requirements - Store can download plain links if they are on prem -## [v0.1.0-beta.1] - 2021-09-21 +## [0.1.0-beta.1] - 2021-09-21 + +_Conception!_ -- Conception! +### Added - Add basic classes to interact with NASA CMR, EDL and cloud access. - Basic object formatting. [Unreleased]: https://github.com/nsidc/earthaccess/compare/v0.9.0...HEAD -[v0.8.2]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.2 -[v0.8.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.1 -[v0.8.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.0 -[v0.7.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.7.1 -[v0.7.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.7.0 -[v0.6.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.6.0 -[v0.5.3]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.3 -[v0.5.2]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.2 -[v0.5.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.1 -[v0.5.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.0 -[v0.4.7]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.7 -[v0.4.6]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.6 -[v0.4.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.1 -[v0.3.0]: https://github.com/betolink/earthaccess/releases/tag/v0.3.0 -[v0.2.2]: https://github.com/betolink/earthaccess/releases/tag/v0.2.2 -[v0.2.1]: https://github.com/betolink/earthaccess/releases/tag/v0.2.1 -[v0.1.0-beta.1]: https://github.com/betolink/earthaccess/releases/tag/v0.1.0-beta.1 +[0.8.2]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.2 +[0.8.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.1 +[0.8.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.8.0 +[0.7.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.7.1 +[0.7.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.7.0 +[0.6.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.6.0 +[0.5.3]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.3 +[0.5.2]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.2 +[0.5.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.1 +[0.5.0]: https://github.com/nsidc/earthaccess/releases/tag/v0.5.0 +[0.4.7]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.7 +[0.4.6]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.6 +[0.4.1]: https://github.com/nsidc/earthaccess/releases/tag/v0.4.1 +[0.3.0]: https://github.com/betolink/earthaccess/releases/tag/v0.3.0 +[0.2.2]: https://github.com/betolink/earthaccess/releases/tag/v0.2.2 +[0.2.1]: https://github.com/betolink/earthaccess/releases/tag/v0.2.1 +[0.1.0-beta.1]: https://github.com/betolink/earthaccess/releases/tag/v0.1.0-beta.1 From 7fba5a3edc06e96749a7c96a18ca4c15a413ae48 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Wed, 29 May 2024 12:26:33 -0400 Subject: [PATCH 02/56] typo --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 219275a6..8ed932bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,7 @@ Earthdata User Acceptance Testing (UAT) system for authenticated accounts. ### Removed -- **Breaking:**: [#421](https://github.com/nsidc/earthaccess/issues/421): Remove the +- **Breaking**: [#421](https://github.com/nsidc/earthaccess/issues/421): Remove the `get_user_profile` method and the `email_address` and `profile` attributes from the `Auth` class. Calling the EDL API to get user profile information is not intended for library access and is not necessary for this library's @@ -150,7 +150,7 @@ ### Changed - For CI, documentation is now only built for the main, dev and documentation branches -- For CI, noteboks are executed every time the documentation gets published! +- For CI, notebooks are executed every time the documentation gets published! ### Added - Add ability to use the top level API to get S3 credentials, authenticated fsspec and requests sessions! @@ -193,8 +193,8 @@ ## [0.4.0] - 2022-08-17 ### Added -- Add store, auth to docs and update mkdocs congif -- For `auth`, add ability to persist credentials into a `.netrc` file +- Add store, auth to docs and update mkdocs config +- For `auth`, add the ability to persist credentials into a `.netrc` file - For `store`, use fsspec s3fs for in cloud access and https sessions for out of region access - For `store`, can open files with fsspec in and out of region (stream into xarray) From 3a9a5f5be7d7169e5dabe4e1f1517c105b9e0e68 Mon Sep 17 00:00:00 2001 From: Joseph H Kennedy Date: Fri, 7 Jun 2024 12:28:12 -0800 Subject: [PATCH 03/56] Add code of conduct and redirects to our docs --- docs/contributing/code-of-conduct.md | 1 + docs/contributing/index.md | 2 +- mkdocs.yml | 5 + poetry.lock | 982 +++++++++++++-------------- pyproject.toml | 1 + 5 files changed, 497 insertions(+), 494 deletions(-) create mode 100644 docs/contributing/code-of-conduct.md diff --git a/docs/contributing/code-of-conduct.md b/docs/contributing/code-of-conduct.md new file mode 100644 index 00000000..01f2ea20 --- /dev/null +++ b/docs/contributing/code-of-conduct.md @@ -0,0 +1 @@ +--8<-- "CODE_OF_CONDUCT.md" diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 50a606b9..3d149637 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -6,7 +6,7 @@ with the community and maintainers via [a GitHub Discussion](https://github.com/nsidc/earthaccess/discussions), or [any other method](our-meet-ups.md). -Please note that we have a [code of conduct](/CODE_OF_CONDUCT.md). Please follow it in all of your interactions with the project. +Please note that we have a [code of conduct](./code-of-conduct.md). Please follow it in all of your interactions with the project. ## First Steps to contribute diff --git a/mkdocs.yml b/mkdocs.yml index 579e0787..387588ff 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -46,6 +46,10 @@ plugins: rendering: show_root_heading: false show_source: false + - redirects: + redirect_maps: + 'CODE_OF_CONDUCT.md': 'contributing/code-of-conduct.md' + 'CODE_OF_CONDUCT.md.md': 'contributing/code-of-conduct.md' - mkdocs-jupyter: execute: True ignore: @@ -60,6 +64,7 @@ nav: - "Development": "contributing/development.md" - "Releasing": "contributing/releasing.md" - "Our meet-ups": "contributing/our-meet-ups.md" + - "Code of Conduct": "contributing/code-of-conduct.md" - "Resources": "resources.md" - USER GUIDE: - "user_guide/index.md" diff --git a/poetry.lock b/poetry.lock index b5c6df6f..4412b582 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,25 +1,25 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiobotocore" -version = "2.12.3" +version = "2.13.0" description = "Async client for aws services using botocore and aiohttp" optional = false python-versions = ">=3.8" files = [ - {file = "aiobotocore-2.12.3-py3-none-any.whl", hash = "sha256:86737685f4625e8f05c4e7a608a07cc97607263279f66cf6b02b640c4eafd324"}, - {file = "aiobotocore-2.12.3.tar.gz", hash = "sha256:e2a2929207bc5d62eb556106c2224c1fd106d5c65be2eb69f15cc8c34c44c236"}, + {file = "aiobotocore-2.13.0-py3-none-any.whl", hash = "sha256:f812afc678d71b0038fd1ce712ff111ab7f47bab81ce5b4c7d222d4b83bc0cb2"}, + {file = "aiobotocore-2.13.0.tar.gz", hash = "sha256:4badf5cab6ad400216319d14278e2c99ad9b708e28a0f231605a412e632de401"}, ] [package.dependencies] -aiohttp = ">=3.7.4.post0,<4.0.0" +aiohttp = ">=3.9.2,<4.0.0" aioitertools = ">=0.5.1,<1.0.0" -botocore = ">=1.34.41,<1.34.70" +botocore = ">=1.34.70,<1.34.107" wrapt = ">=1.10.10,<2.0.0" [package.extras] -awscli = ["awscli (>=1.32.41,<1.32.70)"] -boto3 = ["boto3 (>=1.34.41,<1.34.70)"] +awscli = ["awscli (>=1.32.70,<1.32.107)"] +boto3 = ["boto3 (>=1.34.70,<1.34.107)"] [[package]] name = "aiohttp" @@ -147,24 +147,24 @@ frozenlist = ">=1.1.0" [[package]] name = "annotated-types" -version = "0.6.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] name = "anyio" -version = "4.3.0" +version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] @@ -351,17 +351,6 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -403,13 +392,13 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "botocore" -version = "1.34.69" +version = "1.34.106" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.69-py3-none-any.whl", hash = "sha256:d3802d076d4d507bf506f9845a6970ce43adc3d819dd57c2791f5c19ed6e5950"}, - {file = "botocore-1.34.69.tar.gz", hash = "sha256:d1ab2bff3c2fd51719c2021d9fa2f30fbb9ed0a308f69e9a774ac92c8091380a"}, + {file = "botocore-1.34.106-py3-none-any.whl", hash = "sha256:4baf0e27c2dfc4f4d0dee7c217c716e0782f9b30e8e1fff983fce237d88f73ae"}, + {file = "botocore-1.34.106.tar.gz", hash = "sha256:921fa5202f88c3e58fdcb4b3acffd56d65b24bca47092ee4b27aa988556c0be6"}, ] [package.dependencies] @@ -421,7 +410,7 @@ urllib3 = [ ] [package.extras] -crt = ["awscrt (==0.19.19)"] +crt = ["awscrt (==0.20.9)"] [[package]] name = "bounded-pool-executor" @@ -447,13 +436,13 @@ files = [ [[package]] name = "bump-my-version" -version = "0.21.1" +version = "0.22.0" description = "Version bump your Python project" optional = false python-versions = ">=3.8" files = [ - {file = "bump_my_version-0.21.1-py3-none-any.whl", hash = "sha256:946a7edcf30c5a8574c579684df983136ea395f70c184e4db32eb3e307584c14"}, - {file = "bump_my_version-0.21.1.tar.gz", hash = "sha256:ec612474e9e790c3fbbfed153a10b356f84fc15096ceff181b399d5e985bfacc"}, + {file = "bump_my_version-0.22.0-py3-none-any.whl", hash = "sha256:57cd3ba68b8a84d774a9abd247a6c6323192151fa2b41f22eb6763cb17dfebee"}, + {file = "bump_my_version-0.22.0.tar.gz", hash = "sha256:b96f180d6aa154e98e199753e83847587609bd897df9114248e6392324c89620"}, ] [package.dependencies] @@ -473,13 +462,13 @@ test = ["coverage", "freezegun", "pre-commit", "pytest", "pytest-cov", "pytest-m [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] @@ -711,137 +700,126 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.1.1" +version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, - {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, - {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, - {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, - {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, - {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, - {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, - {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, - {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, - {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, - {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, - {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, - {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, - {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, - {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, - {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, - {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, - {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, ] [package.dependencies] -numpy = [ - {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""}, - {version = ">=1.26.0rc1,<2.0", markers = "python_version >= \"3.12\""}, -] +numpy = ">=1.20" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.5.1" +version = "7.5.3" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, - {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, - {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, - {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, - {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, - {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, - {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, - {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, - {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, - {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, - {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, - {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, - {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, - {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, - {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, - {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, - {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, - {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, - {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, - {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, - {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, - {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, - {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, - {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, - {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, - {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, - {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, - {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, - {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, - {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, - {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, - {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a6519d917abb15e12380406d721e37613e2a67d166f9fb7e5a8ce0375744cd45"}, + {file = "coverage-7.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aea7da970f1feccf48be7335f8b2ca64baf9b589d79e05b9397a06696ce1a1ec"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:923b7b1c717bd0f0f92d862d1ff51d9b2b55dbbd133e05680204465f454bb286"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62bda40da1e68898186f274f832ef3e759ce929da9a9fd9fcf265956de269dbc"}, + {file = "coverage-7.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b7339180d00de83e930358223c617cc343dd08e1aa5ec7b06c3a121aec4e1d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:25a5caf742c6195e08002d3b6c2dd6947e50efc5fc2c2205f61ecb47592d2d83"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:05ac5f60faa0c704c0f7e6a5cbfd6f02101ed05e0aee4d2822637a9e672c998d"}, + {file = "coverage-7.5.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:239a4e75e09c2b12ea478d28815acf83334d32e722e7433471fbf641c606344c"}, + {file = "coverage-7.5.3-cp310-cp310-win32.whl", hash = "sha256:a5812840d1d00eafae6585aba38021f90a705a25b8216ec7f66aebe5b619fb84"}, + {file = "coverage-7.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:33ca90a0eb29225f195e30684ba4a6db05dbef03c2ccd50b9077714c48153cac"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81bc26d609bf0fbc622c7122ba6307993c83c795d2d6f6f6fd8c000a770d974"}, + {file = "coverage-7.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cec2af81f9e7569280822be68bd57e51b86d42e59ea30d10ebdbb22d2cb7232"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55f689f846661e3f26efa535071775d0483388a1ccfab899df72924805e9e7cd"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50084d3516aa263791198913a17354bd1dc627d3c1639209640b9cac3fef5807"}, + {file = "coverage-7.5.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:341dd8f61c26337c37988345ca5c8ccabeff33093a26953a1ac72e7d0103c4fb"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ab0b028165eea880af12f66086694768f2c3139b2c31ad5e032c8edbafca6ffc"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5bc5a8c87714b0c67cfeb4c7caa82b2d71e8864d1a46aa990b5588fa953673b8"}, + {file = "coverage-7.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38a3b98dae8a7c9057bd91fbf3415c05e700a5114c5f1b5b0ea5f8f429ba6614"}, + {file = "coverage-7.5.3-cp311-cp311-win32.whl", hash = "sha256:fcf7d1d6f5da887ca04302db8e0e0cf56ce9a5e05f202720e49b3e8157ddb9a9"}, + {file = "coverage-7.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8c836309931839cca658a78a888dab9676b5c988d0dd34ca247f5f3e679f4e7a"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:296a7d9bbc598e8744c00f7a6cecf1da9b30ae9ad51c566291ff1314e6cbbed8"}, + {file = "coverage-7.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d6d21d8795a97b14d503dcaf74226ae51eb1f2bd41015d3ef332a24d0a17b3"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e317953bb4c074c06c798a11dbdd2cf9979dbcaa8ccc0fa4701d80042d4ebf1"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:705f3d7c2b098c40f5b81790a5fedb274113373d4d1a69e65f8b68b0cc26f6db"}, + {file = "coverage-7.5.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1196e13c45e327d6cd0b6e471530a1882f1017eb83c6229fc613cd1a11b53cd"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:015eddc5ccd5364dcb902eaecf9515636806fa1e0d5bef5769d06d0f31b54523"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fd27d8b49e574e50caa65196d908f80e4dff64d7e592d0c59788b45aad7e8b35"}, + {file = "coverage-7.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:33fc65740267222fc02975c061eb7167185fef4cc8f2770267ee8bf7d6a42f84"}, + {file = "coverage-7.5.3-cp312-cp312-win32.whl", hash = "sha256:7b2a19e13dfb5c8e145c7a6ea959485ee8e2204699903c88c7d25283584bfc08"}, + {file = "coverage-7.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0bbddc54bbacfc09b3edaec644d4ac90c08ee8ed4844b0f86227dcda2d428fcb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f78300789a708ac1f17e134593f577407d52d0417305435b134805c4fb135adb"}, + {file = "coverage-7.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b368e1aee1b9b75757942d44d7598dcd22a9dbb126affcbba82d15917f0cc155"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f836c174c3a7f639bded48ec913f348c4761cbf49de4a20a956d3431a7c9cb24"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:244f509f126dc71369393ce5fea17c0592c40ee44e607b6d855e9c4ac57aac98"}, + {file = "coverage-7.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c2872b3c91f9baa836147ca33650dc5c172e9273c808c3c3199c75490e709d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dd4b3355b01273a56b20c219e74e7549e14370b31a4ffe42706a8cda91f19f6d"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f542287b1489c7a860d43a7d8883e27ca62ab84ca53c965d11dac1d3a1fab7ce"}, + {file = "coverage-7.5.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:75e3f4e86804023e991096b29e147e635f5e2568f77883a1e6eed74512659ab0"}, + {file = "coverage-7.5.3-cp38-cp38-win32.whl", hash = "sha256:c59d2ad092dc0551d9f79d9d44d005c945ba95832a6798f98f9216ede3d5f485"}, + {file = "coverage-7.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:fa21a04112c59ad54f69d80e376f7f9d0f5f9123ab87ecd18fbb9ec3a2beed56"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5102a92855d518b0996eb197772f5ac2a527c0ec617124ad5242a3af5e25f85"}, + {file = "coverage-7.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d1da0a2e3b37b745a2b2a678a4c796462cf753aebf94edcc87dcc6b8641eae31"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8383a6c8cefba1b7cecc0149415046b6fc38836295bc4c84e820872eb5478b3d"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aad68c3f2566dfae84bf46295a79e79d904e1c21ccfc66de88cd446f8686341"}, + {file = "coverage-7.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e079c9ec772fedbade9d7ebc36202a1d9ef7291bc9b3a024ca395c4d52853d7"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bde997cac85fcac227b27d4fb2c7608a2c5f6558469b0eb704c5726ae49e1c52"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:990fb20b32990b2ce2c5f974c3e738c9358b2735bc05075d50a6f36721b8f303"}, + {file = "coverage-7.5.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3d5a67f0da401e105753d474369ab034c7bae51a4c31c77d94030d59e41df5bd"}, + {file = "coverage-7.5.3-cp39-cp39-win32.whl", hash = "sha256:e08c470c2eb01977d221fd87495b44867a56d4d594f43739a8028f8646a51e0d"}, + {file = "coverage-7.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:1d2a830ade66d3563bb61d1e3c77c8def97b30ed91e166c67d0632c018f380f0"}, + {file = "coverage-7.5.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:3538d8fb1ee9bdd2e2692b3b18c22bb1c19ffbefd06880f5ac496e42d7bb3884"}, + {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, ] [package.dependencies] @@ -1039,53 +1017,53 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "fonttools" -version = "4.51.0" +version = "4.53.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, - {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, - {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, - {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, - {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, - {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, - {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, - {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, - {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, - {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, - {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, - {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, - {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, - {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, - {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, - {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, - {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, - {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, - {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, - {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, - {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, - {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, - {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, - {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, - {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, - {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, - {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, - {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, + {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, + {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, + {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, + {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, + {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, + {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, + {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, + {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, + {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, + {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, + {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, + {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, ] [package.extras] @@ -1201,13 +1179,13 @@ files = [ [[package]] name = "fsspec" -version = "2024.3.1" +version = "2024.6.0" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, - {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, + {file = "fsspec-2024.6.0-py3-none-any.whl", hash = "sha256:58d7122eb8a1a46f7f13453187bfea4972d66bf01618d37366521b1998034cee"}, + {file = "fsspec-2024.6.0.tar.gz", hash = "sha256:f579960a56e6d8038a9efc8f9c77279ec12e6299aa86b0769a7e9c46b94527c2"}, ] [package.extras] @@ -1215,7 +1193,8 @@ abfs = ["adlfs"] adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] fuse = ["fusepy"] @@ -1232,6 +1211,9 @@ s3 = ["s3fs"] sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] [[package]] @@ -1253,13 +1235,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "0.45.0" +version = "0.45.3" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.45.0-py3-none-any.whl", hash = "sha256:90fe5c90e1b0ca7dd6fee78f9009f4e01b37dbc9ab484a9b2c1578915db1e571"}, - {file = "griffe-0.45.0.tar.gz", hash = "sha256:85cb2868d026ea51c89bdd589ad3ccc94abc5bd8d5d948e3d4450778a2a05b4a"}, + {file = "griffe-0.45.3-py3-none-any.whl", hash = "sha256:ed1481a680ae3e28f91a06e0d8a51a5c9b97555aa2527abc2664447cc22337d6"}, + {file = "griffe-0.45.3.tar.gz", hash = "sha256:02ee71cc1a5035864b97bd0dbfff65c33f6f2c8854d3bd48a791905c2b8a44b9"}, ] [package.dependencies] @@ -1480,42 +1462,40 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.12.3" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, - {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "ipywidgets" @@ -1612,13 +1592,13 @@ files = [ [[package]] name = "jsonpointer" -version = "2.4" +version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +python-versions = ">=3.7" files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] [[package]] @@ -1666,13 +1646,13 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.6.1" +version = "8.6.2" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, - {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, + {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, + {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, ] [package.dependencies] @@ -1685,7 +1665,7 @@ traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-core" @@ -1749,13 +1729,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.14.0" +version = "2.14.1" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, - {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, + {file = "jupyter_server-2.14.1-py3-none-any.whl", hash = "sha256:16f7177c3a4ea8fe37784e2d31271981a812f0b2874af17339031dc3510cc2a5"}, + {file = "jupyter_server-2.14.1.tar.gz", hash = "sha256:12558d158ec7a0653bf96cc272bc7ad79e0127d503b982ed144399346694f726"}, ] [package.dependencies] @@ -1780,7 +1760,7 @@ traitlets = ">=5.6.0" websocket-client = ">=1.7" [package.extras] -docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] [[package]] @@ -1804,13 +1784,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.1" +version = "4.2.2" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.1-py3-none-any.whl", hash = "sha256:6ac6e3827b3c890e6e549800e8a4f4aaea6a69321e2240007902aa7a0c56a8e4"}, - {file = "jupyterlab-4.2.1.tar.gz", hash = "sha256:a10fb71085a6900820c62d43324005046402ffc8f0fde696103e37238a839507"}, + {file = "jupyterlab-4.2.2-py3-none-any.whl", hash = "sha256:59ee9b839f43308c3dfd55d72d1f1a299ed42a7f91f2d1afe9c12a783f9e525f"}, + {file = "jupyterlab-4.2.2.tar.gz", hash = "sha256:a534b6a25719a92a40d514fb133a9fe8f0d9981b0bbce5d8a5fcaa33344a3038"}, ] [package.dependencies] @@ -1825,6 +1805,7 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" +setuptools = ">=40.1.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" @@ -1849,13 +1830,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.27.1" +version = "2.27.2" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.27.1-py3-none-any.whl", hash = "sha256:f5e26156e5258b24d532c84e7c74cc212e203bff93eb856f81c24c16daeecc75"}, - {file = "jupyterlab_server-2.27.1.tar.gz", hash = "sha256:097b5ac709b676c7284ac9c5e373f11930a561f52cd5a86e4fc7e5a9c8a8631d"}, + {file = "jupyterlab_server-2.27.2-py3-none-any.whl", hash = "sha256:54aa2d64fd86383b5438d9f0c032f043c4d8c0264b8af9f60bd061157466ea43"}, + {file = "jupyterlab_server-2.27.2.tar.gz", hash = "sha256:15cbb349dc45e954e09bacf81b9f9bcb10815ff660fb2034ecd7417db3a7ea27"}, ] [package.dependencies] @@ -2601,6 +2582,25 @@ files = [ {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] +[[package]] +name = "mkdocs-redirects" +version = "1.2.1" +description = "A MkDocs plugin for dynamic page redirects to prevent broken links." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mkdocs-redirects-1.2.1.tar.gz", hash = "sha256:9420066d70e2a6bb357adf86e67023dcdca1857f97f07c7fe450f8f1fb42f861"}, + {file = "mkdocs_redirects-1.2.1-py3-none-any.whl", hash = "sha256:497089f9e0219e7389304cffefccdfa1cac5ff9509f2cb706f4c9b221726dffb"}, +] + +[package.dependencies] +mkdocs = ">=1.1.1" + +[package.extras] +dev = ["autoflake", "black", "isort", "pytest", "twine (>=1.13.0)"] +release = ["twine (>=1.13.0)"] +test = ["autoflake", "black", "isort", "pytest"] + [[package]] name = "mkdocstrings" version = "0.25.1" @@ -2632,18 +2632,18 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.10.0" +version = "1.10.3" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings_python-1.10.0-py3-none-any.whl", hash = "sha256:ba833fbd9d178a4b9d5cb2553a4df06e51dc1f51e41559a4d2398c16a6f69ecc"}, - {file = "mkdocstrings_python-1.10.0.tar.gz", hash = "sha256:71678fac657d4d2bb301eed4e4d2d91499c095fd1f8a90fa76422a87a5693828"}, + {file = "mkdocstrings_python-1.10.3-py3-none-any.whl", hash = "sha256:11ff6d21d3818fb03af82c3ea6225b1534837e17f790aa5f09626524171f949b"}, + {file = "mkdocstrings_python-1.10.3.tar.gz", hash = "sha256:321cf9c732907ab2b1fedaafa28765eaa089d89320f35f7206d00ea266889d03"}, ] [package.dependencies] griffe = ">=0.44" -mkdocstrings = ">=0.24.2" +mkdocstrings = ">=0.25" [[package]] name = "multidict" @@ -2907,18 +2907,15 @@ files = [ [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "notebook-shim" version = "0.2.4" @@ -3034,13 +3031,13 @@ files = [ [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -3055,70 +3052,76 @@ files = [ [[package]] name = "pandas" -version = "2.0.3" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, - {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" -tzdata = ">=2022.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "pandocfilters" @@ -3148,13 +3151,13 @@ testing = ["docopt", "pytest"] [[package]] name = "partd" -version = "1.4.1" +version = "1.4.2" description = "Appendable key-value storage" optional = true -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "partd-1.4.1-py3-none-any.whl", hash = "sha256:27e766663d36c161e2827aa3e28541c992f0b9527d3cca047e13fb3acdb989e6"}, - {file = "partd-1.4.1.tar.gz", hash = "sha256:56c25dd49e6fea5727e731203c466c6e092f308d8f0024e199d02f6aa2167f67"}, + {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, + {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, ] [package.dependencies] @@ -3162,7 +3165,7 @@ locket = "*" toolz = "*" [package.extras] -complete = ["blosc", "numpy (>=1.9.0)", "pandas (>=0.19.0)", "pyzmq"] +complete = ["blosc", "numpy (>=1.20.0)", "pandas (>=1.3)", "pyzmq"] [[package]] name = "pathspec" @@ -3189,17 +3192,6 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[package]] name = "pillow" version = "10.3.0" @@ -3288,13 +3280,13 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.1" +version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] @@ -3367,13 +3359,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, ] [package.dependencies] @@ -3445,18 +3437,18 @@ files = [ [[package]] name = "pydantic" -version = "2.7.1" +version = "2.7.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, - {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, + {file = "pydantic-2.7.3-py3-none-any.whl", hash = "sha256:ea91b002777bf643bb20dd717c028ec43216b24a6001a280f83877fd2655d0b4"}, + {file = "pydantic-2.7.3.tar.gz", hash = "sha256:c46c76a40bb1296728d7a8b99aa73dd70a48c3510111ff290034f860c99c419e"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.2" +pydantic-core = "2.18.4" typing-extensions = ">=4.6.1" [package.extras] @@ -3464,90 +3456,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.2" +version = "2.18.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, - {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, - {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, - {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, - {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, - {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, - {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, - {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, - {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, - {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, - {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, - {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, - {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, - {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, + {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, + {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, + {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, + {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, + {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, + {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, + {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, + {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, + {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, + {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, + {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, + {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, + {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, ] [package.dependencies] @@ -3555,17 +3547,17 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.2.1" +version = "2.3.2" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, - {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, + {file = "pydantic_settings-2.3.2-py3-none-any.whl", hash = "sha256:ae06e44349e4c7bff8d57aff415dfd397ae75c217a098d54e9e6990ad7594ac7"}, + {file = "pydantic_settings-2.3.2.tar.gz", hash = "sha256:05d33003c74c2cd585de97b59eb17b6ed67181bc8a3ce594d74b5d24e4df7323"}, ] [package.dependencies] -pydantic = ">=2.3.0" +pydantic = ">=2.7.0" python-dotenv = ">=0.21.0" [package.extras] @@ -3853,7 +3845,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4004,17 +3995,20 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "questionary" -version = "2.0.1" +version = "1.10.0" description = "Python library to build pretty command line user prompts ⭐️" optional = false -python-versions = ">=3.8" +python-versions = ">=3.6,<4.0" files = [ - {file = "questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2"}, - {file = "questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b"}, + {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, + {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, ] [package.dependencies] -prompt_toolkit = ">=2.0,<=3.0.36" +prompt_toolkit = ">=2.0,<4.0" + +[package.extras] +docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] [[package]] name = "referencing" @@ -4204,13 +4198,13 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rich-click" -version = "1.8.2" +version = "1.8.3" description = "Format click help output nicely with rich" optional = false python-versions = ">=3.7" files = [ - {file = "rich_click-1.8.2-py3-none-any.whl", hash = "sha256:b57856f304e4fe0394b82d7ce0784450758f8c8b4e201ccc4320501cc201806b"}, - {file = "rich_click-1.8.2.tar.gz", hash = "sha256:8e29bdede858b59aa2859a1ab1c4ccbd39ed7ed5870262dae756fba6b5dc72e8"}, + {file = "rich_click-1.8.3-py3-none-any.whl", hash = "sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd"}, + {file = "rich_click-1.8.3.tar.gz", hash = "sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3"}, ] [package.dependencies] @@ -4358,19 +4352,19 @@ files = [ [[package]] name = "s3fs" -version = "2024.3.1" +version = "2024.6.0" description = "Convenient Filesystem interface over S3" optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "s3fs-2024.3.1-py3-none-any.whl", hash = "sha256:f4566a5446c473740d272ec08e0b4aae8db1aa05f662c42ff0aa2c89bb5060ea"}, - {file = "s3fs-2024.3.1.tar.gz", hash = "sha256:1b8bc8dbd65e7b60f5487378f6eeffe1de59aa72caa9efca6dad6ab877405487"}, + {file = "s3fs-2024.6.0-py3-none-any.whl", hash = "sha256:8d5f591956a61c7d64097eff4847598826f09d60b4ce9a16202565693569f6d4"}, + {file = "s3fs-2024.6.0.tar.gz", hash = "sha256:a59020ededc61e9666f1e473ce4aa28764e5f7b3c97414beb15cd9be522a87b6"}, ] [package.dependencies] aiobotocore = ">=2.5.4,<3.0.0" aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1" -fsspec = "2024.3.1" +fsspec = "==2024.6.0.*" [package.extras] awscli = ["aiobotocore[awscli] (>=2.5.4,<3.0.0)"] @@ -4394,19 +4388,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "69.5.1" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -4550,22 +4543,22 @@ files = [ [[package]] name = "tornado" -version = "6.4" +version = "6.4.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, - {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, - {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, - {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, - {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] [[package]] @@ -4630,13 +4623,13 @@ types-urllib3 = "*" [[package]] name = "types-requests" -version = "2.31.0.20240406" +version = "2.32.0.20240602" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, - {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, + {file = "types-requests-2.32.0.20240602.tar.gz", hash = "sha256:3f98d7bbd0dd94ebd10ff43a7fbe20c3b8528acace6d8efafef0b6a184793f06"}, + {file = "types_requests-2.32.0.20240602-py3-none-any.whl", hash = "sha256:ed3946063ea9fbc6b5fc0c44fa279188bae42d582cb63760be6cb4b9d06c3de8"}, ] [package.dependencies] @@ -4861,40 +4854,43 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "4.0.0" +version = "4.0.1" description = "Filesystem events monitoring" optional = false python-versions = ">=3.8" files = [ - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, - {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, - {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, - {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, - {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, - {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, - {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, - {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, - {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, - {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, - {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, - {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, - {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, - {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b"}, + {file = "watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767"}, + {file = "watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7"}, + {file = "watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db"}, + {file = "watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235"}, + {file = "watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7"}, + {file = "watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193"}, + {file = "watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd"}, + {file = "watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_i686.whl", hash = "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5"}, + {file = "watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84"}, + {file = "watchdog-4.0.1-py3-none-win32.whl", hash = "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429"}, + {file = "watchdog-4.0.1-py3-none-win_amd64.whl", hash = "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a"}, + {file = "watchdog-4.0.1-py3-none-win_ia64.whl", hash = "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d"}, + {file = "watchdog-4.0.1.tar.gz", hash = "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44"}, ] [package.extras] @@ -4902,13 +4898,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcmatch" -version = "8.5.1" +version = "8.5.2" description = "Wildcard/glob file name matcher." optional = false python-versions = ">=3.8" files = [ - {file = "wcmatch-8.5.1-py3-none-any.whl", hash = "sha256:24c19cedc92bc9c9e27f39db4e1824d72f95bd2cea32b254a47a45b1a1b227ed"}, - {file = "wcmatch-8.5.1.tar.gz", hash = "sha256:c0088c7f6426cf6bf27e530e2b7b734031905f7e490475fd83c7c5008ab581b3"}, + {file = "wcmatch-8.5.2-py3-none-any.whl", hash = "sha256:17d3ad3758f9d0b5b4dedc770b65420d4dac62e680229c287bf24c9db856a478"}, + {file = "wcmatch-8.5.2.tar.gz", hash = "sha256:a70222b86dea82fb382dd87b73278c10756c138bd6f8f714e2183128887b9eb2"}, ] [package.dependencies] @@ -4927,18 +4923,18 @@ files = [ [[package]] name = "webcolors" -version = "1.13" +version = "24.6.0" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, + {file = "webcolors-24.6.0-py3-none-any.whl", hash = "sha256:8cf5bc7e28defd1d48b9e83d5fc30741328305a8195c29a8e668fa45586568a1"}, + {file = "webcolors-24.6.0.tar.gz", hash = "sha256:1d160d1de46b3e81e58d0a280d0c78b467dc80f47294b91b1ad8029d2cedb55b"}, ] [package.extras] docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] +tests = ["coverage[toml]"] [[package]] name = "webencodings" @@ -5186,39 +5182,39 @@ multidict = ">=4.0" [[package]] name = "zarr" -version = "2.16.1" +version = "2.18.2" description = "An implementation of chunked, compressed, N-dimensional arrays for Python" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zarr-2.16.1-py3-none-any.whl", hash = "sha256:de4882433ccb5b42cc1ec9872b95e64ca3a13581424666b28ed265ad76c7056f"}, - {file = "zarr-2.16.1.tar.gz", hash = "sha256:4276cf4b4a653431042cd53ff2282bc4d292a6842411e88529964504fb073286"}, + {file = "zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38"}, + {file = "zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47"}, ] [package.dependencies] asciitree = "*" -fasteners = "*" +fasteners = {version = "*", markers = "sys_platform != \"emscripten\""} numcodecs = ">=0.10.0" -numpy = ">=1.20,<1.21.0 || >1.21.0" +numpy = ">=1.23" [package.extras] -docs = ["numcodecs[msgpack]", "numpydoc", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx-issues", "sphinx-rtd-theme"] +docs = ["numcodecs[msgpack]", "numpydoc", "pydata-sphinx-theme", "sphinx", "sphinx-automodapi", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] jupyter = ["ipytree (>=0.2.2)", "ipywidgets (>=8.0.0)", "notebook"] [[package]] name = "zipp" -version = "3.18.1" +version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, + {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] kerchunk = ["dask", "kerchunk"] @@ -5226,4 +5222,4 @@ kerchunk = ["dask", "kerchunk"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "c0b21a1967a7180dacd40613c433d31314f72477b02bc4105a4639f22eb5656f" +content-hash = "053e27d57acc91d68b6898389ddb15c20b78bb983490d0da7d83c528e6a0215e" diff --git a/pyproject.toml b/pyproject.toml index d6baf9bb..245dc849 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,6 +68,7 @@ pytest-watch = ">=4.2" # break with a ModuleNotFoundError. mkdocs = ">=1.2,!=1.6.0" mkdocs-material = ">=7.1,<10.0" +mkdocs-redirects = ">=1.2.1" markdown-callouts = ">=0.2.0" markdown-include = ">=0.6" mkdocstrings = {extras = ["python"], version = ">=0.19.0"} From 00ccd5e440249f9818c84bc8f215be6a97939f84 Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Tue, 11 Jun 2024 22:18:53 +0530 Subject: [PATCH 04/56] Removed dask.ipynb --- docs/tutorials/dask.ipynb | 2131 ------------------------------------- 1 file changed, 2131 deletions(-) delete mode 100644 docs/tutorials/dask.ipynb diff --git a/docs/tutorials/dask.ipynb b/docs/tutorials/dask.ipynb deleted file mode 100644 index 6170de47..00000000 --- a/docs/tutorials/dask.ipynb +++ /dev/null @@ -1,2131 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "8f552380-cc0a-4fb8-b4b3-276a6564b239", - "metadata": {}, - "source": [ - "# Analyzing NASA Data with Dask" - ] - }, - { - "cell_type": "markdown", - "id": "9e4dbac6-b20b-43c3-b64a-189a614a3fb9", - "metadata": {}, - "source": [ - "## Create cluster on AWS\n", - "\n", - "_This cell is all that's needed to run this analysis on a cluster_" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "cbd1ed19-c6db-427c-9076-2e6af892558d", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'coiled'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m:2\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'coiled'" - ] - } - ], - "source": [ - "%%time\n", - "\n", - "# Spin up a Coiled cluster in region us-west-2\n", - "import coiled\n", - "\n", - "cluster = coiled.Cluster(n_workers=20, region=\"us-west-2\")\n", - "client = cluster.get_client()" - ] - }, - { - "cell_type": "markdown", - "id": "4a30aadb-41d4-4c08-a6fa-5ea60c6bd695", - "metadata": {}, - "source": [ - "## Get data files with `earthaccess`" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "899b10a6-51fc-4d97-96d2-54e81a8b8f7d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You're now authenticated with NASA Earthdata Login\n", - "Using token with expiration date: 08/04/2023\n", - "Using environment variables for EDL\n" - ] - } - ], - "source": [ - "# Authenticate my machine with `earthaccess`\n", - "import earthaccess\n", - "\n", - "earthaccess.login();" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "c9c3d184-ffff-494f-ad77-f6b2cc31f6c5", - "metadata": {}, - "outputs": [], - "source": [ - "# Define region bounding box\n", - "lon0, lat0 = -124.5, 36.5\n", - "dlon, dlat = 2.5, 2.0 # half of box width in lon/lat\n", - "lon_min, lon_max = lon0 - dlon, lon0 + dlon\n", - "lat_min, lat_max = lat0 - dlat, lat0 + dlat\n", - "\n", - "bounding_box = (lon_min, lat_min, lon_max, lat_max)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "8cad710e-9a9e-45fd-b2fd-f01990db37d6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Granules found: 196\n" - ] - } - ], - "source": [ - "# Retrieve data files for the dataset I'm interested in\n", - "results = earthaccess.search_data(\n", - " short_name=\"VIIRS_NPP-STAR-L3U-v2.80\",\n", - " concept_id=\"C2147485059-POCLOUD\",\n", - " cloud_hosted=True,\n", - " bounding_box=bounding_box,\n", - " temporal=(\"2021-04-01\", \"2021-05-6\"),\n", - " count=30, # For demo purposes\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "cbe32079-17f9-45a8-9601-c0fe21980183", - "metadata": {}, - "source": [ - "## Analyze data on my cluster with Xarray" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a231efb7-0b37-48be-a432-74afbde099de", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Opening 30 granules, approx size: 0.0 GB\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "38f7f8a98abb4fc780198d04f75c49fe", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "SUBMITTING | : 0%| | 0/30 [00:00\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                  (lon: 18000, lat: 9000, time: 30)\n",
-       "Coordinates:\n",
-       "  * lon                      (lon) float32 -180.0 -180.0 -179.9 ... 180.0 180.0\n",
-       "  * lat                      (lat) float32 89.99 89.97 89.95 ... -89.97 -89.99\n",
-       "  * time                     (time) datetime64[ns] 2021-04-01T08:10:01 ... 20...\n",
-       "Data variables: (12/13)\n",
-       "    quality_level            (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    l2p_flags                (time, lat, lon) int16 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    or_number_of_pixels      (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    sea_surface_temperature  (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    dt_analysis              (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    satellite_zenith_angle   (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    ...                       ...\n",
-       "    sses_standard_deviation  (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    wind_speed               (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    sst_dtime                (time, lat, lon) timedelta64[ns] dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    crs                      (time) int32 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0\n",
-       "    sst_gradient_magnitude   (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "    sst_front_position       (time, lat, lon) float32 dask.array<chunksize=(1, 9000, 18000), meta=np.ndarray>\n",
-       "Attributes: (12/58)\n",
-       "    Conventions:                Conventions = CF-1.7, ACDD-1.3\n",
-       "    acknowledgement:            Please acknowledge the use of these data with...\n",
-       "    cdm_data_type:              grid\n",
-       "    comment:                    SSTs are a weighted average of the SSTs of co...\n",
-       "    creator_email:              Alex.Ignatov@noaa.gov\n",
-       "    creator_name:               Alex Ignatov\n",
-       "    ...                         ...\n",
-       "    col_start:                  2879\n",
-       "    col_count:                  3875\n",
-       "    l3u_bias_subskin_night:     0.034\n",
-       "    l3u_bias_subskin_day:       0.018\n",
-       "    l3u_bias_depth_night:       0.01\n",
-       "    l3u_bias_depth_day:         0.012
" - ], - "text/plain": [ - "\n", - "Dimensions: (lon: 18000, lat: 9000, time: 30)\n", - "Coordinates:\n", - " * lon (lon) float32 -180.0 -180.0 -179.9 ... 180.0 180.0\n", - " * lat (lat) float32 89.99 89.97 89.95 ... -89.97 -89.99\n", - " * time (time) datetime64[ns] 2021-04-01T08:10:01 ... 20...\n", - "Data variables: (12/13)\n", - " quality_level (time, lat, lon) float32 dask.array\n", - " l2p_flags (time, lat, lon) int16 dask.array\n", - " or_number_of_pixels (time, lat, lon) float32 dask.array\n", - " sea_surface_temperature (time, lat, lon) float32 dask.array\n", - " dt_analysis (time, lat, lon) float32 dask.array\n", - " satellite_zenith_angle (time, lat, lon) float32 dask.array\n", - " ... ...\n", - " sses_standard_deviation (time, lat, lon) float32 dask.array\n", - " wind_speed (time, lat, lon) float32 dask.array\n", - " sst_dtime (time, lat, lon) timedelta64[ns] dask.array\n", - " crs (time) int32 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0\n", - " sst_gradient_magnitude (time, lat, lon) float32 dask.array\n", - " sst_front_position (time, lat, lon) float32 dask.array\n", - "Attributes: (12/58)\n", - " Conventions: Conventions = CF-1.7, ACDD-1.3\n", - " acknowledgement: Please acknowledge the use of these data with...\n", - " cdm_data_type: grid\n", - " comment: SSTs are a weighted average of the SSTs of co...\n", - " creator_email: Alex.Ignatov@noaa.gov\n", - " creator_name: Alex Ignatov\n", - " ... ...\n", - " col_start: 2879\n", - " col_count: 3875\n", - " l3u_bias_subskin_night: 0.034\n", - " l3u_bias_subskin_day: 0.018\n", - " l3u_bias_depth_night: 0.01\n", - " l3u_bias_depth_day: 0.012" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "# Open data files with Xarray\n", - "\n", - "import xarray as xr\n", - "\n", - "ds = xr.open_mfdataset(earthaccess.open(results))\n", - "ds" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "546cea9d-5cd8-406b-aea6-b64dd24b1755", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 266 ms, sys: 71.1 ms, total: 337 ms\n", - "Wall time: 35 s\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "%%time\n", - "\n", - "# Compute and plot some results from the dataset\n", - "\n", - "result = ds.sea_surface_temperature.notnull().mean({'lon','lat'}).compute()\n", - "result.plot();" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9de61942-ed61-4668-ac67-e1b48375c965", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.16" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From dbcf38b394f3fd7407b887bd0d3ce22da019d190 Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Tue, 11 Jun 2024 16:26:34 +0530 Subject: [PATCH 05/56] Did the necessary docstring cleanup as discussed in #590 --- earthaccess/auth.py | 7 ++++--- earthaccess/search.py | 7 +++++-- earthaccess/store.py | 3 +++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/earthaccess/auth.py b/earthaccess/auth.py index d8450c44..0efeca84 100644 --- a/earthaccess/auth.py +++ b/earthaccess/auth.py @@ -47,9 +47,8 @@ def __init__( if username and password: self.auth = (username, password) - # Overrides from the library to keep headers when redirected to or from - # the NASA auth host. def rebuild_auth(self, prepared_request: Any, response: Any) -> None: + """Overrides from the library to keep headers when redirected to or from the NASA auth host.""" headers = prepared_request.headers url = prepared_request.url @@ -93,7 +92,7 @@ def login( * **"environment"**: Retrieve a username and password from $EARTHDATA_USERNAME and $EARTHDATA_PASSWORD. persist: Will persist credentials in a `.netrc` file. - system (Env): the EDL endpoint to log in to Earthdata, defaults to PROD + system: the EDL endpoint to log in to Earthdata, defaults to PROD Returns: An instance of Auth. @@ -132,6 +131,7 @@ def _set_earthdata_system(self, system: System) -> None: def refresh_tokens(self) -> bool: """Refresh CMR tokens. + Tokens are used to do authenticated queries on CMR for restricted and early access datasets. This method renews the tokens to make sure we can query the collections allowed to our EDL user. """ @@ -188,6 +188,7 @@ def get_s3_credentials( endpoint: Optional[str] = None, ) -> Dict[str, str]: """Gets AWS S3 credentials for a given NASA cloud provider. + The easier way is to use the DAAC short name; provider is optional if we know it. Parameters: diff --git a/earthaccess/search.py b/earthaccess/search.py index 6dd7f004..db6d5bb8 100644 --- a/earthaccess/search.py +++ b/earthaccess/search.py @@ -114,8 +114,9 @@ def __init__(self, auth: Optional[Auth] = None, *args: Any, **kwargs: Any) -> No @override def hits(self) -> int: - """Returns the number of hits the current query will return. This is done by - making a lightweight query to CMR and inspecting the returned headers. + """Returns the number of hits the current query will return. + + This is done by making a lightweight query to CMR and inspecting the returned headers. Restricted datasets will always return zero results even if there are results. Returns: @@ -469,6 +470,7 @@ def __init__(self, auth: Optional[Auth] = None, *args: Any, **kwargs: Any) -> No @override def hits(self) -> int: """Returns the number of hits the current query will return. + This is done by making a lightweight query to CMR and inspecting the returned headers. @@ -561,6 +563,7 @@ def parameters(self, **kwargs: Any) -> Self: @override def provider(self, provider: str) -> Self: """Only match collections from a given provider. + A NASA datacenter or DAAC can have one or more providers. For example, PODAAC is a data center or DAAC, PODAAC is the default provider for on-prem data, and POCLOUD is diff --git a/earthaccess/store.py b/earthaccess/store.py index fa0e8a99..147e6ce8 100644 --- a/earthaccess/store.py +++ b/earthaccess/store.py @@ -165,6 +165,7 @@ def set_requests_session( self, url: str, method: str = "get", bearer_token: bool = False ) -> None: """Sets up a `requests` session with bearer tokens that are used by CMR. + Mainly used to get the authentication cookies from different DAACs and URS. This HTTPS session can be used to download granules if we want to use a direct, lower level API. @@ -265,6 +266,7 @@ def get_s3fs_session( @lru_cache def get_fsspec_session(self) -> fsspec.AbstractFileSystem: """Returns a fsspec HTTPS session with bearer tokens that are used by CMR. + This HTTPS session can be used to download granules if we want to use a direct, lower level API. @@ -283,6 +285,7 @@ def get_fsspec_session(self) -> fsspec.AbstractFileSystem: def get_requests_session(self, bearer_token: bool = True) -> requests.Session: """Returns a requests HTTPS session with bearer tokens that are used by CMR. + This HTTPS session can be used to download granules if we want to use a direct, lower level API. From 5f80ffbbd6e52ed9a52c5b36f1c21eeae3faf22b Mon Sep 17 00:00:00 2001 From: Joseph H Kennedy Date: Tue, 11 Jun 2024 09:37:10 -0800 Subject: [PATCH 06/56] Add mkdocs-redirects to ci/environment-dev.yml for "reasons" --- ci/environment-dev.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/environment-dev.yml b/ci/environment-dev.yml index 9982dad2..60ebcac8 100644 --- a/ci/environment-dev.yml +++ b/ci/environment-dev.yml @@ -14,6 +14,7 @@ dependencies: - mkdocs>=1.2 - mkdocs-material>=7.1,<9.0 - markdown-include>=0.6 + - mkdocs-redirects>=1.2.1 - mkdocstrings>=0.19.0 - mkdocstrings-python - mkdocs-jupyter>=0.19.0 From e8c5d0d5c4d1de6566fe2406b2448d284c82e847 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Thu, 13 Jun 2024 12:51:17 -0400 Subject: [PATCH 07/56] remove unused provider list --- earthaccess/daac.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/earthaccess/daac.py b/earthaccess/daac.py index 896ffdfa..2812cb4b 100644 --- a/earthaccess/daac.py +++ b/earthaccess/daac.py @@ -106,18 +106,6 @@ ] -CLOUD_PROVIDERS = [ - "GES_DISC", - "LPCLOUD", - "NSIDC_CPRD", - "POCLOUD", - "ASF", - "GHRC_DAAC", - "ORNL_CLOUD", - "LAADS", - "LARC_CLOUD", -] - # Some testing urls behind EDL DAAC_TEST_URLS = [ "https://archive.podaac.earthdata.nasa.gov/podaac-ops-cumulus-protected/JASON_CS_S6A_L2_ALT_LR_STD_OST_NRT_F/", From d7331f4687e5cb458e4ed813d5be7db3c01130d8 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Fri, 21 Jun 2024 14:36:44 -0400 Subject: [PATCH 08/56] better pypi links --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 245dc849..0e15f45d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,8 @@ [tool.poetry] name = "earthaccess" version = "0.9.0" -homepage = "https://github.com/nsidc/earthaccess" +repository = "https://github.com/nsidc/earthaccess" +documentation = "https://earthaccess.readthedocs.io" description = "Client library for NASA Earthdata APIs" authors = ["earthaccess contributors"] maintainers = [ From c06693d32c1c6db42d2c7f4e297575c807a9f3b3 Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Sun, 23 Jun 2024 19:42:00 +0530 Subject: [PATCH 09/56] Initial draft --- docs/maintainers-guide.md | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/maintainers-guide.md diff --git a/docs/maintainers-guide.md b/docs/maintainers-guide.md new file mode 100644 index 00000000..8052f8e8 --- /dev/null +++ b/docs/maintainers-guide.md @@ -0,0 +1,59 @@ +# Maintainers Guide + +This page offers guidance to project maintainers regarding our setup procedures, release processes, package creation, and other related tasks. + +# Maintainer Onboarding and Best Practices + +## Becoming a Maintainer or Triager + +If you are interested in becoming a maintainer, you can join our community. We expect you to be actively involved. + +Also, if you're interested in helping managing issues with labels and interacting with incoming requests, you can have a "triager" role! + +## Maintainer Responsibilities and Expectations + +1. As a maintainer, there is no strict time obligation, as we understand that everyone's ability to commit can fluctuate. However, we do expect maintainers to communicate openly and transparently with the team and the community. + +2. As a maintainer, you are expected to uphold a positive and inclusive team culture. This includes following the guidelines outlined in the [Openscapes team culture page](https://openscapes.github.io/series/core-lessons/team-culture.html) and the [recorded psychological safety talk](https://www.youtube.com/watch?v=rzi-qkl8u5M) . By doing so, you can help ensure that all team members and contributors feel safe, respected, and valued. + + +## Maintainer Processes Beyond Regular Contributing + +1. As a maintainer, label issues clearly and consistently to help contributors identify issue types and priority. Use 'good first issue' for contributor-friendly issues. + +2. As a maintainer, create welcoming environment when communicating with contributors (issue / PR / discussion posters). + +3. As a maintainer reviewing and merging contributions is critical. Here are some best practices: + + 3a. Review contributions thoroughly. + + 3b. Provide constructive feedback. + + 3c. Communicate clearly and respectfully. + + 3d. Merge contributions promptly. + +4. As a maintainer, you will be releasing different versions. More on this in [here](#making-a-release). + +# Branches + +main: This is the main branch, which is consistently tested and prepared for release as a new version. Avoid pushing changes directly to this branch. Instead, create a new branch and submit a pull request for any modifications. + +gh-pages: This branch hosts HTML docs, updated by GitHub Actions. Don't commit directly. Make changes in a separate branch, then submit a pull request. GitHub Actions will automatically update docs on gh-pages when merged. + +# Continuous Integration + +The GitHub Actions CI services handle the project's building, testing, and management across Linux, macOS, and Windows platforms. The CI file manages the continuous integration processes, and list out their respective dependencies. Here we briefly summarize the functions of the files in CI. + +```environment-dev.yml ``` - The environment configuration file specifies dependencies for Python development. + +```environment-mindeps.yaml``` - The test-environment file lists required and test dependencies for a testing environment. + +# Continuous Documentation + +The Read the Docs service is used to preview documentation changes made in pull requests. This service uses a configuration file, ```.readthedocs.yaml```. + +# Making a Release + +To automate releases, we employ a script called ```publish.sh``` in the scripts folder. This script utilizes Poetry for managing and publishing the package to PyPI. + From b4d27f7e407c56eeb432f9e31ccf7e94abcb8e0a Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Mon, 24 Jun 2024 13:38:21 +0530 Subject: [PATCH 10/56] Made the discusssed changes --- docs/maintainers-guide.md | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/docs/maintainers-guide.md b/docs/maintainers-guide.md index 8052f8e8..123a6f6c 100644 --- a/docs/maintainers-guide.md +++ b/docs/maintainers-guide.md @@ -2,22 +2,24 @@ This page offers guidance to project maintainers regarding our setup procedures, release processes, package creation, and other related tasks. -# Maintainer Onboarding and Best Practices +## Maintainer Onboarding and Best Practices -## Becoming a Maintainer or Triager +### Becoming a Maintainer or Triager -If you are interested in becoming a maintainer, you can join our community. We expect you to be actively involved. +If you are interested in becoming a maintainer, you can join our community. Maintainers have several important responsibilities, so please read on to understand the role. Also, if you're interested in helping managing issues with labels and interacting with incoming requests, you can have a "triager" role! -## Maintainer Responsibilities and Expectations +To get permissions, please start by participating on GitHub by answering questions, reviewing PRs, or contributing code or documentation. Once you're feeling comfortable, you can ask any of our maintainers for permissions by `@`ing them on GitHub. + +### Maintainer Responsibilities and Expectations 1. As a maintainer, there is no strict time obligation, as we understand that everyone's ability to commit can fluctuate. However, we do expect maintainers to communicate openly and transparently with the team and the community. 2. As a maintainer, you are expected to uphold a positive and inclusive team culture. This includes following the guidelines outlined in the [Openscapes team culture page](https://openscapes.github.io/series/core-lessons/team-culture.html) and the [recorded psychological safety talk](https://www.youtube.com/watch?v=rzi-qkl8u5M) . By doing so, you can help ensure that all team members and contributors feel safe, respected, and valued. -## Maintainer Processes Beyond Regular Contributing +### Maintainer Processes Beyond Regular Contributing 1. As a maintainer, label issues clearly and consistently to help contributors identify issue types and priority. Use 'good first issue' for contributor-friendly issues. @@ -33,27 +35,24 @@ Also, if you're interested in helping managing issues with labels and interactin 3d. Merge contributions promptly. -4. As a maintainer, you will be releasing different versions. More on this in [here](#making-a-release). +4. As a maintainer, you will be releasing different versions. More on this in [here](./contributing/releasing.md). -# Branches +## Branches main: This is the main branch, which is consistently tested and prepared for release as a new version. Avoid pushing changes directly to this branch. Instead, create a new branch and submit a pull request for any modifications. -gh-pages: This branch hosts HTML docs, updated by GitHub Actions. Don't commit directly. Make changes in a separate branch, then submit a pull request. GitHub Actions will automatically update docs on gh-pages when merged. -# Continuous Integration +## Continuous Integration & Delivery -The GitHub Actions CI services handle the project's building, testing, and management across Linux, macOS, and Windows platforms. The CI file manages the continuous integration processes, and list out their respective dependencies. Here we briefly summarize the functions of the files in CI. +The GitHub Actions CI services handle the project's building, testing, and management across Linux, macOS, and Windows platforms. The CI files can be found in the `./.github/workflows/` which manage the continuous integration process, the dependencies are listed out in the `./ci/environment-dev.yml` file. Here we briefly summarize the functions of the files in the `./ci/` directory. -```environment-dev.yml ``` - The environment configuration file specifies dependencies for Python development. +`environment-dev.yml` - The environment configuration file specifies dependencies for Python development. -```environment-mindeps.yaml``` - The test-environment file lists required and test dependencies for a testing environment. +`environment-mindeps.yaml`- Specifies an environment with the minimum supported dependency versions to detect backwards-incompatible code. -# Continuous Documentation +## Continuous Documentation -The Read the Docs service is used to preview documentation changes made in pull requests. This service uses a configuration file, ```.readthedocs.yaml```. +[ReadTheDocs](https://readthedocs.org/projects/earthaccess/) is used to generate and host [our documentation website](https://earthaccess.readthedocs.io/) as well as the preview for documentation changes made in pull requests. This service uses a configuration file in the root of the project, `.readthedocs.yml`. -# Making a Release -To automate releases, we employ a script called ```publish.sh``` in the scripts folder. This script utilizes Poetry for managing and publishing the package to PyPI. From a2dd4527206f84d88e67a8579d1391ec7d3bbe2f Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Mon, 24 Jun 2024 09:55:51 -0600 Subject: [PATCH 11/56] Add new pre-commit hooks from official repo https://github.com/pre-commit/pre-commit-hooks/ --- .pre-commit-config.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 68202d5c..6625eda9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,10 +7,25 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 hooks: + # Validate format - id: check-yaml - - id: trailing-whitespace - id: check-toml - id: check-json + # Check for common mistakes + - id: check-added-large-files + - id: check-case-conflict + # - id: check-illegal-windows-names # TODO: Enable in next release + - id: check-merge-conflict + - id: check-executables-have-shebangs + - id: check-shebang-scripts-are-executable + - id: check-symlinks + - id: check-vcs-permalinks + - id: destroyed-symlinks + - id: detect-private-key + - id: end-of-file-fixer + - id: mixed-line-ending + - id: no-commit-to-branch # protects `main` by default + - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.4.7 From a8956e119463831cd0b7dfad1e7f2f657c434e7d Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Mon, 24 Jun 2024 09:57:07 -0600 Subject: [PATCH 12/56] Fix new errors detected by pre-commit hooks --- .gitattributes | 2 +- binder/postBuild | 1 - docs/howto/access-data.md | 2 -- docs/howto/cloud.md | 2 +- docs/howto/search-collections.md | 2 +- docs/howto/search-granules.md | 2 -- docs/howto/storage-location.md | 2 +- docs/resources.md | 2 -- docs/user-reference/collections/collections-query.md | 1 - docs/user-reference/collections/collections.md | 1 - docs/user-reference/granules/granules-query.md | 1 - docs/user-reference/granules/granules.md | 3 --- 12 files changed, 4 insertions(+), 17 deletions(-) mode change 100644 => 100755 binder/postBuild diff --git a/.gitattributes b/.gitattributes index 01fe5009..affcecd7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,3 @@ notebooks/** linguist-documentation docs/** linguist-documentation -tests/unit/fixtures/vcr_cassettes/** linguist-documentation \ No newline at end of file +tests/unit/fixtures/vcr_cassettes/** linguist-documentation diff --git a/binder/postBuild b/binder/postBuild old mode 100644 new mode 100755 index 254815af..bcf7589f --- a/binder/postBuild +++ b/binder/postBuild @@ -4,4 +4,3 @@ set -ex poetry config virtualenvs.create false poetry install --no-dev - diff --git a/docs/howto/access-data.md b/docs/howto/access-data.md index 22f19521..f87a87f2 100644 --- a/docs/howto/access-data.md +++ b/docs/howto/access-data.md @@ -41,5 +41,3 @@ And that's it in just one line of code! This same piece of code will also work f > More examples coming soon! - - diff --git a/docs/howto/cloud.md b/docs/howto/cloud.md index d3557f72..ebfccf03 100644 --- a/docs/howto/cloud.md +++ b/docs/howto/cloud.md @@ -1,3 +1,3 @@ # Direct S3 access for cloud-based datasets -Coming soon \ No newline at end of file +Coming soon diff --git a/docs/howto/search-collections.md b/docs/howto/search-collections.md index 9b4ee282..517b8629 100644 --- a/docs/howto/search-collections.md +++ b/docs/howto/search-collections.md @@ -1,3 +1,3 @@ # how to search for data collections using spatial, temporal, keyword filters -Coming soon \ No newline at end of file +Coming soon diff --git a/docs/howto/search-granules.md b/docs/howto/search-granules.md index 06286eb9..2926dfa2 100644 --- a/docs/howto/search-granules.md +++ b/docs/howto/search-granules.md @@ -32,5 +32,3 @@ results = earthaccess.search_data( ``` Now that we have our results we can do multiple things: We can iterate over them to get HTTP (or S3) links, we can download the files to a local folder, or we can open these files and stream their content directly to other libraries e.g. xarray. - - diff --git a/docs/howto/storage-location.md b/docs/howto/storage-location.md index f68773d1..83eac95a 100644 --- a/docs/howto/storage-location.md +++ b/docs/howto/storage-location.md @@ -1,3 +1,3 @@ # Determine if a data set is on-prem or in the cloud -Coming soon \ No newline at end of file +Coming soon diff --git a/docs/resources.md b/docs/resources.md index 2421c7c2..341d8d7d 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -5,5 +5,3 @@ * [earthaccess @ AGU poster](https://docs.google.com/presentation/d/1OOSZzbHv6Ck4lzOE01FQdI4kX0VCfcVBS4pWCc7dtBo/edit?usp=sharing) * [NSIDC Cloud Data Access Guide](https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide) - - diff --git a/docs/user-reference/collections/collections-query.md b/docs/user-reference/collections/collections-query.md index e554278f..a59e6926 100644 --- a/docs/user-reference/collections/collections-query.md +++ b/docs/user-reference/collections/collections-query.md @@ -7,4 +7,3 @@ show_source: false inherited_members: true show_source: false - diff --git a/docs/user-reference/collections/collections.md b/docs/user-reference/collections/collections.md index c877360b..e83628b9 100644 --- a/docs/user-reference/collections/collections.md +++ b/docs/user-reference/collections/collections.md @@ -5,4 +5,3 @@ inherited_members: true show_root_heading: true show_source: false - diff --git a/docs/user-reference/granules/granules-query.md b/docs/user-reference/granules/granules-query.md index 78120c0d..75f1adb2 100644 --- a/docs/user-reference/granules/granules-query.md +++ b/docs/user-reference/granules/granules-query.md @@ -8,4 +8,3 @@ inherited_members: true show_root_heading: true show_source: false - diff --git a/docs/user-reference/granules/granules.md b/docs/user-reference/granules/granules.md index 788949ef..e0bbd2c2 100644 --- a/docs/user-reference/granules/granules.md +++ b/docs/user-reference/granules/granules.md @@ -5,6 +5,3 @@ inherited_members: true show_root_heading: true show_source: false - - - From 0fe3a16b122aeb9876107cac7734f2d34dd32440 Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Tue, 25 Jun 2024 13:48:03 +0530 Subject: [PATCH 13/56] Added to the work with us section --- docs/{ => contributing}/maintainers-guide.md | 4 ++-- mkdocs.yml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) rename docs/{ => contributing}/maintainers-guide.md (91%) diff --git a/docs/maintainers-guide.md b/docs/contributing/maintainers-guide.md similarity index 91% rename from docs/maintainers-guide.md rename to docs/contributing/maintainers-guide.md index 123a6f6c..1ac2fc79 100644 --- a/docs/maintainers-guide.md +++ b/docs/contributing/maintainers-guide.md @@ -35,7 +35,7 @@ To get permissions, please start by participating on GitHub by answering questio 3d. Merge contributions promptly. -4. As a maintainer, you will be releasing different versions. More on this in [here](./contributing/releasing.md). +4. As a maintainer, you will be releasing different versions. More on this in [here](./releasing.md). ## Branches @@ -44,7 +44,7 @@ main: This is the main branch, which is consistently tested and prepared for rel ## Continuous Integration & Delivery -The GitHub Actions CI services handle the project's building, testing, and management across Linux, macOS, and Windows platforms. The CI files can be found in the `./.github/workflows/` which manage the continuous integration process, the dependencies are listed out in the `./ci/environment-dev.yml` file. Here we briefly summarize the functions of the files in the `./ci/` directory. +The GitHub Actions CI services handle the project's building, testing, and management across Linux, macOS, and Windows platforms. The CI configuration files can be found in the `./.github/workflows/`. Here we briefly summarize the functions of the files in the `./ci/` directory. `environment-dev.yml` - The environment configuration file specifies dependencies for Python development. diff --git a/mkdocs.yml b/mkdocs.yml index 579e0787..14317502 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -60,6 +60,8 @@ nav: - "Development": "contributing/development.md" - "Releasing": "contributing/releasing.md" - "Our meet-ups": "contributing/our-meet-ups.md" + + - "Maintainers Guide": "contributing/maintainers-guide.md" - "Resources": "resources.md" - USER GUIDE: - "user_guide/index.md" From 8556e11686aba6235046bc934ec318cce8f030fc Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 25 Jun 2024 12:33:56 -0600 Subject: [PATCH 14/56] Init PR template --- .github/pull_request_template.md | 36 ++++++++++++++++++++++++++++++++ docs/contributing/index.md | 19 +++-------------- 2 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..6394a631 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,36 @@ +
PR draft checklist + +Please start by opening this Pull Request as a "draft". You can do this by clicking the +arrow on the right side of the green "Create pull request" button. + +- [ ] Please review our + [contributing documentation](https://earthaccess.readthedocs.io/en/latest/contributing/) + before getting started. +- [ ] Ensure an issue exists representing the problem being solved in this PR. +- [ ] Link any issues resolved by this PR with text in the PR description, for example + `closes #1`. +- [ ] Update `CHANGELOG.md` with details about your change in a section titled + `## Unreleased`. If such a section does not exist, please create one. +- [ ] Update the documentation and/or the `README.md` with details of changes to the + interface. This includes new environment variables, function names, decorators, + etc. + +Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub +once these requirements are fulfilled. Don't worry if you see any test failures in +GitHub at this point! + +
+ +
PR merge checklist + +Please do your best to complete these requirements! If you need help with any of these +requirements, you can ping the `@nsidc/earthaccess-support` team in a comment and we +will help you out! + +- [ ] Add unit tests for any new features. +- [ ] Apply formatting and linting autofixes. You can add a GitHub comment in this Pull + Request containing "pre-commit.ci autofix" to automate this. +- [ ] Ensure all automated PR checks (seen at the bottom of the "conversation" tab) pass. +- [ ] Get at least one approving review. + +
diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 3d149637..b0f24a1b 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -66,21 +66,8 @@ We have included type stubs for the untyped `python-cmr` library, which we intend to eventually upstream. Since `python-cmr` exposes the `cmr` package, the stubs appear under `stubs/cmr`. -### Requirements to merge code (Pull Request Process) - -- you must include test coverage -- you must update the documentation -- you must format and lint - ## Pull Request process -1. Ensure you include test coverage for all changes -1. Ensure your code is formatted properly following this document -1. Update the documentation and the `README.md` with details of changes to the - interface, this includes new environment variables, function names, - decorators, etc. -1. Update `CHANGELOG.md` with details about your change in a section titled - `Unreleased`. If one does not exist, please create one. -1. You may merge the Pull Request once you have the sign-off of another - developer, or if you do not have permission to do that, you may request the - reviewer to merge it for you. +Fork the repository using the "Fork" button on the [repository +homepage](https://github.com/nsidc/earthaccess), make your change on the fork, then open +a pull request from your fork and follow the instructions populated in the text box. From 47a1366f797ed1dc6deecf3e22fed9224f49e06c Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 25 Jun 2024 12:49:07 -0600 Subject: [PATCH 15/56] Clarify the instructional text in the PR template --- .github/pull_request_template.md | 42 +++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6394a631..5b2df6f3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,27 +1,45 @@ -
PR draft checklist - -Please start by opening this Pull Request as a "draft". You can do this by clicking the -arrow on the right side of the green "Create pull request" button. - + + + + +
Pull Request (PR) draft checklist - click to expand + +- [ ] Populate a descriptive title. Ensure the title does not look like "Updated + README.md". +- [ ] Populate the body of the pull request with : + - A clear description of the change you are proposing. + - Links to any issues resolved by this PR with text in the PR description, for + example "closes #1". - [ ] Please review our [contributing documentation](https://earthaccess.readthedocs.io/en/latest/contributing/) before getting started. - [ ] Ensure an issue exists representing the problem being solved in this PR. -- [ ] Link any issues resolved by this PR with text in the PR description, for example - `closes #1`. - [ ] Update `CHANGELOG.md` with details about your change in a section titled `## Unreleased`. If such a section does not exist, please create one. - [ ] Update the documentation and/or the `README.md` with details of changes to the interface. This includes new environment variables, function names, decorators, etc. - -Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub -once these requirements are fulfilled. Don't worry if you see any test failures in -GitHub at this point! +- [ ] Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub + once these requirements are fulfilled. Don't worry if you see any test failures in + GitHub at this point!
-
PR merge checklist +
Pull Request (PR) merge checklist - click to expand Please do your best to complete these requirements! If you need help with any of these requirements, you can ping the `@nsidc/earthaccess-support` team in a comment and we From f529c35cc18434c2223c12207a45b61e6eb3658b Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 25 Jun 2024 12:49:28 -0600 Subject: [PATCH 16/56] Fix Unreleased section in CHANGELOG to be compatible with our bumpversion config --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5ee95ac..a0cc813c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [Unreleased] +## Unreleased ### Changed From 9df202217b6dad88eac8a60630d6f71bef3310cd Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sun, 30 Jun 2024 09:17:59 -0600 Subject: [PATCH 17/56] Enable integration test workflow to communicate failure --- scripts/integration-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/integration-test.sh b/scripts/integration-test.sh index 2d55064f..1c3d3195 100755 --- a/scripts/integration-test.sh +++ b/scripts/integration-test.sh @@ -3,5 +3,5 @@ set -e set -x -pytest --cov=earthaccess --cov=tests/integration --cov-report=term-missing ${@} -s --tb=native --log-cli-level=INFO +pytest tests/integration --cov=earthaccess --cov=tests/integration --cov-report=term-missing ${@} -s --tb=native --log-cli-level=INFO bash ./scripts/lint.sh From 8b6bcc232e7529fce04a75037c1e192eca5513c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 04:55:21 +0000 Subject: [PATCH 18/56] Bump the pip-dependencies group with 9 updates Bumps the pip-dependencies group with 9 updates: | Package | From | To | | --- | --- | --- | | [numpy](https://github.com/numpy/numpy) | `1.26.4` | `2.0.0` | | [dask](https://github.com/dask/dask) | `2024.5.2` | `2024.6.2` | | [mypy](https://github.com/python/mypy) | `1.10.0` | `1.10.1` | | [jupyterlab](https://github.com/jupyterlab/jupyterlab) | `4.2.2` | `4.2.3` | | [responses](https://github.com/getsentry/responses) | `0.25.2` | `0.25.3` | | [ruff](https://github.com/astral-sh/ruff) | `0.4.8` | `0.5.0` | | [types-setuptools](https://github.com/python/typeshed) | `70.0.0.20240524` | `70.1.0.20240627` | | [xarray](https://github.com/pydata/xarray) | `2024.5.0` | `2024.6.0` | | [bump-my-version](https://github.com/callowayproject/bump-my-version) | `0.22.0` | `0.24.1` | Updates `numpy` from 1.26.4 to 2.0.0 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](https://github.com/numpy/numpy/compare/v1.26.4...v2.0.0) Updates `dask` from 2024.5.2 to 2024.6.2 - [Release notes](https://github.com/dask/dask/releases) - [Changelog](https://github.com/dask/dask/blob/main/docs/release-procedure.md) - [Commits](https://github.com/dask/dask/compare/2024.5.2...2024.6.2) Updates `mypy` from 1.10.0 to 1.10.1 - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.0...v1.10.1) Updates `jupyterlab` from 4.2.2 to 4.2.3 - [Release notes](https://github.com/jupyterlab/jupyterlab/releases) - [Changelog](https://github.com/jupyterlab/jupyterlab/blob/@jupyterlab/lsp@4.2.3/CHANGELOG.md) - [Commits](https://github.com/jupyterlab/jupyterlab/compare/@jupyterlab/lsp@4.2.2...@jupyterlab/lsp@4.2.3) Updates `responses` from 0.25.2 to 0.25.3 - [Release notes](https://github.com/getsentry/responses/releases) - [Changelog](https://github.com/getsentry/responses/blob/master/CHANGES) - [Commits](https://github.com/getsentry/responses/compare/0.25.2...0.25.3) Updates `ruff` from 0.4.8 to 0.5.0 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.8...0.5.0) Updates `types-setuptools` from 70.0.0.20240524 to 70.1.0.20240627 - [Commits](https://github.com/python/typeshed/commits) Updates `xarray` from 2024.5.0 to 2024.6.0 - [Release notes](https://github.com/pydata/xarray/releases) - [Changelog](https://github.com/pydata/xarray/blob/main/HOW_TO_RELEASE.md) - [Commits](https://github.com/pydata/xarray/compare/v2024.05.0...v2024.06.0) Updates `bump-my-version` from 0.22.0 to 0.24.1 - [Release notes](https://github.com/callowayproject/bump-my-version/releases) - [Changelog](https://github.com/callowayproject/bump-my-version/blob/master/CHANGELOG.md) - [Commits](https://github.com/callowayproject/bump-my-version/compare/0.22.0...0.24.1) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production update-type: version-update:semver-major dependency-group: pip-dependencies - dependency-name: dask dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip-dependencies - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch dependency-group: pip-dependencies - dependency-name: jupyterlab dependency-type: direct:development update-type: version-update:semver-patch dependency-group: pip-dependencies - dependency-name: responses dependency-type: direct:development update-type: version-update:semver-patch dependency-group: pip-dependencies - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip-dependencies - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip-dependencies - dependency-name: xarray dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip-dependencies - dependency-name: bump-my-version dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip-dependencies ... Signed-off-by: dependabot[bot] --- poetry.lock | 217 +++++++++++++++++++++++++++------------------------- 1 file changed, 114 insertions(+), 103 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4412b582..00d277a3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiobotocore" @@ -436,13 +436,13 @@ files = [ [[package]] name = "bump-my-version" -version = "0.22.0" +version = "0.24.1" description = "Version bump your Python project" optional = false python-versions = ">=3.8" files = [ - {file = "bump_my_version-0.22.0-py3-none-any.whl", hash = "sha256:57cd3ba68b8a84d774a9abd247a6c6323192151fa2b41f22eb6763cb17dfebee"}, - {file = "bump_my_version-0.22.0.tar.gz", hash = "sha256:b96f180d6aa154e98e199753e83847587609bd897df9114248e6392324c89620"}, + {file = "bump_my_version-0.24.1-py3-none-any.whl", hash = "sha256:400e2e116a0d04015c26cc0461f7b30ee9602601561162ff7929a1591c59d829"}, + {file = "bump_my_version-0.24.1.tar.gz", hash = "sha256:bf7a474aa23519405a739eaf15c782e4bb038e14ae6db234f53a1f61f8fe1441"}, ] [package.dependencies] @@ -845,13 +845,13 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "dask" -version = "2024.5.2" +version = "2024.6.2" description = "Parallel PyData with Task Scheduling" optional = true python-versions = ">=3.9" files = [ - {file = "dask-2024.5.2-py3-none-any.whl", hash = "sha256:acc2cfe41d9e0151c216ac40396dbe34df13bc3d8c51dfece190349e4f2243af"}, - {file = "dask-2024.5.2.tar.gz", hash = "sha256:5c9722c44d0195e78b6e54197aa3302e6fcaaac2310fd3014560bcb86253dcb3"}, + {file = "dask-2024.6.2-py3-none-any.whl", hash = "sha256:81b80ee015b2e057b93bb2d1bf13a866136e762e2b24bf54b6b621e8b86b7708"}, + {file = "dask-2024.6.2.tar.gz", hash = "sha256:d429d6b19e85fd1306ac37c188aaf99d03bbe69a6fe59d2b42882b2ac188686f"}, ] [package.dependencies] @@ -869,7 +869,7 @@ array = ["numpy (>=1.21)"] complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)", "pyarrow-hotfix"] dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=1.3)"] diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] -distributed = ["distributed (==2024.5.2)"] +distributed = ["distributed (==2024.6.2)"] test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] [[package]] @@ -1784,13 +1784,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.2" +version = "4.2.3" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.2-py3-none-any.whl", hash = "sha256:59ee9b839f43308c3dfd55d72d1f1a299ed42a7f91f2d1afe9c12a783f9e525f"}, - {file = "jupyterlab-4.2.2.tar.gz", hash = "sha256:a534b6a25719a92a40d514fb133a9fe8f0d9981b0bbce5d8a5fcaa33344a3038"}, + {file = "jupyterlab-4.2.3-py3-none-any.whl", hash = "sha256:0b59d11808e84bb84105c73364edfa867dd475492429ab34ea388a52f2e2e596"}, + {file = "jupyterlab-4.2.3.tar.gz", hash = "sha256:df6e46969ea51d66815167f23d92f105423b7f1f06fa604d4f44aeb018c82c7b"}, ] [package.dependencies] @@ -2757,38 +2757,38 @@ files = [ [[package]] name = "mypy" -version = "1.10.0" +version = "1.10.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, + {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, + {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, + {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, + {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, + {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, + {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, + {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, + {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, + {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, + {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, + {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, + {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, + {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, + {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, + {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, + {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, + {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, ] [package.dependencies] @@ -2975,47 +2975,56 @@ zfpy = ["zfpy (>=1.0.0)"] [[package]] name = "numpy" -version = "1.26.4" +version = "2.0.0" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:04494f6ec467ccb5369d1808570ae55f6ed9b5809d7f035059000a37b8d7e86f"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2635dbd200c2d6faf2ef9a0d04f0ecc6b13b3cad54f7c67c61155138835515d2"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0a43f0974d501842866cc83471bdb0116ba0dffdbaac33ec05e6afed5b615238"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:8d83bb187fb647643bd56e1ae43f273c7f4dbcdf94550d7938cfc32566756514"}, + {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e843d186c8fb1b102bef3e2bc35ef81160ffef3194646a7fdd6a73c6b97196"}, + {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1"}, + {file = "numpy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b4c76e3d4c56f145d41b7b6751255feefae92edbc9a61e1758a98204200f30fc"}, + {file = "numpy-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd3a644e4807e73b4e1867b769fbf1ce8c5d80e7caaef0d90dcdc640dfc9787"}, + {file = "numpy-2.0.0-cp310-cp310-win32.whl", hash = "sha256:cee6cc0584f71adefe2c908856ccc98702baf95ff80092e4ca46061538a2ba98"}, + {file = "numpy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:ed08d2703b5972ec736451b818c2eb9da80d66c3e84aed1deeb0c345fefe461b"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad0c86f3455fbd0de6c31a3056eb822fc939f81b1618f10ff3406971893b62a5"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7f387600d424f91576af20518334df3d97bc76a300a755f9a8d6e4f5cadd289"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:34f003cb88b1ba38cb9a9a4a3161c1604973d7f9d5552c38bc2f04f829536609"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b6f6a8f45d0313db07d6d1d37bd0b112f887e1369758a5419c0370ba915b3871"}, + {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f64641b42b2429f56ee08b4f427a4d2daf916ec59686061de751a55aafa22e4"}, + {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581"}, + {file = "numpy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46e161722e0f619749d1cd892167039015b2c2817296104487cd03ed4a955995"}, + {file = "numpy-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0e50842b2295ba8414c8c1d9d957083d5dfe9e16828b37de883f51fc53c4016f"}, + {file = "numpy-2.0.0-cp311-cp311-win32.whl", hash = "sha256:2ce46fd0b8a0c947ae047d222f7136fc4d55538741373107574271bc00e20e8f"}, + {file = "numpy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd6acc766814ea6443628f4e6751d0da6593dae29c08c0b2606164db026970c"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:354f373279768fa5a584bac997de6a6c9bc535c482592d7a813bb0c09be6c76f"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d2f62e55a4cd9c58c1d9a1c9edaedcd857a73cb6fda875bf79093f9d9086f85"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1e72728e7501a450288fc8e1f9ebc73d90cfd4671ebbd631f3e7857c39bd16f2"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:84554fc53daa8f6abf8e8a66e076aff6ece62de68523d9f665f32d2fc50fd66e"}, + {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73aafd1afca80afecb22718f8700b40ac7cab927b8abab3c3e337d70e10e5a2"}, + {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a"}, + {file = "numpy-2.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0ec84b9ba0654f3b962802edc91424331f423dcf5d5f926676e0150789cb3d95"}, + {file = "numpy-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:feff59f27338135776f6d4e2ec7aeeac5d5f7a08a83e80869121ef8164b74af9"}, + {file = "numpy-2.0.0-cp312-cp312-win32.whl", hash = "sha256:c5a59996dc61835133b56a32ebe4ef3740ea5bc19b3983ac60cc32be5a665d54"}, + {file = "numpy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a356364941fb0593bb899a1076b92dfa2029f6f5b8ba88a14fd0984aaf76d0df"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e61155fae27570692ad1d327e81c6cf27d535a5d7ef97648a17d922224b216de"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4554eb96f0fd263041baf16cf0881b3f5dafae7a59b1049acb9540c4d57bc8cb"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:903703372d46bce88b6920a0cd86c3ad82dae2dbef157b5fc01b70ea1cfc430f"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:3e8e01233d57639b2e30966c63d36fcea099d17c53bf424d77f088b0f4babd86"}, + {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cde1753efe513705a0c6d28f5884e22bdc30438bf0085c5c486cdaff40cd67a"}, + {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d"}, + {file = "numpy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a1712c015831da583b21c5bfe15e8684137097969c6d22e8316ba66b5baabe4"}, + {file = "numpy-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9c27f0946a3536403efb0e1c28def1ae6730a72cd0d5878db38824855e3afc44"}, + {file = "numpy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:63b92c512d9dbcc37f9d81b123dec99fdb318ba38c8059afc78086fe73820275"}, + {file = "numpy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f6bed7f840d44c08ebdb73b1825282b801799e325bcbdfa6bc5c370e5aecc65"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9416a5c2e92ace094e9f0082c5fd473502c91651fb896bc17690d6fc475128d6"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:17067d097ed036636fa79f6a869ac26df7db1ba22039d962422506640314933a"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ecb5b0582cd125f67a629072fed6f83562d9dd04d7e03256c9829bdec027ad"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cef04d068f5fb0518a77857953193b6bb94809a806bd0a14983a8f12ada060c9"}, + {file = "numpy-2.0.0.tar.gz", hash = "sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864"}, ] [[package]] @@ -3845,6 +3854,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4136,13 +4146,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "responses" -version = "0.25.2" +version = "0.25.3" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" files = [ - {file = "responses-0.25.2-py3-none-any.whl", hash = "sha256:b59707ea25de536d324670791ab073fafd41f3a351cec9c51cb6147089a9a30a"}, - {file = "responses-0.25.2.tar.gz", hash = "sha256:77a61ad7e6016ed2ac00739b7efa5f35c42351d5b9b5d26bb1be87f197632487"}, + {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, + {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, ] [package.dependencies] @@ -4326,28 +4336,29 @@ files = [ [[package]] name = "ruff" -version = "0.4.8" +version = "0.5.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, - {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aad360893e92486662ef3be0a339c5ca3c1b109e0134fcd37d534d4be9fb8de3"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:284c2e3f3396fb05f5f803c9fffb53ebbe09a3ebe7dda2929ed8d73ded736deb"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7354f921e3fbe04d2a62d46707e569f9315e1a613307f7311a935743c51a764"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:72584676164e15a68a15778fd1b17c28a519e7a0622161eb2debdcdabdc71883"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9678d5c9b43315f323af2233a04d747409d1e3aa6789620083a82d1066a35199"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704977a658131651a22b5ebeb28b717ef42ac6ee3b11e91dc87b633b5d83142b"}, - {file = "ruff-0.4.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05f8d6f0c3cce5026cecd83b7a143dcad503045857bc49662f736437380ad45"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ea874950daca5697309d976c9afba830d3bf0ed66887481d6bca1673fc5b66a"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fc95aac2943ddf360376be9aa3107c8cf9640083940a8c5bd824be692d2216dc"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:384154a1c3f4bf537bac69f33720957ee49ac8d484bfc91720cc94172026ceed"}, - {file = "ruff-0.4.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5ce97cacc99878aa0d084c626a15cd21e6b3d53fd6f9112b7fc485918e1fa"}, - {file = "ruff-0.4.8-py3-none-win32.whl", hash = "sha256:6d795d7639212c2dfd01991259460101c22aabf420d9b943f153ab9d9706e6a9"}, - {file = "ruff-0.4.8-py3-none-win_amd64.whl", hash = "sha256:e14a3a095d07560a9d6769a72f781d73259655919d9b396c650fc98a8157555d"}, - {file = "ruff-0.4.8-py3-none-win_arm64.whl", hash = "sha256:14019a06dbe29b608f6b7cbcec300e3170a8d86efaddb7b23405cb7f7dcaf780"}, - {file = "ruff-0.4.8.tar.gz", hash = "sha256:16d717b1d57b2e2fd68bd0bf80fb43931b79d05a7131aa477d66fc40fbd86268"}, + {file = "ruff-0.5.0-py3-none-linux_armv6l.whl", hash = "sha256:ee770ea8ab38918f34e7560a597cc0a8c9a193aaa01bfbd879ef43cb06bd9c4c"}, + {file = "ruff-0.5.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38f3b8327b3cb43474559d435f5fa65dacf723351c159ed0dc567f7ab735d1b6"}, + {file = "ruff-0.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7594f8df5404a5c5c8f64b8311169879f6cf42142da644c7e0ba3c3f14130370"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc7012d6ec85032bc4e9065110df205752d64010bed5f958d25dbee9ce35de3"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d505fb93b0fabef974b168d9b27c3960714d2ecda24b6ffa6a87ac432905ea38"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dc5cfd3558f14513ed0d5b70ce531e28ea81a8a3b1b07f0f48421a3d9e7d80a"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:db3ca35265de239a1176d56a464b51557fce41095c37d6c406e658cf80bbb362"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1a321c4f68809fddd9b282fab6a8d8db796b270fff44722589a8b946925a2a8"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c4dfcd8d34b143916994b3876b63d53f56724c03f8c1a33a253b7b1e6bf2a7d"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e589e27971c2a3efff3fadafb16e5aef7ff93250f0134ec4b52052b673cf988d"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2ffbc3715a52b037bcb0f6ff524a9367f642cdc5817944f6af5479bbb2eb50e"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cd096e23c6a4f9c819525a437fa0a99d1c67a1b6bb30948d46f33afbc53596cf"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:46e193b36f2255729ad34a49c9a997d506e58f08555366b2108783b3064a0e1e"}, + {file = "ruff-0.5.0-py3-none-win32.whl", hash = "sha256:49141d267100f5ceff541b4e06552e98527870eafa1acc9dec9139c9ec5af64c"}, + {file = "ruff-0.5.0-py3-none-win_amd64.whl", hash = "sha256:e9118f60091047444c1b90952736ee7b1792910cab56e9b9a9ac20af94cd0440"}, + {file = "ruff-0.5.0-py3-none-win_arm64.whl", hash = "sha256:ed5c4df5c1fb4518abcb57725b576659542bdbe93366f4f329e8f398c4b71178"}, + {file = "ruff-0.5.0.tar.gz", hash = "sha256:eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1"}, ] [[package]] @@ -4637,13 +4648,13 @@ urllib3 = ">=2" [[package]] name = "types-setuptools" -version = "70.0.0.20240524" +version = "70.1.0.20240627" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.0.0.20240524.tar.gz", hash = "sha256:e31fee7b9d15ef53980526579ac6089b3ae51a005a281acf97178e90ac71aff6"}, - {file = "types_setuptools-70.0.0.20240524-py3-none-any.whl", hash = "sha256:8f5379b9948682d72a9ab531fbe52932e84c4f38deda570255f9bae3edd766bc"}, + {file = "types-setuptools-70.1.0.20240627.tar.gz", hash = "sha256:385907a47b5cf302b928ce07953cd91147d5de6f3da604c31905fdf0ec309e83"}, + {file = "types_setuptools-70.1.0.20240627-py3-none-any.whl", hash = "sha256:c7bdf05cd0a8b66868b4774c7b3c079d01ae025d8c9562bfc8bf2ff44d263c9c"}, ] [[package]] @@ -5055,13 +5066,13 @@ files = [ [[package]] name = "xarray" -version = "2024.5.0" +version = "2024.6.0" description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.9" files = [ - {file = "xarray-2024.5.0-py3-none-any.whl", hash = "sha256:7ddedfe2294a0ab00f02d0fbdcb9c6300ec589f3cf436a9c7b7b577a12cd9bcf"}, - {file = "xarray-2024.5.0.tar.gz", hash = "sha256:e0eb1cb265f265126795f388ed9591f3c752f2aca491f6c0576711fd15b708f2"}, + {file = "xarray-2024.6.0-py3-none-any.whl", hash = "sha256:721a7394e8ec3d592b2d8ebe21eed074ac077dc1bb1bd777ce00e41700b4866c"}, + {file = "xarray-2024.6.0.tar.gz", hash = "sha256:0b91e0bc4dc0296947947640fe31ec6e867ce258d2f7cbc10bedf4a6d68340c7"}, ] [package.dependencies] From 6f9990179225a55eb3cb2074b9fd103da19520e4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 01:25:12 +0000 Subject: [PATCH 19/56] chore: update pre-commit hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.4.7 → v0.5.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.7...v0.5.0) - [github.com/google/yamlfmt: v0.12.1 → v0.13.0](https://github.com/google/yamlfmt/compare/v0.12.1...v0.13.0) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 68202d5c..e596ad29 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,13 +13,13 @@ repos: - id: check-json - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.4.7 + rev: v0.5.0 hooks: - id: ruff args: ["--fix", "--exit-non-zero-on-fix"] - id: ruff-format - repo: https://github.com/google/yamlfmt - rev: v0.12.1 + rev: v0.13.0 hooks: - id: yamlfmt types_or: [yaml] From 467b3d7b2c0f7f5b7e4088f067699e28c1953e4e Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Wed, 3 Jul 2024 18:49:29 +0530 Subject: [PATCH 20/56] Fleshed out contributing docs to include pre-commit,style,build info --- docs/contributing/index.md | 54 +++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 3d149637..72494f8a 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -6,7 +6,7 @@ with the community and maintainers via [a GitHub Discussion](https://github.com/nsidc/earthaccess/discussions), or [any other method](our-meet-ups.md). -Please note that we have a [code of conduct](./code-of-conduct.md). Please follow it in all of your interactions with the project. +Please note that we have a [code of conduct](/CODE_OF_CONDUCT.md). Please follow it in all of your interactions with the project. ## First Steps to contribute @@ -43,6 +43,28 @@ Once you've completed these steps, you are ready to submit your contribution. Once you've completed these steps, you are ready to submit your contribution. + +### ...to contribute to docs + +#### Documentation Style + +To ensure that our code is well-documented and easy to understand, we use [Google-style docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) to document all functions, classes, and methods in this library + +#### Getting Help with Setup and Configuration + +To work on docs locally follow the steps below: + +- To setup the documentation, navigate to the scripts directory +- Run the `scripts/build-docs.sh` script to build the documentation +- Serve the documentation locally, using the `scripts/docs-live.sh` script + +If you encounter any issues while setting up the documentation using the provided steps, please refer to our [tutorial]( https://www.youtube.com/watch?v=mNjlMZ4F3So) for additional guidance. + +#### Caveats and Considerations + +Our mkdocs setup has a known limitation: the hot reloader won't auto-reload when changing docstrings. To see updates, manually rebuild and re-serve docs. We're working to improve the dev experience and appreciate your patience. + + ## Submitting your contribution - Run all unit tests successfully in your branch @@ -53,18 +75,20 @@ Once you've completed these steps, you are ready to submit your contribution. ### Please format and lint as you go -```bash -make format lint -``` -We attempt to provide comprehensive type annotations within this repository. If -you do not provide fully annotated functions or methods, the `lint` command will -fail. Over time, we plan to increase type-checking strictness in order to -ensure more precise, beneficial type annotations. +#### Usage of Pre-Commit + +To maintain code quality, we use pre-commit for automated checks before committing changes. Install and configure pre-commit to ensure high-quality contributions + +To set up pre-commit follow these steps: + +- `pip install pre-commit` for Windows and for Linux refer to your distribution's package index +- `pre-commit install` to enable it to run automatically +- `pre-commit run -a` to run it manually + +We attempt to provide comprehensive type annotations within this repository. If you do not provide fully annotated functions or methods, the `lint` command will fail. Over time, we plan to increase type-checking strictness in order to ensure more precise, beneficial type annotations. -We have included type stubs for the untyped `python-cmr` library, which we -intend to eventually upstream. Since `python-cmr` exposes the `cmr` package, -the stubs appear under `stubs/cmr`. +We have included type stubs for the untyped `python-cmr` library, which we intend to eventually upstream. Since `python-cmr` exposes the `cmr` package, the stubs appear under `stubs/cmr`. ### Requirements to merge code (Pull Request Process) @@ -75,12 +99,12 @@ the stubs appear under `stubs/cmr`. ## Pull Request process 1. Ensure you include test coverage for all changes -1. Ensure your code is formatted properly following this document -1. Update the documentation and the `README.md` with details of changes to the +2. Ensure your code is formatted properly following this document +3. Update the documentation and the `README.md` with details of changes to the interface, this includes new environment variables, function names, decorators, etc. -1. Update `CHANGELOG.md` with details about your change in a section titled +4. Update `CHANGELOG.md` with details about your change in a section titled `Unreleased`. If one does not exist, please create one. -1. You may merge the Pull Request once you have the sign-off of another +5. You may merge the Pull Request once you have the sign-off of another developer, or if you do not have permission to do that, you may request the reviewer to merge it for you. From a0dacd952e22b31f1131d170f77cd88276c2400b Mon Sep 17 00:00:00 2001 From: asteiker Date: Wed, 3 Jul 2024 16:56:39 +0000 Subject: [PATCH 21/56] removed s3credentials print --- docs/howto/edl.ipynb | 81 +++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 53 deletions(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index d26503dc..21313b77 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -17,17 +17,7 @@ "execution_count": 1, "id": "ce723d6f-8b5f-43e1-9531-19ee08a056fe", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You're now authenticated with NASA Earthdata Login\n", - "Using token with expiration date: 09/25/2023\n", - "Using environment variables for EDL\n" - ] - } - ], + "outputs": [], "source": [ "import earthaccess\n", "\n", @@ -40,32 +30,17 @@ "metadata": {}, "source": [ "### Data in AWS\n", - "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs" + "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs. " ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "3108ff21-1ea2-449b-b2f5-b442dd3b61f5", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'accessKeyId': 'ASIA2D3OGJNTE2UAIDHR',\n", - " 'secretAccessKey': '9+6D3m76HTuNi3qvbgUMBFlJECsCgPyJ4ur2CfZL',\n", - " 'sessionToken': 'FwoGZXIvYXdzEPL//////////wEaDIVnMBd6zBaEKmG58CLpAXrPN52vpRHvs+0y960kNwGOdFHPD81WVsdeUciP/vQvsU/xX4Cg+iLH/OXDlH/PBWCmSgfk4vgXD9k6r2JRmnpkwyF4v4K4+ciIuUHNG43ZegSFtkzZoLHShLtEnNu/OIT0TlcrOLJIY+TnjEDcKkXiLSsLYB7qDKZIeg654oPCkjeXyDuoWOumJa7utBEwHmakOGdGJTthOfbfJ6RJ9sbPbmsEXg0bHF5PY9h3/Eoq0rjyRmlb1WYuopw5YK8dL5N9IwSKlKiu19Cj0nd04XVNuiB02+fLDubsnKK1b3j0jR53qAU3FxobKLHgj6YGMi0kDN7xWP6yqI7Ry69Lf5EEcDRVp4UVz6llGYoDpsKr9s3cXaBljkhEjH7N5dQ=',\n", - " 'expiration': '2023-07-28 17:43:29+00:00'}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "s3_credentials = auth.get_s3_credentials(\"NSIDC\")\n", - "s3_credentials" + "s3_credentials = auth.get_s3_credentials(\"NSIDC\")" ] }, { @@ -88,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 3, "id": "a7bb1a93-6f85-40cd-93b4-ce821a03a8b5", "metadata": {}, "outputs": [], @@ -102,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "id": "c0f4e286-8ce9-4cde-b3a2-631b361a0d51", "metadata": {}, "outputs": [ @@ -112,7 +87,7 @@ "'�HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00���������HUn\\x00\\x00\\x00\\x00��������\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR\\x02'" ] }, - "execution_count": 15, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -133,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "id": "1e5f5f7a-0643-42cb-b70c-4ac982824ff9", "metadata": {}, "outputs": [], @@ -143,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "id": "fbc7bc5f-b984-4324-b095-3648a437fba2", "metadata": {}, "outputs": [ @@ -153,7 +128,7 @@ "b'\\x89HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xd7HUn\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR'" ] }, - "execution_count": 11, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -166,19 +141,19 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "id": "07433a9f-f276-4d2b-9ed3-f556df2884af", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f68d214c1c4b4d0fb0b44d878a003a33", + "model_id": "ac15458d5f9e4b8aac40f2e5417b22c7", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "QUEUEING TASKS | : 0it [00:00, ?it/s]" + "QUEUEING TASKS | : 0%| | 0/1 [00:00
<xarray.Dataset>\n",
+       "
<xarray.Dataset> Size: 3kB\n",
        "Dimensions:           (bands: 285)\n",
        "Dimensions without coordinates: bands\n",
        "Data variables:\n",
-       "    wavelengths       (bands) float32 ...\n",
-       "    fwhm              (bands) float32 ...\n",
-       "    good_wavelengths  (bands) float32 ...
" + " wavelengths (bands) float32 1kB ...\n", + " fwhm (bands) float32 1kB ...\n", + " good_wavelengths (bands) float32 1kB ...
" ], "text/plain": [ - "\n", + " Size: 3kB\n", "Dimensions: (bands: 285)\n", "Dimensions without coordinates: bands\n", "Data variables:\n", - " wavelengths (bands) float32 ...\n", - " fwhm (bands) float32 ...\n", - " good_wavelengths (bands) float32 ..." + " wavelengths (bands) float32 1kB ...\n", + " fwhm (bands) float32 1kB ...\n", + " good_wavelengths (bands) float32 1kB ..." ] }, - "execution_count": 13, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -638,7 +613,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.10.14" } }, "nbformat": 4, From a63f04fc6231b5c00b0a83afe9ab9dd1e88c8908 Mon Sep 17 00:00:00 2001 From: asteiker Date: Wed, 3 Jul 2024 17:00:52 +0000 Subject: [PATCH 22/56] comment s3credential line --- docs/howto/edl.ipynb | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index 21313b77..84a60948 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -30,17 +30,11 @@ "metadata": {}, "source": [ "### Data in AWS\n", - "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3108ff21-1ea2-449b-b2f5-b442dd3b61f5", - "metadata": {}, - "outputs": [], - "source": [ - "s3_credentials = auth.get_s3_credentials(\"NSIDC\")" + "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs:\n", + "\n", + "```\n", + "s3_credentials = auth.get_s3_credentials(\"NSIDC\")\n", + "```" ] }, { From 4de295b81a0cd81a6c39456365f1c9a4cda50feb Mon Sep 17 00:00:00 2001 From: asteiker Date: Wed, 3 Jul 2024 17:06:45 +0000 Subject: [PATCH 23/56] remove s3credential line --- docs/howto/edl.ipynb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index 84a60948..ce9b967c 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -57,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "a7bb1a93-6f85-40cd-93b4-ce821a03a8b5", "metadata": {}, "outputs": [], @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "c0f4e286-8ce9-4cde-b3a2-631b361a0d51", "metadata": {}, "outputs": [ @@ -81,7 +81,7 @@ "'�HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00���������HUn\\x00\\x00\\x00\\x00��������\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR\\x02'" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "1e5f5f7a-0643-42cb-b70c-4ac982824ff9", "metadata": {}, "outputs": [], @@ -112,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "fbc7bc5f-b984-4324-b095-3648a437fba2", "metadata": {}, "outputs": [ @@ -122,7 +122,7 @@ "b'\\x89HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xd7HUn\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR'" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -135,14 +135,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "07433a9f-f276-4d2b-9ed3-f556df2884af", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ac15458d5f9e4b8aac40f2e5417b22c7", + "model_id": "9e8e316215154002afe0c89ccc174a04", "version_major": 2, "version_minor": 0 }, @@ -156,7 +156,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "100cb212635146bab6548c8bf171d970", + "model_id": "ff1c8adf11a04dc4aa799fe45aa7460d", "version_major": 2, "version_minor": 0 }, @@ -170,7 +170,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3754ed8d0297407cade522b651c59ead", + "model_id": "77eac7c793e7416bb91196733769f3fe", "version_major": 2, "version_minor": 0 }, @@ -185,8 +185,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2.73 s, sys: 241 ms, total: 2.97 s\n", - "Wall time: 10.9 s\n" + "CPU times: user 1.37 s, sys: 207 ms, total: 1.58 s\n", + "Wall time: 11.8 s\n" ] }, { @@ -561,7 +561,7 @@ "Data variables:\n", " wavelengths (bands) float32 1kB ...\n", " fwhm (bands) float32 1kB ...\n", - " good_wavelengths (bands) float32 1kB ..." + " good_wavelengths (bands) float32 1kB ..." ], "text/plain": [ " Size: 3kB\n", @@ -573,7 +573,7 @@ " good_wavelengths (bands) float32 1kB ..." ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } From 9c75e7d16f84919db11d3ffcb11f9d6b52993d9e Mon Sep 17 00:00:00 2001 From: asteiker Date: Wed, 3 Jul 2024 18:19:18 +0000 Subject: [PATCH 24/56] comment s3credential line --- docs/howto/edl.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index ce9b967c..dcc7727a 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -30,7 +30,7 @@ "metadata": {}, "source": [ "### Data in AWS\n", - "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs:\n", + "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs. This line is commented out for security reasons. Please copy the following line into a new code block in order to obtain your credentials. \n", "\n", "```\n", "s3_credentials = auth.get_s3_credentials(\"NSIDC\")\n", From 5bc9fb95494f25302ffe40e7f20eedfc2953a8f6 Mon Sep 17 00:00:00 2001 From: asteiker Date: Wed, 3 Jul 2024 19:10:47 +0000 Subject: [PATCH 25/56] move s3credential to commented code cell --- docs/howto/edl.ipynb | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index dcc7727a..5949ddb5 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -30,11 +30,17 @@ "metadata": {}, "source": [ "### Data in AWS\n", - "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs. This line is commented out for security reasons. Please copy the following line into a new code block in order to obtain your credentials. \n", - "\n", - "```\n", - "s3_credentials = auth.get_s3_credentials(\"NSIDC\")\n", - "```" + "If the data we want to access is on AWS, we can use earthaccess to generate temporary S3 credentials for any of the DAACs. This line is commented out for security reasons. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f1f45172-c9c3-4f25-ad7e-acf94fba8b1d", + "metadata": {}, + "outputs": [], + "source": [ + "#s3_credentials = auth.get_s3_credentials(\"NSIDC\")" ] }, { @@ -57,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "a7bb1a93-6f85-40cd-93b4-ce821a03a8b5", "metadata": {}, "outputs": [], @@ -71,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "c0f4e286-8ce9-4cde-b3a2-631b361a0d51", "metadata": {}, "outputs": [ @@ -81,7 +87,7 @@ "'�HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00���������HUn\\x00\\x00\\x00\\x00��������\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR\\x02'" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -102,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "1e5f5f7a-0643-42cb-b70c-4ac982824ff9", "metadata": {}, "outputs": [], @@ -112,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "fbc7bc5f-b984-4324-b095-3648a437fba2", "metadata": {}, "outputs": [ @@ -122,7 +128,7 @@ "b'\\x89HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xd7HUn\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR'" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -135,14 +141,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "07433a9f-f276-4d2b-9ed3-f556df2884af", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9e8e316215154002afe0c89ccc174a04", + "model_id": "c76e3afc58a84118a04144f2f08ff6bc", "version_major": 2, "version_minor": 0 }, @@ -156,7 +162,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ff1c8adf11a04dc4aa799fe45aa7460d", + "model_id": "98f4219952eb4e9bb8f60ad67f438454", "version_major": 2, "version_minor": 0 }, @@ -170,7 +176,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "77eac7c793e7416bb91196733769f3fe", + "model_id": "9451a7fda27e4569968054028576999d", "version_major": 2, "version_minor": 0 }, @@ -185,8 +191,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.37 s, sys: 207 ms, total: 1.58 s\n", - "Wall time: 11.8 s\n" + "CPU times: user 1.4 s, sys: 179 ms, total: 1.58 s\n", + "Wall time: 10.5 s\n" ] }, { @@ -561,7 +567,7 @@ "Data variables:\n", " wavelengths (bands) float32 1kB ...\n", " fwhm (bands) float32 1kB ...\n", - " good_wavelengths (bands) float32 1kB ..." + " good_wavelengths (bands) float32 1kB ..." ], "text/plain": [ " Size: 3kB\n", @@ -573,7 +579,7 @@ " good_wavelengths (bands) float32 1kB ..." ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } From a2d9cc576a42aeb22fcefc226d9d6ca29704e476 Mon Sep 17 00:00:00 2001 From: Sherwin-14 Date: Thu, 4 Jul 2024 13:37:14 +0530 Subject: [PATCH 26/56] Made the necessary changes like adding proper headings, and grammar suggestions --- docs/contributing/index.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 72494f8a..c5c40455 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -19,7 +19,7 @@ Please note that we have a [code of conduct](/CODE_OF_CONDUCT.md). Please follow From here, you might want to fix and issue or bug, or add a new feature. Jump to the relevant section to proceed. -### ...to fix an issue or bug +### Fixing an Issue or Bug - Create a GitHub issue with a [minimal reproducible example](https://en.wikipedia.org/wiki/Minimal_reproducible_example), @@ -33,7 +33,7 @@ relevant section to proceed. Once you've completed these steps, you are ready to submit your contribution. -### ...to contribute a new feature +### Contributing a New Feature - Create an issue and discuss the feature's scope and its fit for this package with the team - Create a branch for your new feature in your fork @@ -44,15 +44,15 @@ Once you've completed these steps, you are ready to submit your contribution. Once you've completed these steps, you are ready to submit your contribution. -### ...to contribute to docs +### Contributing to Documentation -#### Documentation Style +#### Documentation Style -To ensure that our code is well-documented and easy to understand, we use [Google-style docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) to document all functions, classes, and methods in this library +To ensure that our code is well-documented and easy to understand, we use [Google-style docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) to document all functions, classes, and methods in this library. #### Getting Help with Setup and Configuration -To work on docs locally follow the steps below: +To work on documentation locally, follow these steps: - To setup the documentation, navigate to the scripts directory - Run the `scripts/build-docs.sh` script to build the documentation @@ -62,7 +62,7 @@ If you encounter any issues while setting up the documentation using the provide #### Caveats and Considerations -Our mkdocs setup has a known limitation: the hot reloader won't auto-reload when changing docstrings. To see updates, manually rebuild and re-serve docs. We're working to improve the dev experience and appreciate your patience. +Our mkdocs setup has a known limitation: the hot reloader won't auto-reload when changing docstrings. To see updates, manually rebuild and re-serve docs. We're working to improve the developer experience and appreciate your patience. ## Submitting your contribution @@ -78,9 +78,9 @@ Our mkdocs setup has a known limitation: the hot reloader won't auto-reload when #### Usage of Pre-Commit -To maintain code quality, we use pre-commit for automated checks before committing changes. Install and configure pre-commit to ensure high-quality contributions +To maintain code quality, we use pre-commit for automated checks before committing changes. Install and configure pre-commit to ensure high-quality contributions. -To set up pre-commit follow these steps: +To set up pre-commit, follow these steps: - `pip install pre-commit` for Windows and for Linux refer to your distribution's package index - `pre-commit install` to enable it to run automatically @@ -99,12 +99,11 @@ We have included type stubs for the untyped `python-cmr` library, which we inten ## Pull Request process 1. Ensure you include test coverage for all changes -2. Ensure your code is formatted properly following this document -3. Update the documentation and the `README.md` with details of changes to the - interface, this includes new environment variables, function names, - decorators, etc. -4. Update `CHANGELOG.md` with details about your change in a section titled +1. Ensure your code is formatted properly following this document +1. Update the documentation and the `README.md` with details of changes to the + interface, this includes new environment variables, function names,decorators, etc. +1. Update `CHANGELOG.md` with details about your change in a section titled `Unreleased`. If one does not exist, please create one. -5. You may merge the Pull Request once you have the sign-off of another +1. You may merge the Pull Request once you have the sign-off of another developer, or if you do not have permission to do that, you may request the reviewer to merge it for you. From c148a081c58ede5b56a7aab31fa4a19e630d3c04 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Fri, 5 Jul 2024 18:04:32 -0400 Subject: [PATCH 27/56] add links to issues/PRs/commits and authors for changelog entries (in-progress, about half-way through) --- CHANGELOG.md | 90 ++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ed932bc..3564d2ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,7 +61,7 @@ ### Changed - Handle S3 credential expiration more gracefully. -- Use dependabot to update Github Actions. +- Use dependabot to update GitHub Actions. - Consolidate dependabot updates. - Switch to `ruff` for formatting. @@ -133,101 +133,101 @@ ## [0.5.1] - 2023-03-20 ### Changed -- For CI, documentation for readthedocs fixed by including poetry as the default tool -- For CI, injected new secrets to test Auth using the icepyx convention (EARTHDATA_USERNAME) +- For CI, documentation for readthedocs fixed by including poetry as the default tool ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- For CI, injected new secrets to test Auth using the icepyx convention (EARTHDATA_USERNAME) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@JessicaS11**](https://github.com/JessicaS11), [**@betolink**](https://github.com/betolink)) ### Added -- Add ability to get the user's profile with auth.user_profile which includes the user email -- Add LAAD as a supported DAAC +- Add ability to get the user's profile with auth.user_profile which includes the user email ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- Add LAAD as a supported DAAC ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) ### Fixed -- get_s3_credentials() only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 -- including tests for all DAAC S3 endpoints -- Notebooks updated to use the new top level API -- removed magic from dependencies (not available in windows and not used but just in tests) +- get_s3_credentials() only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink), [**@JessicaS11**](https://github.com/JessicaS11), [**@scottyhq**](https://github.com/scottyhq)) +- including tests for all DAAC S3 endpoints ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- Notebooks updated to use the new top level API ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- removed magic from dependencies (not available in windows and not used but just in tests) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) ## [0.5.0] - 2023-02-23 ### Changed -- For CI, documentation is now only built for the main, dev and documentation branches -- For CI, notebooks are executed every time the documentation gets published! +- For CI, documentation is now only built for the main, dev and documentation branches ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) +- For CI, notebooks are executed every time the documentation gets published! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink), [**@asteiker**](https://github.com/asteiker)) ### Added -- Add ability to use the top level API to get S3 credentials, authenticated fsspec and requests sessions! -- Make available ASF direct access for Sentinel1 products +- Add ability to use the top level API to get S3 credentials, authenticated fsspec and requests sessions! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) +- Make available ASF direct access for Sentinel1 products ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) ### Fixed -- @JessicaS11 fixed a bug where the Auth class was invoked without the proper parameters -- if a user specifies the netrc strategy and there is no netrc an exception is raised -- S3 URLs broke the Store class when opened outside AWS -- Opening files using URLs was not working properly on AWS, thanks to @amfriesz for reporting it! +- Fix a bug where the Auth class is invoked without the proper parameters ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@JessicaS11**](https://github.com/JessicaS11)) +- if a user specifies the netrc strategy and there is no netrc an exception is raised ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) +- S3 URLs broke the Store class when opened outside AWS ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) +- Opening files using URLs was not working properly on AWS, thanks to @amfriesz for reporting it! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink), ([**@amfriesz**](https://github.com/amfriesz))) ## [0.4.7] - 2022-12-11 ### Fixed -- Fix open() for direct access -- Move python-magic to the dev section because it is a test dependency -- Make minor edits in the README +- Fix open() for direct access ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) +- Move python-magic to the dev section because it is a test dependency ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) +- Make minor edits in the README ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) ## [0.4.6] - 2022-12-08 ### Changed -- For CI, only run the publish workflow after a release on GitHub +- For CI, only run the publish workflow after a release on GitHub ([#183](https://github.com/nsidc/earthaccess/pull/183))([**@betolink**](https://github.com/betolink)) ### Added -- Add feature to search collections by DOI -- Add new API documentation and simplify notation to access data +- Add feature to search collections by DOI ([#183](https://github.com/nsidc/earthaccess/pull/183))([**@betolink**](https://github.com/betolink)) +- Add new API documentation and simplify notation to access data ([#183](https://github.com/nsidc/earthaccess/pull/183)) ([**@jroebuck932**](https://github.com/jroebuck932)) ## [0.4.1] - 2022-11-02 ### Changed -- For CI, install Poetry using the new script -- For CI, change dependabot alerts to monthly -- Improve documentation by reimplementing python_cmr methods for docstring compatibility -- Use `CMR-Search-After` see #145 +- For CI, install Poetry using the new script ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) +- For CI, change dependabot alerts to monthly ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) +- Improve documentation by reimplementing python_cmr methods for docstring compatibility ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) +- Use `CMR-Search-After` see #145 ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) ### Added -- Add GES_DISC S3 endpoint -- Improve documentation by adding types to method signatures +- Add GES_DISC S3 endpoint ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) +- Improve documentation by adding types to method signatures ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) ## [0.4.0] - 2022-08-17 ### Added -- Add store, auth to docs and update mkdocs config -- For `auth`, add the ability to persist credentials into a `.netrc` file -- For `store`, use fsspec s3fs for in cloud access and https sessions for out of region access -- For `store`, can open files with fsspec in and out of region (stream into xarray) +- Add store, auth to docs and update mkdocs config ([#119](https://github.com/nsidc/earthaccess/pull/119))([**@betolink**](https://github.com/betolink)) +- For `auth`, add the ability to persist credentials into a `.netrc` file ([#119](https://github.com/nsidc/earthaccess/pull/119))([**@betolink**](https://github.com/betolink)) +- For `store`, use fsspec s3fs for in cloud access and https sessions for out of region access ([#43](https://github.com/nsidc/earthaccess/issues/43))([**@betolink**](https://github.com/betolink)) +- For `store`, can open files with fsspec in and out of region (stream into xarray) ([#41](https://github.com/nsidc/earthaccess/issues/41))([**@betolink**](https://github.com/betolink)) ## [0.3.0] - 2022-04-28 ### Changed -- Update python-cmr to NASA fork -- Drop unused `pydantic` dependency -- Auth can refresh CMR tokens -- Verify git tag and poetry version are the same before publish to pypi +- Update python-cmr to NASA fork ([#75](https://github.com/nsidc/earthaccess/pull/75))([**@jhkennedy**](https://github.com/jhkennedy)) +- Drop unused `pydantic` dependency ([`5761548`](https://github.com/nsidc/earthaccess/pull/75/commits/5761548fcd8ba8733ce4f5ff9b8ce7967c3a8398))([**@jhkennedy**](https://github.com/jhkennedy)) +- Auth can refresh CMR tokens ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) +- Verify git tag and poetry version are the same before publishing to PyPI ### Added -- Add documentation for readthedocs and GitHub +- Add documentation for readthedocs and GitHub ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) ### Removed -- **Breaking**: Dropped python 3.7 support +- **Breaking**: Drop python 3.7 support ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) ### Fixed - Fix bug with CMR tokens -- Add missing `python-datutil` dependency +- Add missing `python-datutil` dependency ([`747e992`](https://github.com/nsidc/earthaccess/pull/75/commits/747e9926a5ab83d75bbf7f17d4c52f24b563147b))([**@jhkennedy**](https://github.com/jhkennedy)) ## [0.2.2] - 2022-03-23 ### Fixed -- Fix store to download multi-file granules -- Fix granule formatting +- Fix store to download multi-file granules ([#73](https://github.com/nsidc/earthaccess/pull/73))([**@betolink**](https://github.com/betolink)) +- Fix granule formatting ([#73](https://github.com/nsidc/earthaccess/pull/73))([**@betolink**](https://github.com/betolink)) ## [0.2.1] - 2022-03-19 ### Changed -- Rename Accessor to Store -- Relax dependency requirements -- Store can download plain links if they are on prem +- Rename Accessor to Store ([`4bd618d`](https://github.com/nsidc/earthaccess/pull/66/commits/4bd618d4d48c3cd256a077fb8329f40df2d5b7ff))([**@betolink**](https://github.com/betolink)) +- Relax dependency requirements ([`c9a5ed6`](https://github.com/nsidc/earthaccess/pull/66/commits/c9a5ed6b917435e7c4ece58485939065fa71cc8f))([**@betolink**](https://github.com/betolink)) +- Store can download plain links if they are on prem ([`92d2919`](https://github.com/nsidc/earthaccess/commit/92d291962e5b72b458c2971eae8a6b813d4bae39))([**@betolink**](https://github.com/betolink)) ## [0.1.0-beta.1] - 2021-09-21 From f44decbd32cb4da8c46192206e6265dcf69b0f5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 15:05:30 +0000 Subject: [PATCH 28/56] Bump certifi from 2024.6.2 to 2024.7.4 Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.6.2 to 2024.7.4. - [Commits](https://github.com/certifi/python-certifi/compare/2024.06.02...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-type: indirect ... Signed-off-by: dependabot[bot] --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 00d277a3..10e0260f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiobotocore" @@ -462,13 +462,13 @@ test = ["coverage", "freezegun", "pre-commit", "pytest", "pytest-cov", "pytest-m [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] From 79080085d49d64f4b36e7e2c5ae929de65063a59 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 09:44:38 -0600 Subject: [PATCH 29/56] Add `flake8-logging-format` ruleset to catch deprecated `logger.warn` calls Allow f-strings in log calls. --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0e15f45d..316a4ac7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -144,8 +144,8 @@ line-length = 88 src = ["earthaccess", "stubs", "tests"] [tool.ruff.lint] -extend-select = ["I", "T20", "D"] -ignore = ["D1", "D205", "D401", "D417"] +extend-select = ["I", "T20", "D", "G"] +ignore = ["D1", "D205", "D401", "D417", "G004"] [tool.ruff.lint.pydocstyle] convention = "google" From 5edff3a412792a0e397cc817a033ae62fc1f73e8 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 09:45:15 -0600 Subject: [PATCH 30/56] Replace deprecated calls to `logger.warn()` --- earthaccess/api.py | 4 +++- earthaccess/store.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/earthaccess/api.py b/earthaccess/api.py index 8522dbbb..0418d69f 100644 --- a/earthaccess/api.py +++ b/earthaccess/api.py @@ -68,7 +68,9 @@ def search_datasets(count: int = -1, **kwargs: Any) -> List[DataCollection]: ``` """ if not validate.valid_dataset_parameters(**kwargs): - logger.warn("A valid set of parameters is needed to search for datasets on CMR") + logger.warning( + "A valid set of parameters is needed to search for datasets on CMR" + ) return [] if earthaccess.__auth__.authenticated: query = DataCollections(auth=earthaccess.__auth__).parameters(**kwargs) diff --git a/earthaccess/store.py b/earthaccess/store.py index 147e6ce8..f3b1054c 100644 --- a/earthaccess/store.py +++ b/earthaccess/store.py @@ -113,7 +113,7 @@ def __init__(self, auth: Any, pre_authorize: bool = False) -> None: self.set_requests_session(url) else: - logger.warn("The current session is not authenticated with NASA") + logger.warning("The current session is not authenticated with NASA") self.auth = None self.in_region = self._running_in_us_west_2() From be8b40bf90bd0ba9a445021b8e98b85ba61fa1b9 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 10:38:38 -0600 Subject: [PATCH 31/56] Notify the user when integration tests are artificially marked success --- scripts/integration-test.sh | 15 +++++++++++++-- tests/integration/conftest.py | 23 +++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/scripts/integration-test.sh b/scripts/integration-test.sh index 1c3d3195..7a7b6551 100755 --- a/scripts/integration-test.sh +++ b/scripts/integration-test.sh @@ -1,7 +1,18 @@ #!/usr/bin/env bash -set -e set -x +pytest tests/integration --cov=earthaccess --cov=tests/integration --cov-report=term-missing ${@} --capture=no --tb=native --log-cli-level=INFO +RET=$? +set +x + +set -e +# NOTE: 99 is a special return code we selected for this case, it has no other meaning. +if [[ $RET == 99 ]]; then + echo -e "\e[0;31mWARNING: The integration test suite has been permitted to return 0 because the failure rate was less than a hardcoded threshold.\e[0m" + echo "For more details, see conftest.py." + exit 0 +elif [[ $RET != 0 ]]; then + exit $RET +fi -pytest tests/integration --cov=earthaccess --cov=tests/integration --cov-report=term-missing ${@} -s --tb=native --log-cli-level=INFO bash ./scripts/lint.sh diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 8be3de59..3ea79824 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -5,8 +5,27 @@ @pytest.hookimpl() def pytest_sessionfinish(session, exitstatus): - if exitstatus == 0: + """Return exit code 99 if up to N% of tests have failed. + + N = ACCEPTABLE_FAILURE_RATE + + 99 was chosen arbitrarily to avoid conflict with current and future pytest error + codes (https://docs.pytest.org/en/stable/reference/exit-codes.html), and avoid + other exit codes with special meanings + (https://tldp.org/LDP/abs/html/exitcodes.html). + + IMPORTANT: This is calculated against every test collected in the session, so the + ratio will change depending on which tests are executed! E.g. executing integration + tests and unit tests at the same time allows more tests to fail than executing + integration tests alone. + """ + if exitstatus != 1: + # Exit status 1 in PyTest indicates "Tests were collected and run but some of + # the tests failed". In all other cases, for example "an internal error happened + # while executing the tests", or "test execution interrupted by the user", we + # want to defer to original pytest behavior. return + failure_rate = (100.0 * session.testsfailed) / session.testscollected if failure_rate <= ACCEPTABLE_FAILURE_RATE: - session.exitstatus = 0 + session.exitstatus = 99 From 91e559990659fa77e1bc68452f8bbde220e292ee Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:19:06 -0600 Subject: [PATCH 32/56] Clarify "descriptive title" task Co-Authored-By: danielfromearth --- .github/pull_request_template.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5b2df6f3..8971a273 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -18,8 +18,8 @@ the PR as a non-draft, don't worry, you can still change it to a draft using the
Pull Request (PR) draft checklist - click to expand -- [ ] Populate a descriptive title. Ensure the title does not look like "Updated - README.md". +- [ ] Populate a descriptive title. For example, instead of "Updated README.md", use a + title such as "Add testing details to the contributor section of the README". - [ ] Populate the body of the pull request with : - A clear description of the change you are proposing. - Links to any issues resolved by this PR with text in the PR description, for From f058822173cce6cbfa03edb5def895352b6fd1f8 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:25:58 -0600 Subject: [PATCH 33/56] Move items that belong at the top of the checklist to the top Co-Authored-By: danielfromearth --- .github/pull_request_template.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 8971a273..40f3938e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -18,16 +18,16 @@ the PR as a non-draft, don't worry, you can still change it to a draft using the
Pull Request (PR) draft checklist - click to expand +- [ ] Please review our + [contributing documentation](https://earthaccess.readthedocs.io/en/latest/contributing/) + before getting started. +- [ ] Ensure an issue exists representing the problem being solved in this PR. - [ ] Populate a descriptive title. For example, instead of "Updated README.md", use a title such as "Add testing details to the contributor section of the README". - [ ] Populate the body of the pull request with : - A clear description of the change you are proposing. - Links to any issues resolved by this PR with text in the PR description, for example "closes #1". -- [ ] Please review our - [contributing documentation](https://earthaccess.readthedocs.io/en/latest/contributing/) - before getting started. -- [ ] Ensure an issue exists representing the problem being solved in this PR. - [ ] Update `CHANGELOG.md` with details about your change in a section titled `## Unreleased`. If such a section does not exist, please create one. - [ ] Update the documentation and/or the `README.md` with details of changes to the From d5c5aaa8f964df8e129af71f30f3e6390197668b Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:32:29 -0600 Subject: [PATCH 34/56] Clarify expectations for maintainer attention Co-Authored-By: Ian Carroll --- .github/pull_request_template.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 40f3938e..2c8ec43c 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,9 +10,12 @@ expect you to complete the steps in the "PR draft checklist" below. Maintainers willing and ready to help pick it up from there! Please start by opening this Pull Request as a "draft". You can do this by -clicking the arrow on the right side of the green "Create pull request" button. Follow -the draft checklist below to move the PR out of draft state. If you accidentally created -the PR as a non-draft, don't worry, you can still change it to a draft using the +clicking the arrow on the right side of the green "Create pull request" button. While +your pull request is in "draft" state, maintainers will assume the PR isn't ready for +their attention unless they are specifically summoned using GitHub's @ system. + +Follow the draft checklist below to move the PR out of draft state. If you accidentally +created the PR as a non-draft, don't worry, you can still change it to a draft using the "Convert to draft" button on the right side panel under the "Reviewers" section. --> From 7e34898e2dded37f526532730e320b86cceb59c1 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:33:55 -0600 Subject: [PATCH 35/56] Un-checkbox "ready for review" instructions Co-Authored-By: Ian Carroll --- .github/pull_request_template.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 2c8ec43c..71a136f6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -36,9 +36,10 @@ created the PR as a non-draft, don't worry, you can still change it to a draft u - [ ] Update the documentation and/or the `README.md` with details of changes to the interface. This includes new environment variables, function names, decorators, etc. -- [ ] Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub - once these requirements are fulfilled. Don't worry if you see any test failures in - GitHub at this point! + +Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub +once these requirements are fulfilled. Don't worry if you see any test failures in +GitHub at this point!
From 3cb282b877cdc603872c1b502224a0e6b4bcb47b Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:34:13 -0600 Subject: [PATCH 36/56] Clarify draft PR instructions --- .github/pull_request_template.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 71a136f6..60c23104 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -27,15 +27,16 @@ created the PR as a non-draft, don't worry, you can still change it to a draft u - [ ] Ensure an issue exists representing the problem being solved in this PR. - [ ] Populate a descriptive title. For example, instead of "Updated README.md", use a title such as "Add testing details to the contributor section of the README". -- [ ] Populate the body of the pull request with : +- [ ] Populate the body of the pull request with: - A clear description of the change you are proposing. - Links to any issues resolved by this PR with text in the PR description, for - example "closes #1". + example `closes #1`. See + [GitHub docs - Linking a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue). - [ ] Update `CHANGELOG.md` with details about your change in a section titled `## Unreleased`. If such a section does not exist, please create one. - [ ] Update the documentation and/or the `README.md` with details of changes to the - interface. This includes new environment variables, function names, decorators, - etc. + earthaccess interface, if any. Consider new environment variables, function names, + decorators, etc. Click the "Ready for review" button at the bottom of the "Conversation" tab in GitHub once these requirements are fulfilled. Don't worry if you see any test failures in From 805c65598437ba81344a733ed4c449d8b760e40c Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 11:43:19 -0600 Subject: [PATCH 37/56] Make PR instructions clearer and more welcoming Co-authored-by: Ian Carroll --- docs/contributing/index.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index b0f24a1b..fc39f629 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -69,5 +69,6 @@ the stubs appear under `stubs/cmr`. ## Pull Request process Fork the repository using the "Fork" button on the [repository -homepage](https://github.com/nsidc/earthaccess), make your change on the fork, then open -a pull request from your fork and follow the instructions populated in the text box. +homepage](https://github.com/nsidc/earthaccess), create a branch with your changes in the fork, then open +a draft pull request from your fork. Starting a pull request provides additional instructions and requirements, and +there is no harm in starting a draft pull request while still developing. From 77a7e483283c1255b361fdc83363889dc25a1294 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Sat, 6 Jul 2024 12:55:40 -0600 Subject: [PATCH 38/56] Use a constant for pytest's exit status --- tests/integration/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 3ea79824..c2d4a3c2 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -19,7 +19,7 @@ def pytest_sessionfinish(session, exitstatus): tests and unit tests at the same time allows more tests to fail than executing integration tests alone. """ - if exitstatus != 1: + if exitstatus != pytest.ExitCode.TESTS_FAILED: # Exit status 1 in PyTest indicates "Tests were collected and run but some of # the tests failed". In all other cases, for example "an internal error happened # while executing the tests", or "test execution interrupted by the user", we From 728eb17e52738f62dcd08d86093da7fa7bde1a3d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 18:57:36 +0000 Subject: [PATCH 39/56] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/contributing/maintainers-guide.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/contributing/maintainers-guide.md b/docs/contributing/maintainers-guide.md index 1ac2fc79..2d54a354 100644 --- a/docs/contributing/maintainers-guide.md +++ b/docs/contributing/maintainers-guide.md @@ -53,6 +53,3 @@ The GitHub Actions CI services handle the project's building, testing, and manag ## Continuous Documentation [ReadTheDocs](https://readthedocs.org/projects/earthaccess/) is used to generate and host [our documentation website](https://earthaccess.readthedocs.io/) as well as the preview for documentation changes made in pull requests. This service uses a configuration file in the root of the project, `.readthedocs.yml`. - - - From b4e4beb4206b6f8dd5982040ad3fa2f4df77aaba Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Mon, 8 Jul 2024 12:25:05 -0400 Subject: [PATCH 40/56] consolidate redundant entry --- CHANGELOG.md | 70 +++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3564d2ba..675db999 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,93 +42,95 @@ ## [0.8.2] - 2023-12-06 ### Changed -- Update poetry lockfile -- Use YAML formatting (prettier) +- Update poetry lockfile ([#403](https://github.com/nsidc/earthaccess/pull/403))([**@jrbourbeau**](https://github.com/jrbourbeau)) +- Use YAML formatting (prettier) ([#398](https://github.com/nsidc/earthaccess/pull/398))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Added -- Add CI tests with minimum supported versions -- Add `python-dateutil` as a direct dependency +- Add CI tests with minimum supported versions ([#402](https://github.com/nsidc/earthaccess/pull/402))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@jhkennedy**](https://github.com/jhkennedy)) +- Add `python-dateutil` as a direct dependency ([#397](https://github.com/nsidc/earthaccess/pull/397))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Removed -- Remove binder PR comments +- Remove binder PR comments ([#400](https://github.com/nsidc/earthaccess/pull/400))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Fixed -- Enable AWS check with IMDSv2 -- Add region to running in AWS check -- Handle opening multi-file granules +- Enable AWS check with IMDSv2 ([#391](https://github.com/nsidc/earthaccess/pull/391))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@itcarroll**](https://github.com/itcarroll)) +- Add region to running in AWS check ([#395](https://github.com/nsidc/earthaccess/pull/395))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) +- Handle opening multi-file granules ([#394](https://github.com/nsidc/earthaccess/pull/394))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) ## [0.8.1] - 2023-12-01 ### Changed -- Handle S3 credential expiration more gracefully. -- Use dependabot to update GitHub Actions. -- Consolidate dependabot updates. -- Switch to `ruff` for formatting. +- Handle S3 credential expiration more gracefully ([#354](https://github.com/nsidc/earthaccess/pull/354))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) +- Use dependabot to update GitHub Actions ([#373](https://github.com/nsidc/earthaccess/pull/373))([**@jhkennedy**](https://github.com/jhkennedy)) +- Consolidate dependabot updates ([#380](https://github.com/nsidc/earthaccess/pull/380))([**@mfisher87**](https://github.com/mfisher87)) +- Switch to `ruff` for formatting ([#372](https://github.com/nsidc/earthaccess/pull/372))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Added -- Add `kerchunk` metadata consolidation utility. +- Add `kerchunk` metadata consolidation utility ([#278](https://github.com/nsidc/earthaccess/pull/278)) + ([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), + [**@betolink**](https://github.com/betolink), [**@martindurant**](https://github.com/martindurant), + [**lsterzinger**](https://github.com/lsterzinger), [**mrocklin**](https://github.com/mrocklin)) ## [0.8.0] - 2023-11-29 ### Changed -- earthaccess will `raise` errors instead of `print`ing them in more cases. +- earthaccess will `raise` errors instead of `print`ing them in more cases ([#351](https://github.com/nsidc/earthaccess/pull/351))([**@jrbourbeau**](https://github.com/jrbourbeau)) - `daac` and `provider` parameters are now normalized to uppercase, since lowercase - characters are never valid. + characters are never valid ([#355](https://github.com/nsidc/earthaccess/pull/355))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Fixed -- Fix zero granules being reported for restricted datasets. +- Fix zero granules being reported for restricted datasets ([#358](https://github.com/nsidc/earthaccess/pull/358))([**@danielfromearth**](https://github.com/danielfromearth)) ## [0.7.1] - 2023-11-08 ### Fixed -- Treat granules without `RelatedUrls` as not cloud-hosted. +- Treat granules without `RelatedUrls` as not cloud-hosted ([#339](https://github.com/nsidc/earthaccess/pull/339))([**@mfisher87**](https://github.com/mfisher87)) ## [0.7.0] - 2023-10-31 ### Changed -- `earthaccess.download` now accepts a single granule as input in addition to a list of granules. -- `earthaccess.download` now returns fully qualified local file paths. +- `earthaccess.download` now accepts a single granule as input in addition to a list of granules ([#317](https://github.com/nsidc/earthaccess/pull/317))([**@jrbourbeau**](https://github.com/jrbourbeau)) +- `earthaccess.download` now returns fully qualified local file paths ([#317](https://github.com/nsidc/earthaccess/pull/317))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Added - Earthaccess will now automatically search for Earthdata authentication. ``earthaccess.login()`` still works as before, but is no longer required if you have a ``~/.netrc`` file for have set - ``EARTHDATA_USERNAME`` and ``EARTHDATA_PASSWORD`` environment variables. -- Add `earthaccess.auth_environ()` utility for getting Earthdata authentication environment variables. + ``EARTHDATA_USERNAME`` and ``EARTHDATA_PASSWORD`` environment variables ([#300](https://github.com/nsidc/earthaccess/pull/300))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@mfisher87**](https://github.com/mfisher87)) +- Add `earthaccess.auth_environ()` utility for getting Earthdata authentication environment variables ([#316](https://github.com/nsidc/earthaccess/pull/316))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Fixed - Fix spelling mistake in `access` variable assignment (`direc` -> `direct`) - in `earthaccess.store._get_granules`. + in `earthaccess.store._get_granules` ([#308](https://github.com/nsidc/earthaccess/pull/308))([**@trey-stafford**](https://github.com/trey-stafford)) - Pass `threads` arg to `_open_urls_https` in - `earthaccess.store._open_urls`, replacing the hard-coded value of 8. -- Return S3 data links by default when in region. + `earthaccess.store._open_urls`, replacing the hard-coded value of 8 ([#308](https://github.com/nsidc/earthaccess/pull/308))([**@trey-stafford**](https://github.com/trey-stafford)) +- Return S3 data links by default when in region ([#318](https://github.com/nsidc/earthaccess/pull/318))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@jhkennedy**](https://github.com/jhkennedy)) ## [0.6.0] - 2023-09-20 ### Added -- earthaccess.get_s3fs_session() can use the results to find the right set of S3 credentials +- earthaccess.get_s3fs_session() can use the results to find the right set of S3 credentials ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) ### Fixed -- earthaccess.search_datasets() and earthaccess.search_data() can find restricted datasets #296 -- distributed serialization fixed for EarthAccessFile #301 and #276 +- earthaccess.search_datasets() and earthaccess.search_data() can find restricted datasets ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) +- Fix distributed serialization for EarthAccessFile ([#301](https://github.com/nsidc/earthaccess/pull/301))([**@jrbourbeau**](https://github.com/jrbourbeau)) and ([#276](https://github.com/nsidc/earthaccess/pull/276))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) ## [0.5.3] - 2023-08-01 ### Changed -- For CI, integration tests are now only run when we push to main (after a merge) -- For CI, unit tests are run for any branch and opened PR +- For CI, integration tests are now only run when we push to main (after a merge) ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) +- For CI, unit tests are run for any branch and opened PR ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) ### Fixed -- granule's size() returned zero -- Add exception handling for fsspec sessions, thanks to @jrbourbeau +- Granule's size() returned zero ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) +- Add exception handling for fsspec sessions, thanks to @jrbourbeau ([#249](https://github.com/nsidc/earthaccess/pull/249))([**@jrbourbeau**](https://github.com/jrbourbeau)) ## [0.5.2] - 2023-04-21 ### Removed -- Remove Benedict (core dependency) as the default dict for JSON coming from CMR. +- Remove Benedict (core dependency) as the default dict for JSON coming from CMR ([#229](https://github.com/nsidc/earthaccess/pull/229), [#230](https://github.com/nsidc/earthaccess/issues/230))([**@psarka**](https://github.com/psarka)) ### Fixed -- Fix #230 by removing Benedict as the dict handler, thanks to @psarka! -- S3 credential endpoints are tried with tokens and basic auth until all the DAACs accept the same auth +- S3 credential endpoints are tried with tokens and basic auth until all the DAACs accept the same auth ([#234](https://github.com/nsidc/earthaccess/pull/234))([**@betolink**](https://github.com/betolink)) ## [0.5.1] - 2023-03-20 From b4613a1aac75b71334847bb7f35d1be5aee81847 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Mon, 8 Jul 2024 13:00:13 -0400 Subject: [PATCH 41/56] Add and update remaining links to issues/PRs/commits in the CHANGELOG.md --- CHANGELOG.md | 77 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 675db999..ececce3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,41 +3,58 @@ ## [Unreleased] ### Changed -- [#555](https://github.com/nsidc/earthaccess/issues/555): YAML formatting is - now performed with `yamlfmt` instead of `prettier`. -- [#511](https://github.com/nsidc/earthaccess/issues/511): Replace `print` - calls with `logging` calls where appropriate and add T20 Ruff rule. -- [#508](https://github.com/nsidc/earthaccess/issues/508): Correct and - enhance static type hints for functions and methods that make CMR queries - or handle CMR query results. -- [#562](https://github.com/nsidc/earthaccess/issues/562): The destination - path is now created prior to direct S3 downloads, if it doesn't already - exist. +- Perform YAML formatting with `yamlfmt` instead of + `prettier` ([#555](https://github.com/nsidc/earthaccess/issues/555)) + ([**@chuckwondo**](https://github.com/chuckwondo),[**@mfisher87**](https://github.com/mfisher87)) +- Replace `print` calls with `logging` calls where appropriate and add T20 Ruff rule + ([#511](https://github.com/nsidc/earthaccess/issues/511)) + ([**@botanical**](https://github.com/botanical),[**@chuckwondo**](https://github.com/chuckwondo), + [**@mfisher87**](https://github.com/mfisher87)) +- Correct and enhance static type hints for functions and methods that make CMR queries + or handle CMR query results ([#508](https://github.com/nsidc/earthaccess/issues/508)) + ([**@mfisher87**](https://github.com/mfisher87),[**@jhkennedy**](https://github.com/jhkennedy), + [**@chuckwondo**](https://github.com/chuckwondo),[**@betolink**](https://github.com/betolink)) +- Create destination path prior to direct S3 downloads, if it doesn't already + exist ([#562](https://github.com/nsidc/earthaccess/issues/562)) + ([**@itcarroll**](https://github.com/itcarroll),[**@mfisher87**](https://github.com/mfisher87), + [**@chuckwondo**](https://github.com/chuckwondo)) ### Added -- [#483](https://github.com/nsidc/earthaccess/issues/483): Now using - [Search After](https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after) - for collection and granule searches to support deep-paging through large - result sets. -- [#421](https://github.com/nsidc/earthaccess/issues/421): Enable queries to - Earthdata User Acceptance Testing (UAT) system for authenticated accounts. +- Use [Search After](https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after) + for collection and granule searches to support deep-paging through large result sets + ([#483](https://github.com/nsidc/earthaccess/issues/483)) + ([**@doug-newman-nasa**](https://github.com/doug-newman-nasa),[**@chuckwondo**](https://github.com/chuckwondo), + [**@mfisher87**](https://github.com/mfisher87),[**@betolink**](https://github.com/betolink)) +- Enable queries to Earthdata User Acceptance Testing (UAT) system for authenticated accounts + ([#421](https://github.com/nsidc/earthaccess/issues/421)) + ([**@danielfromearth**](https://github.com/danielfromearth),[**@mfisher87**](https://github.com/mfisher87), + [**@jhkennedy**](https://github.com/jhkennedy),[**@chuckwondo**](https://github.com/chuckwondo), + [**@betolink**](https://github.com/betolink)) ### Removed -- **Breaking**: [#421](https://github.com/nsidc/earthaccess/issues/421): Remove the +- **Breaking:** Remove the `get_user_profile` method and the `email_address` and `profile` attributes from the `Auth` class. Calling the EDL API to get user profile information is not intended for library access and is not necessary for this library's - intended use cases. + intended use cases. ([#421](https://github.com/nsidc/earthaccess/issues/421)) + ([**@danielfromearth**](https://github.com/danielfromearth),[**@mfisher87**](https://github.com/mfisher87), + [**@jhkennedy**](https://github.com/jhkennedy),[**@chuckwondo**](https://github.com/chuckwondo), + [**@betolink**](https://github.com/betolink)) ## [0.9.0] - 2024-02-28 ### Added -- Address #427 by adding parameters to collection query -- Add user-agent in the request to track usage, closes #436 +- Improve search by adding instrument and project to collection queries + ([#427](https://github.com/nsidc/earthaccess/issues/427)) + ([**@betolink**](https://github.com/betolink),[**@mfisher87**](https://github.com/mfisher87), + [**@jhkennedy**](https://github.com/jhkennedy)) +- Add user-agent in the request to track usage ([#436](https://github.com/nsidc/earthaccess/issues/436)) + ([**@asteiker**](https://github.com/asteiker),[**@@mikedorfman**](https://github.com/@mikedorfman), + [**@betolink**](https://github.com/betolink)) ### Fixed -- Fix #439 by implementing more trusted domains in the SessionWithRedirection -- Fix #438 by using an authenticated session for hits() +- Implement more trusted domains in the SessionWithRedirection ([#439](https://github.com/nsidc/earthaccess/issues/439))([**@cmspeed**](https://github.com/cmspeed), [**@mfisher87**](https://github.com/mfisher87), [**@betolink**](https://github.com/betolink), [**@jhkennedy**](https://github.com/jhkennedy)) +- Use an authenticated session for hits() instead of calling parent's class super() ([#438](https://github.com/nsidc/earthaccess/issues/438))([**@betolink**](https://github.com/betolink), [**@mfisher87**](https://github.com/mfisher87), [**@jhkennedy**](https://github.com/jhkennedy)) ## [0.8.2] - 2023-12-06 @@ -108,10 +125,10 @@ ## [0.6.0] - 2023-09-20 ### Added -- earthaccess.get_s3fs_session() can use the results to find the right set of S3 credentials ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) +- `earthaccess.get_s3fs_session()` can use the results to find the right set of S3 credentials ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) ### Fixed -- earthaccess.search_datasets() and earthaccess.search_data() can find restricted datasets ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) +- `earthaccess.search_datasets()` and `earthaccess.search_data()` can find restricted datasets ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) - Fix distributed serialization for EarthAccessFile ([#301](https://github.com/nsidc/earthaccess/pull/301))([**@jrbourbeau**](https://github.com/jrbourbeau)) and ([#276](https://github.com/nsidc/earthaccess/pull/276))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) ## [0.5.3] - 2023-08-01 @@ -142,11 +159,13 @@ - Add ability to get the user's profile with auth.user_profile which includes the user email ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) - Add LAAD as a supported DAAC ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +### Removed +- Remove magic from dependencies (not available in windows and not used but just in tests) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) + ### Fixed -- get_s3_credentials() only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink), [**@JessicaS11**](https://github.com/JessicaS11), [**@scottyhq**](https://github.com/scottyhq)) -- including tests for all DAAC S3 endpoints ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) -- Notebooks updated to use the new top level API ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) -- removed magic from dependencies (not available in windows and not used but just in tests) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- `get_s3_credentials()` only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink), [**@JessicaS11**](https://github.com/JessicaS11), [**@scottyhq**](https://github.com/scottyhq)) +- Include tests for all DAAC S3 endpoints ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) +- Update notebooks to use the new top level API ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) ## [0.5.0] - 2023-02-23 @@ -160,7 +179,7 @@ ### Fixed - Fix a bug where the Auth class is invoked without the proper parameters ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@JessicaS11**](https://github.com/JessicaS11)) -- if a user specifies the netrc strategy and there is no netrc an exception is raised ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) +- Raise and exception if a user specifies the netrc strategy and there is no netrc ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) - S3 URLs broke the Store class when opened outside AWS ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) - Opening files using URLs was not working properly on AWS, thanks to @amfriesz for reporting it! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink), ([**@amfriesz**](https://github.com/amfriesz))) From 8bf7d5eabfba3309cadfc19729afee05efd571d3 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Mon, 8 Jul 2024 13:01:48 -0400 Subject: [PATCH 42/56] add single blank line after each header --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ececce3a..be67504e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [Unreleased] ### Changed + - Perform YAML formatting with `yamlfmt` instead of `prettier` ([#555](https://github.com/nsidc/earthaccess/issues/555)) ([**@chuckwondo**](https://github.com/chuckwondo),[**@mfisher87**](https://github.com/mfisher87)) @@ -20,6 +21,7 @@ [**@chuckwondo**](https://github.com/chuckwondo)) ### Added + - Use [Search After](https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html#search-after) for collection and granule searches to support deep-paging through large result sets ([#483](https://github.com/nsidc/earthaccess/issues/483)) @@ -32,6 +34,7 @@ [**@betolink**](https://github.com/betolink)) ### Removed + - **Breaking:** Remove the `get_user_profile` method and the `email_address` and `profile` attributes from the `Auth` class. Calling the EDL API to get user profile information @@ -44,6 +47,7 @@ ## [0.9.0] - 2024-02-28 ### Added + - Improve search by adding instrument and project to collection queries ([#427](https://github.com/nsidc/earthaccess/issues/427)) ([**@betolink**](https://github.com/betolink),[**@mfisher87**](https://github.com/mfisher87), @@ -53,23 +57,28 @@ [**@betolink**](https://github.com/betolink)) ### Fixed + - Implement more trusted domains in the SessionWithRedirection ([#439](https://github.com/nsidc/earthaccess/issues/439))([**@cmspeed**](https://github.com/cmspeed), [**@mfisher87**](https://github.com/mfisher87), [**@betolink**](https://github.com/betolink), [**@jhkennedy**](https://github.com/jhkennedy)) - Use an authenticated session for hits() instead of calling parent's class super() ([#438](https://github.com/nsidc/earthaccess/issues/438))([**@betolink**](https://github.com/betolink), [**@mfisher87**](https://github.com/mfisher87), [**@jhkennedy**](https://github.com/jhkennedy)) ## [0.8.2] - 2023-12-06 ### Changed + - Update poetry lockfile ([#403](https://github.com/nsidc/earthaccess/pull/403))([**@jrbourbeau**](https://github.com/jrbourbeau)) - Use YAML formatting (prettier) ([#398](https://github.com/nsidc/earthaccess/pull/398))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Added + - Add CI tests with minimum supported versions ([#402](https://github.com/nsidc/earthaccess/pull/402))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@jhkennedy**](https://github.com/jhkennedy)) - Add `python-dateutil` as a direct dependency ([#397](https://github.com/nsidc/earthaccess/pull/397))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Removed + - Remove binder PR comments ([#400](https://github.com/nsidc/earthaccess/pull/400))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Fixed + - Enable AWS check with IMDSv2 ([#391](https://github.com/nsidc/earthaccess/pull/391))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@itcarroll**](https://github.com/itcarroll)) - Add region to running in AWS check ([#395](https://github.com/nsidc/earthaccess/pull/395))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) - Handle opening multi-file granules ([#394](https://github.com/nsidc/earthaccess/pull/394))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) @@ -77,12 +86,14 @@ ## [0.8.1] - 2023-12-01 ### Changed + - Handle S3 credential expiration more gracefully ([#354](https://github.com/nsidc/earthaccess/pull/354))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) - Use dependabot to update GitHub Actions ([#373](https://github.com/nsidc/earthaccess/pull/373))([**@jhkennedy**](https://github.com/jhkennedy)) - Consolidate dependabot updates ([#380](https://github.com/nsidc/earthaccess/pull/380))([**@mfisher87**](https://github.com/mfisher87)) - Switch to `ruff` for formatting ([#372](https://github.com/nsidc/earthaccess/pull/372))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Added + - Add `kerchunk` metadata consolidation utility ([#278](https://github.com/nsidc/earthaccess/pull/278)) ([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@betolink**](https://github.com/betolink), [**@martindurant**](https://github.com/martindurant), @@ -91,31 +102,37 @@ ## [0.8.0] - 2023-11-29 ### Changed + - earthaccess will `raise` errors instead of `print`ing them in more cases ([#351](https://github.com/nsidc/earthaccess/pull/351))([**@jrbourbeau**](https://github.com/jrbourbeau)) - `daac` and `provider` parameters are now normalized to uppercase, since lowercase characters are never valid ([#355](https://github.com/nsidc/earthaccess/pull/355))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Fixed + - Fix zero granules being reported for restricted datasets ([#358](https://github.com/nsidc/earthaccess/pull/358))([**@danielfromearth**](https://github.com/danielfromearth)) ## [0.7.1] - 2023-11-08 ### Fixed + - Treat granules without `RelatedUrls` as not cloud-hosted ([#339](https://github.com/nsidc/earthaccess/pull/339))([**@mfisher87**](https://github.com/mfisher87)) ## [0.7.0] - 2023-10-31 ### Changed + - `earthaccess.download` now accepts a single granule as input in addition to a list of granules ([#317](https://github.com/nsidc/earthaccess/pull/317))([**@jrbourbeau**](https://github.com/jrbourbeau)) - `earthaccess.download` now returns fully qualified local file paths ([#317](https://github.com/nsidc/earthaccess/pull/317))([**@jrbourbeau**](https://github.com/jrbourbeau)) ### Added + - Earthaccess will now automatically search for Earthdata authentication. ``earthaccess.login()`` still works as before, but is no longer required if you have a ``~/.netrc`` file for have set ``EARTHDATA_USERNAME`` and ``EARTHDATA_PASSWORD`` environment variables ([#300](https://github.com/nsidc/earthaccess/pull/300))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87), [**@mfisher87**](https://github.com/mfisher87)) - Add `earthaccess.auth_environ()` utility for getting Earthdata authentication environment variables ([#316](https://github.com/nsidc/earthaccess/pull/316))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Fixed + - Fix spelling mistake in `access` variable assignment (`direc` -> `direct`) in `earthaccess.store._get_granules` ([#308](https://github.com/nsidc/earthaccess/pull/308))([**@trey-stafford**](https://github.com/trey-stafford)) - Pass `threads` arg to `_open_urls_https` in @@ -125,44 +142,54 @@ ## [0.6.0] - 2023-09-20 ### Added + - `earthaccess.get_s3fs_session()` can use the results to find the right set of S3 credentials ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) ### Fixed + - `earthaccess.search_datasets()` and `earthaccess.search_data()` can find restricted datasets ([#296](https://github.com/nsidc/earthaccess/pull/296))([**@betolink**](https://github.com/betolink)) - Fix distributed serialization for EarthAccessFile ([#301](https://github.com/nsidc/earthaccess/pull/301))([**@jrbourbeau**](https://github.com/jrbourbeau)) and ([#276](https://github.com/nsidc/earthaccess/pull/276))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@betolink**](https://github.com/betolink)) ## [0.5.3] - 2023-08-01 ### Changed + - For CI, integration tests are now only run when we push to main (after a merge) ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) - For CI, unit tests are run for any branch and opened PR ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) ### Fixed + - Granule's size() returned zero ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) - Add exception handling for fsspec sessions, thanks to @jrbourbeau ([#249](https://github.com/nsidc/earthaccess/pull/249))([**@jrbourbeau**](https://github.com/jrbourbeau)) ## [0.5.2] - 2023-04-21 ### Removed + - Remove Benedict (core dependency) as the default dict for JSON coming from CMR ([#229](https://github.com/nsidc/earthaccess/pull/229), [#230](https://github.com/nsidc/earthaccess/issues/230))([**@psarka**](https://github.com/psarka)) ### Fixed + - S3 credential endpoints are tried with tokens and basic auth until all the DAACs accept the same auth ([#234](https://github.com/nsidc/earthaccess/pull/234))([**@betolink**](https://github.com/betolink)) ## [0.5.1] - 2023-03-20 ### Changed + - For CI, documentation for readthedocs fixed by including poetry as the default tool ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) - For CI, injected new secrets to test Auth using the icepyx convention (EARTHDATA_USERNAME) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@JessicaS11**](https://github.com/JessicaS11), [**@betolink**](https://github.com/betolink)) ### Added + - Add ability to get the user's profile with auth.user_profile which includes the user email ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) - Add LAAD as a supported DAAC ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) ### Removed + - Remove magic from dependencies (not available in windows and not used but just in tests) ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) ### Fixed + - `get_s3_credentials()` only worked when a netrc file was present, bug reported by @scottyhq and @JessicaS11 ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink), [**@JessicaS11**](https://github.com/JessicaS11), [**@scottyhq**](https://github.com/scottyhq)) - Include tests for all DAAC S3 endpoints ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) - Update notebooks to use the new top level API ([#214](https://github.com/nsidc/earthaccess/pull/214))([**@betolink**](https://github.com/betolink)) @@ -170,14 +197,17 @@ ## [0.5.0] - 2023-02-23 ### Changed + - For CI, documentation is now only built for the main, dev and documentation branches ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) - For CI, notebooks are executed every time the documentation gets published! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink), [**@asteiker**](https://github.com/asteiker)) ### Added + - Add ability to use the top level API to get S3 credentials, authenticated fsspec and requests sessions! ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) - Make available ASF direct access for Sentinel1 products ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) ### Fixed + - Fix a bug where the Auth class is invoked without the proper parameters ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@JessicaS11**](https://github.com/JessicaS11)) - Raise and exception if a user specifies the netrc strategy and there is no netrc ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) - S3 URLs broke the Store class when opened outside AWS ([#202](https://github.com/nsidc/earthaccess/pull/202))([**@betolink**](https://github.com/betolink)) @@ -186,6 +216,7 @@ ## [0.4.7] - 2022-12-11 ### Fixed + - Fix open() for direct access ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) - Move python-magic to the dev section because it is a test dependency ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) - Make minor edits in the README ([#186](https://github.com/nsidc/earthaccess/pull/186))([**@betolink**](https://github.com/betolink)) @@ -193,27 +224,32 @@ ## [0.4.6] - 2022-12-08 ### Changed + - For CI, only run the publish workflow after a release on GitHub ([#183](https://github.com/nsidc/earthaccess/pull/183))([**@betolink**](https://github.com/betolink)) ### Added + - Add feature to search collections by DOI ([#183](https://github.com/nsidc/earthaccess/pull/183))([**@betolink**](https://github.com/betolink)) - Add new API documentation and simplify notation to access data ([#183](https://github.com/nsidc/earthaccess/pull/183)) ([**@jroebuck932**](https://github.com/jroebuck932)) ## [0.4.1] - 2022-11-02 ### Changed + - For CI, install Poetry using the new script ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) - For CI, change dependabot alerts to monthly ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) - Improve documentation by reimplementing python_cmr methods for docstring compatibility ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) - Use `CMR-Search-After` see #145 ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) ### Added + - Add GES_DISC S3 endpoint ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) - Improve documentation by adding types to method signatures ([#131](https://github.com/nsidc/earthaccess/pull/131)) ([**@betolink**](https://github.com/betolink)) ## [0.4.0] - 2022-08-17 ### Added + - Add store, auth to docs and update mkdocs config ([#119](https://github.com/nsidc/earthaccess/pull/119))([**@betolink**](https://github.com/betolink)) - For `auth`, add the ability to persist credentials into a `.netrc` file ([#119](https://github.com/nsidc/earthaccess/pull/119))([**@betolink**](https://github.com/betolink)) - For `store`, use fsspec s3fs for in cloud access and https sessions for out of region access ([#43](https://github.com/nsidc/earthaccess/issues/43))([**@betolink**](https://github.com/betolink)) @@ -222,30 +258,36 @@ ## [0.3.0] - 2022-04-28 ### Changed + - Update python-cmr to NASA fork ([#75](https://github.com/nsidc/earthaccess/pull/75))([**@jhkennedy**](https://github.com/jhkennedy)) - Drop unused `pydantic` dependency ([`5761548`](https://github.com/nsidc/earthaccess/pull/75/commits/5761548fcd8ba8733ce4f5ff9b8ce7967c3a8398))([**@jhkennedy**](https://github.com/jhkennedy)) - Auth can refresh CMR tokens ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) - Verify git tag and poetry version are the same before publishing to PyPI ### Added + - Add documentation for readthedocs and GitHub ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) ### Removed + - **Breaking**: Drop python 3.7 support ([#82](https://github.com/nsidc/earthaccess/pull/82))([**@betolink**](https://github.com/betolink)) ### Fixed + - Fix bug with CMR tokens - Add missing `python-datutil` dependency ([`747e992`](https://github.com/nsidc/earthaccess/pull/75/commits/747e9926a5ab83d75bbf7f17d4c52f24b563147b))([**@jhkennedy**](https://github.com/jhkennedy)) ## [0.2.2] - 2022-03-23 ### Fixed + - Fix store to download multi-file granules ([#73](https://github.com/nsidc/earthaccess/pull/73))([**@betolink**](https://github.com/betolink)) - Fix granule formatting ([#73](https://github.com/nsidc/earthaccess/pull/73))([**@betolink**](https://github.com/betolink)) ## [0.2.1] - 2022-03-19 ### Changed + - Rename Accessor to Store ([`4bd618d`](https://github.com/nsidc/earthaccess/pull/66/commits/4bd618d4d48c3cd256a077fb8329f40df2d5b7ff))([**@betolink**](https://github.com/betolink)) - Relax dependency requirements ([`c9a5ed6`](https://github.com/nsidc/earthaccess/pull/66/commits/c9a5ed6b917435e7c4ece58485939065fa71cc8f))([**@betolink**](https://github.com/betolink)) - Store can download plain links if they are on prem ([`92d2919`](https://github.com/nsidc/earthaccess/commit/92d291962e5b72b458c2971eae8a6b813d4bae39))([**@betolink**](https://github.com/betolink)) @@ -255,6 +297,7 @@ _Conception!_ ### Added + - Add basic classes to interact with NASA CMR, EDL and cloud access. - Basic object formatting. From 0ec48491f162fc0ae478ea620955f826cf24120b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 17:16:49 +0000 Subject: [PATCH 43/56] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/contributing/maintainers-guide.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/contributing/maintainers-guide.md b/docs/contributing/maintainers-guide.md index 1ac2fc79..2d54a354 100644 --- a/docs/contributing/maintainers-guide.md +++ b/docs/contributing/maintainers-guide.md @@ -53,6 +53,3 @@ The GitHub Actions CI services handle the project's building, testing, and manag ## Continuous Documentation [ReadTheDocs](https://readthedocs.org/projects/earthaccess/) is used to generate and host [our documentation website](https://earthaccess.readthedocs.io/) as well as the preview for documentation changes made in pull requests. This service uses a configuration file in the root of the project, `.readthedocs.yml`. - - - From a3ce75cf72dbe5d4bacc74c79827a8826634749b Mon Sep 17 00:00:00 2001 From: jbrownrs <36203116+jbrownrs@users.noreply.github.com> Date: Mon, 8 Jul 2024 22:56:56 +0100 Subject: [PATCH 44/56] 427: Fix broken image link in sea level rise tutorial --- CHANGELOG.md | 2 ++ docs/tutorials/SSL.ipynb | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5ee95ac..2252ba95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ ([#508](https://github.com/nsidc/earthaccess/issues/508)) * Create destination directory prior to direct S3 downloads, if it doesn't already exist ([#562](https://github.com/nsidc/earthaccess/issues/562)) +* Fix broken image link in sea level rise tutorial + (([#427](https://github.com/nsidc/earthaccess/issues/427)) ## [v0.9.0] 2024-02-28 diff --git a/docs/tutorials/SSL.ipynb b/docs/tutorials/SSL.ipynb index 75182d4b..265f1fd7 100644 --- a/docs/tutorials/SSL.ipynb +++ b/docs/tutorials/SSL.ipynb @@ -10,7 +10,7 @@ "\n", "### This notebook is entirely based on Jinbo Wang's [tutorial](https://github.com/betolink/the-coding-club/blob/main/notebooks/Earthdata_webinar_20220727.ipynb)\n", "\n", - "\n", + "\"Sea\n", "\n", "--- \n", "\n", @@ -157,11 +157,11 @@ " * not fully tested with Dask distributed\n", "* Data is gridded\n", " * xarray works better with homogeneous coordinates, working with swath data will be cumbersome.\n", - "* Data is chunked using reasonable large sizes(1MB or more)\n", + "* Data is chunked using reasonable large sizes (1MB or more)\n", " * If our files are chunked in small pieces the access time will be orders of magnitude bigger than just downloading the data and accessing it locally.\n", " \n", - "Opening a year of SSH (SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL1812) data (1.1 GB approx) can take up to 5 minutes streaming the data out of region(not in AWS)\n", - "The reason for this is not that the data transfer is order of magintude slower but due the client libraries not fetching data concurrently and the metadata of the files in HDF is usually not consolidated like in Zaar, hence h5netcdf has to issue a lot of requests to get the info it needs.\n", + "Opening a year of SSH (SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL1812) data (1.1 GB approx) can take up to 5 minutes streaming the data out of region (not in AWS)\n", + "The reason for this is not that the data transfer is order of magnitude slower but due the client libraries not fetching data concurrently and the metadata of the files in HDF is usually not consolidated like in Zaar, hence h5netcdf has to issue a lot of requests to get the info it needs.\n", "\n", "> Note: we are looping through each year and getting the metadata for the first granule in May" ] @@ -195,7 +195,7 @@ "id": "8b63ca2f-c94c-4d4a-a620-a086ee66137f", "metadata": {}, "source": [ - "### What `earthaccess.open()` do?\n", + "### What does `earthaccess.open()` do?\n", "\n", "`earthaccess.open()` takes a list of results from `earthaccess.search_data()` or a list of URLs and creates a list of Python File-like objects that can be used in our code as if the remote files were local. When executed in AWS the file system used is [S3FS](https://github.com/fsspec/s3fs) when we open files outside of AWS we get a regular HTTPS file session. \n" ] From 2c065f0ca73872b7c899f8ceb234be77b0ff29f3 Mon Sep 17 00:00:00 2001 From: jbrownrs <36203116+jbrownrs@users.noreply.github.com> Date: Mon, 8 Jul 2024 23:39:41 +0100 Subject: [PATCH 45/56] 427: Remove blank lines in maintainers-guide.md (pre-commit) --- docs/contributing/maintainers-guide.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/contributing/maintainers-guide.md b/docs/contributing/maintainers-guide.md index 1ac2fc79..2d54a354 100644 --- a/docs/contributing/maintainers-guide.md +++ b/docs/contributing/maintainers-guide.md @@ -53,6 +53,3 @@ The GitHub Actions CI services handle the project's building, testing, and manag ## Continuous Documentation [ReadTheDocs](https://readthedocs.org/projects/earthaccess/) is used to generate and host [our documentation website](https://earthaccess.readthedocs.io/) as well as the preview for documentation changes made in pull requests. This service uses a configuration file in the root of the project, `.readthedocs.yml`. - - - From fdc080cd0df0fe248a7cc8f088988afdf9a514b3 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Tue, 9 Jul 2024 11:10:51 -0400 Subject: [PATCH 46/56] Add a few missing entries to the CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc09a87..d035ef57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -115,6 +115,7 @@ - earthaccess will `raise` errors instead of `print`ing them in more cases ([#351](https://github.com/nsidc/earthaccess/pull/351))([**@jrbourbeau**](https://github.com/jrbourbeau)) - `daac` and `provider` parameters are now normalized to uppercase, since lowercase characters are never valid ([#355](https://github.com/nsidc/earthaccess/pull/355))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) +- Allow single file URL inputs for `earthaccess.download` ([#347](https://github.com/nsidc/earthaccess/pull/347))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mfisher87**](https://github.com/mfisher87)) ### Fixed @@ -161,10 +162,17 @@ ## [0.5.3] - 2023-08-01 +### Added + +- Add download from onprem how-to ([#265](https://github.com/nsidc/earthaccess/pull/265))([**@andypbarrett**](https://github.com/andypbarrett)) + ### Changed - For CI, integration tests are now only run when we push to main (after a merge) ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) - For CI, unit tests are run for any branch and opened PR ([#267](https://github.com/nsidc/earthaccess/pull/267))([**@betolink**](https://github.com/betolink)) +- Update example in `search_datasets` ([#247](https://github.com/nsidc/earthaccess/pull/247))([**@jrbourbeau**](https://github.com/jrbourbeau)) +- Improve remote cluster performance ([#259](https://github.com/nsidc/earthaccess/pull/259))([**@jrbourbeau**](https://github.com/jrbourbeau), [**@mrocklin**](https://github.com/mrocklin), [**@mfisher87**](https://github.com/mfisher87)) +- Return useful error message for failed download ([#263](https://github.com/nsidc/earthaccess/pull/263))([**@andypbarrett**](https://github.com/andypbarrett)) ### Fixed From ee33da9fe2e7e1729c1baca26ba3aa024774f297 Mon Sep 17 00:00:00 2001 From: danielfromearth Date: Tue, 9 Jul 2024 11:20:55 -0400 Subject: [PATCH 47/56] change changelog to contain change entry about changing the changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fed43dcf..506d46b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ ([#511](https://github.com/nsidc/earthaccess/issues/511)) ([**@botanical**](https://github.com/botanical),[**@chuckwondo**](https://github.com/chuckwondo), [**@mfisher87**](https://github.com/mfisher87)) +- Update `CHANGELOG.md` to follow Common Changelog conventions + ([#584](https://github.com/nsidc/earthaccess/pull/584)) + ([**@danielfromearth**](https://github.com/danielfromearth),[**@chuckwondo**](https://github.com/chuckwondo), + [**@jhkennedy**](https://github.com/jhkennedy),[**@mfisher87**](https://github.com/mfisher87)) ### Added From ea3a9c256a5c60ef323b39ee37bdae9b2fab5a17 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 11:32:49 -0600 Subject: [PATCH 48/56] Adjust wording of subheaders --- docs/contributing/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index c5c40455..b312609d 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -50,7 +50,7 @@ Once you've completed these steps, you are ready to submit your contribution. To ensure that our code is well-documented and easy to understand, we use [Google-style docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html) to document all functions, classes, and methods in this library. -#### Getting Help with Setup and Configuration +#### Locally rendering the documentation To work on documentation locally, follow these steps: @@ -60,7 +60,7 @@ To work on documentation locally, follow these steps: If you encounter any issues while setting up the documentation using the provided steps, please refer to our [tutorial]( https://www.youtube.com/watch?v=mNjlMZ4F3So) for additional guidance. -#### Caveats and Considerations +##### Caveats and considerations Our mkdocs setup has a known limitation: the hot reloader won't auto-reload when changing docstrings. To see updates, manually rebuild and re-serve docs. We're working to improve the developer experience and appreciate your patience. From b62b5dd8d08d606c43f8eee9f080a6c40a0d2bbe Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 11:33:34 -0600 Subject: [PATCH 49/56] Fix code of conduct link --- docs/contributing/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index b312609d..6a5abf5a 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -6,7 +6,7 @@ with the community and maintainers via [a GitHub Discussion](https://github.com/nsidc/earthaccess/discussions), or [any other method](our-meet-ups.md). -Please note that we have a [code of conduct](/CODE_OF_CONDUCT.md). Please follow it in all of your interactions with the project. +Please note that we have a [code of conduct](./code-of-conduct.md). Please follow it in all of your interactions with the project. ## First Steps to contribute From 59dabee37404403d16214d9086dcb79e66a94e02 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 11:34:17 -0600 Subject: [PATCH 50/56] Make the local documentation workflow more concise --- docs/contributing/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 6a5abf5a..4df59b9b 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -52,11 +52,11 @@ To ensure that our code is well-documented and easy to understand, we use [Googl #### Locally rendering the documentation -To work on documentation locally, follow these steps: +To work on documentation locally, we provide a script that will automatically re-render the docs when you make changes: -- To setup the documentation, navigate to the scripts directory -- Run the `scripts/build-docs.sh` script to build the documentation -- Serve the documentation locally, using the `scripts/docs-live.sh` script +``` +./scripts/docs-live.sh +``` If you encounter any issues while setting up the documentation using the provided steps, please refer to our [tutorial]( https://www.youtube.com/watch?v=mNjlMZ4F3So) for additional guidance. From b324ff8694dff32fc344c88da3b6b6e24edf930c Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 11:34:41 -0600 Subject: [PATCH 51/56] Link to pre-commit install docs --- docs/contributing/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 4df59b9b..2f661f86 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -82,7 +82,7 @@ To maintain code quality, we use pre-commit for automated checks before committi To set up pre-commit, follow these steps: -- `pip install pre-commit` for Windows and for Linux refer to your distribution's package index +- `pip install pre-commit` ([official installation docs](https://pre-commit.com/#install)) - `pre-commit install` to enable it to run automatically - `pre-commit run -a` to run it manually From d8f95114605cf5f9069c8430741f9dce714c2a70 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 11:35:12 -0600 Subject: [PATCH 52/56] Remove instructions referencing removed Make command instructions --- docs/contributing/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 2f661f86..adabeda6 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -86,7 +86,6 @@ To set up pre-commit, follow these steps: - `pre-commit install` to enable it to run automatically - `pre-commit run -a` to run it manually -We attempt to provide comprehensive type annotations within this repository. If you do not provide fully annotated functions or methods, the `lint` command will fail. Over time, we plan to increase type-checking strictness in order to ensure more precise, beneficial type annotations. We have included type stubs for the untyped `python-cmr` library, which we intend to eventually upstream. Since `python-cmr` exposes the `cmr` package, the stubs appear under `stubs/cmr`. From f1176e615cd7a2813dcfbb79aa62585401180fe6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 17:47:27 +0000 Subject: [PATCH 53/56] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/contributing/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/index.md b/docs/contributing/index.md index 6ac83fd1..a8b9f624 100644 --- a/docs/contributing/index.md +++ b/docs/contributing/index.md @@ -94,4 +94,4 @@ We have included type stubs for the untyped `python-cmr` library, which we inten Fork the repository using the "Fork" button on the [repository homepage](https://github.com/nsidc/earthaccess), create a branch with your changes in the fork, then open a draft pull request from your fork. Starting a pull request provides additional instructions and requirements, and -there is no harm in starting a draft pull request while still developing. \ No newline at end of file +there is no harm in starting a draft pull request while still developing. From a1ee17d351c8beeddb2fe210bb1bf93917da1d25 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 9 Jul 2024 12:41:26 -0600 Subject: [PATCH 54/56] Add note about Common Changelog to PR template --- .github/pull_request_template.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 60c23104..95911c4f 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -33,7 +33,8 @@ created the PR as a non-draft, don't worry, you can still change it to a draft u example `closes #1`. See [GitHub docs - Linking a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue). - [ ] Update `CHANGELOG.md` with details about your change in a section titled - `## Unreleased`. If such a section does not exist, please create one. + `## Unreleased`. If such a section does not exist, please create one. Follow + [Common Changelog](https://common-changelog.org/) for your additions. - [ ] Update the documentation and/or the `README.md` with details of changes to the earthaccess interface, if any. Consider new environment variables, function names, decorators, etc. From 54802f3968898bfa2f1e8a7da6a0dee0d4e3e276 Mon Sep 17 00:00:00 2001 From: betolink Date: Fri, 19 Jul 2024 14:40:31 -0500 Subject: [PATCH 55/56] allowing regexes in bump version --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 316a4ac7..5e1b4e46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -158,6 +158,7 @@ combine-as-imports = true current_version = "0.9.0" commit = false tag = false +regex = true [[tool.bumpversion.files]] filename = "pyproject.toml" From c2ed7f9be940f7a6b51841c3e23ca537a5795861 Mon Sep 17 00:00:00 2001 From: betolink Date: Fri, 19 Jul 2024 14:41:51 -0500 Subject: [PATCH 56/56] releasing v0.10.0 --- CHANGELOG.md | 2 +- CITATION.cff | 4 ++-- pyproject.toml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 882538ea..8e49ac4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## [v0.10.0] 2024-07-19 ### Changed diff --git a/CITATION.cff b/CITATION.cff index 9da253c3..28242edc 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -26,8 +26,8 @@ keywords: url: "https://earthaccess.readthedocs.io" repository-code: "https://github.com/nsidc/earthaccess" -version: "0.9.0" -date-released: "2024-02-28" +version: "0.10.0" +date-released: "2024-07-19" authors: - family-names: "Barrett" diff --git a/pyproject.toml b/pyproject.toml index 5e1b4e46..54f73e0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "earthaccess" -version = "0.9.0" +version = "0.10.0" repository = "https://github.com/nsidc/earthaccess" documentation = "https://earthaccess.readthedocs.io" description = "Client library for NASA Earthdata APIs" @@ -155,7 +155,7 @@ convention = "google" combine-as-imports = true [tool.bumpversion] -current_version = "0.9.0" +current_version = "0.10.0" commit = false tag = false regex = true