pax_global_header00006660000000000000000000000064152525350000014507gustar00rootroot0000000000000052 comment=0e76c0980898bd41b51906e35ad536808d83efc3 morecantile-7.1.0/000077500000000000000000000000001525253500000140165ustar00rootroot00000000000000morecantile-7.1.0/.github/000077500000000000000000000000001525253500000153565ustar00rootroot00000000000000morecantile-7.1.0/.github/codecov.yml000066400000000000000000000002041525253500000175170ustar00rootroot00000000000000comment: off coverage: status: project: default: target: auto threshold: 5 morecantile-7.1.0/.github/dependabot.yml000066400000000000000000000005551525253500000202130ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" day: "monday" groups: all: patterns: - "*" - package-ecosystem: uv cooldown: default-days: 7 directory: "/" schedule: interval: weekly groups: all: patterns: - "*"morecantile-7.1.0/.github/workflows/000077500000000000000000000000001525253500000174135ustar00rootroot00000000000000morecantile-7.1.0/.github/workflows/benchmark.yml000066400000000000000000000030211525253500000220640ustar00rootroot00000000000000name: Benchmark on: push: branches: - main tags: - '*' pull_request: workflow_dispatch: permissions: contents: write pull-requests: write env: LATEST_PY_VERSION: '3.14' jobs: benchmark: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install uv uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.9.*" enable-cache: false python-version: ${{ env.LATEST_PY_VERSION }} - name: Install dependencies run: | uv sync --group benchmark --frozen - name: Run Benchmark run: | uv run pytest tests/benchmarks.py --benchmark-only --benchmark-columns 'min, max, mean, median' --benchmark-sort 'min' --benchmark-json output.json - name: Store and Compare benchmark result uses: benchmark-action/github-action-benchmark@52576c92bccf6ac60c8223ec7eb2565637cae9ba # v1 with: name: morecantile Benchmarks tool: 'pytest' output-file-path: output.json alert-threshold: '150%' comment-on-alert: true fail-on-alert: false # GitHub API token to make a commit comment github-token: ${{ secrets.GITHUB_TOKEN }} gh-pages-branch: 'gh-benchmarks' # Make a commit on `gh-pages` only if main auto-push: ${{ github.ref == 'refs/heads/main' }} benchmark-data-dir-path: dev/benchmarks morecantile-7.1.0/.github/workflows/ci.yml000066400000000000000000000024631525253500000205360ustar00rootroot00000000000000name: CI on: push: branches: - main tags: - '*' pull_request: env: LATEST_PY_VERSION: '3.14' jobs: tests: runs-on: ubuntu-latest strategy: matrix: python-version: ['3.11', '3.12', '3.13', '3.14'] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install uv uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.9.*" enable-cache: true python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --extra rasterio - name: Run pre-commit if: ${{ matrix.python-version == env.LATEST_PY_VERSION }} run: | uv run pre-commit run --all-files uv run --with mypy mypy -p morecantile --ignore-missing-imports - name: Run tests run: uv run pytest --cov morecantile --cov-report term-missing --cov-report xml - name: Upload Results if: ${{ matrix.python-version == env.LATEST_PY_VERSION }} uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: files: ./coverage.xml flags: unittests fail_ci_if_error: false token: ${{ secrets.CODECOV_TOKEN }} morecantile-7.1.0/.github/workflows/deploy_mkdocs.yml000066400000000000000000000013661525253500000230000ustar00rootroot00000000000000name: Publish docs via GitHub Pages on: push: branches: - main paths: # Only rebuild website when docs have changed - 'README.md' - 'CHANGES.md' - 'CONTRIBUTING.md' - 'docs/**' concurrency: group: docs-gh-pages cancel-in-progress: false jobs: build: name: Deploy docs runs-on: ubuntu-latest steps: - name: Checkout main uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install uv uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.9.*" enable-cache: true - name: Deploy docs run: uv run --group docs mkdocs gh-deploy --force -f docs/mkdocs.ymlmorecantile-7.1.0/.github/workflows/release.yml000066400000000000000000000041321525253500000215560ustar00rootroot00000000000000name: Release on: push: tags: - '*' env: LATEST_PY_VERSION: '3.14' jobs: build: name: Build dist runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6 - name: Install uv uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.9.*" enable-cache: true python-version: ${{ env.LATEST_PY_VERSION }} - name: Install dependencies run: | uv sync --group deploy - name: Set tag version id: tag run: | echo "version=${GITHUB_REF#refs/*/}" echo "version=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT - name: Set module version id: module run: | echo "version=$(uv run hatch --quiet version)" >> $GITHUB_OUTPUT - name: Check version match run: | if [ "${{ steps.tag.outputs.version }}" != "${{ steps.module.outputs.version }}" ]; then echo "Tag version (${{ steps.tag.outputs.version }}) does not match module version (${{ steps.module.outputs.version }})" exit 1 fi - name: Build run: | uv run hatch build - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: path: ./dist/ upload_pypi: name: Upload release to PyPI needs: [build] runs-on: ubuntu-latest environment: # Note: this environment must be configured in the repo settings name: pypi-release url: https://pypi.org/p/morecantile permissions: id-token: write # IMPORTANT: this permission is mandatory for trusted publishing steps: - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: name: artifact path: dist merge-multiple: true - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1 morecantile-7.1.0/.gitignore000066400000000000000000000035001525253500000160040ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # PyCharm: .idea # VSCode .vscode .vscode/ .notebooks/ morecantile-7.1.0/.pre-commit-config.yaml000066400000000000000000000007501525253500000203010ustar00rootroot00000000000000repos: - repo: https://github.com/abravalheri/validate-pyproject rev: '0.26' hooks: - id: validate-pyproject - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.16.7 hooks: - id: ruff args: ["--fix"] - id: ruff-format - repo: https://github.com/pre-commit/mirrors-mypy rev: v2.3.1 hooks: - id: mypy language_version: python additional_dependencies: - types-attrs - pydantic~=2.0 morecantile-7.1.0/CHANGES.md000066400000000000000000000517051525253500000154200ustar00rootroot00000000000000 ## Unreleased ## 7.1.0 (2026-09-16) * add `matrix_to_geojson` method to `TileMatrixSet` class ## 7.0.3 (2026-02-05) * add top-level export (`__all__`) (author @kylebarron, https://github.com/developmentseed/morecantile/pull/202) ## 7.0.2 (2026-01-05) * fix `_lr` and `_ul` methods for `bottomLeft` TMS ## 7.0.1 (2025-12-19) * fix and improve type hints * remove `bump-my-version` from dev dependencies ## 7.0.0 (2025-11-20) * update the `WebMercatorQuad` definition to avoid rounding errors for bounds **breaking change** ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") # before print(tms.bounds(0, 0, 0)) >> BoundingBox(left=-180.0, bottom=-85.0511287798066, right=180.00000000000009, top=85.0511287798066) print(tms.xy_bounds(0, 0, 0)) >> BoundingBox(left=-20037508.342789244, bottom=-20037508.34278925, right=20037508.34278925, top=20037508.342789244) # now print(tms.bounds(0, 0, 0)) >> BoundingBox(left=-180.0, bottom=-85.0511287798066, right=180.0, top=85.0511287798066) print(tms.xy_bounds(0, 0, 0)) >> BoundingBox(left=-20037508.342789244, bottom=-20037508.342789244, right=20037508.342789244, top=20037508.342789244) ``` * docs: add example of how to enumerate tiles for a bounding box and zoom level(s) * use `WGS84` as default CRS for `TileMatrixSet.feature` GeoJSON response (as per specification) * add `geographic_crs` option for `TileMatrixSet.feature` method * update non-WGS84 CRS notation in `TileMatrixSet.feature` GeoJSON response ```python # before "properties": { "crs": { "type": "EPSG", "properties": {"code": 3857}, } } # now "properties": { "crs": { "type": "name", "properties": {"name": "http://www.opengis.net/def/crs/EPSG/0/3857"}, } # or "crs": { "type": "wkt", "properties": {"wkt": "..."}}, } } ``` * rename `grid_name -> tms` and `grid_crs -> tms_crs` property names in `TileMatrixSet.feature` GeoJSON response **breaking change** * check tile's zoom against TMS's `maxzoom` in `TileMatrixSet.is_valid` and add `strict=True|False` options **breaking change** ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") # before assert tms.is_valid(0, 0, 25) >> UserWarning: TileMatrix not found for level: 25 - Creating values from TMS Scale. # now assert tms.is_valid(0, 0, 25), "Tile(0, 0, 25) is not valid" >> AssertionError: Tile(0, 0, 25) is not valid assert tms.is_valid(0, 0, 25, strict=False) >> UserWarning: TileMatrix not found for level: 25 - Creating values from TMS Scale. ``` * remove `truncate_lnglat` from TileMatrixSet class **breaking change** * remove python 3.8, 3.9 and 3.10 support * add `geographic_crs` option in `TileMatrixSet.tiles` and `TileMatrixSet.tile` methods * make every `TileMatrixSet`'s attribute **frozen** * rename `morecantile.defaults.TileMatrixSets.tms` attribute to `tilematrixsets` **breaking change** * make sure that `morecantile.defaults.TileMatrixSets.get(name)` returns a copy of the TMS object * add `MORECANTILE_DEFAULT_GEOGRAPHIC_CRS` environment variable to control the default Geographic CRS * add `TileMatrixSet.set_geographic_crs(crs: pyproj.CRS)` method to overwrite the geographic CRS * add support for `BottomLeft` cornerOfOrigin TileMatrices * add python 3.14 support ## 6.2.0 (2024-12-19) * add python 3.13 support * update pyproj dependency version to `>=3.1,<4.0` ## 6.1.0 (2024-10-17) * add `_tile_matrices_idx: Dict[str, int]` private attribute to improve `matrices` lookup * change `xy_bounds()` and `bounds()` methods to avoid calculation duplication ## 6.0.0 (2024-10-16) * remove `_geographic_crs` private attribute in `TileMatrixSet` model **breaking change** * use `crs.geodetic_crs` property as `geographic_crs` **breaking change** ## 5.4.2 (2024-08-29) * better handle anti-meridian crossing bbox in `tms.tiles()` (author @ljstrnadiii, https://github.com/developmentseed/morecantile/pull/154) ## 5.4.1 (2024-08-27) * ensure `TileMatrixSet._geographic_crs` is a pyproj CRS object (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/152) * add `python 3.12` support ## 5.4.0 (2024-08-20) * adds --tms optional argument to the shapes and tiles cli tools (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/151) ## 5.3.1 (2024-07-26) * handle 180th meridian case for `tms.tiles()` (author @ljstrnadiii, https://github.com/developmentseed/morecantile/pull/150) ## 5.3.0 (2024-02-09) * enable custom decimation value for in `TileMatrixSet.custom` method (author @mccarthyryanc, https://github.com/developmentseed/morecantile/pull/146) ## 5.2.3 (2024-02-02) * update pydantic `Field` usage to avoid deprecation in 3.0 ## 5.2.2 (2024-01-25) * fix `id` for `WGS1984Quad` TileMatrixSet (from `WorldCRS84Quad` to `WGS1984Quad`) ## 5.2.1 (2024-01-18) * fix `CRS` WKT type from `string` to `Object` (PROJJSON) (ref: https://github.com/opengeospatial/2D-Tile-Matrix-Set/issues/89). ```python # Before wkt = pyproj.CRS.from_epsg(3857).to_wkt() TileMatrixSet( ... crs={"wkt": wkt} ) # Now wkt = pyproj.CRS.from_epsg(3857).to_json_dict() TileMatrixSet( ... crs={"wkt": wkt} ) ``` ## 5.2.0 (2024-01-18) * fix `CRS` parsing to allow `wkt ({"wkt": ...})` and `uri ({"uri": ...})` defined CRS ```python TileMatrixSet( ... crs="http://www.opengis.net/def/crs/EPSG/0/3857" ) TileMatrixSet( ... crs={"uri": "http://www.opengis.net/def/crs/EPSG/0/3857"} ) wkt = pyproj.CRS.from_epsg(3857).to_wkt() TileMatrixSet( ... crs={"wkt": wkt} ) ``` * update `TileMatrixSet` representation to use CRS's URI * remove default for `TileMatrixSet.pointOfOrigin` attribute (**required**) * add `topLeft` default for `TileMatrixSet.cornerOfOrigin` attribute * renamed `morecantile.models.CRSType` -> `morecantile.models.CRS` ## 5.1.0 (2024-01-08) * Simplify bounds calculation by using `TileMatrix.cellSize` instead of `TileMatrix.scaleDenominator` * remove `TileMatrixSet._resolution` private method ## 5.0.2 (2023-12-01) * Remove *alias* tiles in `.parent()`, `.children()`, `.neighbors()` and `.tiles()` methods for Variable Matrix Width TileMatrixSets (https://github.com/developmentseed/morecantile/pull/136) ## 5.0.1 (2023-12-01) [DELETED] * ~~Remove *alias* tiles in `.parent()`, `.children()`, `.neighbors()` and `.tiles()` methods for Variable Matrix Width TileMatrixSets (https://github.com/developmentseed/morecantile/pull/136)~~ ## 5.0.0 (2023-07-24) * update pydantic requirement to `~=2.0` * add support for TileMatrixSets with Variable Matrix Width * add `variableMatrixWidths` to the `TileMatrix` model * add `TileMatrixSet._lr()` (and `lr()`) to retrieve the lower right coordinates of a tile (instead of using upper-left of tile+1) * switch to `functools.cached_property` to cache properties (instead of cachetools.LRUcache) * rename `_is_quadtree` property to `is_quadtree` in `TileMatrixSet` model * fix possible bug in `TileMatrixSet._tile()` (and `.tile()`) method to make sure x or y are not greater than `matrixWidth - 1` or `matrixHeight - 1` ## 4.3.0 (2023-07-11) * add `.srs` property to `CRSType` * forward arguments to `pyproj.CRS` methods for `to_epsg()`, `to_wkt()`, `to_proj4()` and `to_json()` CRSType methods ## 4.2.1 (2023-07-02) * limit pydantic requirement to `~=1.0`` ## 4.2.0 (2023-06-09) * add `to_proj4` and `to_dict` and `to_json` methods to `CRSType` * remove `TileMatrixSet._crs` (replaced with `TileMatrixSet.crs._pyproj_crs`) ## 4.1.1 (2023-06-07) * add `to_epsg()` and `to_wkt()` methods to `CRSType` to allow compatibility with `4.0` ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") tms.crs >> CRSType(__root__='http://www.opengis.net/def/crs/EPSG/0/3857') tms.crs.to_epsg() >> 3857 tms._crs >> tms._crs.to_epsg() >> 3857 ``` ## 4.1.0 (2023-06-06) * Change CRS attribute in model to align more with the TMS spec and fix some OpenAPI schema issues (It should be a string URI or WKT, not a pyproj.CRS) * add `TileMatrixSet._crs` PrivateAttr to host the `pyproj.CRS` version of the crs * update `grid_crs` properties in `TileMatrixSet.feature()` result to return the `TileMatrixSet.CRS` (uri/wkt) instead of EPSG code ## 4.0.2 (2023-05-31) * Fix TileMatrixSet BoundingBox definition (https://github.com/developmentseed/morecantile/pull/122) ## 4.0.1 (2023-05-31) * Raise a `ValueError` when `nan` bounds are passed to `tiles` (author @samn, https://github.com/developmentseed/morecantile/pull/120) ## 4.0.0 (2023-05-22) * no change since `4.0.0a1` ## 4.0.0a1 (2023-05-17) * Fix possible bug when a TileMatrixSet does not have `id` ## 4.0.0a0 (2023-05-15) * Remove assumption tile rows/cols are ordered in `TileMatrixSet.tiles()` method (author @fsvenson, https://github.com/developmentseed/morecantile/pull/104) * switch to **TMS 2.0** specification (author @dchirst, https://github.com/developmentseed/morecantile/pull/101). See https://developmentseed.org/morecantile/tms-v2/ for more info. * remove `NZTM2000` TileMatrixSet (ref: https://github.com/developmentseed/morecantile/issues/103) * add `rasterio_geographic_crs` to export TMS's geographic CRS to Rasterio's CRS object (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/109) * add `geographic_crs` property in the TileMatrixSet model to return the private `_geographic_crs` attribute * add cache LRU layer on top of `TileMatrixSet.bbox` method * changed the input type in `morecantile.defaults.TileMatrixSets.register()` from `Sequence[TileMatrixSet]` to `Dict[str, TileMatrixSets]` ```python my_custom_tms = ... # before defaults = morecantile.tms.register([my_custom_tms]) # now defaults = morecantile.tms.register({"MyCustomGrid": my_custom_tms}) ``` * made `id` and `title` optional in `morecantile.TileMatrixSet.custom()` method ```python crs = CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 # before tms = morecantile.TileMatrixSet.custom(extent, crs) print(tms.id, tms.title) >>> "Custom", "Custom TileMatrixSet" # now tms = morecantile.TileMatrixSet.custom(extent, crs) print(tms.id, tms.title) >>> None, None ``` * remove `boundingBox` in TileMatrixSet definition when created with `morecantile.TileMatrixSet.custom` ## 3.4.0 (2023-05-15) * [backported from 4.0] Remove assumption tile rows/cols are ordered in `TileMatrixSet.tiles()` method (author @fsvenson, https://github.com/developmentseed/morecantile/pull/104) * [backported from 4.0] add `rasterio_geographic_crs` to export TMS's geographic CRS to Rasterio's CRS object (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/109) * [backported from 4.0] add `geographic_crs` property in the TileMatrixSet model to return the private `_geographic_crs` attribute * [backported from 4.0] add cache LRU layer on top of `TileMatrixSet.bbox` method ## 3.3.0 (2023-03-09) * sort default TMS (author @jlaura, https://github.com/developmentseed/morecantile/pull/98) * Switch to ruff for linting and fixing linting issues ## 3.2.5 (2022-12-16) * Do not parse TMS json files automatically but wait for the TMS to be used ## 3.2.4 (2022-12-14) * fix `CanadianNAD83_LCC`, `WorldMercatorWGS84Quad` and `EuropeanETRS89_LAEAQuad` TMS * add `title` option in `morecantile custom` CLI ## 3.2.3 (2022-12-13) * fix `utils.meters_per_unit` for non earth bodies (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/92) * fix `CRS_to_uri` function to adds ability to export non-EPSG CRSs URIs (author @AndrewAnnex, https://github.com/developmentseed/morecantile/pull/93) ## 3.2.2 (2022-11-25) * add `morecantile.defaults.TileMatrixSets` in export ## 3.2.1 (2022-10-25) * add python 3.11 support ## 3.2.0 (2022-10-20) * add python 3.10 support * remove python 3.7 support * switch to pyproject.toml ## 3.1.2 (2022-03-21) * add support for `foot` and `US survey foot` CRS (https://github.com/developmentseed/morecantile/pull/86) ## 3.1.1 (2022-02-25) * fix issue with `zoom_for_res` when resolution is smaller than minzoom (author @samn, https://github.com/developmentseed/morecantile/pull/84) ## 3.1.0 (2022-02-18) * add `parent`, `children`, `neighbors`, `minmax`, `is_valid` methods (https://github.com/developmentseed/morecantile/pull/82) **breaking changes** * update `WebMercatorQuad` TMS to match `mercantile` and `GDAL` definition of the half-earth value ## 3.0.5 (2022-02-16) * truncate geographic Lon/Lat inputs to the TMS geographic bbox instead of `-180., -90., 180., 90.` (https://github.com/developmentseed/morecantile/pull/79) * remove `utils.truncate_lnglat` function (https://github.com/developmentseed/morecantile/pull/79) ## 3.0.4 (2022-02-16) * Allow zoom_for_res to work for a TMS with a minzoom > 0 (author @samn, https://github.com/developmentseed/morecantile/pull/78) ## 3.0.3 (2021-12-06) * add `WGS1984Quad` (`WGS84/epgs:4326`) TileMatrixSet (https://github.com/developmentseed/morecantile/pull/74) ## 3.0.2 (2021-11-12) * add `_geographic_crs` definition in `__init__` to make sure it's initialized from user input (author @davenquinn, https://github.com/developmentseed/morecantile/pull/72) ## 3.0.1 (2021-11-10) * rename `_to_wgs84` and `_from_wgs84` private attributes to `_to_geographic` and `_from_geographic` (https://github.com/developmentseed/morecantile/pull/68) * add `_geographic_crs` private attribute to `morecantile.TileMatrixSet` to define the CRS used in `_to_geographic` and `_from_geographic` (https://github.com/developmentseed/morecantile/pull/68) * fix `TileMatrixSet._invert_axis` method to only check axis information (https://github.com/developmentseed/morecantile/pull/71) ## 3.0.0 (2021-09-23) * no change since 3.0.0a1 ## 3.0.0a1 (2021-09-17) * only import rasterio if needed (https://github.com/developmentseed/morecantile/pull/66) ## 3.0.0a0 (2021-09-09) * add `.rasterio_crs` properties to TMS for compatibility with rasterio (https://github.com/developmentseed/morecantile/pull/58) * Use new Class-like notation for namedtuple (https://github.com/developmentseed/morecantile/pull/58) **breaking changes** * switch from rasterio to PyProj for CRS definition and projection transformation (https://github.com/developmentseed/morecantile/pull/58) * remove python 3.6 supports (because of pyproj) ## 2.1.4 (2021-08-20) * add **NZTM2000Quad** tile matrix set from LINZ (author @blacha, https://github.com/developmentseed/morecantile/pull/57) * add **quadkey** supports (@author adrian-knauer, https://github.com/developmentseed/morecantile/pull/56) ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") # Tile to Quadkey tms.quadkey(486, 332, 10) >>> "0313102310" # Quadkey to Tile tms.quadkey_to_tile("0313102310") >>> Tile(486, 332, 10) ``` * update `NZTM2000*` CRS uri from `https://www.opengis.net/def/crs/EPSG/0/2193` to `urn:ogc:def:crs:EPSG:2193` (https://github.com/developmentseed/morecantile/pull/61) ## 2.1.3 - Doesn't exists ## 2.1.2 (2021-05-18) * fix wrong TMS boundingBox definition when using inverted CRS (https://github.com/developmentseed/morecantile/pull/53) ## 2.1.1 (2021-05-17) * remove `mercantile` dependency. * raise `PointOutsideTMSBounds` warning when user is doing operations outside TMS bounds. * fix wrong `xy_bbox` when `tms.boundingBox` use a specific CRS. ## 2.1.0 (2020-12-17) * add `zoom_level_strategy` option for `TileMatrixSet.zoom_for_res` to match GDAL 3.2. By default, it is set to `auto`, meaning that it will select the closest zoom level. User can set the strategy to `lower` or `upper` to select below or above zoom levels. ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") # native resolution of zoom 7 is 1222.9924 m # native resolution of zoom 8 is 611.4962 m assert tms.zoom_for_res(612.0) == 8 assert tms.zoom_for_res(612.0, zoom_level_strategy="lower") == 7 assert tms.zoom_for_res(612.0, zoom_level_strategy="upper") == 8 ``` ## 2.0.1 (2020-11-05) * simplify `morecantile.TileMatrixSet` default representation ```python from morecantile import tms tms.get("WorldCRS84Quad") >>> print(tms.get("WorldCRS84Quad").json()) >>> { 'type': 'TileMatrixSetType', 'title': 'CRS84 for the World', 'abstract': None, 'keywords': None, 'identifier': 'WorldCRS84Quad', 'supportedCRS': CRS.from_epsg(4326), 'wellKnownScaleSet': AnyHttpUrl(...), 'boundingBox': { 'type': 'BoundingBoxType', 'crs': CRS.from_epsg(4326), 'lowerCorner': (-180.0, -90.0), 'upperCorner': (180.0, 90.0)}, 'tileMatrix': [...] } ``` ## 2.0.0 (2020-11-04) * switch from `CoordBBox` to `rasterio.coords.BoundingBox` (ref: https://github.com/developmentseed/morecantile/issues/38). * update `morecantile.commons` Tile and Coords to match rasterio's BoundingBox. * rename `morecantile.models.BoundingBox` to `morecantile.models.TMSBoundingBox` to avoind name colision with rasterio's BoundingBox. * improve default TMS immutability by making `morecantile.tms.register` to return a new TileMatrixSets instance (ref: https://github.com/developmentseed/morecantile/issues/37) ```python import morecantile import TileMatrixSet, tms from rasterio.crs import CRS crs = CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 custom_tms = TileMatrixSet.custom(extent, crs, identifier="MyCustomTmsEPSG3031") print(len(tms.list())) >>> 10 defaults = tms.register(custom_tms) print(len(tms.list())) >>> 10 print(len(defaults.list())) >>> 11 ``` ## 1.3.1 (2020-10-07) * remove `pkg_resources` (https://github.com/pypa/setuptools/issues/510, https://github.com/developmentseed/morecantile/pull/36) * add `TILEMATRIXSET_DIRECTORY` to allow morecantile to load user's TMS ```python # Save custom TMS to a file import morecantile from rasterio.crs import CRS crs = CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 tms = morecantile.TileMatrixSet.custom(extent, crs, identifier="MyCustomTmsEPSG3031") with open("/tmp/mytms/MyCustomTmsEPSG3031.json", "w") as f: f.write(tms.json(exclude_none=True)) ``` ```python import os os.environ["TILEMATRIXSET_DIRECTORY"] = "/tmp/mytms" from morecantile import tms assert "MyCustomTmsEPSG3031" in tms.list() ``` ## 1.3.0.post1 (2020-09-30) * fix TileMatrixSet's model schema bug where pydantic wasn't able to translate `Union[rasterio.crs.CRS, pydantic.AnyHttpUrl]` to a valid schema (ref: https://github.com/developmentseed/morecantile/issues/34) ## 1.3.0 (2020-09-30) * Allow Custom CRS for custom TMS definition (https://github.com/developmentseed/morecantile/issues/23) * Extend TMS beyond TMS Document max zoom level (https://github.com/developmentseed/morecantile/pull/28) * Require rasterio >= 1.1.7 (sept 2020) to support inverted lat/lon TMS (ref: https://github.com/developmentseed/morecantile/issues/26) * Remove deprecated function * Add `tms.xy_bbox` and `tms.bbox` properties to return TileMatrixSet boundaries. * Add `tms.intersect_tms` to check if a bbox intersect with the TileMatrixSet boundaries. * Avoid out-range tiles (e.g. negative indexes) * Add `tms.zoom_for_res` function to get the TMS zoom level for a specific resolution (https://github.com/developmentseed/morecantile/issues/31). ## 1.2.0 (2020-06-01) * add TileMatrixSet minzoom/maxzoom properties * fix TileMatrixSet.tile calculation * add TileMatrixSet.tiles function (replicat from mercantile) * add buffer and projected options to TileMatrixSet.feature method * removes mercantile as dependencies * add CLI * renamed `morecantile.TileMatrixSet.point_towgs84` to `morecantile.TileMatrixSet.lnglat` (matches mercantile) * renamed `morecantile.TileMatrixSet.point_fromwgs84` to `morecantile.TileMatrixSet.xy` (matches mercantile) * add `truncate` option in `morecantile.TileMatrixSet.tile` (matches mercantile) * re-order buffer and precision options in `morecantile.TileMatrixSet.feature` (matches mercantile) * uses mercantile's tests ## 1.1.1 (2020-05-15) * Fix bad default TMS files (https://github.com/developmentseed/morecantile/issues/13) * Add regex in model for identifier validation ## 1.1.0 (2020-05-13) * better submodule definition * add `morecantile.tms` object to access and register defaults TileMatrixSet * Add depreciation warning for `morecantile.TileMatrixSet.load` method ## 1.0.0 (2020-05-11) Major refactor of Morecantile, which is now based on OGC TileMatrixSet JSON documents. * use pydantic model to validate TMS JSON documents (https://github.com/developmentseed/morecantile/pull/6, author @geospatial-jeff) * morecantile methods are part of the TMS model (https://github.com/developmentseed/morecantile/pull/7) ## 0.1.0 (2020-02-03) * Rename defaults grids (https://github.com/developmentseed/morecantile/issues/1) ## 0.0.1 (2020-01-23) * Initial release morecantile-7.1.0/CONTRIBUTING.md000066400000000000000000000023721525253500000162530ustar00rootroot00000000000000# Contributing Issues and pull requests are more than welcome. We recommand using [`uv`](https://docs.astral.sh/uv) as project manager for development. See https://docs.astral.sh/uv/getting-started/installation/ for installation **dev install** ```bash git clone https://github.com/developmentseed/morecantile.git cd morecantile uv sync --extra rasterio ``` You can then run the tests with the following command: ```sh uv run pytest --cov morecantile --cov-report term-missing -s -vv ``` ### pre-commit This repo is set to use `pre-commit` to run *isort*, *flake8*, *pydocstring*, *black* ("uncompromising Python code formatter") and mypy when committing new code. ```bash uv run pre-commit install ``` ##### Performance tests ```sh uv sync --group benchmark uv run pytest tests/benchmarks.py --benchmark-only --benchmark-columns 'min, max, mean, median' --benchmark-sort 'min' ``` ### Docs ```bash git clone https://github.com/developmentseed/morecantile.git cd morecantile uv sync --group docs ``` Hot-reloading docs: ```bash uv run mkdocs serve -f docs/mkdocs.yml ``` To manually deploy docs (note you should never need to do this because Github Actions deploys automatically for new commits.): ```bash uv run mkdocs gh-deploy -f docs/mkdocs.yml ```morecantile-7.1.0/LICENSE000066400000000000000000000020611525253500000150220ustar00rootroot00000000000000MIT License Copyright (c) 2020 Development Seed Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. morecantile-7.1.0/README.md000066400000000000000000000125441525253500000153030ustar00rootroot00000000000000# Morecantile

Construct and use map tile grids (a.k.a TileMatrixSet / TMS).

Test Coverage Package version Downloads License

--- **Documentation**: https://developmentseed.org/morecantile/ **Source Code**: https://github.com/developmentseed/morecantile --- Morecantile is like [mercantile](https://github.com/mapbox/mercantile) (the best tool to work with Web Mercator tile indexes), but with support for other TileMatrixSet grids. **Morecantile** follows the **OGC Two Dimensional Tile Matrix Set** specification **2.0** found in [https://docs.ogc.org/is/17-083r4/17-083r4.html](https://docs.ogc.org/is/17-083r4/17-083r4.html) | Morecantile Version | OGC Specification Version | Link | ------------------- | ------------------------- |--------- | >=4.0 | 2.0 | https://docs.ogc.org/is/17-083r4/17-083r4.html | =<3.0 | 1.0 | http://docs.opengeospatial.org/is/17-083r2/17-083r2.html ## Install ```bash python -m pip install -U pip python -m pip install morecantile # Or install from source: python -m pip install -U pip python -m pip install git+https://github.com/developmentseed/morecantile.git ``` ## Usage ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") # Get TMS bounding box print(tms.xy_bbox) >>> BoundingBox( left=-20037508.342789244, bottom=-20037508.34278919, right=20037508.34278919, top=20037508.342789244, ) # Get the bounds for tile Z=4, X=10, Y=10 in the TMS's CRS (e.g epsg:3857) print(tms.xy_bounds(morecantile.Tile(10, 10, 4))) >>> BoundingBox( left=5009377.085697308, bottom=-7514065.628545959, right=7514065.628545959, top=-5009377.085697308, ) # Get the bounds for tile Z=4, X=10, Y=10 in Geographic CRS (e.g epsg:4326) print(tms.bounds(morecantile.Tile(10, 10, 4))) >>> BoundingBox( left=44.999999999999964, bottom=-55.776573018667634, right=67.4999999999999, top=-40.97989806962009, ) ``` More info can be found at https://developmentseed.org/morecantile/usage/ ### Defaults Grids `morecantile` provides a set of default TileMatrixSets: - **CDB1GlobalGrid** \*: CDB 1 Global Grid - EPGS:4326 (WGS84) - **CanadianNAD83_LCC**: Lambert conformal conic NAD83 for Canada - EPSG:3978 - **EuropeanETRS89_LAEAQuad**: ETRS89-extended / LAEA Europe - EPGS:3035 - **GNOSISGlobalGrid** \*: GNOSIS Global Grid - EPGS:4326 (WGS84) - **LINZAntarticaMapTilegrid**: LINZ Antarctic Map Tile Grid (Ross Sea Region) - EPSG:5482 - **NZTM2000Quad**: LINZ NZTM2000 Map Tile Grid - EPSG:2193 - **UPSAntarcticWGS84Quad**: Universal Polar Stereographic WGS 84 Quad for Antarctic - EPSG:5042 - **UPSArcticWGS84Quad**: Universal Polar Stereographic WGS 84 Quad for Arctic - EPSG:5041 - **UTM31WGS84Quad**: Example of UTM grid - EPSG:32631 - **WebMercatorQuad**: Spherical Mercator - EPGS:3857 (default grid for Web Mercator based maps) - **WGS1984Quad**: EPSG:4326 for the World - EPGS:4326 (WGS84) - **WorldCRS84Quad**: CRS84 for the World - **WorldMercatorWGS84Quad**: Elliptical Mercator projection - EPGS:3395 \* TileMatrixSets with variable Matrix Width (see https://docs.ogc.org/is/17-083r4/17-083r4.html#toc15) ref: https://schemas.opengis.net/tms/2.0/json/examples/tilematrixset/ ## Implementations - [rio-tiler](https://github.com/cogeotiff/rio-tiler): Create tile from raster using Morecantile TMS. - [titiler](https://github.com/developmentseed/titiler): A modern dynamic tile server built on top of FastAPI and Rasterio/GDAL. - [tipg](https://github.com/developmentseed/tipg): OGC Features and Tiles API. - [planetcantile](https://github.com/AndrewAnnex/planetcantile): Tile matrix sets for other planets. - [supermorecado](https://github.com/developmentseed/supermorecado): Extend the functionality of morecantile with additional commands. ## Changes See [CHANGES.md](https://github.com/developmentseed/morecantile/blob/main/CHANGES.md). ## Contribution & Development See [CONTRIBUTING.md](https://github.com/developmentseed/morecantile/blob/main/CONTRIBUTING.md) ## License See [LICENSE](https://github.com/developmentseed/morecantile/blob/main/LICENSE) ## Authors Created by [Development Seed]() morecantile-7.1.0/benchmarks/000077500000000000000000000000001525253500000161335ustar00rootroot00000000000000morecantile-7.1.0/benchmarks/README.md000066400000000000000000000155201525253500000174150ustar00rootroot00000000000000 ## Benchmark Compare `mercantile`, `utiles` and `morecantile` ```sh python -m pip install -r requirements.txt python -m pytest benchmarks.py --benchmark-only --benchmark-columns 'min, max, mean, median' --benchmark-sort 'min' ``` ``` ----------------------------------------------------- benchmark 'bounds': 21 tests ---------------------------------------------------- Name (time in ns) Min Max Mean Median --------------------------------------------------------------------------------------------------------------------------------------- test_bounds[utiles-(486, 332, 30)] 83.0000 (1.0) 52,000.0000 (52.97) 195.3371 (1.48) 208.0000 (1.60) test_bounds[utiles-(0, 0, 0)] 83.0000 (1.00) 31,167.0000 (31.75) 193.5957 (1.47) 208.0000 (1.60) test_bounds[utiles-(1, 0, 1)] 125.0000 (1.51) 981.6700 (1.0) 132.0177 (1.0) 130.8300 (1.01) test_bounds[utiles-(1, 40, 7)] 125.0000 (1.51) 8,606.2500 (8.77) 132.5298 (1.00) 130.0000 (1.0) test_bounds[utiles-(486, 332, 10)] 128.3300 (1.55) 1,600.8300 (1.63) 133.4046 (1.01) 131.6700 (1.01) test_bounds[utiles-(1, 1, 1)] 129.5900 (1.56) 16,846.2500 (17.16) 141.9846 (1.08) 134.1700 (1.03) test_bounds[utiles-(486, 332, 20)] 138.3300 (1.67) 1,123.3300 (1.14) 142.5420 (1.08) 141.2500 (1.09) test_bounds[mercantile-(1, 40, 7)] 1,000.0000 (12.05) 92,416.0000 (94.14) 1,193.0112 (9.04) 1,167.0000 (8.98) test_bounds[mercantile-(1, 1, 1)] 1,075.0000 (12.95) 48,066.8000 (48.96) 1,154.8100 (8.75) 1,141.6000 (8.78) test_bounds[mercantile-(0, 0, 0)] 1,083.0000 (13.05) 21,041.0000 (21.43) 1,214.6049 (9.20) 1,208.0000 (9.29) test_bounds[mercantile-(1, 0, 1)] 1,083.0000 (13.05) 75,291.0000 (76.70) 1,213.7837 (9.19) 1,208.0000 (9.29) test_bounds[mercantile-(486, 332, 10)] 1,083.0000 (13.05) 55,750.0000 (56.79) 1,223.7598 (9.27) 1,208.0000 (9.29) test_bounds[mercantile-(486, 332, 20)] 1,083.0000 (13.05) 89,041.0000 (90.70) 1,248.4256 (9.46) 1,209.0000 (9.30) test_bounds[mercantile-(486, 332, 30)] 1,083.0000 (13.05) 194,958.0000 (198.60) 1,239.4339 (9.39) 1,209.0000 (9.30) test_bounds[morecantile-(1, 0, 1)] 20,083.0000 (241.96) 132,625.0000 (135.10) 20,893.1235 (158.26) 20,667.0000 (158.98) test_bounds[morecantile-(0, 0, 0)] 20,166.0000 (242.96) 120,333.0000 (122.58) 20,974.1961 (158.87) 20,708.0000 (159.29) test_bounds[morecantile-(1, 1, 1)] 20,334.0000 (244.99) 60,958.0000 (62.10) 21,236.2953 (160.86) 20,750.0000 (159.62) test_bounds[morecantile-(1, 40, 7)] 21,667.0000 (261.05) 173,458.0000 (176.70) 22,622.6537 (171.36) 22,333.0000 (171.79) test_bounds[morecantile-(486, 332, 10)] 22,166.0000 (267.06) 205,125.0000 (208.96) 23,512.1607 (178.10) 22,875.0000 (175.96) test_bounds[morecantile-(486, 332, 20)] 24,708.0000 (297.69) 129,250.0000 (131.66) 25,775.0796 (195.24) 25,375.0000 (195.19) test_bounds[morecantile-(486, 332, 30)] 71,292.0000 (858.94) 205,625.0000 (209.46) 73,569.4565 (557.27) 72,667.0000 (558.98) --------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- benchmark 'xy_bounds': 21 tests ----------------------------------------------------- Name (time in ns) Min Max Mean Median ------------------------------------------------------------------------------------------------------------------------------------------ test_xy_bounds[utiles-(0, 0, 0)] 83.0000 (1.0) 57,375.0000 (112.55) 145.9127 (1.57) 125.0000 (1.36) test_xy_bounds[utiles-(1, 1, 1)] 88.3400 (1.06) 1,335.4200 (2.62) 93.1478 (1.00) 92.5000 (1.00) test_xy_bounds[utiles-(1, 40, 7)] 88.7500 (1.07) 1,451.2500 (2.85) 93.1258 (1.0) 92.0900 (1.0) test_xy_bounds[utiles-(1, 0, 1)] 89.5900 (1.08) 861.6600 (1.69) 93.6428 (1.01) 93.3300 (1.01) test_xy_bounds[utiles-(486, 332, 10)] 90.0000 (1.08) 509.7950 (1.0) 93.2818 (1.00) 92.9150 (1.01) test_xy_bounds[utiles-(486, 332, 20)] 90.4100 (1.09) 864.1700 (1.70) 94.2974 (1.01) 94.1600 (1.02) test_xy_bounds[utiles-(486, 332, 30)] 90.4100 (1.09) 1,377.5000 (2.70) 94.7366 (1.02) 94.1600 (1.02) test_xy_bounds[mercantile-(0, 0, 0)] 708.0000 (8.53) 42,250.0000 (82.88) 843.2292 (9.05) 833.0000 (9.05) test_xy_bounds[mercantile-(486, 332, 10)] 731.2500 (8.81) 5,393.7500 (10.58) 770.8331 (8.28) 764.6000 (8.30) test_xy_bounds[mercantile-(486, 332, 30)] 731.2500 (8.81) 7,316.6500 (14.35) 770.2423 (8.27) 764.6000 (8.30) test_xy_bounds[mercantile-(1, 0, 1)] 732.1429 (8.82) 9,404.8571 (18.45) 791.7721 (8.50) 785.7143 (8.53) test_xy_bounds[mercantile-(1, 40, 7)] 733.3000 (8.83) 5,950.0000 (11.67) 772.3273 (8.29) 766.7000 (8.33) test_xy_bounds[mercantile-(486, 332, 20)] 733.3500 (8.84) 7,408.3000 (14.53) 773.4718 (8.31) 768.7500 (8.35) test_xy_bounds[mercantile-(1, 1, 1)] 735.4000 (8.86) 4,762.5000 (9.34) 783.2100 (8.41) 777.1000 (8.44) test_xy_bounds[morecantile-(0, 0, 0)] 3,042.0000 (36.65) 108,208.0000 (212.26) 3,287.1089 (35.30) 3,250.0000 (35.29) test_xy_bounds[morecantile-(1, 0, 1)] 3,291.0000 (39.65) 68,166.0000 (133.71) 3,503.4695 (37.62) 3,459.0000 (37.56) test_xy_bounds[morecantile-(1, 1, 1)] 3,291.0000 (39.65) 72,875.0000 (142.95) 3,506.8544 (37.66) 3,500.0000 (38.01) test_xy_bounds[morecantile-(1, 40, 7)] 4,375.0000 (52.71) 76,375.0000 (149.82) 4,630.2893 (49.72) 4,584.0000 (49.78) test_xy_bounds[morecantile-(486, 332, 10)] 4,875.0000 (58.73) 85,208.0000 (167.14) 5,197.3581 (55.81) 5,125.0000 (55.65) test_xy_bounds[morecantile-(486, 332, 20)] 6,916.0000 (83.33) 78,458.0000 (153.90) 7,221.0669 (77.54) 7,166.0000 (77.82) test_xy_bounds[morecantile-(486, 332, 30)] 52,667.0000 (634.54) 404,208.0000 (792.88) 54,749.1232 (587.90) 54,333.0000 (590.00) ------------------------------------------------------------------------------------------------------------------------------------------ ``` morecantile-7.1.0/benchmarks/benchmarks.py000066400000000000000000000056601525253500000206310ustar00rootroot00000000000000"""Morecantile/Mercantile/Utiles comparison benchmark The benchmark suite is adapted from jessekrubin/utiles https://github.com/jessekrubin/utiles/blob/ea58b9a017a2e3528f03cc20f16ef531737b863f/utiles-pyo3/bench/test_bench.py#L17-L25 """ # This file is a modified version of https://github.com/jessekrubin/utiles/blob/ea58b9a017a2e3528f03cc20f16ef531737b863f/utiles-pyo3/bench/test_bench.py. # # The original license follows. # # MIT License # # Copyright (c) 2023 jessekrubin # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from typing import Callable, Tuple import mercantile import pytest import utiles import morecantile tms = morecantile.tms.get("WebMercatorQuad") TEST_TILES = ( (0, 0, 0), (1, 0, 1), (1, 1, 1), (1, 40, 7), (486, 332, 10), # HIGH ZOOM (486, 332, 20), # OUTSIDE TMS Range (486, 332, 30), ) @pytest.mark.parametrize( "tile", [pytest.param(t, id=str(t)) for t in TEST_TILES], ) @pytest.mark.parametrize( "func", [ pytest.param(mercantile.bounds, id="mercantile"), pytest.param(tms.bounds, id="morecantile"), pytest.param(utiles.bounds, id="utiles"), ], ) @pytest.mark.benchmark(group="bounds") def test_bounds( tile: Tuple[int, int, int], func: Callable[[Tuple[int, int, int]], Tuple[float, float]], benchmark, ) -> None: """Benchmark bounds() method.""" _ = benchmark(func, *tile) @pytest.mark.parametrize( "tile", [pytest.param(t, id=str(t)) for t in TEST_TILES], ) @pytest.mark.parametrize( "func", [ pytest.param(mercantile.xy_bounds, id="mercantile"), pytest.param(tms.xy_bounds, id="morecantile"), pytest.param(utiles.xy_bounds, id="utiles"), ], ) @pytest.mark.benchmark(group="xy_bounds") def test_xy_bounds( tile: Tuple[int, int, int], func: Callable[[Tuple[int, int, int]], Tuple[float, float]], benchmark, ) -> None: """Benchmark xy_bounds() method.""" _ = benchmark(func, *tile) morecantile-7.1.0/benchmarks/requirements.txt000066400000000000000000000000671525253500000214220ustar00rootroot00000000000000pytest pytest-benchmark morecantile mercantile utiles morecantile-7.1.0/docs/000077500000000000000000000000001525253500000147465ustar00rootroot00000000000000morecantile-7.1.0/docs/mkdocs.yml000066400000000000000000000061441525253500000167560ustar00rootroot00000000000000# Project Information site_name: 'morecantile' site_description: 'Construct and use map tile grids (a.k.a TileMatrixSet / TMS).' docs_dir: 'src' site_dir: 'build' # Repository repo_name: 'developmentseed/morecantile' repo_url: 'https://github.com/developmentseed/morecantile' edit_uri: 'blob/main/src/' site_url: 'https://developmentseed.org/morecantile/' # Social links extra: social: - icon: 'fontawesome/brands/github' link: 'https://github.com/developmentseed' - icon: 'fontawesome/brands/twitter' link: 'https://twitter.com/developmentseed' # Layout nav: - Home: 'index.md' - Usage: 'usage.md' - Advanced: - Geographic Transformations: advanced/geographic.md - TMS v2: 'tms-v2.md' - API: - morecantile.commons: api/morecantile/commons.md - morecantile.defaults: api/morecantile/defaults.md - morecantile.errors: api/morecantile/errors.md - morecantile.models: api/morecantile/models.md - morecantile.utils: api/morecantile/utils.md - CLI: 'cli.md' - Benchmarking: benchmark.html - Development - Contributing: 'contributing.md' - Release: 'release-notes.md' # Theme theme: icon: logo: 'material/home' repo: 'fontawesome/brands/github' name: 'material' language: 'en' palette: primary: 'pink' accent: 'light pink' font: text: 'Nunito Sans' code: 'Fira Code' features: - content.code.annotate - content.code.copy - navigation.indexes - navigation.instant - navigation.tracking - search.suggest - search.share plugins: - search - mkdocstrings: enable_inventory: true handlers: python: paths: [src] options: filters: - "!^__post_init__" docstring_section_style: list docstring_style: google line_length: 100 separate_signature: true show_root_heading: true show_signature_annotations: true show_source: false show_symbol_type_toc: true signature_crossrefs: true extensions: - griffe_inherited_docstrings import: - https://docs.python.org/3/objects.inv - https://rasterio.readthedocs.io/en/stable/objects.inv - https://docs.pydantic.dev/latest/objects.inv - https://pyproj4.github.io/pyproj/stable/objects.inv # These extensions are chosen to be a superset of Pandoc's Markdown. # This way, I can write in Pandoc's Markdown and have it be supported here. # https://pandoc.org/MANUAL.html markdown_extensions: - admonition - attr_list - codehilite: guess_lang: false - def_list - footnotes - pymdownx.arithmatex - pymdownx.betterem - pymdownx.caret: insert: false - pymdownx.details - pymdownx.emoji - pymdownx.escapeall: hardbreak: true nbsp: true - pymdownx.magiclink: hide_protocol: true repo_url_shortener: true - pymdownx.smartsymbols - pymdownx.superfences - pymdownx.tasklist: custom_checkbox: true - pymdownx.tilde - toc: permalink: true morecantile-7.1.0/docs/src/000077500000000000000000000000001525253500000155355ustar00rootroot00000000000000morecantile-7.1.0/docs/src/advanced/000077500000000000000000000000001525253500000173025ustar00rootroot00000000000000morecantile-7.1.0/docs/src/advanced/geographic.md000066400000000000000000000072351525253500000217430ustar00rootroot00000000000000 Several methods/properties of the **morecantile.TileMatrixSet** object use Geographic Coordinates Reference System (CRS) to transform coordinates from/to the TMS's CRS: - `TileMatrixSet.lnglat(x, y)`: Transform point(x,y) to geographic longitude and latitude - `TileMatrixSet.xy(lng, lat)`: Transform geographic longitude and latitude coordinates to TMS CRS - `TileMatrixSet.ul(Tile)`: Return the upper left coordinates of the tile in geographic coordinate reference system - `TileMatrixSet.lr(Tile)`: Return the lower right coordinates of the tile in geographic coordinate reference system - `TileMatrixSet.bounds(Tile)`: Return the bounding box of the tile in geographic coordinate reference system - `TileMatrixSet.bbox`: Return TMS bounding box in geographic coordinate reference system For those methods/properties, the Geographic CRS is defined by the TileMatrixSet CRS's geographic CRS (`CRS.geodetic_crs`). The most common one is the `World Geodetic System 1984` (`WGS84` or `EPSG:4326`) but it's not the one used by default. ```python import morecantile morecantile.tms.get("WebMercatorQuad").geographic_crs >> Name: WGS 84 Axis Info [ellipsoidal]: - Lat[north]: Geodetic latitude (degree) - Lon[east]: Geodetic longitude (degree) Area of Use: - name: World. - bounds: (-180.0, -90.0, 180.0, 90.0) Datum: World Geodetic System 1984 ensemble - Ellipsoid: WGS 84 - Prime Meridian: Greenwich morecantile.tms.get("CanadianNAD83_LCC").geographic_crs >> Name: NAD83 Axis Info [ellipsoidal]: - Lat[north]: Geodetic latitude (degree) - Lon[east]: Geodetic longitude (degree) Area of Use: - name: North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands. British Virgin Islands. - bounds: (167.65, 14.92, -40.73, 86.45) Datum: North American Datum 1983 - Ellipsoid: GRS 1980 - Prime Meridian: Greenwich ``` ### Overwriting the Geographic CRS There are **two** mechanisms to overwrite the TMS's geographic CRS. - `TileMatrixSet.set_geographic_crs(crs)`: Overwrite the TMS's Geographic CRS (`TileMatrixSet._geographic_crs` private attribute) ```python import morecantile import pyproj tms = morecantile.tms.get("CanadianNAD83_LCC") tms.geographic_crs >> ... tms.set_geographic_crs(pyproj.CRS.from_epsg(4326)) tms.geographic_crs >> ... ``` - `MORECANTILE_DEFAULT_GEOGRAPHIC_CRS` environment variable ```python import os os.environ["MORECANTILE_DEFAULT_GEOGRAPHIC_CRS"] = "EPSG:4326" import morecantile tms = morecantile.tms.get("CanadianNAD83_LCC") tms.geographic_crs >> ``` Some methods have `geographic_crs` option to specify the CRS to use to transf the default CRS: - `TileMatrixSet.tile(lng, lat, *, geographic_crs=None)`: Get the tile for a given geographic longitude and latitude pair - `TileMatrixSet.tiles(west, south, east, north, *, geographic_crs=None)`: Get the tiles overlapped by a geographic bounding box morecantile-7.1.0/docs/src/api/000077500000000000000000000000001525253500000163065ustar00rootroot00000000000000morecantile-7.1.0/docs/src/api/morecantile/000077500000000000000000000000001525253500000206105ustar00rootroot00000000000000morecantile-7.1.0/docs/src/api/morecantile/commons.md000066400000000000000000000000301525253500000225760ustar00rootroot00000000000000::: morecantile.commons morecantile-7.1.0/docs/src/api/morecantile/defaults.md000066400000000000000000000000311525253500000227330ustar00rootroot00000000000000::: morecantile.defaults morecantile-7.1.0/docs/src/api/morecantile/errors.md000066400000000000000000000000271525253500000224450ustar00rootroot00000000000000::: morecantile.errors morecantile-7.1.0/docs/src/api/morecantile/models.md000066400000000000000000000000271525253500000224140ustar00rootroot00000000000000::: morecantile.models morecantile-7.1.0/docs/src/api/morecantile/utils.md000066400000000000000000000000261525253500000222700ustar00rootroot00000000000000::: morecantile.utils morecantile-7.1.0/docs/src/benchmark.html000066400000000000000000000220661525253500000203630ustar00rootroot00000000000000 Benchmarks
morecantile-7.1.0/docs/src/cli.md000066400000000000000000000162661525253500000166410ustar00rootroot00000000000000 # Morecantile CLI The CLI is heavily inspired from mercantile's CLI. ``` morecantile --help Usage: morecantile [OPTIONS] COMMAND [ARGS]... Command line interface for the Morecantile Python package. Options: -v, --verbose Increase verbosity. -q, --quiet Decrease verbosity. --version Show the version and exit. --help Show this message and exit. Commands: tiles Print tiles that overlap or contain a lng/lat point, bounding box, or GeoJSON objects. shapes Print the shapes of tiles as GeoJSON. custom Create Custom TileMatrixSet tms Print TileMatrixSet JSON document. tms-to-geojson Print TileMatrixSet MatrixSet as GeoJSON. ``` ## Tiles With the tiles command you can write descriptions of tiles intersecting with a geographic point, bounding box, or GeoJSON object. ``` $ morecantile tiles --help Usage: morecantile tiles [OPTIONS] [ZOOM] [INPUT] Lists TMS tiles at ZOOM level intersecting GeoJSON [west, south, east, north] bounding boxen, features, or collections read from stdin. Output is a JSON [x, y, z] array. Input may be a compact newline-delimited sequences of JSON or a pretty- printed ASCII RS-delimited sequence of JSON (like https://tools.ietf.org/html/rfc8142 and https://tools.ietf.org/html/rfc7159). Example: $ echo "[-105.05, 39.95, -105, 40]" | morecantiles tiles 12 Output: [852, 1550, 12] [852, 1551, 12] [853, 1550, 12] [853, 1551, 12] Options: --identifier TileMatrixSet identifier. One of : - CDB1GlobalGrid - CanadianNAD83_LCC - EuropeanETRS89_LAEAQuad - GNOSISGlobalGrid - LINZAntarticaMapTilegrid - NZTM2000Quad - UPSAntarcticWGS84Quad - UPSArcticWGS84Quad - UTM31WGS84Quad - WebMercatorQuad - WGS1984Quad - WorldCRS84Quad - WorldMercatorWGS84Quad --seq / --lf Write a RS-delimited JSON sequence (default is LF). --help Show this message and exit. ``` ## Shapes The shapes command writes TMS tile shapes to several forms of GeoJSON. ``` $ morecantile shapes --help Usage: morecantile shapes [OPTIONS] [INPUT] Reads one or more Web Mercator tile descriptions from stdin and writes either a GeoJSON feature collection (the default) or a JSON sequence of GeoJSON features/collections to stdout. Input may be a compact newline-delimited sequences of JSON or a pretty- printed ASCII RS-delimited sequence of JSON (like https://tools.ietf.org/html/rfc8142 and https://tools.ietf.org/html/rfc7159). Tile descriptions may be either an [x, y, z] array or a JSON object of the form {"tile": [x, y, z], "properties": {"name": "foo", ...}} In the latter case, the properties object will be used to update the properties object of the output feature. Options: --identifier TileMatrixSet identifier. One of : - CDB1GlobalGrid - CanadianNAD83_LCC - EuropeanETRS89_LAEAQuad - GNOSISGlobalGrid - LINZAntarticaMapTilegrid - NZTM2000Quad - UPSAntarcticWGS84Quad - UPSArcticWGS84Quad - UTM31WGS84Quad - WebMercatorQuad - WGS1984Quad - WorldCRS84Quad - WorldMercatorWGS84Quad --precision INTEGER Decimal precision of coordinates. --indent INTEGER Indentation level for JSON output --compact / --no-compact Use compact separators (',', ':'). --projected / --geographic Output coordinate system --seq Write a RS-delimited JSON sequence (default is LF). --feature Output as sequence of GeoJSON features (the default). --bbox Output as sequence of GeoJSON bbox arrays. --collect Output as a GeoJSON feature collections. --extents / --no-extents Write shape extents as ws-separated strings (default is False). --buffer FLOAT Shift shape x and y values by a constant number --help Show this message and exit. ``` ## Custom With the custom command you can create custom TileMatrixSet documents. ``` $ morecantile custom --help Usage: morecantile custom [OPTIONS] Create Custom TMS. Options: --epsg INTEGER EPSG number. [required] --extent FLOAT... left, bottom, right, top Bounding box of the Tile Matrix Set. [required] --name TEXT Identifier of the custom TMS. --minzoom INTEGER Minimum Zoom level. --maxzoom INTEGER Maximum Zoom level. --tile-width INTEGER Width of each tile. --tile-height INTEGER Height of each tile. --extent-epsg INTEGER EPSG number for the bounding box. --title TEXT Tile Matrix Set title. --help Show this message and exit. ``` ## tms The tms command returns the TileMatrixSet document ``` $ morecantile tms --help Usage: morecantile tms [OPTIONS] Print TMS JSON. Options: --identifier TileMatrixSet identifier. One of : - CDB1GlobalGrid - CanadianNAD83_LCC - EuropeanETRS89_LAEAQuad - GNOSISGlobalGrid - LINZAntarticaMapTilegrid - NZTM2000Quad - UPSAntarcticWGS84Quad - UPSArcticWGS84Quad - UTM31WGS84Quad - WebMercatorQuad - WGS1984Quad - WorldCRS84Quad - WorldMercatorWGS84Quad --help Show this message and exit. ``` ## tms-to-geojson Create a GeoJSON from a TMS document ``` $ morecantile tms-to-geojson --help Usage: morecantile tms-to-geojson [OPTIONS] [INPUT] Print TMS document as GeoJSON. Options: --level INTEGER Zoom/Matrix level. [required] --precision INTEGER Decimal precision of coordinates. --indent INTEGER Indentation level for JSON output --compact / --no-compact Use compact separators (',', ':'). --projected / --geographic Output coordinate system --seq Write a RS-delimited JSON sequence (default is LF). --feature Output as sequence of GeoJSON features (the default). --bbox Output as sequence of GeoJSON bbox arrays. --collect Output as a GeoJSON feature collections. --extents / --no-extents Write shape extents as ws-separated strings (default is False). --buffer FLOAT Shift shape x and y values by a constant number --help Show this message and exit. ``` ## Examples ``` $ rio bounds eu.tif | morecantile tiles --zoom 1 # like mercantiles $ morecantile custom --epsg 3413 --extent -4194300 -4194300 4194300 4194300 --minzoom 0 --maxzoom 8 --tile-width 512 --tile-height 512 | morecantile tms-to-geojson --level 3 --projected --collect > l3.geojson $ rio bounds eu.tif | morecantile tiles 4 --identifier EuropeanETRS89_LAEAQuad | morecantile shapes --identifier EuropeanETRS89_LAEAQuad --collect > z4.geojson ``` morecantile-7.1.0/docs/src/contributing.md000077700000000000000000000000001525253500000234402../../CONTRIBUTING.mdustar00rootroot00000000000000morecantile-7.1.0/docs/src/index.md000077700000000000000000000000001525253500000210662../../README.mdustar00rootroot00000000000000morecantile-7.1.0/docs/src/release-notes.md000077700000000000000000000000001525253500000226402../../CHANGES.mdustar00rootroot00000000000000morecantile-7.1.0/docs/src/tms-v2.md000066400000000000000000000043601525253500000172120ustar00rootroot00000000000000# TMS v2.0 and Morecantile v4 In September 2022, the Open Geospatial Consortium released an updated specification for [Tile Matrix Sets - version 2.0](https://docs.ogc.org/is/17-083r4/17-083r4.html). This updated spec includes some breaking changes that alter the TMS JSON document. Some of these changes include: - [Addition of a `uri` parameter for TileMatrixSets registered on the official OGC NA TileMatrixSets registry](https://docs.ogc.org/is/17-083r4/21-066r1.html#_identifying_with_uri_a_well_known_tilematrixset_in_an_authoritative_registry) - [`identifier` renamed to `id`](https://docs.ogc.org/is/17-083r4/21-066r1.html#_json_encoding_rules_to_derive_a_more_natural_json_encoding_from_uml) in both TileMatrix and TileMatrixSet - [Only `crs` and `tileMatrices` are required in `TileMatrixSet`](https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/schemas/tms/2.0/json/tileMatrixSet.json#L6) - [`supportedCRS` renamed to `crs`](https://docs.ogc.org/is/17-083r4/21-066r1.html#_renaming_supportedcrs_to_crs) - [`tileMatrix` renamed to `tileMatrices`](https://docs.ogc.org/is/17-083r4/21-066r1.html#_json_encoding_rules_to_derive_a_more_natural_json_encoding_from_uml) - [`topLeftCorner` renamed to `pointOfOrigin`](https://docs.ogc.org/is/17-083r4/21-066r1.html#_replacing_topleftcorner_by_pointoforigin) - [Add `cellSize` and `cornerOfOrigin` (Optional) parameters to TileMatrix](https://docs.ogc.org/is/17-083r4/21-066r1.html#_adding_cellsize_and_corneroforigin) - [Remove `type` object properties](https://docs.ogc.org/is/17-083r4/21-066r1.html#_removing_type_object_properties) - [Added optional axis ordering](https://docs.ogc.org/is/17-083r4/21-066r1.html#_adding_optional_orderedaxes_to_highlight_crs_axis_ordering ) Morecantile version 4 has been updated to support the updated TMS 2.0 specification. When using the predefined Tile Matrix Sets or making a custom TMS this should work as normal with some renamed properties (specified above). If you want to create a new Tile Matrix Set from a JSON made to the old TMS v1 specification, there is a new class method called `from_v1` that does this. ```python from morecantile.models import TileMatrixSet import json with open("tms_v1.json") as f: data = json.load(f) TileMatrixSet.from_v1(data) ``` morecantile-7.1.0/docs/src/usage.md000066400000000000000000000147411525253500000171720ustar00rootroot00000000000000 ### Load one TMS grid ```python import morecantile tms = morecantile.tms.get("WebMercatorQuad") tms >>> >> { "type": "TileMatrixType", "id": "0", "scaleDenominator": 38916524.55357144, "pointOfOrigin": [ -948.75, -3333128.95 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 } ``` ## Use morecantile TMS store morecantile provides a `TileMatrixSets` class to *store* Tile Matrix Set definition. This object can easily be extended to include your own custom TMS. ### List supported grids ```python import morecantile print(morecantile.tms.list()) >>> [ 'LINZAntarticaMapTilegrid', 'EuropeanETRS89_LAEAQuad', 'CanadianNAD83_LCC', 'UPSArcticWGS84Quad', 'NZTM2000Quad', 'UTM31WGS84Quad', 'UPSAntarcticWGS84Quad', 'WorldMercatorWGS84Quad', 'WorldCRS84Quad', 'WGS1984Quad', 'WebMercatorQuad' ] ``` ### Register a custom TMS ```python default_tms = morecantile.tms.register({"MyCustomTmsEPSG3031": customEPGS3031}) assert "MyCustomTmsEPSG3031" in default_tms.list() tms = default_tms.get("MyCustomTmsEPSG3031") tms >>> Define how data should be in pure, canonical python; validate it with pydantic. Pydantic model enforce the TileMatrixSet OGC specification for the whole project by validating each items. Because we use pydantic model to handle the TileMatrixSets you can uses pydantic's [methods](https://docs.pydantic.dev/2.0/usage/models/#model-methods-and-properties) directly. ```python import morecantile my_tms_doc = "~/a_tms_doc.json" tms = morecantile.TileMatrixSet.parse_file(my_tms_doc) # print the TMS as json print(tms.model_dump_json(exclude_none=True)) # print the TMS as dict print(tms.model_dump(exclude_none=True)) ``` morecantile-7.1.0/morecantile/000077500000000000000000000000001525253500000163205ustar00rootroot00000000000000morecantile-7.1.0/morecantile/__init__.py000066400000000000000000000010161525253500000204270ustar00rootroot00000000000000""" morecantile is an adaptation of mapbox/mercantile to work with custom projection. Refs: - mapproxy: https://github.com/mapproxy/mapproxy - mercantile: https://github.com/mapbox/mercantile - tiletanic: https://github.com/DigitalGlobe/tiletanic """ __version__ = "7.1.0" from .commons import BoundingBox, Coords, Tile from .defaults import TileMatrixSets, tms from .models import TileMatrixSet __all__ = [ "BoundingBox", "Coords", "Tile", "TileMatrixSet", "TileMatrixSets", "tms", ] morecantile-7.1.0/morecantile/commons.py000066400000000000000000000020071525253500000203440ustar00rootroot00000000000000"""Morecantile commons.""" from typing import NamedTuple class BoundingBox(NamedTuple): """A xmin,ymin,xmax,ymax coordinates tuple. Args: left (number): min horizontal coordinate. bottom (number):min vertical coordinate. right (number): max horizontal coordinate. top (number): max vertical coordinate. Examples: >>> BoundingBox(-180.0, -90.0, 180.0, 90.0) """ left: float bottom: float right: float top: float class Coords(NamedTuple): """A x,y Coordinates pair. Args: x (number): horizontal coordinate input projection unit. y (number): vertical coordinate input projection unit. Examples: >>> Coords(-90.3, 10.5) """ x: float y: float class Tile(NamedTuple): """TileMatrixSet X,Y,Z tile indices. Args: x (int): horizontal index. y (int): verctical index. z (int): zoom level. Examples: >>> Tile(0, 0, 0) """ x: int y: int z: int morecantile-7.1.0/morecantile/data/000077500000000000000000000000001525253500000172315ustar00rootroot00000000000000morecantile-7.1.0/morecantile/data/CDB1GlobalGrid.json000066400000000000000000001064231525253500000225320ustar00rootroot00000000000000{ "id" : "CDB1GlobalGrid", "title" : "CDB 1 Global Grid", "uri" : "http://www.opengis.net/def/tilematrixset/OGC/1.0/CDB1GlobalGrid", "crs" : "http://www.opengis.net/def/crs/EPSG/0/4326", "orderedAxes" : ["Lat","Lon"], "tileMatrices" : [ { "id" : "-10", "scaleDenominator" : 397569609.9759771227837, "cellSize" : 1, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 1, "tileHeight" : 1, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-9", "scaleDenominator" : 198784804.9879885613918, "cellSize" : 0.5, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 2, "tileHeight" : 2, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-8", "scaleDenominator" : 99392402.4939942806959, "cellSize" : 0.25, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 4, "tileHeight" : 4, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-7", "scaleDenominator" : 49696201.246997140348, "cellSize" : 0.125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 8, "tileHeight" : 8, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-6", "scaleDenominator" : 24848100.623498570174, "cellSize" : 0.0625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 16, "tileHeight" : 16, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-5", "scaleDenominator" : 12424050.311749285087, "cellSize" : 0.03125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 32, "tileHeight" : 32, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-4", "scaleDenominator" : 6212025.1558746425435, "cellSize" : 0.015625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 64, "tileHeight" : 64, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-3", "scaleDenominator" : 3106012.5779373212717, "cellSize" : 0.0078125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 128, "tileHeight" : 128, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-2", "scaleDenominator" : 1553006.2889686606359, "cellSize" : 0.00390625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "-1", "scaleDenominator" : 776503.1444843303179, "cellSize" : 0.001953125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 512, "tileHeight" : 512, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "0", "scaleDenominator" : 388251.572242165159, "cellSize" : 0.0009765625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 360, "matrixHeight" : 180, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 6, "minTileRow" : 1, "maxTileRow" : 9 }, { "coalesce" : 4, "minTileRow" : 10, "maxTileRow" : 14 }, { "coalesce" : 3, "minTileRow" : 15, "maxTileRow" : 19 }, { "coalesce" : 2, "minTileRow" : 20, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 140, "maxTileRow" : 159 }, { "coalesce" : 3, "minTileRow" : 160, "maxTileRow" : 164 }, { "coalesce" : 4, "minTileRow" : 165, "maxTileRow" : 169 }, { "coalesce" : 6, "minTileRow" : 170, "maxTileRow" : 178 }, { "coalesce" : 12, "minTileRow" : 179, "maxTileRow" : 179 } ] }, { "id" : "1", "scaleDenominator" : 194125.7861210825795, "cellSize" : 0.00048828125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 720, "matrixHeight" : 360, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 1 }, { "coalesce" : 6, "minTileRow" : 2, "maxTileRow" : 19 }, { "coalesce" : 4, "minTileRow" : 20, "maxTileRow" : 29 }, { "coalesce" : 3, "minTileRow" : 30, "maxTileRow" : 39 }, { "coalesce" : 2, "minTileRow" : 40, "maxTileRow" : 79 }, { "coalesce" : 2, "minTileRow" : 280, "maxTileRow" : 319 }, { "coalesce" : 3, "minTileRow" : 320, "maxTileRow" : 329 }, { "coalesce" : 4, "minTileRow" : 330, "maxTileRow" : 339 }, { "coalesce" : 6, "minTileRow" : 340, "maxTileRow" : 357 }, { "coalesce" : 12, "minTileRow" : 358, "maxTileRow" : 359 } ] }, { "id" : "2", "scaleDenominator" : 97062.8930605412897, "cellSize" : 0.000244140625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 1440, "matrixHeight" : 720, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 3 }, { "coalesce" : 6, "minTileRow" : 4, "maxTileRow" : 39 }, { "coalesce" : 4, "minTileRow" : 40, "maxTileRow" : 59 }, { "coalesce" : 3, "minTileRow" : 60, "maxTileRow" : 79 }, { "coalesce" : 2, "minTileRow" : 80, "maxTileRow" : 159 }, { "coalesce" : 2, "minTileRow" : 560, "maxTileRow" : 639 }, { "coalesce" : 3, "minTileRow" : 640, "maxTileRow" : 659 }, { "coalesce" : 4, "minTileRow" : 660, "maxTileRow" : 679 }, { "coalesce" : 6, "minTileRow" : 680, "maxTileRow" : 715 }, { "coalesce" : 12, "minTileRow" : 716, "maxTileRow" : 719 } ] }, { "id" : "3", "scaleDenominator" : 48531.4465302706449, "cellSize" : 0.0001220703125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 2880, "matrixHeight" : 1440, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 7 }, { "coalesce" : 6, "minTileRow" : 8, "maxTileRow" : 79 }, { "coalesce" : 4, "minTileRow" : 80, "maxTileRow" : 119 }, { "coalesce" : 3, "minTileRow" : 120, "maxTileRow" : 159 }, { "coalesce" : 2, "minTileRow" : 160, "maxTileRow" : 319 }, { "coalesce" : 2, "minTileRow" : 1120, "maxTileRow" : 1279 }, { "coalesce" : 3, "minTileRow" : 1280, "maxTileRow" : 1319 }, { "coalesce" : 4, "minTileRow" : 1320, "maxTileRow" : 1359 }, { "coalesce" : 6, "minTileRow" : 1360, "maxTileRow" : 1431 }, { "coalesce" : 12, "minTileRow" : 1432, "maxTileRow" : 1439 } ] }, { "id" : "4", "scaleDenominator" : 24265.7232651353224, "cellSize" : 0.0000610351562, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 5760, "matrixHeight" : 2880, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 15 }, { "coalesce" : 6, "minTileRow" : 16, "maxTileRow" : 159 }, { "coalesce" : 4, "minTileRow" : 160, "maxTileRow" : 239 }, { "coalesce" : 3, "minTileRow" : 240, "maxTileRow" : 319 }, { "coalesce" : 2, "minTileRow" : 320, "maxTileRow" : 639 }, { "coalesce" : 2, "minTileRow" : 2240, "maxTileRow" : 2559 }, { "coalesce" : 3, "minTileRow" : 2560, "maxTileRow" : 2639 }, { "coalesce" : 4, "minTileRow" : 2640, "maxTileRow" : 2719 }, { "coalesce" : 6, "minTileRow" : 2720, "maxTileRow" : 2863 }, { "coalesce" : 12, "minTileRow" : 2864, "maxTileRow" : 2879 } ] }, { "id" : "5", "scaleDenominator" : 12132.8616325676612, "cellSize" : 0.0000305175781, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 11520, "matrixHeight" : 5760, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 31 }, { "coalesce" : 6, "minTileRow" : 32, "maxTileRow" : 319 }, { "coalesce" : 4, "minTileRow" : 320, "maxTileRow" : 479 }, { "coalesce" : 3, "minTileRow" : 480, "maxTileRow" : 639 }, { "coalesce" : 2, "minTileRow" : 640, "maxTileRow" : 1279 }, { "coalesce" : 2, "minTileRow" : 4480, "maxTileRow" : 5119 }, { "coalesce" : 3, "minTileRow" : 5120, "maxTileRow" : 5279 }, { "coalesce" : 4, "minTileRow" : 5280, "maxTileRow" : 5439 }, { "coalesce" : 6, "minTileRow" : 5440, "maxTileRow" : 5727 }, { "coalesce" : 12, "minTileRow" : 5728, "maxTileRow" : 5759 } ] }, { "id" : "6", "scaleDenominator" : 6066.4308162838306, "cellSize" : 0.0000152587891, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 23040, "matrixHeight" : 11520, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 63 }, { "coalesce" : 6, "minTileRow" : 64, "maxTileRow" : 639 }, { "coalesce" : 4, "minTileRow" : 640, "maxTileRow" : 959 }, { "coalesce" : 3, "minTileRow" : 960, "maxTileRow" : 1279 }, { "coalesce" : 2, "minTileRow" : 1280, "maxTileRow" : 2559 }, { "coalesce" : 2, "minTileRow" : 8960, "maxTileRow" : 10239 }, { "coalesce" : 3, "minTileRow" : 10240, "maxTileRow" : 10559 }, { "coalesce" : 4, "minTileRow" : 10560, "maxTileRow" : 10879 }, { "coalesce" : 6, "minTileRow" : 10880, "maxTileRow" : 11455 }, { "coalesce" : 12, "minTileRow" : 11456, "maxTileRow" : 11519 } ] }, { "id" : "7", "scaleDenominator" : 3033.2154081419153, "cellSize" : 0.0000076293945, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 46080, "matrixHeight" : 23040, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 127 }, { "coalesce" : 6, "minTileRow" : 128, "maxTileRow" : 1279 }, { "coalesce" : 4, "minTileRow" : 1280, "maxTileRow" : 1919 }, { "coalesce" : 3, "minTileRow" : 1920, "maxTileRow" : 2559 }, { "coalesce" : 2, "minTileRow" : 2560, "maxTileRow" : 5119 }, { "coalesce" : 2, "minTileRow" : 17920, "maxTileRow" : 20479 }, { "coalesce" : 3, "minTileRow" : 20480, "maxTileRow" : 21119 }, { "coalesce" : 4, "minTileRow" : 21120, "maxTileRow" : 21759 }, { "coalesce" : 6, "minTileRow" : 21760, "maxTileRow" : 22911 }, { "coalesce" : 12, "minTileRow" : 22912, "maxTileRow" : 23039 } ] }, { "id" : "8", "scaleDenominator" : 1516.6077040709577, "cellSize" : 0.0000038146973, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 92160, "matrixHeight" : 46080, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 255 }, { "coalesce" : 6, "minTileRow" : 256, "maxTileRow" : 2559 }, { "coalesce" : 4, "minTileRow" : 2560, "maxTileRow" : 3839 }, { "coalesce" : 3, "minTileRow" : 3840, "maxTileRow" : 5119 }, { "coalesce" : 2, "minTileRow" : 5120, "maxTileRow" : 10239 }, { "coalesce" : 2, "minTileRow" : 35840, "maxTileRow" : 40959 }, { "coalesce" : 3, "minTileRow" : 40960, "maxTileRow" : 42239 }, { "coalesce" : 4, "minTileRow" : 42240, "maxTileRow" : 43519 }, { "coalesce" : 6, "minTileRow" : 43520, "maxTileRow" : 45823 }, { "coalesce" : 12, "minTileRow" : 45824, "maxTileRow" : 46079 } ] }, { "id" : "9", "scaleDenominator" : 758.3038520354788, "cellSize" : 0.0000019073486, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 184320, "matrixHeight" : 92160, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 511 }, { "coalesce" : 6, "minTileRow" : 512, "maxTileRow" : 5119 }, { "coalesce" : 4, "minTileRow" : 5120, "maxTileRow" : 7679 }, { "coalesce" : 3, "minTileRow" : 7680, "maxTileRow" : 10239 }, { "coalesce" : 2, "minTileRow" : 10240, "maxTileRow" : 20479 }, { "coalesce" : 2, "minTileRow" : 71680, "maxTileRow" : 81919 }, { "coalesce" : 3, "minTileRow" : 81920, "maxTileRow" : 84479 }, { "coalesce" : 4, "minTileRow" : 84480, "maxTileRow" : 87039 }, { "coalesce" : 6, "minTileRow" : 87040, "maxTileRow" : 91647 }, { "coalesce" : 12, "minTileRow" : 91648, "maxTileRow" : 92159 } ] }, { "id" : "10", "scaleDenominator" : 379.1519260177394, "cellSize" : 0.0000009536743, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 368640, "matrixHeight" : 184320, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 1023 }, { "coalesce" : 6, "minTileRow" : 1024, "maxTileRow" : 10239 }, { "coalesce" : 4, "minTileRow" : 10240, "maxTileRow" : 15359 }, { "coalesce" : 3, "minTileRow" : 15360, "maxTileRow" : 20479 }, { "coalesce" : 2, "minTileRow" : 20480, "maxTileRow" : 40959 }, { "coalesce" : 2, "minTileRow" : 143360, "maxTileRow" : 163839 }, { "coalesce" : 3, "minTileRow" : 163840, "maxTileRow" : 168959 }, { "coalesce" : 4, "minTileRow" : 168960, "maxTileRow" : 174079 }, { "coalesce" : 6, "minTileRow" : 174080, "maxTileRow" : 183295 }, { "coalesce" : 12, "minTileRow" : 183296, "maxTileRow" : 184319 } ] }, { "id" : "11", "scaleDenominator" : 189.5759630088697, "cellSize" : 0.0000004768372, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 737280, "matrixHeight" : 368640, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 2047 }, { "coalesce" : 6, "minTileRow" : 2048, "maxTileRow" : 20479 }, { "coalesce" : 4, "minTileRow" : 20480, "maxTileRow" : 30719 }, { "coalesce" : 3, "minTileRow" : 30720, "maxTileRow" : 40959 }, { "coalesce" : 2, "minTileRow" : 40960, "maxTileRow" : 81919 }, { "coalesce" : 2, "minTileRow" : 286720, "maxTileRow" : 327679 }, { "coalesce" : 3, "minTileRow" : 327680, "maxTileRow" : 337919 }, { "coalesce" : 4, "minTileRow" : 337920, "maxTileRow" : 348159 }, { "coalesce" : 6, "minTileRow" : 348160, "maxTileRow" : 366591 }, { "coalesce" : 12, "minTileRow" : 366592, "maxTileRow" : 368639 } ] }, { "id" : "12", "scaleDenominator" : 94.7879815044349, "cellSize" : 0.0000002384186, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 1474560, "matrixHeight" : 737280, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 4095 }, { "coalesce" : 6, "minTileRow" : 4096, "maxTileRow" : 40959 }, { "coalesce" : 4, "minTileRow" : 40960, "maxTileRow" : 61439 }, { "coalesce" : 3, "minTileRow" : 61440, "maxTileRow" : 81919 }, { "coalesce" : 2, "minTileRow" : 81920, "maxTileRow" : 163839 }, { "coalesce" : 2, "minTileRow" : 573440, "maxTileRow" : 655359 }, { "coalesce" : 3, "minTileRow" : 655360, "maxTileRow" : 675839 }, { "coalesce" : 4, "minTileRow" : 675840, "maxTileRow" : 696319 }, { "coalesce" : 6, "minTileRow" : 696320, "maxTileRow" : 733183 }, { "coalesce" : 12, "minTileRow" : 733184, "maxTileRow" : 737279 } ] }, { "id" : "13", "scaleDenominator" : 47.3939907522174, "cellSize" : 0.0000001192093, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 2949120, "matrixHeight" : 1474560, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 8191 }, { "coalesce" : 6, "minTileRow" : 8192, "maxTileRow" : 81919 }, { "coalesce" : 4, "minTileRow" : 81920, "maxTileRow" : 122879 }, { "coalesce" : 3, "minTileRow" : 122880, "maxTileRow" : 163839 }, { "coalesce" : 2, "minTileRow" : 163840, "maxTileRow" : 327679 }, { "coalesce" : 2, "minTileRow" : 1146880, "maxTileRow" : 1310719 }, { "coalesce" : 3, "minTileRow" : 1310720, "maxTileRow" : 1351679 }, { "coalesce" : 4, "minTileRow" : 1351680, "maxTileRow" : 1392639 }, { "coalesce" : 6, "minTileRow" : 1392640, "maxTileRow" : 1466367 }, { "coalesce" : 12, "minTileRow" : 1466368, "maxTileRow" : 1474559 } ] }, { "id" : "14", "scaleDenominator" : 23.6969953761087, "cellSize" : 0.0000000596046, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 5898240, "matrixHeight" : 2949120, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 16383 }, { "coalesce" : 6, "minTileRow" : 16384, "maxTileRow" : 163839 }, { "coalesce" : 4, "minTileRow" : 163840, "maxTileRow" : 245759 }, { "coalesce" : 3, "minTileRow" : 245760, "maxTileRow" : 327679 }, { "coalesce" : 2, "minTileRow" : 327680, "maxTileRow" : 655359 }, { "coalesce" : 2, "minTileRow" : 2293760, "maxTileRow" : 2621439 }, { "coalesce" : 3, "minTileRow" : 2621440, "maxTileRow" : 2703359 }, { "coalesce" : 4, "minTileRow" : 2703360, "maxTileRow" : 2785279 }, { "coalesce" : 6, "minTileRow" : 2785280, "maxTileRow" : 2932735 }, { "coalesce" : 12, "minTileRow" : 2932736, "maxTileRow" : 2949119 } ] }, { "id" : "15", "scaleDenominator" : 11.8484976880544, "cellSize" : 0.0000000298023, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 11796480, "matrixHeight" : 5898240, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 32767 }, { "coalesce" : 6, "minTileRow" : 32768, "maxTileRow" : 327679 }, { "coalesce" : 4, "minTileRow" : 327680, "maxTileRow" : 491519 }, { "coalesce" : 3, "minTileRow" : 491520, "maxTileRow" : 655359 }, { "coalesce" : 2, "minTileRow" : 655360, "maxTileRow" : 1310719 }, { "coalesce" : 2, "minTileRow" : 4587520, "maxTileRow" : 5242879 }, { "coalesce" : 3, "minTileRow" : 5242880, "maxTileRow" : 5406719 }, { "coalesce" : 4, "minTileRow" : 5406720, "maxTileRow" : 5570559 }, { "coalesce" : 6, "minTileRow" : 5570560, "maxTileRow" : 5865471 }, { "coalesce" : 12, "minTileRow" : 5865472, "maxTileRow" : 5898239 } ] }, { "id" : "16", "scaleDenominator" : 5.9242488440272, "cellSize" : 0.0000000149012, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 23592960, "matrixHeight" : 11796480, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 65535 }, { "coalesce" : 6, "minTileRow" : 65536, "maxTileRow" : 655359 }, { "coalesce" : 4, "minTileRow" : 655360, "maxTileRow" : 983039 }, { "coalesce" : 3, "minTileRow" : 983040, "maxTileRow" : 1310719 }, { "coalesce" : 2, "minTileRow" : 1310720, "maxTileRow" : 2621439 }, { "coalesce" : 2, "minTileRow" : 9175040, "maxTileRow" : 10485759 }, { "coalesce" : 3, "minTileRow" : 10485760, "maxTileRow" : 10813439 }, { "coalesce" : 4, "minTileRow" : 10813440, "maxTileRow" : 11141119 }, { "coalesce" : 6, "minTileRow" : 11141120, "maxTileRow" : 11730943 }, { "coalesce" : 12, "minTileRow" : 11730944, "maxTileRow" : 11796479 } ] }, { "id" : "17", "scaleDenominator" : 2.9621244220136, "cellSize" : 0.0000000074506, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 47185920, "matrixHeight" : 23592960, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 131071 }, { "coalesce" : 6, "minTileRow" : 131072, "maxTileRow" : 1310719 }, { "coalesce" : 4, "minTileRow" : 1310720, "maxTileRow" : 1966079 }, { "coalesce" : 3, "minTileRow" : 1966080, "maxTileRow" : 2621439 }, { "coalesce" : 2, "minTileRow" : 2621440, "maxTileRow" : 5242879 }, { "coalesce" : 2, "minTileRow" : 18350080, "maxTileRow" : 20971519 }, { "coalesce" : 3, "minTileRow" : 20971520, "maxTileRow" : 21626879 }, { "coalesce" : 4, "minTileRow" : 21626880, "maxTileRow" : 22282239 }, { "coalesce" : 6, "minTileRow" : 22282240, "maxTileRow" : 23461887 }, { "coalesce" : 12, "minTileRow" : 23461888, "maxTileRow" : 23592959 } ] }, { "id" : "18", "scaleDenominator" : 1.4810622110068, "cellSize" : 0.0000000037253, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 94371840, "matrixHeight" : 47185920, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 262143 }, { "coalesce" : 6, "minTileRow" : 262144, "maxTileRow" : 2621439 }, { "coalesce" : 4, "minTileRow" : 2621440, "maxTileRow" : 3932159 }, { "coalesce" : 3, "minTileRow" : 3932160, "maxTileRow" : 5242879 }, { "coalesce" : 2, "minTileRow" : 5242880, "maxTileRow" : 10485759 }, { "coalesce" : 2, "minTileRow" : 36700160, "maxTileRow" : 41943039 }, { "coalesce" : 3, "minTileRow" : 41943040, "maxTileRow" : 43253759 }, { "coalesce" : 4, "minTileRow" : 43253760, "maxTileRow" : 44564479 }, { "coalesce" : 6, "minTileRow" : 44564480, "maxTileRow" : 46923775 }, { "coalesce" : 12, "minTileRow" : 46923776, "maxTileRow" : 47185919 } ] }, { "id" : "19", "scaleDenominator" : 0.7405311055034, "cellSize" : 0.0000000018626, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 188743680, "matrixHeight" : 94371840, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 524287 }, { "coalesce" : 6, "minTileRow" : 524288, "maxTileRow" : 5242879 }, { "coalesce" : 4, "minTileRow" : 5242880, "maxTileRow" : 7864319 }, { "coalesce" : 3, "minTileRow" : 7864320, "maxTileRow" : 10485759 }, { "coalesce" : 2, "minTileRow" : 10485760, "maxTileRow" : 20971519 }, { "coalesce" : 2, "minTileRow" : 73400320, "maxTileRow" : 83886079 }, { "coalesce" : 3, "minTileRow" : 83886080, "maxTileRow" : 86507519 }, { "coalesce" : 4, "minTileRow" : 86507520, "maxTileRow" : 89128959 }, { "coalesce" : 6, "minTileRow" : 89128960, "maxTileRow" : 93847551 }, { "coalesce" : 12, "minTileRow" : 93847552, "maxTileRow" : 94371839 } ] }, { "id" : "20", "scaleDenominator" : 0.3702655527517, "cellSize" : 0.0000000009313, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 377487360, "matrixHeight" : 188743680, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 1048575 }, { "coalesce" : 6, "minTileRow" : 1048576, "maxTileRow" : 10485759 }, { "coalesce" : 4, "minTileRow" : 10485760, "maxTileRow" : 15728639 }, { "coalesce" : 3, "minTileRow" : 15728640, "maxTileRow" : 20971519 }, { "coalesce" : 2, "minTileRow" : 20971520, "maxTileRow" : 41943039 }, { "coalesce" : 2, "minTileRow" : 146800640, "maxTileRow" : 167772159 }, { "coalesce" : 3, "minTileRow" : 167772160, "maxTileRow" : 173015039 }, { "coalesce" : 4, "minTileRow" : 173015040, "maxTileRow" : 178257919 }, { "coalesce" : 6, "minTileRow" : 178257920, "maxTileRow" : 187695103 }, { "coalesce" : 12, "minTileRow" : 187695104, "maxTileRow" : 188743679 } ] }, { "id" : "21", "scaleDenominator" : 0.1851327763758, "cellSize" : 0.0000000004657, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 754974720, "matrixHeight" : 377487360, "tileWidth" : 1024, "tileHeight" : 1024, "variableMatrixWidths" : [ { "coalesce" : 12, "minTileRow" : 0, "maxTileRow" : 2097151 }, { "coalesce" : 6, "minTileRow" : 2097152, "maxTileRow" : 20971519 }, { "coalesce" : 4, "minTileRow" : 20971520, "maxTileRow" : 31457279 }, { "coalesce" : 3, "minTileRow" : 31457280, "maxTileRow" : 41943039 }, { "coalesce" : 2, "minTileRow" : 41943040, "maxTileRow" : 83886079 }, { "coalesce" : 2, "minTileRow" : 293601280, "maxTileRow" : 335544319 }, { "coalesce" : 3, "minTileRow" : 335544320, "maxTileRow" : 346030079 }, { "coalesce" : 4, "minTileRow" : 346030080, "maxTileRow" : 356515839 }, { "coalesce" : 6, "minTileRow" : 356515840, "maxTileRow" : 375390207 }, { "coalesce" : 12, "minTileRow" : 375390208, "maxTileRow" : 377487359 } ] } ] } morecantile-7.1.0/morecantile/data/CanadianNAD83_LCC.json000066400000000000000000000161431525253500000230060ustar00rootroot00000000000000{ "id": "CanadianNAD83_LCC", "title": "Lambert conformal conic NAD83 for Canada", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/CanadianNAD83_LCC", "crs": "http://www.opengis.net/def/crs/EPSG/0/3978", "orderedAxes": ["E", "N"], "tileMatrices": [ { "id": "0", "scaleDenominator": 145000000, "cellSize": 38364.6600626534, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 5, "matrixHeight": 5 }, { "id": "1", "scaleDenominator": 85000000, "cellSize": 22489.6283125899, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "2", "scaleDenominator": 50000000, "cellSize": 13229.1931250529, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 13, "matrixHeight": 14 }, { "id": "3", "scaleDenominator": 30000000, "cellSize": 7937.51587503175, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 21, "matrixHeight": 22 }, { "id": "4", "scaleDenominator": 17500000, "cellSize": 4630.21759376852, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 36, "matrixHeight": 38 }, { "id": "5", "scaleDenominator": 10000000, "cellSize": 2645.83862501058, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 62, "matrixHeight": 66 }, { "id": "6", "scaleDenominator": 6000000, "cellSize": 1587.50317500635, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 103, "matrixHeight": 110 }, { "id": "7", "scaleDenominator": 3500000, "cellSize": 926.043518753704, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 177, "matrixHeight": 188 }, { "id": "8", "scaleDenominator": 2000000, "cellSize": 529.167725002116, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 309, "matrixHeight": 329 }, { "id": "9", "scaleDenominator": 1200000, "cellSize": 317.50063500127, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 515, "matrixHeight": 548 }, { "id": "10", "scaleDenominator": 700000, "cellSize": 185.20870375074, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 882, "matrixHeight": 938 }, { "id": "11", "scaleDenominator": 420000, "cellSize": 111.125222250444, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1470, "matrixHeight": 1563 }, { "id": "12", "scaleDenominator": 250000, "cellSize": 66.1459656252646, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2469, "matrixHeight": 2626 }, { "id": "13", "scaleDenominator": 145000, "cellSize": 38.3646600626534, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4257, "matrixHeight": 4528 }, { "id": "14", "scaleDenominator": 85000, "cellSize": 22.4896283125899, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 7262, "matrixHeight": 7723 }, { "id": "15", "scaleDenominator": 50000, "cellSize": 13.2291931250529, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 12344, "matrixHeight": 13130 }, { "id": "16", "scaleDenominator": 30000, "cellSize": 7.93751587503175, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 20574, "matrixHeight": 21882 }, { "id": "17", "scaleDenominator": 17500, "cellSize": 4.63021759376852, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 35269, "matrixHeight": 37512 }, { "id": "18", "scaleDenominator": 10000, "cellSize": 2.64583862501058, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 61720, "matrixHeight": 65646 }, { "id": "19", "scaleDenominator": 6000, "cellSize": 1.58750317500635, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 102866, "matrixHeight": 109409 }, { "id": "20", "scaleDenominator": 3500, "cellSize": 0.926043518753704, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 176341, "matrixHeight": 187558 }, { "id": "21", "scaleDenominator": 2000, "cellSize": 0.529167725002116, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 308596, "matrixHeight": 328227 }, { "id": "22", "scaleDenominator": 1200, "cellSize": 0.31750063500127, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 514327, "matrixHeight": 547044 }, { "id": "23", "scaleDenominator": 700, "cellSize": 0.18520870375074, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 881703, "matrixHeight": 937790 }, { "id": "24", "scaleDenominator": 420, "cellSize": 0.111125222250444, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1469505, "matrixHeight": 1562983 }, { "id": "25", "scaleDenominator": 250, "cellSize": 0.0661459656252645, "pointOfOrigin": [-34655800,39310000], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2468768, "matrixHeight": 2625811 } ] }morecantile-7.1.0/morecantile/data/EuropeanETRS89_LAEAQuad.json000066400000000000000000000111071525253500000241560ustar00rootroot00000000000000{ "id": "EuropeanETRS89_LAEAQuad", "title": "Lambert Azimuthal Equal Area ETRS89 for Europe", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/EuropeanETRS89_LAEAQuad", "crs": "http://www.opengis.net/def/crs/EPSG/0/3035", "orderedAxes": [ "Y", "X" ], "tileMatrices": [ { "id": "0", "scaleDenominator": 62779017.8571428, "cellSize": 17578.125, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 31389508.9285714, "cellSize": 8789.0625, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 15694754.4642857, "cellSize": 4394.53125, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 7847377.23214285, "cellSize": 2197.265625, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 3923688.61607142, "cellSize": 1098.6328125, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 1961844.30803571, "cellSize": 549.31640625, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 980922.154017857, "cellSize": 274.658203125, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 490461.077008928, "cellSize": 137.3291015625, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 245230.538504464, "cellSize": 68.6645507812, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 122615.269252232, "cellSize": 34.3322753906, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 61307.634626116, "cellSize": 17.1661376953, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 30653.817313058, "cellSize": 8.5830688477, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 15326.908656529, "cellSize": 4.2915344238, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 7663.45432826451, "cellSize": 2.1457672119, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 3831.72716413225, "cellSize": 1.072883606, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 1915.86358206612, "cellSize": 0.536441803, "pointOfOrigin": [5500000.0, 2000000.0], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 } ] }morecantile-7.1.0/morecantile/data/GNOSISGlobalGrid.json000066400000000000000000002216751525253500000230720ustar00rootroot00000000000000{ "id" : "GNOSISGlobalGrid", "title" : "GNOSIS Global Grid", "uri" : "http://www.opengis.net/def/tilematrixset/OGC/1.0/GNOSISGlobalGrid", "crs" : "http://www.opengis.net/def/crs/EPSG/0/4326", "orderedAxes" : ["Lat","Lon"], "wellKnownScaleSet" : "http://www.opengis.net/def/wkss/OGC/1.0/GoogleCRS84Quad", "tileMatrices" : [ { "id" : "0", "scaleDenominator" : 139770566.0071794390678, "cellSize" : 0.3515625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 4, "matrixHeight" : 2, "tileWidth" : 256, "tileHeight" : 256 }, { "id" : "1", "scaleDenominator" : 69885283.0035897195339, "cellSize" : 0.17578125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 8, "matrixHeight" : 4, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 2, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 2, "minTileRow" : 3, "maxTileRow" : 3 } ] }, { "id" : "2", "scaleDenominator" : 34942641.501794859767, "cellSize" : 0.087890625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 16, "matrixHeight" : 8, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 4, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 2, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 2, "minTileRow" : 6, "maxTileRow" : 6 }, { "coalesce" : 4, "minTileRow" : 7, "maxTileRow" : 7 } ] }, { "id" : "3", "scaleDenominator" : 17471320.7508974298835, "cellSize" : 0.0439453125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 32, "matrixHeight" : 16, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 8, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 4, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 2, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 2, "minTileRow" : 12, "maxTileRow" : 13 }, { "coalesce" : 4, "minTileRow" : 14, "maxTileRow" : 14 }, { "coalesce" : 8, "minTileRow" : 15, "maxTileRow" : 15 } ] }, { "id" : "4", "scaleDenominator" : 8735660.3754487149417, "cellSize" : 0.02197265625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 64, "matrixHeight" : 32, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 16, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 8, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 4, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 2, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 2, "minTileRow" : 24, "maxTileRow" : 27 }, { "coalesce" : 4, "minTileRow" : 28, "maxTileRow" : 29 }, { "coalesce" : 8, "minTileRow" : 30, "maxTileRow" : 30 }, { "coalesce" : 16, "minTileRow" : 31, "maxTileRow" : 31 } ] }, { "id" : "5", "scaleDenominator" : 4367830.1877243574709, "cellSize" : 0.010986328125, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 128, "matrixHeight" : 64, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 32, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 16, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 8, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 4, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 2, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 2, "minTileRow" : 48, "maxTileRow" : 55 }, { "coalesce" : 4, "minTileRow" : 56, "maxTileRow" : 59 }, { "coalesce" : 8, "minTileRow" : 60, "maxTileRow" : 61 }, { "coalesce" : 16, "minTileRow" : 62, "maxTileRow" : 62 }, { "coalesce" : 32, "minTileRow" : 63, "maxTileRow" : 63 } ] }, { "id" : "6", "scaleDenominator" : 2183915.0938621787354, "cellSize" : 0.0054931640625, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 256, "matrixHeight" : 128, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 64, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 32, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 16, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 8, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 4, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 2, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 2, "minTileRow" : 96, "maxTileRow" : 111 }, { "coalesce" : 4, "minTileRow" : 112, "maxTileRow" : 119 }, { "coalesce" : 8, "minTileRow" : 120, "maxTileRow" : 123 }, { "coalesce" : 16, "minTileRow" : 124, "maxTileRow" : 125 }, { "coalesce" : 32, "minTileRow" : 126, "maxTileRow" : 126 }, { "coalesce" : 64, "minTileRow" : 127, "maxTileRow" : 127 } ] }, { "id" : "7", "scaleDenominator" : 1091957.5469310893677, "cellSize" : 0.0027465820312, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 512, "matrixHeight" : 256, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 128, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 64, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 32, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 16, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 8, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 4, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 2, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 2, "minTileRow" : 192, "maxTileRow" : 223 }, { "coalesce" : 4, "minTileRow" : 224, "maxTileRow" : 239 }, { "coalesce" : 8, "minTileRow" : 240, "maxTileRow" : 247 }, { "coalesce" : 16, "minTileRow" : 248, "maxTileRow" : 251 }, { "coalesce" : 32, "minTileRow" : 252, "maxTileRow" : 253 }, { "coalesce" : 64, "minTileRow" : 254, "maxTileRow" : 254 }, { "coalesce" : 128, "minTileRow" : 255, "maxTileRow" : 255 } ] }, { "id" : "8", "scaleDenominator" : 545978.7734655446839, "cellSize" : 0.0013732910156, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 1024, "matrixHeight" : 512, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 256, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 128, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 64, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 32, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 16, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 8, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 4, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 2, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 2, "minTileRow" : 384, "maxTileRow" : 447 }, { "coalesce" : 4, "minTileRow" : 448, "maxTileRow" : 479 }, { "coalesce" : 8, "minTileRow" : 480, "maxTileRow" : 495 }, { "coalesce" : 16, "minTileRow" : 496, "maxTileRow" : 503 }, { "coalesce" : 32, "minTileRow" : 504, "maxTileRow" : 507 }, { "coalesce" : 64, "minTileRow" : 508, "maxTileRow" : 509 }, { "coalesce" : 128, "minTileRow" : 510, "maxTileRow" : 510 }, { "coalesce" : 256, "minTileRow" : 511, "maxTileRow" : 511 } ] }, { "id" : "9", "scaleDenominator" : 272989.3867327723419, "cellSize" : 0.0006866455078, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 2048, "matrixHeight" : 1024, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 512, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 256, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 128, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 64, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 32, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 16, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 8, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 4, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 2, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 2, "minTileRow" : 768, "maxTileRow" : 895 }, { "coalesce" : 4, "minTileRow" : 896, "maxTileRow" : 959 }, { "coalesce" : 8, "minTileRow" : 960, "maxTileRow" : 991 }, { "coalesce" : 16, "minTileRow" : 992, "maxTileRow" : 1007 }, { "coalesce" : 32, "minTileRow" : 1008, "maxTileRow" : 1015 }, { "coalesce" : 64, "minTileRow" : 1016, "maxTileRow" : 1019 }, { "coalesce" : 128, "minTileRow" : 1020, "maxTileRow" : 1021 }, { "coalesce" : 256, "minTileRow" : 1022, "maxTileRow" : 1022 }, { "coalesce" : 512, "minTileRow" : 1023, "maxTileRow" : 1023 } ] }, { "id" : "10", "scaleDenominator" : 136494.693366386171, "cellSize" : 0.0003433227539, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 4096, "matrixHeight" : 2048, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 1024, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 512, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 256, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 128, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 64, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 32, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 16, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 8, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 4, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 2, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 2, "minTileRow" : 1536, "maxTileRow" : 1791 }, { "coalesce" : 4, "minTileRow" : 1792, "maxTileRow" : 1919 }, { "coalesce" : 8, "minTileRow" : 1920, "maxTileRow" : 1983 }, { "coalesce" : 16, "minTileRow" : 1984, "maxTileRow" : 2015 }, { "coalesce" : 32, "minTileRow" : 2016, "maxTileRow" : 2031 }, { "coalesce" : 64, "minTileRow" : 2032, "maxTileRow" : 2039 }, { "coalesce" : 128, "minTileRow" : 2040, "maxTileRow" : 2043 }, { "coalesce" : 256, "minTileRow" : 2044, "maxTileRow" : 2045 }, { "coalesce" : 512, "minTileRow" : 2046, "maxTileRow" : 2046 }, { "coalesce" : 1024, "minTileRow" : 2047, "maxTileRow" : 2047 } ] }, { "id" : "11", "scaleDenominator" : 68247.3466831930855, "cellSize" : 0.000171661377, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 8192, "matrixHeight" : 4096, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 2048, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 1024, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 512, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 256, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 128, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 64, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 32, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 16, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 8, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 4, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 2, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 2, "minTileRow" : 3072, "maxTileRow" : 3583 }, { "coalesce" : 4, "minTileRow" : 3584, "maxTileRow" : 3839 }, { "coalesce" : 8, "minTileRow" : 3840, "maxTileRow" : 3967 }, { "coalesce" : 16, "minTileRow" : 3968, "maxTileRow" : 4031 }, { "coalesce" : 32, "minTileRow" : 4032, "maxTileRow" : 4063 }, { "coalesce" : 64, "minTileRow" : 4064, "maxTileRow" : 4079 }, { "coalesce" : 128, "minTileRow" : 4080, "maxTileRow" : 4087 }, { "coalesce" : 256, "minTileRow" : 4088, "maxTileRow" : 4091 }, { "coalesce" : 512, "minTileRow" : 4092, "maxTileRow" : 4093 }, { "coalesce" : 1024, "minTileRow" : 4094, "maxTileRow" : 4094 }, { "coalesce" : 2048, "minTileRow" : 4095, "maxTileRow" : 4095 } ] }, { "id" : "12", "scaleDenominator" : 34123.6733415965427, "cellSize" : 0.0000858306885, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 16384, "matrixHeight" : 8192, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 4096, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 2048, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 1024, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 512, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 256, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 128, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 64, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 32, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 16, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 8, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 4, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 2, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 2, "minTileRow" : 6144, "maxTileRow" : 7167 }, { "coalesce" : 4, "minTileRow" : 7168, "maxTileRow" : 7679 }, { "coalesce" : 8, "minTileRow" : 7680, "maxTileRow" : 7935 }, { "coalesce" : 16, "minTileRow" : 7936, "maxTileRow" : 8063 }, { "coalesce" : 32, "minTileRow" : 8064, "maxTileRow" : 8127 }, { "coalesce" : 64, "minTileRow" : 8128, "maxTileRow" : 8159 }, { "coalesce" : 128, "minTileRow" : 8160, "maxTileRow" : 8175 }, { "coalesce" : 256, "minTileRow" : 8176, "maxTileRow" : 8183 }, { "coalesce" : 512, "minTileRow" : 8184, "maxTileRow" : 8187 }, { "coalesce" : 1024, "minTileRow" : 8188, "maxTileRow" : 8189 }, { "coalesce" : 2048, "minTileRow" : 8190, "maxTileRow" : 8190 }, { "coalesce" : 4096, "minTileRow" : 8191, "maxTileRow" : 8191 } ] }, { "id" : "13", "scaleDenominator" : 17061.8366707982714, "cellSize" : 0.0000429153442, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 32768, "matrixHeight" : 16384, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 8192, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 4096, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 2048, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 1024, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 512, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 256, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 128, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 64, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 32, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 16, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 8, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 4, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 2, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 2, "minTileRow" : 12288, "maxTileRow" : 14335 }, { "coalesce" : 4, "minTileRow" : 14336, "maxTileRow" : 15359 }, { "coalesce" : 8, "minTileRow" : 15360, "maxTileRow" : 15871 }, { "coalesce" : 16, "minTileRow" : 15872, "maxTileRow" : 16127 }, { "coalesce" : 32, "minTileRow" : 16128, "maxTileRow" : 16255 }, { "coalesce" : 64, "minTileRow" : 16256, "maxTileRow" : 16319 }, { "coalesce" : 128, "minTileRow" : 16320, "maxTileRow" : 16351 }, { "coalesce" : 256, "minTileRow" : 16352, "maxTileRow" : 16367 }, { "coalesce" : 512, "minTileRow" : 16368, "maxTileRow" : 16375 }, { "coalesce" : 1024, "minTileRow" : 16376, "maxTileRow" : 16379 }, { "coalesce" : 2048, "minTileRow" : 16380, "maxTileRow" : 16381 }, { "coalesce" : 4096, "minTileRow" : 16382, "maxTileRow" : 16382 }, { "coalesce" : 8192, "minTileRow" : 16383, "maxTileRow" : 16383 } ] }, { "id" : "14", "scaleDenominator" : 8530.9183353991357, "cellSize" : 0.0000214576721, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 65536, "matrixHeight" : 32768, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 16384, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 8192, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 4096, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 2048, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 1024, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 512, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 256, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 128, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 64, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 32, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 16, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 8, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 4, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 2, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 2, "minTileRow" : 24576, "maxTileRow" : 28671 }, { "coalesce" : 4, "minTileRow" : 28672, "maxTileRow" : 30719 }, { "coalesce" : 8, "minTileRow" : 30720, "maxTileRow" : 31743 }, { "coalesce" : 16, "minTileRow" : 31744, "maxTileRow" : 32255 }, { "coalesce" : 32, "minTileRow" : 32256, "maxTileRow" : 32511 }, { "coalesce" : 64, "minTileRow" : 32512, "maxTileRow" : 32639 }, { "coalesce" : 128, "minTileRow" : 32640, "maxTileRow" : 32703 }, { "coalesce" : 256, "minTileRow" : 32704, "maxTileRow" : 32735 }, { "coalesce" : 512, "minTileRow" : 32736, "maxTileRow" : 32751 }, { "coalesce" : 1024, "minTileRow" : 32752, "maxTileRow" : 32759 }, { "coalesce" : 2048, "minTileRow" : 32760, "maxTileRow" : 32763 }, { "coalesce" : 4096, "minTileRow" : 32764, "maxTileRow" : 32765 }, { "coalesce" : 8192, "minTileRow" : 32766, "maxTileRow" : 32766 }, { "coalesce" : 16384, "minTileRow" : 32767, "maxTileRow" : 32767 } ] }, { "id" : "15", "scaleDenominator" : 4265.4591676995678, "cellSize" : 0.0000107288361, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 131072, "matrixHeight" : 65536, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 32768, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 16384, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 8192, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 4096, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 2048, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 1024, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 512, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 256, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 128, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 64, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 32, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 16, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 8, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 4, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 2, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 2, "minTileRow" : 49152, "maxTileRow" : 57343 }, { "coalesce" : 4, "minTileRow" : 57344, "maxTileRow" : 61439 }, { "coalesce" : 8, "minTileRow" : 61440, "maxTileRow" : 63487 }, { "coalesce" : 16, "minTileRow" : 63488, "maxTileRow" : 64511 }, { "coalesce" : 32, "minTileRow" : 64512, "maxTileRow" : 65023 }, { "coalesce" : 64, "minTileRow" : 65024, "maxTileRow" : 65279 }, { "coalesce" : 128, "minTileRow" : 65280, "maxTileRow" : 65407 }, { "coalesce" : 256, "minTileRow" : 65408, "maxTileRow" : 65471 }, { "coalesce" : 512, "minTileRow" : 65472, "maxTileRow" : 65503 }, { "coalesce" : 1024, "minTileRow" : 65504, "maxTileRow" : 65519 }, { "coalesce" : 2048, "minTileRow" : 65520, "maxTileRow" : 65527 }, { "coalesce" : 4096, "minTileRow" : 65528, "maxTileRow" : 65531 }, { "coalesce" : 8192, "minTileRow" : 65532, "maxTileRow" : 65533 }, { "coalesce" : 16384, "minTileRow" : 65534, "maxTileRow" : 65534 }, { "coalesce" : 32768, "minTileRow" : 65535, "maxTileRow" : 65535 } ] }, { "id" : "16", "scaleDenominator" : 2132.7295838497839, "cellSize" : 0.000005364418, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 262144, "matrixHeight" : 131072, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 65536, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 32768, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 16384, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 8192, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 4096, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 2048, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 1024, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 512, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 256, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 128, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 64, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 32, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 16, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 8, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 4, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 2, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 2, "minTileRow" : 98304, "maxTileRow" : 114687 }, { "coalesce" : 4, "minTileRow" : 114688, "maxTileRow" : 122879 }, { "coalesce" : 8, "minTileRow" : 122880, "maxTileRow" : 126975 }, { "coalesce" : 16, "minTileRow" : 126976, "maxTileRow" : 129023 }, { "coalesce" : 32, "minTileRow" : 129024, "maxTileRow" : 130047 }, { "coalesce" : 64, "minTileRow" : 130048, "maxTileRow" : 130559 }, { "coalesce" : 128, "minTileRow" : 130560, "maxTileRow" : 130815 }, { "coalesce" : 256, "minTileRow" : 130816, "maxTileRow" : 130943 }, { "coalesce" : 512, "minTileRow" : 130944, "maxTileRow" : 131007 }, { "coalesce" : 1024, "minTileRow" : 131008, "maxTileRow" : 131039 }, { "coalesce" : 2048, "minTileRow" : 131040, "maxTileRow" : 131055 }, { "coalesce" : 4096, "minTileRow" : 131056, "maxTileRow" : 131063 }, { "coalesce" : 8192, "minTileRow" : 131064, "maxTileRow" : 131067 }, { "coalesce" : 16384, "minTileRow" : 131068, "maxTileRow" : 131069 }, { "coalesce" : 32768, "minTileRow" : 131070, "maxTileRow" : 131070 }, { "coalesce" : 65536, "minTileRow" : 131071, "maxTileRow" : 131071 } ] }, { "id" : "17", "scaleDenominator" : 1066.364791924892, "cellSize" : 0.000002682209, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 524288, "matrixHeight" : 262144, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 131072, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 65536, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 32768, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 16384, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 8192, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 4096, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 2048, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 1024, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 512, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 256, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 128, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 64, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 32, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 16, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 8, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 4, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 2, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 2, "minTileRow" : 196608, "maxTileRow" : 229375 }, { "coalesce" : 4, "minTileRow" : 229376, "maxTileRow" : 245759 }, { "coalesce" : 8, "minTileRow" : 245760, "maxTileRow" : 253951 }, { "coalesce" : 16, "minTileRow" : 253952, "maxTileRow" : 258047 }, { "coalesce" : 32, "minTileRow" : 258048, "maxTileRow" : 260095 }, { "coalesce" : 64, "minTileRow" : 260096, "maxTileRow" : 261119 }, { "coalesce" : 128, "minTileRow" : 261120, "maxTileRow" : 261631 }, { "coalesce" : 256, "minTileRow" : 261632, "maxTileRow" : 261887 }, { "coalesce" : 512, "minTileRow" : 261888, "maxTileRow" : 262015 }, { "coalesce" : 1024, "minTileRow" : 262016, "maxTileRow" : 262079 }, { "coalesce" : 2048, "minTileRow" : 262080, "maxTileRow" : 262111 }, { "coalesce" : 4096, "minTileRow" : 262112, "maxTileRow" : 262127 }, { "coalesce" : 8192, "minTileRow" : 262128, "maxTileRow" : 262135 }, { "coalesce" : 16384, "minTileRow" : 262136, "maxTileRow" : 262139 }, { "coalesce" : 32768, "minTileRow" : 262140, "maxTileRow" : 262141 }, { "coalesce" : 65536, "minTileRow" : 262142, "maxTileRow" : 262142 }, { "coalesce" : 131072, "minTileRow" : 262143, "maxTileRow" : 262143 } ] }, { "id" : "18", "scaleDenominator" : 533.182395962446, "cellSize" : 0.0000013411045, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 1048576, "matrixHeight" : 524288, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 262144, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 131072, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 65536, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 32768, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 16384, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 8192, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 4096, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 2048, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 1024, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 512, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 256, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 128, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 64, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 32, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 16, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 8, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 4, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 2, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 2, "minTileRow" : 393216, "maxTileRow" : 458751 }, { "coalesce" : 4, "minTileRow" : 458752, "maxTileRow" : 491519 }, { "coalesce" : 8, "minTileRow" : 491520, "maxTileRow" : 507903 }, { "coalesce" : 16, "minTileRow" : 507904, "maxTileRow" : 516095 }, { "coalesce" : 32, "minTileRow" : 516096, "maxTileRow" : 520191 }, { "coalesce" : 64, "minTileRow" : 520192, "maxTileRow" : 522239 }, { "coalesce" : 128, "minTileRow" : 522240, "maxTileRow" : 523263 }, { "coalesce" : 256, "minTileRow" : 523264, "maxTileRow" : 523775 }, { "coalesce" : 512, "minTileRow" : 523776, "maxTileRow" : 524031 }, { "coalesce" : 1024, "minTileRow" : 524032, "maxTileRow" : 524159 }, { "coalesce" : 2048, "minTileRow" : 524160, "maxTileRow" : 524223 }, { "coalesce" : 4096, "minTileRow" : 524224, "maxTileRow" : 524255 }, { "coalesce" : 8192, "minTileRow" : 524256, "maxTileRow" : 524271 }, { "coalesce" : 16384, "minTileRow" : 524272, "maxTileRow" : 524279 }, { "coalesce" : 32768, "minTileRow" : 524280, "maxTileRow" : 524283 }, { "coalesce" : 65536, "minTileRow" : 524284, "maxTileRow" : 524285 }, { "coalesce" : 131072, "minTileRow" : 524286, "maxTileRow" : 524286 }, { "coalesce" : 262144, "minTileRow" : 524287, "maxTileRow" : 524287 } ] }, { "id" : "19", "scaleDenominator" : 266.591197981223, "cellSize" : 0.0000006705523, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 2097152, "matrixHeight" : 1048576, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 524288, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 262144, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 131072, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 65536, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 32768, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 16384, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 8192, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 4096, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 2048, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 1024, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 512, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 256, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 128, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 64, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 32, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 16, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 8, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 4, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 2, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 2, "minTileRow" : 786432, "maxTileRow" : 917503 }, { "coalesce" : 4, "minTileRow" : 917504, "maxTileRow" : 983039 }, { "coalesce" : 8, "minTileRow" : 983040, "maxTileRow" : 1015807 }, { "coalesce" : 16, "minTileRow" : 1015808, "maxTileRow" : 1032191 }, { "coalesce" : 32, "minTileRow" : 1032192, "maxTileRow" : 1040383 }, { "coalesce" : 64, "minTileRow" : 1040384, "maxTileRow" : 1044479 }, { "coalesce" : 128, "minTileRow" : 1044480, "maxTileRow" : 1046527 }, { "coalesce" : 256, "minTileRow" : 1046528, "maxTileRow" : 1047551 }, { "coalesce" : 512, "minTileRow" : 1047552, "maxTileRow" : 1048063 }, { "coalesce" : 1024, "minTileRow" : 1048064, "maxTileRow" : 1048319 }, { "coalesce" : 2048, "minTileRow" : 1048320, "maxTileRow" : 1048447 }, { "coalesce" : 4096, "minTileRow" : 1048448, "maxTileRow" : 1048511 }, { "coalesce" : 8192, "minTileRow" : 1048512, "maxTileRow" : 1048543 }, { "coalesce" : 16384, "minTileRow" : 1048544, "maxTileRow" : 1048559 }, { "coalesce" : 32768, "minTileRow" : 1048560, "maxTileRow" : 1048567 }, { "coalesce" : 65536, "minTileRow" : 1048568, "maxTileRow" : 1048571 }, { "coalesce" : 131072, "minTileRow" : 1048572, "maxTileRow" : 1048573 }, { "coalesce" : 262144, "minTileRow" : 1048574, "maxTileRow" : 1048574 }, { "coalesce" : 524288, "minTileRow" : 1048575, "maxTileRow" : 1048575 } ] }, { "id" : "20", "scaleDenominator" : 133.2955989906115, "cellSize" : 0.0000003352761, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 4194304, "matrixHeight" : 2097152, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 1048576, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 524288, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 262144, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 131072, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 65536, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 32768, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 16384, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 8192, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 4096, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 2048, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 1024, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 512, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 256, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 128, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 64, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 32, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 16, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 8, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 4, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 2, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 2, "minTileRow" : 1572864, "maxTileRow" : 1835007 }, { "coalesce" : 4, "minTileRow" : 1835008, "maxTileRow" : 1966079 }, { "coalesce" : 8, "minTileRow" : 1966080, "maxTileRow" : 2031615 }, { "coalesce" : 16, "minTileRow" : 2031616, "maxTileRow" : 2064383 }, { "coalesce" : 32, "minTileRow" : 2064384, "maxTileRow" : 2080767 }, { "coalesce" : 64, "minTileRow" : 2080768, "maxTileRow" : 2088959 }, { "coalesce" : 128, "minTileRow" : 2088960, "maxTileRow" : 2093055 }, { "coalesce" : 256, "minTileRow" : 2093056, "maxTileRow" : 2095103 }, { "coalesce" : 512, "minTileRow" : 2095104, "maxTileRow" : 2096127 }, { "coalesce" : 1024, "minTileRow" : 2096128, "maxTileRow" : 2096639 }, { "coalesce" : 2048, "minTileRow" : 2096640, "maxTileRow" : 2096895 }, { "coalesce" : 4096, "minTileRow" : 2096896, "maxTileRow" : 2097023 }, { "coalesce" : 8192, "minTileRow" : 2097024, "maxTileRow" : 2097087 }, { "coalesce" : 16384, "minTileRow" : 2097088, "maxTileRow" : 2097119 }, { "coalesce" : 32768, "minTileRow" : 2097120, "maxTileRow" : 2097135 }, { "coalesce" : 65536, "minTileRow" : 2097136, "maxTileRow" : 2097143 }, { "coalesce" : 131072, "minTileRow" : 2097144, "maxTileRow" : 2097147 }, { "coalesce" : 262144, "minTileRow" : 2097148, "maxTileRow" : 2097149 }, { "coalesce" : 524288, "minTileRow" : 2097150, "maxTileRow" : 2097150 }, { "coalesce" : 1048576, "minTileRow" : 2097151, "maxTileRow" : 2097151 } ] }, { "id" : "21", "scaleDenominator" : 66.6477994953057, "cellSize" : 0.0000001676381, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 8388608, "matrixHeight" : 4194304, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 2097152, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 1048576, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 524288, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 262144, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 131072, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 65536, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 32768, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 16384, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 8192, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 4096, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 2048, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 1024, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 512, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 256, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 128, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 64, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 32, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 16, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 8, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 4, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 2, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 2, "minTileRow" : 3145728, "maxTileRow" : 3670015 }, { "coalesce" : 4, "minTileRow" : 3670016, "maxTileRow" : 3932159 }, { "coalesce" : 8, "minTileRow" : 3932160, "maxTileRow" : 4063231 }, { "coalesce" : 16, "minTileRow" : 4063232, "maxTileRow" : 4128767 }, { "coalesce" : 32, "minTileRow" : 4128768, "maxTileRow" : 4161535 }, { "coalesce" : 64, "minTileRow" : 4161536, "maxTileRow" : 4177919 }, { "coalesce" : 128, "minTileRow" : 4177920, "maxTileRow" : 4186111 }, { "coalesce" : 256, "minTileRow" : 4186112, "maxTileRow" : 4190207 }, { "coalesce" : 512, "minTileRow" : 4190208, "maxTileRow" : 4192255 }, { "coalesce" : 1024, "minTileRow" : 4192256, "maxTileRow" : 4193279 }, { "coalesce" : 2048, "minTileRow" : 4193280, "maxTileRow" : 4193791 }, { "coalesce" : 4096, "minTileRow" : 4193792, "maxTileRow" : 4194047 }, { "coalesce" : 8192, "minTileRow" : 4194048, "maxTileRow" : 4194175 }, { "coalesce" : 16384, "minTileRow" : 4194176, "maxTileRow" : 4194239 }, { "coalesce" : 32768, "minTileRow" : 4194240, "maxTileRow" : 4194271 }, { "coalesce" : 65536, "minTileRow" : 4194272, "maxTileRow" : 4194287 }, { "coalesce" : 131072, "minTileRow" : 4194288, "maxTileRow" : 4194295 }, { "coalesce" : 262144, "minTileRow" : 4194296, "maxTileRow" : 4194299 }, { "coalesce" : 524288, "minTileRow" : 4194300, "maxTileRow" : 4194301 }, { "coalesce" : 1048576, "minTileRow" : 4194302, "maxTileRow" : 4194302 }, { "coalesce" : 2097152, "minTileRow" : 4194303, "maxTileRow" : 4194303 } ] }, { "id" : "22", "scaleDenominator" : 33.3238997476529, "cellSize" : 0.000000083819, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 16777216, "matrixHeight" : 8388608, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 4194304, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 2097152, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 1048576, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 524288, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 262144, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 131072, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 65536, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 32768, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 16384, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 8192, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 4096, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 2048, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 1024, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 512, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 256, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 128, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 64, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 32, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 16, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 8, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 4, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 2, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 2, "minTileRow" : 6291456, "maxTileRow" : 7340031 }, { "coalesce" : 4, "minTileRow" : 7340032, "maxTileRow" : 7864319 }, { "coalesce" : 8, "minTileRow" : 7864320, "maxTileRow" : 8126463 }, { "coalesce" : 16, "minTileRow" : 8126464, "maxTileRow" : 8257535 }, { "coalesce" : 32, "minTileRow" : 8257536, "maxTileRow" : 8323071 }, { "coalesce" : 64, "minTileRow" : 8323072, "maxTileRow" : 8355839 }, { "coalesce" : 128, "minTileRow" : 8355840, "maxTileRow" : 8372223 }, { "coalesce" : 256, "minTileRow" : 8372224, "maxTileRow" : 8380415 }, { "coalesce" : 512, "minTileRow" : 8380416, "maxTileRow" : 8384511 }, { "coalesce" : 1024, "minTileRow" : 8384512, "maxTileRow" : 8386559 }, { "coalesce" : 2048, "minTileRow" : 8386560, "maxTileRow" : 8387583 }, { "coalesce" : 4096, "minTileRow" : 8387584, "maxTileRow" : 8388095 }, { "coalesce" : 8192, "minTileRow" : 8388096, "maxTileRow" : 8388351 }, { "coalesce" : 16384, "minTileRow" : 8388352, "maxTileRow" : 8388479 }, { "coalesce" : 32768, "minTileRow" : 8388480, "maxTileRow" : 8388543 }, { "coalesce" : 65536, "minTileRow" : 8388544, "maxTileRow" : 8388575 }, { "coalesce" : 131072, "minTileRow" : 8388576, "maxTileRow" : 8388591 }, { "coalesce" : 262144, "minTileRow" : 8388592, "maxTileRow" : 8388599 }, { "coalesce" : 524288, "minTileRow" : 8388600, "maxTileRow" : 8388603 }, { "coalesce" : 1048576, "minTileRow" : 8388604, "maxTileRow" : 8388605 }, { "coalesce" : 2097152, "minTileRow" : 8388606, "maxTileRow" : 8388606 }, { "coalesce" : 4194304, "minTileRow" : 8388607, "maxTileRow" : 8388607 } ] }, { "id" : "23", "scaleDenominator" : 16.6619498738264, "cellSize" : 0.0000000419095, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 33554432, "matrixHeight" : 16777216, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 8388608, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 4194304, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 2097152, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 1048576, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 524288, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 262144, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 131072, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 65536, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 32768, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 16384, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 8192, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 4096, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 2048, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 1024, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 512, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 256, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 128, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 64, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 32, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 16, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 8, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 4, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 2, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 2, "minTileRow" : 12582912, "maxTileRow" : 14680063 }, { "coalesce" : 4, "minTileRow" : 14680064, "maxTileRow" : 15728639 }, { "coalesce" : 8, "minTileRow" : 15728640, "maxTileRow" : 16252927 }, { "coalesce" : 16, "minTileRow" : 16252928, "maxTileRow" : 16515071 }, { "coalesce" : 32, "minTileRow" : 16515072, "maxTileRow" : 16646143 }, { "coalesce" : 64, "minTileRow" : 16646144, "maxTileRow" : 16711679 }, { "coalesce" : 128, "minTileRow" : 16711680, "maxTileRow" : 16744447 }, { "coalesce" : 256, "minTileRow" : 16744448, "maxTileRow" : 16760831 }, { "coalesce" : 512, "minTileRow" : 16760832, "maxTileRow" : 16769023 }, { "coalesce" : 1024, "minTileRow" : 16769024, "maxTileRow" : 16773119 }, { "coalesce" : 2048, "minTileRow" : 16773120, "maxTileRow" : 16775167 }, { "coalesce" : 4096, "minTileRow" : 16775168, "maxTileRow" : 16776191 }, { "coalesce" : 8192, "minTileRow" : 16776192, "maxTileRow" : 16776703 }, { "coalesce" : 16384, "minTileRow" : 16776704, "maxTileRow" : 16776959 }, { "coalesce" : 32768, "minTileRow" : 16776960, "maxTileRow" : 16777087 }, { "coalesce" : 65536, "minTileRow" : 16777088, "maxTileRow" : 16777151 }, { "coalesce" : 131072, "minTileRow" : 16777152, "maxTileRow" : 16777183 }, { "coalesce" : 262144, "minTileRow" : 16777184, "maxTileRow" : 16777199 }, { "coalesce" : 524288, "minTileRow" : 16777200, "maxTileRow" : 16777207 }, { "coalesce" : 1048576, "minTileRow" : 16777208, "maxTileRow" : 16777211 }, { "coalesce" : 2097152, "minTileRow" : 16777212, "maxTileRow" : 16777213 }, { "coalesce" : 4194304, "minTileRow" : 16777214, "maxTileRow" : 16777214 }, { "coalesce" : 8388608, "minTileRow" : 16777215, "maxTileRow" : 16777215 } ] }, { "id" : "24", "scaleDenominator" : 8.3309749369132, "cellSize" : 0.0000000209548, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 67108864, "matrixHeight" : 33554432, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 16777216, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 8388608, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 4194304, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 2097152, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 1048576, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 524288, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 262144, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 131072, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 65536, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 32768, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 16384, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 8192, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 4096, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 2048, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 1024, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 512, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 256, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 128, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 64, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 32, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 16, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 8, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 4, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 2, "minTileRow" : 4194304, "maxTileRow" : 8388607 }, { "coalesce" : 2, "minTileRow" : 25165824, "maxTileRow" : 29360127 }, { "coalesce" : 4, "minTileRow" : 29360128, "maxTileRow" : 31457279 }, { "coalesce" : 8, "minTileRow" : 31457280, "maxTileRow" : 32505855 }, { "coalesce" : 16, "minTileRow" : 32505856, "maxTileRow" : 33030143 }, { "coalesce" : 32, "minTileRow" : 33030144, "maxTileRow" : 33292287 }, { "coalesce" : 64, "minTileRow" : 33292288, "maxTileRow" : 33423359 }, { "coalesce" : 128, "minTileRow" : 33423360, "maxTileRow" : 33488895 }, { "coalesce" : 256, "minTileRow" : 33488896, "maxTileRow" : 33521663 }, { "coalesce" : 512, "minTileRow" : 33521664, "maxTileRow" : 33538047 }, { "coalesce" : 1024, "minTileRow" : 33538048, "maxTileRow" : 33546239 }, { "coalesce" : 2048, "minTileRow" : 33546240, "maxTileRow" : 33550335 }, { "coalesce" : 4096, "minTileRow" : 33550336, "maxTileRow" : 33552383 }, { "coalesce" : 8192, "minTileRow" : 33552384, "maxTileRow" : 33553407 }, { "coalesce" : 16384, "minTileRow" : 33553408, "maxTileRow" : 33553919 }, { "coalesce" : 32768, "minTileRow" : 33553920, "maxTileRow" : 33554175 }, { "coalesce" : 65536, "minTileRow" : 33554176, "maxTileRow" : 33554303 }, { "coalesce" : 131072, "minTileRow" : 33554304, "maxTileRow" : 33554367 }, { "coalesce" : 262144, "minTileRow" : 33554368, "maxTileRow" : 33554399 }, { "coalesce" : 524288, "minTileRow" : 33554400, "maxTileRow" : 33554415 }, { "coalesce" : 1048576, "minTileRow" : 33554416, "maxTileRow" : 33554423 }, { "coalesce" : 2097152, "minTileRow" : 33554424, "maxTileRow" : 33554427 }, { "coalesce" : 4194304, "minTileRow" : 33554428, "maxTileRow" : 33554429 }, { "coalesce" : 8388608, "minTileRow" : 33554430, "maxTileRow" : 33554430 }, { "coalesce" : 16777216, "minTileRow" : 33554431, "maxTileRow" : 33554431 } ] }, { "id" : "25", "scaleDenominator" : 4.1654874684566, "cellSize" : 0.0000000104774, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 134217728, "matrixHeight" : 67108864, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 33554432, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 16777216, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 8388608, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 4194304, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 2097152, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 1048576, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 524288, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 262144, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 131072, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 65536, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 32768, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 16384, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 8192, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 4096, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 2048, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 1024, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 512, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 256, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 128, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 64, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 32, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 16, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 8, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 4, "minTileRow" : 4194304, "maxTileRow" : 8388607 }, { "coalesce" : 2, "minTileRow" : 8388608, "maxTileRow" : 16777215 }, { "coalesce" : 2, "minTileRow" : 50331648, "maxTileRow" : 58720255 }, { "coalesce" : 4, "minTileRow" : 58720256, "maxTileRow" : 62914559 }, { "coalesce" : 8, "minTileRow" : 62914560, "maxTileRow" : 65011711 }, { "coalesce" : 16, "minTileRow" : 65011712, "maxTileRow" : 66060287 }, { "coalesce" : 32, "minTileRow" : 66060288, "maxTileRow" : 66584575 }, { "coalesce" : 64, "minTileRow" : 66584576, "maxTileRow" : 66846719 }, { "coalesce" : 128, "minTileRow" : 66846720, "maxTileRow" : 66977791 }, { "coalesce" : 256, "minTileRow" : 66977792, "maxTileRow" : 67043327 }, { "coalesce" : 512, "minTileRow" : 67043328, "maxTileRow" : 67076095 }, { "coalesce" : 1024, "minTileRow" : 67076096, "maxTileRow" : 67092479 }, { "coalesce" : 2048, "minTileRow" : 67092480, "maxTileRow" : 67100671 }, { "coalesce" : 4096, "minTileRow" : 67100672, "maxTileRow" : 67104767 }, { "coalesce" : 8192, "minTileRow" : 67104768, "maxTileRow" : 67106815 }, { "coalesce" : 16384, "minTileRow" : 67106816, "maxTileRow" : 67107839 }, { "coalesce" : 32768, "minTileRow" : 67107840, "maxTileRow" : 67108351 }, { "coalesce" : 65536, "minTileRow" : 67108352, "maxTileRow" : 67108607 }, { "coalesce" : 131072, "minTileRow" : 67108608, "maxTileRow" : 67108735 }, { "coalesce" : 262144, "minTileRow" : 67108736, "maxTileRow" : 67108799 }, { "coalesce" : 524288, "minTileRow" : 67108800, "maxTileRow" : 67108831 }, { "coalesce" : 1048576, "minTileRow" : 67108832, "maxTileRow" : 67108847 }, { "coalesce" : 2097152, "minTileRow" : 67108848, "maxTileRow" : 67108855 }, { "coalesce" : 4194304, "minTileRow" : 67108856, "maxTileRow" : 67108859 }, { "coalesce" : 8388608, "minTileRow" : 67108860, "maxTileRow" : 67108861 }, { "coalesce" : 16777216, "minTileRow" : 67108862, "maxTileRow" : 67108862 }, { "coalesce" : 33554432, "minTileRow" : 67108863, "maxTileRow" : 67108863 } ] }, { "id" : "26", "scaleDenominator" : 2.0827437342283, "cellSize" : 0.0000000052387, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 268435456, "matrixHeight" : 134217728, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 67108864, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 33554432, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 16777216, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 8388608, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 4194304, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 2097152, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 1048576, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 524288, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 262144, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 131072, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 65536, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 32768, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 16384, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 8192, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 4096, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 2048, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 1024, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 512, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 256, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 128, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 64, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 32, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 16, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 8, "minTileRow" : 4194304, "maxTileRow" : 8388607 }, { "coalesce" : 4, "minTileRow" : 8388608, "maxTileRow" : 16777215 }, { "coalesce" : 2, "minTileRow" : 16777216, "maxTileRow" : 33554431 }, { "coalesce" : 2, "minTileRow" : 100663296, "maxTileRow" : 117440511 }, { "coalesce" : 4, "minTileRow" : 117440512, "maxTileRow" : 125829119 }, { "coalesce" : 8, "minTileRow" : 125829120, "maxTileRow" : 130023423 }, { "coalesce" : 16, "minTileRow" : 130023424, "maxTileRow" : 132120575 }, { "coalesce" : 32, "minTileRow" : 132120576, "maxTileRow" : 133169151 }, { "coalesce" : 64, "minTileRow" : 133169152, "maxTileRow" : 133693439 }, { "coalesce" : 128, "minTileRow" : 133693440, "maxTileRow" : 133955583 }, { "coalesce" : 256, "minTileRow" : 133955584, "maxTileRow" : 134086655 }, { "coalesce" : 512, "minTileRow" : 134086656, "maxTileRow" : 134152191 }, { "coalesce" : 1024, "minTileRow" : 134152192, "maxTileRow" : 134184959 }, { "coalesce" : 2048, "minTileRow" : 134184960, "maxTileRow" : 134201343 }, { "coalesce" : 4096, "minTileRow" : 134201344, "maxTileRow" : 134209535 }, { "coalesce" : 8192, "minTileRow" : 134209536, "maxTileRow" : 134213631 }, { "coalesce" : 16384, "minTileRow" : 134213632, "maxTileRow" : 134215679 }, { "coalesce" : 32768, "minTileRow" : 134215680, "maxTileRow" : 134216703 }, { "coalesce" : 65536, "minTileRow" : 134216704, "maxTileRow" : 134217215 }, { "coalesce" : 131072, "minTileRow" : 134217216, "maxTileRow" : 134217471 }, { "coalesce" : 262144, "minTileRow" : 134217472, "maxTileRow" : 134217599 }, { "coalesce" : 524288, "minTileRow" : 134217600, "maxTileRow" : 134217663 }, { "coalesce" : 1048576, "minTileRow" : 134217664, "maxTileRow" : 134217695 }, { "coalesce" : 2097152, "minTileRow" : 134217696, "maxTileRow" : 134217711 }, { "coalesce" : 4194304, "minTileRow" : 134217712, "maxTileRow" : 134217719 }, { "coalesce" : 8388608, "minTileRow" : 134217720, "maxTileRow" : 134217723 }, { "coalesce" : 16777216, "minTileRow" : 134217724, "maxTileRow" : 134217725 }, { "coalesce" : 33554432, "minTileRow" : 134217726, "maxTileRow" : 134217726 }, { "coalesce" : 67108864, "minTileRow" : 134217727, "maxTileRow" : 134217727 } ] }, { "id" : "27", "scaleDenominator" : 1.0413718671142, "cellSize" : 0.0000000026193, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 536870912, "matrixHeight" : 268435456, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 134217728, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 67108864, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 33554432, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 16777216, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 8388608, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 4194304, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 2097152, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 1048576, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 524288, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 262144, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 131072, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 65536, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 32768, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 16384, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 8192, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 4096, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 2048, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 1024, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 512, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 256, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 128, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 64, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 32, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 16, "minTileRow" : 4194304, "maxTileRow" : 8388607 }, { "coalesce" : 8, "minTileRow" : 8388608, "maxTileRow" : 16777215 }, { "coalesce" : 4, "minTileRow" : 16777216, "maxTileRow" : 33554431 }, { "coalesce" : 2, "minTileRow" : 33554432, "maxTileRow" : 67108863 }, { "coalesce" : 2, "minTileRow" : 201326592, "maxTileRow" : 234881023 }, { "coalesce" : 4, "minTileRow" : 234881024, "maxTileRow" : 251658239 }, { "coalesce" : 8, "minTileRow" : 251658240, "maxTileRow" : 260046847 }, { "coalesce" : 16, "minTileRow" : 260046848, "maxTileRow" : 264241151 }, { "coalesce" : 32, "minTileRow" : 264241152, "maxTileRow" : 266338303 }, { "coalesce" : 64, "minTileRow" : 266338304, "maxTileRow" : 267386879 }, { "coalesce" : 128, "minTileRow" : 267386880, "maxTileRow" : 267911167 }, { "coalesce" : 256, "minTileRow" : 267911168, "maxTileRow" : 268173311 }, { "coalesce" : 512, "minTileRow" : 268173312, "maxTileRow" : 268304383 }, { "coalesce" : 1024, "minTileRow" : 268304384, "maxTileRow" : 268369919 }, { "coalesce" : 2048, "minTileRow" : 268369920, "maxTileRow" : 268402687 }, { "coalesce" : 4096, "minTileRow" : 268402688, "maxTileRow" : 268419071 }, { "coalesce" : 8192, "minTileRow" : 268419072, "maxTileRow" : 268427263 }, { "coalesce" : 16384, "minTileRow" : 268427264, "maxTileRow" : 268431359 }, { "coalesce" : 32768, "minTileRow" : 268431360, "maxTileRow" : 268433407 }, { "coalesce" : 65536, "minTileRow" : 268433408, "maxTileRow" : 268434431 }, { "coalesce" : 131072, "minTileRow" : 268434432, "maxTileRow" : 268434943 }, { "coalesce" : 262144, "minTileRow" : 268434944, "maxTileRow" : 268435199 }, { "coalesce" : 524288, "minTileRow" : 268435200, "maxTileRow" : 268435327 }, { "coalesce" : 1048576, "minTileRow" : 268435328, "maxTileRow" : 268435391 }, { "coalesce" : 2097152, "minTileRow" : 268435392, "maxTileRow" : 268435423 }, { "coalesce" : 4194304, "minTileRow" : 268435424, "maxTileRow" : 268435439 }, { "coalesce" : 8388608, "minTileRow" : 268435440, "maxTileRow" : 268435447 }, { "coalesce" : 16777216, "minTileRow" : 268435448, "maxTileRow" : 268435451 }, { "coalesce" : 33554432, "minTileRow" : 268435452, "maxTileRow" : 268435453 }, { "coalesce" : 67108864, "minTileRow" : 268435454, "maxTileRow" : 268435454 }, { "coalesce" : 134217728, "minTileRow" : 268435455, "maxTileRow" : 268435455 } ] }, { "id" : "28", "scaleDenominator" : 0.5206859335571, "cellSize" : 0.0000000013097, "cornerOfOrigin" : "topLeft", "pointOfOrigin" : [ 90, -180 ], "matrixWidth" : 1073741824, "matrixHeight" : 536870912, "tileWidth" : 256, "tileHeight" : 256, "variableMatrixWidths" : [ { "coalesce" : 268435456, "minTileRow" : 0, "maxTileRow" : 0 }, { "coalesce" : 134217728, "minTileRow" : 1, "maxTileRow" : 1 }, { "coalesce" : 67108864, "minTileRow" : 2, "maxTileRow" : 3 }, { "coalesce" : 33554432, "minTileRow" : 4, "maxTileRow" : 7 }, { "coalesce" : 16777216, "minTileRow" : 8, "maxTileRow" : 15 }, { "coalesce" : 8388608, "minTileRow" : 16, "maxTileRow" : 31 }, { "coalesce" : 4194304, "minTileRow" : 32, "maxTileRow" : 63 }, { "coalesce" : 2097152, "minTileRow" : 64, "maxTileRow" : 127 }, { "coalesce" : 1048576, "minTileRow" : 128, "maxTileRow" : 255 }, { "coalesce" : 524288, "minTileRow" : 256, "maxTileRow" : 511 }, { "coalesce" : 262144, "minTileRow" : 512, "maxTileRow" : 1023 }, { "coalesce" : 131072, "minTileRow" : 1024, "maxTileRow" : 2047 }, { "coalesce" : 65536, "minTileRow" : 2048, "maxTileRow" : 4095 }, { "coalesce" : 32768, "minTileRow" : 4096, "maxTileRow" : 8191 }, { "coalesce" : 16384, "minTileRow" : 8192, "maxTileRow" : 16383 }, { "coalesce" : 8192, "minTileRow" : 16384, "maxTileRow" : 32767 }, { "coalesce" : 4096, "minTileRow" : 32768, "maxTileRow" : 65535 }, { "coalesce" : 2048, "minTileRow" : 65536, "maxTileRow" : 131071 }, { "coalesce" : 1024, "minTileRow" : 131072, "maxTileRow" : 262143 }, { "coalesce" : 512, "minTileRow" : 262144, "maxTileRow" : 524287 }, { "coalesce" : 256, "minTileRow" : 524288, "maxTileRow" : 1048575 }, { "coalesce" : 128, "minTileRow" : 1048576, "maxTileRow" : 2097151 }, { "coalesce" : 64, "minTileRow" : 2097152, "maxTileRow" : 4194303 }, { "coalesce" : 32, "minTileRow" : 4194304, "maxTileRow" : 8388607 }, { "coalesce" : 16, "minTileRow" : 8388608, "maxTileRow" : 16777215 }, { "coalesce" : 8, "minTileRow" : 16777216, "maxTileRow" : 33554431 }, { "coalesce" : 4, "minTileRow" : 33554432, "maxTileRow" : 67108863 }, { "coalesce" : 2, "minTileRow" : 67108864, "maxTileRow" : 134217727 }, { "coalesce" : 2, "minTileRow" : 402653184, "maxTileRow" : 469762047 }, { "coalesce" : 4, "minTileRow" : 469762048, "maxTileRow" : 503316479 }, { "coalesce" : 8, "minTileRow" : 503316480, "maxTileRow" : 520093695 }, { "coalesce" : 16, "minTileRow" : 520093696, "maxTileRow" : 528482303 }, { "coalesce" : 32, "minTileRow" : 528482304, "maxTileRow" : 532676607 }, { "coalesce" : 64, "minTileRow" : 532676608, "maxTileRow" : 534773759 }, { "coalesce" : 128, "minTileRow" : 534773760, "maxTileRow" : 535822335 }, { "coalesce" : 256, "minTileRow" : 535822336, "maxTileRow" : 536346623 }, { "coalesce" : 512, "minTileRow" : 536346624, "maxTileRow" : 536608767 }, { "coalesce" : 1024, "minTileRow" : 536608768, "maxTileRow" : 536739839 }, { "coalesce" : 2048, "minTileRow" : 536739840, "maxTileRow" : 536805375 }, { "coalesce" : 4096, "minTileRow" : 536805376, "maxTileRow" : 536838143 }, { "coalesce" : 8192, "minTileRow" : 536838144, "maxTileRow" : 536854527 }, { "coalesce" : 16384, "minTileRow" : 536854528, "maxTileRow" : 536862719 }, { "coalesce" : 32768, "minTileRow" : 536862720, "maxTileRow" : 536866815 }, { "coalesce" : 65536, "minTileRow" : 536866816, "maxTileRow" : 536868863 }, { "coalesce" : 131072, "minTileRow" : 536868864, "maxTileRow" : 536869887 }, { "coalesce" : 262144, "minTileRow" : 536869888, "maxTileRow" : 536870399 }, { "coalesce" : 524288, "minTileRow" : 536870400, "maxTileRow" : 536870655 }, { "coalesce" : 1048576, "minTileRow" : 536870656, "maxTileRow" : 536870783 }, { "coalesce" : 2097152, "minTileRow" : 536870784, "maxTileRow" : 536870847 }, { "coalesce" : 4194304, "minTileRow" : 536870848, "maxTileRow" : 536870879 }, { "coalesce" : 8388608, "minTileRow" : 536870880, "maxTileRow" : 536870895 }, { "coalesce" : 16777216, "minTileRow" : 536870896, "maxTileRow" : 536870903 }, { "coalesce" : 33554432, "minTileRow" : 536870904, "maxTileRow" : 536870907 }, { "coalesce" : 67108864, "minTileRow" : 536870908, "maxTileRow" : 536870909 }, { "coalesce" : 134217728, "minTileRow" : 536870910, "maxTileRow" : 536870910 }, { "coalesce" : 268435456, "minTileRow" : 536870911, "maxTileRow" : 536870911 } ] } ] } morecantile-7.1.0/morecantile/data/LINZAntarticaMapTilegrid.json000066400000000000000000000120701525253500000246510ustar00rootroot00000000000000{ "title": "LINZ Antarctic Map Tile Grid (Ross Sea Region)", "id": "LINZAntarticaMapTilegrid", "crs": "urn:ogc:def:crs:EPSG::5482", "orderedAxes": [ "Y", "X" ], "tileMatrices": [ { "id": "0", "scaleDenominator": 409600000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, "cellSize": 114687.99999999999 }, { "id": "1", "scaleDenominator": 204800000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, "cellSize": 57343.99999999999 }, { "id": "2", "scaleDenominator": 102400000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2, "cellSize": 28671.999999999996 }, { "id": "3", "scaleDenominator": 51200000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4, "cellSize": 14335.999999999998 }, { "id": "4", "scaleDenominator": 25600000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 7, "matrixHeight": 7, "cellSize": 7167.999999999999 }, { "id": "5", "scaleDenominator": 12800000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 13, "matrixHeight": 13, "cellSize": 3583.9999999999995 }, { "id": "6", "scaleDenominator": 6400000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 26, "matrixHeight": 26, "cellSize": 1791.9999999999998 }, { "id": "7", "scaleDenominator": 3200000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 52, "matrixHeight": 52, "cellSize": 895.9999999999999 }, { "id": "8", "scaleDenominator": 1600000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 104, "matrixHeight": 104, "cellSize": 447.99999999999994 }, { "id": "9", "scaleDenominator": 800000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 207, "matrixHeight": 207, "cellSize": 223.99999999999997 }, { "id": "10", "scaleDenominator": 400000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 413, "matrixHeight": 413, "cellSize": 111.99999999999999 }, { "id": "11", "scaleDenominator": 200000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 826, "matrixHeight": 826, "cellSize": 55.99999999999999 }, { "id": "12", "scaleDenominator": 100000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1652, "matrixHeight": 1652, "cellSize": 27.999999999999996 }, { "id": "13", "scaleDenominator": 50000, "pointOfOrigin": [ 6918457.73, -918457.73 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 3303, "matrixHeight": 3303, "cellSize": 13.999999999999998 } ] }morecantile-7.1.0/morecantile/data/NZTM2000Quad.json000066400000000000000000000203041525253500000220300ustar00rootroot00000000000000{ "title": "LINZ NZTM2000Quad Map Tile Grid", "id": "NZTM2000Quad", "crs": "urn:ogc:def:crs:EPSG::2193", "orderedAxes": [ "Y", "X" ], "tileMatrices": [ { "id": "0", "scaleDenominator": 139770566.007179, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, "cellSize": 39135.75848201011 }, { "id": "1", "scaleDenominator": 69885283.0035895, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2, "cellSize": 19567.879241005056 }, { "id": "2", "scaleDenominator": 34942641.50179475, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4, "cellSize": 9783.939620502528 }, { "id": "3", "scaleDenominator": 17471320.750897374, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8, "cellSize": 4891.969810251264 }, { "id": "4", "scaleDenominator": 8735660.375448687, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16, "cellSize": 2445.984905125632 }, { "id": "5", "scaleDenominator": 4367830.1877243435, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32, "cellSize": 1222.992452562816 }, { "id": "6", "scaleDenominator": 2183915.0938621718, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64, "cellSize": 611.496226281408 }, { "id": "7", "scaleDenominator": 1091957.5469310859, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128, "cellSize": 305.748113140704 }, { "id": "8", "scaleDenominator": 545978.7734655429, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256, "cellSize": 152.874056570352 }, { "id": "9", "scaleDenominator": 272989.38673277147, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512, "cellSize": 76.437028285176 }, { "id": "10", "scaleDenominator": 136494.69336638573, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024, "cellSize": 38.218514142588 }, { "id": "11", "scaleDenominator": 68247.34668319287, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048, "cellSize": 19.109257071294 }, { "id": "12", "scaleDenominator": 34123.67334159643, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096, "cellSize": 9.554628535647 }, { "id": "13", "scaleDenominator": 17061.836670798217, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192, "cellSize": 4.7773142678235 }, { "id": "14", "scaleDenominator": 8530.918335399108, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384, "cellSize": 2.38865713391175 }, { "id": "15", "scaleDenominator": 4265.459167699554, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768, "cellSize": 1.194328566955875 }, { "id": "16", "scaleDenominator": 2132.729583849777, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536, "cellSize": 0.5971642834779375 }, { "id": "17", "scaleDenominator": 1066.3647919248886, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072, "cellSize": 0.29858214173896874 }, { "id": "18", "scaleDenominator": 533.1823959624443, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144, "cellSize": 0.14929107086948437 }, { "id": "19", "scaleDenominator": 266.59119798122214, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288, "cellSize": 0.07464553543474219 }, { "id": "20", "scaleDenominator": 133.29559899061107, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576, "cellSize": 0.03732276771737109 }, { "id": "21", "scaleDenominator": 66.64779949530553, "pointOfOrigin": [ 10438190.1652, -3260586.7284 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152, "cellSize": 0.018661383858685546 } ] }morecantile-7.1.0/morecantile/data/README.md000066400000000000000000000004011525253500000205030ustar00rootroot00000000000000# tileMatrixSet json documents TileMatrixSet from https://schemas.opengis.net/tms/2.0/json/examples/tilematrixset/ `NZTM2000` and `LINZAntarticaMapTilegrid` are from GDAL https://github.com/OSGeo/gdal/pull/2505/files#diff-33251b8c7db3e78835102ded8d11d851 morecantile-7.1.0/morecantile/data/UPSAntarcticWGS84Quad.json000066400000000000000000000163161525253500000240030ustar00rootroot00000000000000{ "id": "UPSAntarcticWGS84Quad", "title": "Universal Polar Stereographic WGS 84 Quad for Antarctic", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/UPSAntarcticWGS84Quad", "crs": "http://www.opengis.net/def/crs/EPSG/0/5042", "orderedAxes": ["E", "N"], "tileMatrices": [ { "id": "0", "scaleDenominator": 458726544.4, "cellSize": 128443.4324, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 229363272.2, "cellSize": 64221.71621, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 114681636.1, "cellSize": 32110.85811, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 57340818.05, "cellSize": 16055.42905, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 28670409.02, "cellSize": 8027.714526, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 14335204.51, "cellSize": 4013.857263, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 7167602.256, "cellSize": 2006.928632, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 3583801.128, "cellSize": 1003.464316, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 1791900.564, "cellSize": 501.7321579, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 895950.282, "cellSize": 250.866079, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 447975.141, "cellSize": 125.4330395, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 223987.5705, "cellSize": 62.71651974, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 111993.7852, "cellSize": 31.35825987, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 55996.89262, "cellSize": 15.67912993, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 27998.44631, "cellSize": 7.839564967, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 13999.22316, "cellSize": 3.919782484, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 6999.611578, "cellSize": 1.959891242, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 3499.805789, "cellSize": 0.979945621, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 1749.902894, "cellSize": 0.48997281, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 874.9514472, "cellSize": 0.244986405, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 437.4757236, "cellSize": 0.122493203, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 218.7378618, "cellSize": 0.061246601, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 109.3689309, "cellSize": 0.030623301, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 54.68446545, "cellSize": 0.01531165, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "id": "24", "scaleDenominator": 27.34223273, "cellSize": 0.007655825, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] }morecantile-7.1.0/morecantile/data/UPSArcticWGS84Quad.json000066400000000000000000000163051525253500000232760ustar00rootroot00000000000000{ "id": "UPSArcticWGS84Quad", "title": "Universal Polar Stereographic WGS 84 Quad for Arctic", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/UPSArcticWGS84Quad", "crs": "http://www.opengis.net/def/crs/EPSG/0/5041", "orderedAxes": ["E", "N"], "tileMatrices": [ { "id": "0", "scaleDenominator": 458726544.4, "cellSize": 128443.4324, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 229363272.2, "cellSize": 64221.71621, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 114681636.1, "cellSize": 32110.85811, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 57340818.05, "cellSize": 16055.42905, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 28670409.02, "cellSize": 8027.714526, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 14335204.51, "cellSize": 4013.857263, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 7167602.256, "cellSize": 2006.928632, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 3583801.128, "cellSize": 1003.464316, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 1791900.564, "cellSize": 501.7321579, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 895950.282, "cellSize": 250.866079, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 447975.141, "cellSize": 125.4330395, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 223987.5705, "cellSize": 62.71651974, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 111993.7852, "cellSize": 31.35825987, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 55996.89262, "cellSize": 15.67912993, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 27998.44631, "cellSize": 7.839564967, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 13999.22316, "cellSize": 3.919782484, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 6999.611578, "cellSize": 1.959891242, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 3499.805789, "cellSize": 0.979945621, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 1749.902894, "cellSize": 0.48997281, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 874.9514472, "cellSize": 0.244986405, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 437.4757236, "cellSize": 0.122493203, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 218.7378618, "cellSize": 0.061246601, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 109.3689309, "cellSize": 0.030623301, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 54.68446545, "cellSize": 0.01531165, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "id": "24", "scaleDenominator": 27.34223273, "cellSize": 0.007655825, "pointOfOrigin": [-14440759.350252,18440759.350252], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] }morecantile-7.1.0/morecantile/data/UTM31WGS84Quad.json000066400000000000000000000163071525253500000223140ustar00rootroot00000000000000{ "id": "UTM31WGS84Quad", "title": "Universal Transverse Mercator Zone 31 WGS84 Quad", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/UTM31WGS84Quad", "crs": "http://www.opengis.net/def/crs/EPSG/0/32631", "orderedAxes": ["E", "N"], "tileMatrices": [ { "id": "1", "scaleDenominator": 279072704.500914, "cellSize": 78140.3572602559, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 139536352.250457, "cellSize": 39070.178630128, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 69768176.1252285, "cellSize": 19535.089315064, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 34884088.0626143, "cellSize": 9767.5446575319, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 17442044.0313071, "cellSize": 4883.772328766, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 8721022.01565356, "cellSize": 2441.886164383, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 4360511.00782678, "cellSize": 1220.9430821915, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 2180255.50391339, "cellSize": 610.471541095749, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 1090127.7519567, "cellSize": 305.235770547875, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 545063.875978348, "cellSize": 152.617885273937, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 272531.937989174, "cellSize": 76.3089426369687, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 136265.968994587, "cellSize": 38.1544713184843, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 68132.9844972935, "cellSize": 19.0772356592422, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 34066.4922486467, "cellSize": 9.53861782962109, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 17033.2461243234, "cellSize": 4.76930891481054, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 8516.62306216168, "cellSize": 2.38465445740527, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 4258.31153108084, "cellSize": 1.19232722870264, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 2129.15576554042, "cellSize": 0.596163614351318, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 1064.57788277021, "cellSize": 0.298081807175659, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 532.288941385105, "cellSize": 0.149040903587829, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 266.144470692553, "cellSize": 0.0745204517939147, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 133.072235346276, "cellSize": 0.0372602258969574, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 66.5361176731382, "cellSize": 0.0186301129484787, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 8388608 }, { "id": "24", "scaleDenominator": 33.2680588365691, "cellSize": 0.00931505647423934, "pointOfOrigin": [-9501965.72931276,20003931.4586255], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 16777216 } ] }morecantile-7.1.0/morecantile/data/WGS1984Quad.json000066400000000000000000000154221525253500000217310ustar00rootroot00000000000000{ "id": "WGS1984Quad", "title": "EPSG:4326 for the World", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WorldCRS84Quad", "crs": "http://www.opengis.net/def/crs/EPSG/0/4326", "orderedAxes": [ "Lat", "Lon" ], "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleCRS84Quad", "tileMatrices": [ { "id": "0", "scaleDenominator": 279541132.014358, "cellSize": 0.703125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 139770566.007179, "cellSize": 0.3515625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 69885283.0035897, "cellSize": 0.17578125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 34942641.5017948, "cellSize": 0.087890625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 17471320.7508974, "cellSize": 0.0439453125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 8735660.37544871, "cellSize": 0.02197265625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 4367830.18772435, "cellSize": 0.010986328125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 2183915.09386217, "cellSize": 0.0054931640625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 1091957.54693108, "cellSize": 0.00274658203125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 545978.773465544, "cellSize": 0.001373291015625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 272989.386732772, "cellSize": 0.0006866455078125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 136494.693366386, "cellSize": 0.00034332275390625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 68247.346683193, "cellSize": 0.000171661376953125, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 34123.6733415964, "cellSize": 0.0000858306884765625, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 17061.8366707982, "cellSize": 0.0000429153442382812, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 8530.91833539913, "cellSize": 0.0000214576721191406, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 4265.45916769956, "cellSize": 0.0000107288360595703, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 2132.72958384978, "cellSize": 0.00000536441802978515, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 1066.36479192489, "cellSize": 0.00000268220901489258, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 533.182395962445, "cellSize": 0.00000134110450744629, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 266.591197981222, "cellSize": 0.00000067055225372314, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 133.295598990611, "cellSize": 0.00000033527612686157, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 66.6477994953056, "cellSize": 0.00000016763806343079, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 33.3238997476528, "cellSize": 0.00000008381903171539, "pointOfOrigin": [ 90, -180 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 8388608 } ] } morecantile-7.1.0/morecantile/data/WebMercatorQuad.json000066400000000000000000000254231525253500000231570ustar00rootroot00000000000000{ "id": "WebMercatorQuad", "title": "Google Maps Compatible for the World", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad", "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "orderedAxes": [ "X", "Y" ], "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible", "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.0287178, "cellSize": 156543.03392804097, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 279541132.0143589, "cellSize": 78271.51696402048, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 139770566.00717944, "cellSize": 39135.75848201024, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 69885283.00358972, "cellSize": 19567.87924100512, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 34942641.50179486, "cellSize": 9783.93962050256, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 17471320.75089743, "cellSize": 4891.96981025128, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 8735660.375448715, "cellSize": 2445.98490512564, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 4367830.1877243575, "cellSize": 1222.99245256282, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 2183915.0938621787, "cellSize": 611.49622628141, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 1091957.5469310894, "cellSize": 305.748113140705, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 545978.7734655447, "cellSize": 152.8740565703525, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 272989.38673277234, "cellSize": 76.43702828517625, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 136494.69336638617, "cellSize": 38.21851414258813, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 68247.34668319309, "cellSize": 19.109257071294063, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 34123.67334159654, "cellSize": 9.554628535647032, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 17061.83667079827, "cellSize": 4.777314267823516, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 8530.918335399136, "cellSize": 2.388657133911758, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 4265.459167699568, "cellSize": 1.194328566955879, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 2132.729583849784, "cellSize": 0.5971642834779395, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 1066.364791924892, "cellSize": 0.29858214173896974, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 533.182395962446, "cellSize": 0.14929107086948487, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 266.591197981223, "cellSize": 0.07464553543474244, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 133.2955989906115, "cellSize": 0.03732276771737122, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 66.64779949530575, "cellSize": 0.01866138385868561, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "id": "24", "scaleDenominator": 33.323899747652874, "cellSize": 0.009330691929342804, "cornerOfOrigin": "topLeft", "pointOfOrigin": [ -20037508.342789244, 20037508.342789244 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] }morecantile-7.1.0/morecantile/data/WorldCRS84Quad.json000066400000000000000000000156401525253500000225600ustar00rootroot00000000000000{ "id": "WorldCRS84Quad", "title": "CRS84 for the World", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WorldCRS84Quad", "crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "orderedAxes": [ "Lon", "Lat" ], "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleCRS84Quad", "tileMatrices": [ { "id": "0", "scaleDenominator": 279541132.014358, "cellSize": 0.703125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 139770566.007179, "cellSize": 0.3515625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 69885283.0035897, "cellSize": 0.17578125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 34942641.5017948, "cellSize": 0.087890625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 17471320.7508974, "cellSize": 0.0439453125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 8735660.37544871, "cellSize": 0.02197265625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 4367830.18772435, "cellSize": 0.010986328125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 2183915.09386217, "cellSize": 0.0054931640625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 1091957.54693108, "cellSize": 0.00274658203125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 545978.773465544, "cellSize": 0.001373291015625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 272989.386732772, "cellSize": 0.0006866455078125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 136494.693366386, "cellSize": 0.00034332275390625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 68247.346683193, "cellSize": 0.000171661376953125, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 34123.6733415964, "cellSize": 0.0000858306884765625, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 17061.8366707982, "cellSize": 0.0000429153442382812, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 8530.91833539913, "cellSize": 0.0000214576721191406, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 4265.45916769956, "cellSize": 0.0000107288360595703, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 2132.72958384978, "cellSize": 0.00000536441802978515, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 1066.36479192489, "cellSize": 0.00000268220901489258, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 533.182395962445, "cellSize": 0.00000134110450744629, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 266.591197981222, "cellSize": 0.00000067055225372314, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 133.295598990611, "cellSize": 0.00000033527612686157, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 66.6477994953056, "cellSize": 0.00000016763806343079, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 33.3238997476528, "cellSize": 0.00000008381903171539, "pointOfOrigin": [ -180, 90 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 8388608 } ] }morecantile-7.1.0/morecantile/data/WorldMercatorWGS84Quad.json000066400000000000000000000155311525253500000242650ustar00rootroot00000000000000{ "id": "WorldMercatorWGS84Quad", "title": "World Mercator WGS84 (ellipsoid)", "uri": "http://www.opengis.net/def/tilematrixset/OGC/1.0/WorldMercatorWGS84Quad", "crs": "http://www.opengis.net/def/crs/EPSG/0/3395", "orderedAxes": ["E", "N"], "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/WorldMercatorWGS84", "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.028717, "cellSize": 156543.033928041, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "id": "1", "scaleDenominator": 279541132.014358, "cellSize": 78271.5169640204, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "id": "2", "scaleDenominator": 139770566.007179, "cellSize": 39135.7584820102, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "id": "3", "scaleDenominator": 69885283.0035897, "cellSize": 19567.8792410051, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "id": "4", "scaleDenominator": 34942641.5017948, "cellSize": 9783.93962050256, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "id": "5", "scaleDenominator": 17471320.7508974, "cellSize": 4891.96981025128, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "id": "6", "scaleDenominator": 8735660.37544871, "cellSize": 2445.98490512564, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "id": "7", "scaleDenominator": 4367830.18772435, "cellSize": 1222.99245256282, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "id": "8", "scaleDenominator": 2183915.09386217, "cellSize": 611.49622628141, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "id": "9", "scaleDenominator": 1091957.54693108, "cellSize": 305.748113140704, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "id": "10", "scaleDenominator": 545978.773465544, "cellSize": 152.874056570352, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "id": "11", "scaleDenominator": 272989.386732772, "cellSize": 76.4370282851762, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "id": "12", "scaleDenominator": 136494.693366386, "cellSize": 38.2185141425881, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "id": "13", "scaleDenominator": 68247.346683193, "cellSize": 19.109257071294, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "id": "14", "scaleDenominator": 34123.6733415964, "cellSize": 9.55462853564703, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "id": "15", "scaleDenominator": 17061.8366707982, "cellSize": 4.77731426782351, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "id": "16", "scaleDenominator": 8530.91833539913, "cellSize": 2.38865713391175, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "id": "17", "scaleDenominator": 4265.45916769956, "cellSize": 1.19432856695587, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "id": "18", "scaleDenominator": 2132.72958384978, "cellSize": 0.597164283477939, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "id": "19", "scaleDenominator": 1066.36479192489, "cellSize": 0.29858214173897, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "id": "20", "scaleDenominator": 533.182395962445, "cellSize": 0.149291070869485, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "id": "21", "scaleDenominator": 266.591197981222, "cellSize": 0.0746455354347424, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "id": "22", "scaleDenominator": 133.295598990611, "cellSize": 0.0373227677173712, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "id": "23", "scaleDenominator": 66.6477994953056, "cellSize": 0.0186613838586856, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "id": "24", "scaleDenominator": 33.3238997476528, "cellSize": 0.0093306919293428, "pointOfOrigin": [-20037508.3427892,20037508.3427892], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] }morecantile-7.1.0/morecantile/defaults.py000066400000000000000000000035641525253500000205110ustar00rootroot00000000000000"""Default Morecantile TMS.""" import os import pathlib from copy import copy, deepcopy import attr from morecantile.errors import InvalidIdentifier from morecantile.models import TileMatrixSet morecantile_tms_dir = pathlib.Path(__file__).parent.joinpath("data") tms_paths = list(pathlib.Path(morecantile_tms_dir).glob("*.json")) user_tms_dir = os.environ.get("TILEMATRIXSET_DIRECTORY", None) if user_tms_dir: tms_paths.extend(list(pathlib.Path(user_tms_dir).glob("*.json"))) default_tms: dict[str, TileMatrixSet | pathlib.Path] = { tms.stem: tms for tms in sorted(tms_paths) } @attr.s(frozen=True) class TileMatrixSets: """Default TileMatrixSets holder.""" tilematrixsets: dict = attr.ib() def get(self, identifier: str) -> TileMatrixSet: """Fetch a TMS.""" if identifier not in self.tilematrixsets: raise InvalidIdentifier(f"Invalid identifier: {identifier}") tilematrix = self.tilematrixsets[identifier] # We lazyload the TMS document only when called if isinstance(tilematrix, pathlib.Path): with tilematrix.open() as f: tilematrix = TileMatrixSet.model_validate_json(f.read()) self.tilematrixsets[identifier] = tilematrix return deepcopy(tilematrix) def list(self) -> list[str]: """List registered TMS.""" return list(self.tilematrixsets.keys()) def register( self, custom_tms: dict[str, TileMatrixSet], overwrite: bool = False, ) -> "TileMatrixSets": """Register TileMatrixSet(s).""" for identifier in custom_tms.keys(): if identifier in self.tilematrixsets and not overwrite: raise InvalidIdentifier(f"{identifier} is already a registered TMS.") return TileMatrixSets({**self.tilematrixsets, **custom_tms}) tms = TileMatrixSets(copy(default_tms)) # noqa morecantile-7.1.0/morecantile/errors.py000066400000000000000000000016131525253500000202070ustar00rootroot00000000000000"""Morecantile errors.""" class MorecantileError(Exception): """Base error for Morecantile.""" class InvalidIdentifier(MorecantileError): """Invalid TileMatrixSet indentifier.""" class InvalidLatitudeError(MorecantileError): """Raised when math errors occur beyond ~85 degrees N or S""" class TileArgParsingError(MorecantileError): """Raised when errors occur in parsing a function's tile arg(s)""" class PointOutsideTMSBounds(UserWarning): """Point is outside TMS bounds.""" class NoQuadkeySupport(MorecantileError): """Raised when a custom TileMatrixSet doesn't support quadkeys""" class QuadKeyError(MorecantileError): """Raised when errors occur in computing or parsing quad keys""" class InvalidZoomError(MorecantileError): """Raised when input zoom is invalid.""" class DeprecationError(MorecantileError): """Raised when TMS version is not 2.0""" morecantile-7.1.0/morecantile/models.py000066400000000000000000001602161525253500000201630ustar00rootroot00000000000000"""Pydantic modules for OGC TileMatrixSets (https://www.ogc.org/standards/tms)""" import math import os import warnings from collections.abc import Iterator, Sequence from functools import cached_property, lru_cache from typing import Any, Literal import pyproj from pydantic import ( AnyHttpUrl, AnyUrl, BaseModel, Field, PrivateAttr, RootModel, field_validator, model_validator, ) from pyproj.exceptions import CRSError from typing_extensions import Annotated from morecantile.commons import BoundingBox, Coords, Tile from morecantile.errors import ( DeprecationError, InvalidZoomError, NoQuadkeySupport, PointOutsideTMSBounds, QuadKeyError, ) from morecantile.utils import ( _parse_tile_arg, bbox_to_feature, check_quadkey_support, lons_contain_antimeridian, meters_per_unit, point_in_bbox, to_rasterio_crs, truncate_coordinates, ) NumType = float | int BoundsType = tuple[NumType, NumType] LL_EPSILON = 1e-11 axesInfo = Annotated[list[str], Field(min_length=2, max_length=2)] WGS84_CRS = pyproj.CRS.from_epsg(4326) DEFAULT_GEOGRAPHIC_CRS = os.environ.get("MORECANTILE_DEFAULT_GEOGRAPHIC_CRS") TransformerFromCRS = lru_cache(pyproj.Transformer.from_crs) class CRSUri(BaseModel): """Coordinate Reference System (CRS) from URI.""" uri: Annotated[ AnyUrl, Field( json_schema_extra={ "description": "Reference to one coordinate reference system (CRS) as URI", "exemples": [ "http://www.opengis.net/def/crs/EPSG/0/3978", "urn:ogc:def:crs:EPSG::2193", ], } ), ] class CRSWKT(BaseModel): """Coordinate Reference System (CRS) from WKT encoded as PROJJSON Object.""" wkt: Annotated[ dict, Field( json_schema_extra={ "description": "An object defining the CRS using the JSON encoding for Well-known text representation of coordinate reference systems 2.0", } ), ] class CRSRef(BaseModel): """CRS from referenceSystem.""" referenceSystem: Annotated[ dict[str, Any], Field( json_schema_extra={ "description": "A reference system data structure as defined in the MD_ReferenceSystem of the ISO 19115", } ), ] class CRS(RootModel[str | CRSUri | CRSWKT | CRSRef]): """CRS model. Ref: https://github.com/opengeospatial/ogcapi-tiles/blob/master/openapi/schemas/common-geodata/crs.yaml Code generated using https://github.com/koxudaxi/datamodel-code-generator/ """ _pyproj_crs: pyproj.CRS = PrivateAttr() def model_post_init(self, __context: Any) -> None: """Post Init: Set private attr.""" super().model_post_init(__context) if isinstance(self.root, str): self._pyproj_crs = pyproj.CRS.from_user_input(self.root) elif isinstance(self.root, CRSUri): self._pyproj_crs = pyproj.CRS.from_user_input(str(self.root.uri)) elif isinstance(self.root, CRSWKT): self._pyproj_crs = pyproj.CRS.from_json_dict(self.root.wkt) elif isinstance(self.root, CRSRef): raise NotImplementedError( "Morecantile does not support `MD_ReferenceSystem` defined CRS" ) @property def srs(self) -> str: """return the string form of the user input used to create the CRS.""" return self._pyproj_crs.srs def to_epsg(self, *args: Any, **kwargs: Any) -> int | None: """return EPSG number of the CRS.""" return self._pyproj_crs.to_epsg(*args, **kwargs) def to_wkt(self, *args: Any, **kwargs: Any) -> str: """return WKT version of the CRS.""" return self._pyproj_crs.to_wkt(*args, **kwargs) def to_proj4(self, *args: Any, **kwargs: Any) -> str: """return PROJ4 version of the CRS.""" return self._pyproj_crs.to_proj4(*args, **kwargs) def to_dict(self) -> dict: """return DICT version of the CRS.""" return self._pyproj_crs.to_dict() def to_json(self, *args: Any, **kwargs: Any) -> str: """return JSON version of the CRS.""" return self._pyproj_crs.to_json(*args, **kwargs) # For compatibility CRSType = CRS def CRS_to_uri(crs: pyproj.CRS) -> str: """Convert CRS to URI.""" authority = "EPSG" code = None version = "0" # attempt to grab the authority, version, and code from the CRS authority_code = crs.to_authority(min_confidence=20) if authority_code is not None: authority, code = authority_code # if we have a version number in the authority, split it out if "_" in authority: authority, version = authority.split("_") return f"http://www.opengis.net/def/crs/{authority}/{version}/{code}" def crs_axis_inverted(crs: pyproj.CRS) -> bool: """Check if CRS has inverted AXIS (lat,lon) instead of (lon,lat).""" return crs.axis_info[0].abbrev.upper() in ["Y", "LAT", "N"] def ordered_axis_inverted(ordered_axes: list[str]) -> bool: """Check if ordered axes have inverted AXIS (lat,lon) instead of (lon,lat).""" return ordered_axes[0].upper() in ["Y", "LAT", "N"] class TMSBoundingBox(BaseModel, arbitrary_types_allowed=True): """Bounding box ref: https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/schemas/tms/2.0/json/2DBoundingBox.json """ lowerLeft: Annotated[ BoundsType, Field( json_schema_extra={ "description": "A 2D Point in the CRS indicated elsewhere", } ), ] upperRight: Annotated[ BoundsType, Field( json_schema_extra={ "description": "A 2D Point in the CRS indicated elsewhere", } ), ] crs: Annotated[ CRS | None, Field( json_schema_extra={ "description": "Coordinate Reference System (CRS)", } ), ] = None orderedAxes: Annotated[ axesInfo | None, Field( json_schema_extra={ "description": "Ordered list of names of the dimensions defined in the CRS", } ), ] = None class variableMatrixWidth(BaseModel): """Variable Matrix Width Definition ref: https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/schemas/tms/2.0/json/variableMatrixWidth.json """ coalesce: Annotated[ int, Field( ge=2, multiple_of=1, json_schema_extra={ "description": "Number of tiles in width that coalesce in a single tile for these rows", }, ), ] minTileRow: Annotated[ int, Field( ge=0, multiple_of=1, json_schema_extra={ "description": "First tile row where the coalescence factor applies for this tilematrix", }, ), ] maxTileRow: Annotated[ int, Field( ge=0, multiple_of=1, json_schema_extra={ "description": "Last tile row where the coalescence factor applies for this tilematrix", }, ), ] class TileMatrix(BaseModel, extra="forbid"): """Tile Matrix Definition A tile matrix, usually corresponding to a particular zoom level of a TileMatrixSet. ref: https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/schemas/tms/2.0/json/tileMatrix.json """ title: Annotated[ str | None, Field( json_schema_extra={ "description": "Title of this tile matrix, normally used for display to a human", } ), ] = None description: Annotated[ str | None, Field( json_schema_extra={ "description": "Brief narrative description of this tile matrix set, normally available for display to a human", } ), ] = None keywords: Annotated[ list[str] | None, Field( json_schema_extra={ "description": "Unordered list of one or more commonly used or formalized word(s) or phrase(s) used to describe this dataset", } ), ] = None id: Annotated[ str, Field( pattern=r"^\-?[0-9]+$", json_schema_extra={ "description": "Identifier selecting one of the scales defined in the TileMatrixSet and representing the scaleDenominator the tile. Implementation of 'identifier'", }, ), ] scaleDenominator: Annotated[ float, Field( json_schema_extra={ "description": "Scale denominator of this tile matrix", } ), ] cellSize: Annotated[ float, Field( json_schema_extra={ "description": "Cell size of this tile matrix", } ), ] cornerOfOrigin: Annotated[ Literal["topLeft", "bottomLeft"], Field( json_schema_extra={ "description": "The corner of the tile matrix (_topLeft_ or _bottomLeft_) used as the origin for numbering tile rows and columns. This corner is also a corner of the (0, 0) tile.", } ), ] = "topLeft" pointOfOrigin: Annotated[ BoundsType, Field( json_schema_extra={ "description": "Precise position in CRS coordinates of the corner of origin (e.g. the top-left corner) for this tile matrix. This position is also a corner of the (0, 0) tile. In previous version, this was 'topLeftCorner' and 'cornerOfOrigin' did not exist.", } ), ] tileWidth: Annotated[ int, Field( ge=1, multiple_of=1, json_schema_extra={ "description": "Width of each tile of this tile matrix in pixels", }, ), ] tileHeight: Annotated[ int, Field( ge=1, multiple_of=1, json_schema_extra={ "description": "Height of each tile of this tile matrix in pixels", }, ), ] matrixWidth: Annotated[ int, Field( ge=1, multiple_of=1, json_schema_extra={ "description": "Width of the matrix (number of tiles in width)", }, ), ] matrixHeight: Annotated[ int, Field( ge=1, multiple_of=1, json_schema_extra={ "description": "Height of the matrix (number of tiles in height)", }, ), ] variableMatrixWidths: Annotated[ list[variableMatrixWidth] | None, Field( json_schema_extra={ "description": "Describes the rows that has variable matrix width", } ), ] = None def get_coalesce_factor(self, row: int) -> int: """Get Coalesce value for TileMatrix.""" if not self.variableMatrixWidths: raise ValueError("TileMatrix has not variableMatrixWidths") if row < 0: raise ValueError(f"Cannot find coalesce factor for Negative Row ({row})") if row > self.matrixHeight - 1: raise ValueError( f"Row {row} is greater than the TileMatrix height ({self.matrixHeight})" ) for matrix_width in self.variableMatrixWidths: if matrix_width.maxTileRow >= row >= matrix_width.minTileRow: return matrix_width.coalesce return 1 class TileMatrixSet(BaseModel, arbitrary_types_allowed=True, extra="ignore"): """Tile Matrix Set Definition A definition of a tile matrix set following the Tile Matrix Set standard. For tileset metadata, such a description (in `tileMatrixSet` property) is only required for offline use, as an alternative to a link with a `http://www.opengis.net/def/rel/ogc/1.0/tiling-scheme` relation type. ref: https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/schemas/tms/2.0/json/tileMatrixSet.json """ title: Annotated[ str | None, Field( json_schema_extra={ "description": "Title of this tile matrix set, normally used for display to a human", }, frozen=True, ), ] = None description: Annotated[ str | None, Field( json_schema_extra={ "description": "Brief narrative description of this tile matrix set, normally available for display to a human", }, frozen=True, ), ] = None keywords: Annotated[ list[str] | None, Field( json_schema_extra={ "description": "Unordered list of one or more commonly used or formalized word(s) or phrase(s) used to describe this tile matrix set", }, frozen=True, ), ] = None id: Annotated[ str | None, Field( pattern=r"^[\w\d_\-]+$", json_schema_extra={ "description": "Tile matrix set identifier. Implementation of 'identifier'", }, frozen=True, ), ] = None uri: Annotated[ str | None, Field( json_schema_extra={ "description": "Reference to an official source for this tileMatrixSet", }, frozen=True, ), ] = None orderedAxes: Annotated[ axesInfo | None, Field( json_schema_extra={ "description": "Ordered list of names of the dimensions defined in the CRS", }, frozen=True, ), ] = None crs: Annotated[ CRS, Field( json_schema_extra={ "description": "Coordinate Reference System (CRS)", }, frozen=True, ), ] wellKnownScaleSet: Annotated[ AnyHttpUrl | None, Field( json_schema_extra={ "description": "Reference to a well-known scale set", }, frozen=True, ), ] = None boundingBox: Annotated[ TMSBoundingBox | None, Field( json_schema_extra={ "description": "Minimum bounding rectangle surrounding the tile matrix set, in the supported CRS", }, frozen=True, ), ] = None tileMatrices: Annotated[ list[TileMatrix], Field( json_schema_extra={ "description": "Describes scale levels and its tile matrices", }, frozen=True, ), ] # Private attributes _geographic_crs: pyproj.CRS = PrivateAttr() _tile_matrices_idx: dict[int, int] = PrivateAttr() def __init__(self, **data): """Set private attributes.""" super().__init__(**data) self._tile_matrices_idx = { int(mat.id): idx for idx, mat in enumerate(self.tileMatrices) } # Default Geographic CRS from TMS's CRS self._geographic_crs = ( pyproj.CRS.from_user_input(DEFAULT_GEOGRAPHIC_CRS) if DEFAULT_GEOGRAPHIC_CRS else self.crs._pyproj_crs.geodetic_crs ) @model_validator(mode="before") def check_for_old_specification(cls, data): """Check for TMS V1.0 keywords.""" if {"supportedCRS", "topLeftCorner"}.intersection(data): raise DeprecationError( "Tile Matrix Set must be version 2.0. Use morecantile <4.0 for TMS 1.0 support" ) return data @field_validator("tileMatrices") def sort_tile_matrices(cls, v): """Sort matrices by identifier""" return sorted(v, key=lambda m: int(m.id)) @cached_property def is_quadtree(self) -> bool: """Check for quadtree support.""" return check_quadkey_support(self.tileMatrices) @cached_property def is_variable(self) -> bool: """Check if TMS has variable width matrix.""" return any( True if matrix.variableMatrixWidths is not None else False for matrix in self.tileMatrices ) def __iter__(self): """Iterate over matrices""" for matrix in self.tileMatrices: yield matrix def __repr__(self): """Simplify default pydantic model repr.""" return f" int: """TileMatrixSet minimum TileMatrix identifier""" return int(self.tileMatrices[0].id) @property def maxzoom(self) -> int: """TileMatrixSet maximum TileMatrix identifier""" return int(self.tileMatrices[-1].id) @cached_property def _invert_axis(self) -> bool: """Check if CRS has inverted AXIS (lat,lon) instead of (lon,lat).""" return ( ordered_axis_inverted(self.orderedAxes) if self.orderedAxes else crs_axis_inverted(self.crs._pyproj_crs) ) @classmethod def from_v1(cls, tms: dict) -> "TileMatrixSet": """ Makes a TMS from a v1 TMS definition Attributes ---------- supportedCRS: CRS Tile Matrix Set coordinate reference system title: str Title of TMS abstract: str (optional) Abstract of CRS keywords: str (optional) Keywords identifier: str TMS Identifier wellKnownScaleSet: AnyHttpUrl (optional) WKSS URL boundingBox: TMSBoundingBox (optional) Bounding box of TMS tileMatrix: list[TileMatrix] List of Tile Matrices Returns: -------- TileMatrixSet """ v2_tms = tms.copy() del v2_tms["type"] if tms_bbox := v2_tms.pop("boundingBox", None): del tms_bbox["type"] tms_bbox["lowerLeft"] = tms_bbox.pop("lowerCorner") tms_bbox["upperRight"] = tms_bbox.pop("upperCorner") v2_tms["boundingBox"] = tms_bbox v2_tms["crs"] = v2_tms.pop("supportedCRS") v2_tms["tileMatrices"] = v2_tms.pop("tileMatrix") v2_tms["id"] = v2_tms.pop("identifier") mpu = meters_per_unit(pyproj.CRS.from_user_input(v2_tms["crs"])) for i in range(len(v2_tms["tileMatrices"])): v2_tms["tileMatrices"][i]["cellSize"] = ( v2_tms["tileMatrices"][i]["scaleDenominator"] * 0.28e-3 / mpu ) v2_tms["tileMatrices"][i]["pointOfOrigin"] = v2_tms["tileMatrices"][i].pop( "topLeftCorner" ) v2_tms["tileMatrices"][i]["id"] = v2_tms["tileMatrices"][i].pop( "identifier" ) del v2_tms["tileMatrices"][i]["type"] return TileMatrixSet(**v2_tms) @classmethod def custom( cls, extent: list[float], crs: pyproj.CRS, tile_width: int = 256, tile_height: int = 256, matrix_scale: list | None = None, extent_crs: pyproj.CRS | None = None, minzoom: int = 0, maxzoom: int = 24, title: str | None = None, id: str | None = None, ordered_axes: list[str] | None = None, screen_pixel_size: float = 0.28e-3, decimation_base: int = 2, corner_of_origin: Literal["topLeft", "bottomLeft"] = "topLeft", point_of_origin: list[float] = None, **kwargs: Any, ): """ Construct a custom TileMatrixSet. Attributes ---------- extent: list Bounding box of the Tile Matrix Set, (left, bottom, right, top). crs: pyproj.CRS Tile Matrix Set coordinate reference system tile_width: int Width of each tile of this tile matrix in pixels (default is 256). tile_height: int Height of each tile of this tile matrix in pixels (default is 256). matrix_scale: list Tiling schema coalescence coefficient (default: [1, 1] for EPSG:3857). Should be set to [2, 1] for EPSG:4326. see: http://docs.opengeospatial.org/is/17-083r2/17-083r2.html#14 extent_crs: pyproj.CRS Extent's coordinate reference system, as a pyproj CRS object. (default: same as input crs) minzoom: int Tile Matrix Set minimum zoom level (default is 0). maxzoom: int Tile Matrix Set maximum zoom level (default is 24). title: str, optional Tile Matrix Set title id: str, optional Tile Matrix Set identifier ordered_axes: list of str, optional Override Axis order (e.g `["N", "S"]`) else default to CRS's metadata screen_pixel_size: float, optional Rendering pixel size. 0.28 mm was the actual pixel size of a common display from 2005 and considered as standard by OGC. decimation_base: int, optional How tiles are divided at each zoom level (default is 2). Must be greater than 1. corner_of_origin: str, optional Corner of origin for the TMS, either 'topLeft' or 'bottomLeft' point_of_origin: list, optional Point of origin for the TMS, (x, y) coordinates in the TMS CRS. kwargs: Any Attributes to forward to the TileMatrixSet Returns: -------- TileMatrixSet """ matrix_scale = matrix_scale or [1, 1] if ordered_axes: is_inverted = ordered_axis_inverted(ordered_axes) else: is_inverted = crs_axis_inverted(crs) if extent_crs: transform = pyproj.Transformer.from_crs(extent_crs, crs, always_xy=True) left, bottom, right, top = extent extent = list( transform.transform_bounds(left, bottom, right, top, densify_pts=21) ) if decimation_base <= 1: raise ValueError( "Custom TileMatrixSet requires a decimation base that is greater than 1." ) bbox = BoundingBox(*extent) if not point_of_origin: if corner_of_origin == "topLeft": x_origin = bbox.left if not is_inverted else bbox.top y_origin = bbox.top if not is_inverted else bbox.left point_of_origin = [x_origin, y_origin] elif corner_of_origin == "bottomLeft": x_origin = bbox.left if not is_inverted else bbox.bottom y_origin = bbox.bottom if not is_inverted else bbox.left point_of_origin = [x_origin, y_origin] else: raise ValueError( f"Invalid `corner_of_origin` value: {corner_of_origin}, must be either 'topLeft' or 'bottomLeft'" ) width = abs(bbox.right - bbox.left) height = abs(bbox.top - bbox.bottom) mpu = meters_per_unit(crs) tile_matrices: list[TileMatrix] = [] for zoom in range(minzoom, maxzoom + 1): res = max( width / (tile_width * matrix_scale[0]) / float(decimation_base) ** zoom, height / (tile_height * matrix_scale[1]) / float(decimation_base) ** zoom, ) tile_matrices.append( TileMatrix( **{ "id": str(zoom), "scaleDenominator": res * mpu / screen_pixel_size, "cellSize": res, "cornerOfOrigin": corner_of_origin, "pointOfOrigin": point_of_origin, "tileWidth": tile_width, "tileHeight": tile_height, "matrixWidth": matrix_scale[0] * decimation_base**zoom, "matrixHeight": matrix_scale[1] * decimation_base**zoom, } ) ) if crs.to_authority(min_confidence=20): crs_data: Any = CRS_to_uri(crs) # Some old Proj version might not support URI # so we fall back to wkt try: pyproj.CRS.from_user_input(crs_data) except CRSError: crs_data = {"wkt": crs.to_json_dict()} else: crs_data = {"wkt": crs.to_json_dict()} return cls( crs=crs_data, tileMatrices=tile_matrices, id=id, title=title, **kwargs, ) def matrix(self, zoom: int) -> TileMatrix: """Return the TileMatrix for a specific zoom.""" if (idx := self._tile_matrices_idx.get(zoom, None)) is not None: return self.tileMatrices[idx] ####################################################################### # If user wants a deeper matrix we calculate it ####################################################################### if self.is_variable: raise InvalidZoomError( f"TileMatrix not found for level: {zoom} - Unable to construct tileMatrix for TMS with variable width" ) matrix_scale = list( { round( self.tileMatrices[idx].scaleDenominator / self.tileMatrices[idx - 1].scaleDenominator, 2, ) for idx in range(1, len(self.tileMatrices)) } ) if len(matrix_scale) > 1: raise InvalidZoomError( f"TileMatrix not found for level: {zoom} - Unable to construct tileMatrix for TMS with variable scale" ) warnings.warn( f"TileMatrix not found for level: {zoom} - Creating values from TMS Scale.", UserWarning, stacklevel=1, ) # TODO: what if we want to construct a matrix for a level up ? tile_matrix = self.tileMatrices[-1] factor = 1 / matrix_scale[0] while not str(zoom) == tile_matrix.id: tile_matrix = TileMatrix( id=str(int(tile_matrix.id) + 1), scaleDenominator=tile_matrix.scaleDenominator / factor, cellSize=tile_matrix.cellSize / factor, cornerOfOrigin=tile_matrix.cornerOfOrigin, pointOfOrigin=tile_matrix.pointOfOrigin, tileWidth=tile_matrix.tileWidth, tileHeight=tile_matrix.tileHeight, matrixWidth=int(tile_matrix.matrixWidth * factor), matrixHeight=int(tile_matrix.matrixHeight * factor), ) return tile_matrix def _matrix_origin(self, matrix: TileMatrix) -> Coords: """Return the Origin coordinates of the matrix.""" origin_x = ( matrix.pointOfOrigin[1] if self._invert_axis else matrix.pointOfOrigin[0] ) origin_y = ( matrix.pointOfOrigin[0] if self._invert_axis else matrix.pointOfOrigin[1] ) return Coords(origin_x, origin_y) def zoom_for_res( self, res: float, max_z: int | None = None, zoom_level_strategy: str = "auto", min_z: int | None = None, ) -> int: """Get TMS zoom level corresponding to a specific resolution. Args: res (float): Resolution in TMS unit. max_z (int): Maximum zoom level (default is tms maxzoom). zoom_level_strategy (str): Strategy to determine zoom level (same as in GDAL 3.2). LOWER will select the zoom level immediately below the theoretical computed non-integral zoom level. On the contrary, UPPER will select the immediately above zoom level. Defaults to AUTO which selects the closest zoom level. ref: https://gdal.org/drivers/raster/cog.html#raster-cog min_z (int): Minimum zoom level (default is tms minzoom). Returns: int: TMS zoom for a given resolution. Examples: >>> zoom_for_res(430.021) """ if max_z is None: max_z = self.maxzoom if min_z is None: min_z = self.minzoom # Freely adapted from https://github.com/OSGeo/gdal/blob/dc38aa64d779ecc45e3cd15b1817b83216cf96b8/gdal/frmts/gtiff/cogdriver.cpp#L272-L305 for zoom_level in range(min_z, max_z + 1): matrix_res = self.matrix(zoom_level).cellSize if res > matrix_res or abs(res - matrix_res) / matrix_res <= 1e-8: break if zoom_level > 0 and abs(res - matrix_res) / matrix_res > 1e-8: if zoom_level_strategy.lower() == "lower": zoom_level = max(zoom_level - 1, min_z) elif zoom_level_strategy.lower() == "upper": zoom_level = min(zoom_level, max_z) elif zoom_level_strategy.lower() == "auto": if (self.matrix(max(zoom_level - 1, min_z)).cellSize / res) < ( res / matrix_res ): zoom_level = max(zoom_level - 1, min_z) else: raise ValueError( f"Invalid strategy: {zoom_level_strategy}. Should be one of lower|upper|auto" ) return zoom_level def intersect_tms(self, bbox: BoundingBox) -> bool: """Check if a bounds intersects with the TMS bounds.""" tms_bounds = self.xy_bbox return ( (bbox[0] < tms_bounds[2]) and (bbox[2] > tms_bounds[0]) and (bbox[3] > tms_bounds[1]) and (bbox[1] < tms_bounds[3]) ) def lnglat(self, x: float, y: float, truncate: bool = False) -> Coords: """Transform point(x,y) to geographic longitude and latitude.""" inside = point_in_bbox(Coords(x, y), self.xy_bbox) if not inside: warnings.warn( f"Point ({x}, {y}) is outside TMS bounds {list(self.xy_bbox)}.", PointOutsideTMSBounds, stacklevel=1, ) lng, lat = self._to_geographic.transform(x, y) if truncate: lng, lat = truncate_coordinates(lng, lat, self.bbox) return Coords(lng, lat) def xy(self, lng: float, lat: float, truncate: bool = False) -> Coords: """Transform geographic longitude and latitude coordinates to TMS CRS.""" if truncate: lng, lat = truncate_coordinates(lng, lat, self.bbox) inside = point_in_bbox(Coords(lng, lat), self.bbox) if not inside: warnings.warn( f"Point ({lng}, {lat}) is outside TMS bounds {list(self.bbox)}.", PointOutsideTMSBounds, stacklevel=1, ) x, y = self._from_geographic.transform(lng, lat) return Coords(x, y) def _tile( self, xcoord: float, ycoord: float, zoom: int, ignore_coalescence: bool = True, ) -> Tile: """ Get the tile containing a Point (in TMS CRS). Parameters ---------- xcoord, ycoord : float A `X` and `Y` pair in TMS coordinate reference system. zoom : int The zoom level. Returns ------- Tile """ matrix = self.matrix(zoom) origin_x, origin_y = self._matrix_origin(matrix) xtile = ( math.floor((xcoord - origin_x) / float(matrix.cellSize * matrix.tileWidth)) if not math.isinf(xcoord) else 0 ) coord = ( (origin_y - ycoord) if matrix.cornerOfOrigin == "topLeft" else (ycoord - origin_y) ) ytile = ( math.floor(coord / float(matrix.cellSize * matrix.tileHeight)) if not math.isinf(ycoord) else 0 ) # avoid out-of-range tiles if ytile < 0: ytile = 0 if ytile >= matrix.matrixHeight: ytile = matrix.matrixHeight - 1 if xtile < 0: xtile = 0 if xtile >= matrix.matrixWidth: xtile = matrix.matrixWidth - 1 if not ignore_coalescence: cf = ( matrix.get_coalesce_factor(ytile) if matrix.variableMatrixWidths is not None else 1 ) if cf != 1 and xtile % cf: xtile -= xtile % cf return Tile(x=xtile, y=ytile, z=zoom) def tile( self, lng: float, lat: float, zoom: int, truncate=False, ignore_coalescence: bool = False, geographic_crs: pyproj.CRS | None = None, ) -> Tile: """ Get the tile for a given geographic longitude and latitude pair. Parameters ---------- lng, lat : float A longitude and latitude pair in geographic coordinate reference system. zoom : int The zoom level. truncate : bool Whether or not to truncate inputs to limits of TMS geographic bounds. ignore_coalescence : bool Whether or not to ignore coalescence factor for TMS with variable matrix width. geographic_crs: pyproj.CRS, optional Geographic CRS of the given coordinates. Default to TMS's Geographic CRS. Returns ------- Tile """ geographic_crs = geographic_crs or self.geographic_crs or WGS84_CRS _from_geographic = TransformerFromCRS( geographic_crs, self.crs._pyproj_crs, always_xy=True ) _to_geographic = TransformerFromCRS( self.crs._pyproj_crs, geographic_crs, always_xy=True ) if truncate: left, bottom, right, top = self.xy_bbox bbox = BoundingBox( *_to_geographic.transform_bounds( left, bottom, right, top, densify_pts=21 ), ) lng, lat = truncate_coordinates(lng, lat, bbox) x, y = _from_geographic.transform(lng, lat) if not point_in_bbox(Coords(x, y), self.xy_bbox): warnings.warn( f"Point ({lng}, {lat}) is outside TMS bounds.", PointOutsideTMSBounds, stacklevel=1, ) return self._tile(x, y, zoom, ignore_coalescence=ignore_coalescence) def _ul(self, *tile: Tile) -> Coords: """ Return the upper left coordinate of the tile in TMS coordinate reference system. Attributes ---------- tile: (x, y, z) tile coordinates or a Tile object we want the upper left coordinates of. Returns ------- Coords: The upper left coordinates of the input tile. """ t = _parse_tile_arg(*tile) matrix = self.matrix(t.z) origin_x, origin_y = self._matrix_origin(matrix) cf = ( matrix.get_coalesce_factor(t.y) if matrix.variableMatrixWidths is not None else 1 ) x_coord = ( origin_x + math.floor(t.x / cf) * matrix.cellSize * cf * matrix.tileWidth ) y_coord = ( origin_y - t.y * matrix.cellSize * matrix.tileHeight if matrix.cornerOfOrigin == "topLeft" else origin_y + (t.y + 1) * matrix.cellSize * matrix.tileHeight ) return Coords(x_coord, y_coord) def _lr(self, *tile: Tile) -> Coords: """ Return the lower right coordinate of the tile in TMS coordinate reference system. Attributes ---------- tile: (x, y, z) tile coordinates or a Tile object we want the lower right coordinates of. Returns ------- Coords: The lower right coordinates of the input tile. """ t = _parse_tile_arg(*tile) matrix = self.matrix(t.z) origin_x, origin_y = self._matrix_origin(matrix) cf = ( matrix.get_coalesce_factor(t.y) if matrix.variableMatrixWidths is not None else 1 ) x_coord = ( origin_x + (math.floor(t.x / cf) + 1) * matrix.cellSize * cf * matrix.tileWidth ) y_coord = ( origin_y - (t.y + 1) * matrix.cellSize * matrix.tileHeight if matrix.cornerOfOrigin == "topLeft" else origin_y + t.y * matrix.cellSize * matrix.tileHeight ) return Coords(x_coord, y_coord) def xy_bounds(self, *tile: Tile) -> BoundingBox: """ Return the bounding box of the tile in TMS coordinate reference system. Attributes ---------- tile: A tuple of (x, y, z) tile coordinates or a Tile object we want the bounding box of. Returns ------- BoundingBox: The bounding box of the input tile. """ t = _parse_tile_arg(*tile) matrix = self.matrix(t.z) origin_x, origin_y = self._matrix_origin(matrix) cf = ( matrix.get_coalesce_factor(t.y) if matrix.variableMatrixWidths is not None else 1 ) left = origin_x + math.floor(t.x / cf) * matrix.cellSize * cf * matrix.tileWidth right = ( origin_x + (math.floor(t.x / cf) + 1) * matrix.cellSize * cf * matrix.tileWidth ) if matrix.cornerOfOrigin == "topLeft": top = origin_y - t.y * matrix.cellSize * matrix.tileHeight bottom = origin_y - (t.y + 1) * matrix.cellSize * matrix.tileHeight else: bottom = origin_y + t.y * matrix.cellSize * matrix.tileHeight top = origin_y + (t.y + 1) * matrix.cellSize * matrix.tileHeight return BoundingBox(left, bottom, right, top) def ul(self, *tile: Tile) -> Coords: """ Return the upper left coordinates of the tile in geographic coordinate reference system. Attributes ---------- tile (tuple or Tile): (x, y, z) tile coordinates or a Tile object we want the upper left geographic coordinates of. Returns ------- Coords: The upper left geographic coordinates of the input tile. """ t = _parse_tile_arg(*tile) x, y = self._ul(t) return Coords(*self.lnglat(x, y)) def lr(self, *tile: Tile) -> Coords: """ Return the lower right coordinates of the tile in geographic coordinate reference system. Attributes ---------- tile (tuple or Tile): (x, y, z) tile coordinates or a Tile object we want the lower right geographic coordinates of. Returns ------- Coords: The lower right geographic coordinates of the input tile. """ t = _parse_tile_arg(*tile) x, y = self._lr(t) return Coords(*self.lnglat(x, y)) def bounds(self, *tile: Tile) -> BoundingBox: """ Return the bounding box of the tile in geographic coordinate reference system. Attributes ---------- tile (tuple or Tile): A tuple of (x, y, z) tile coordinates or a Tile object we want the bounding box of. Returns ------- BoundingBox: The bounding box of the input tile. """ _left, _bottom, _right, _top = self.xy_bounds(*tile) left, top = self.lnglat(_left, _top) right, bottom = self.lnglat(_right, _bottom) return BoundingBox(left, bottom, right, top) @cached_property def xy_bbox(self): """Return TMS bounding box in TileMatrixSet's CRS.""" zoom = self.minzoom matrix = self.matrix(zoom) left, top = self._ul(Tile(0, 0, zoom)) right, bottom = self._lr( Tile(matrix.matrixWidth - 1, matrix.matrixHeight - 1, zoom) ) return BoundingBox(left, bottom, right, top) @property def bbox(self): """Return TMS bounding box in geographic coordinate reference system.""" left, bottom, right, top = self.xy_bbox return BoundingBox( *self._to_geographic.transform_bounds( left, bottom, right, top, densify_pts=21, ) ) def tiles( # noqa: C901 self, west: float, south: float, east: float, north: float, zooms: Sequence[int], truncate: bool = False, geographic_crs: pyproj.CRS | None = None, ) -> Iterator[Tile]: """ Get the tiles overlapped by a geographic bounding box Original code from https://github.com/mapbox/mercantile/blob/master/mercantile/__init__.py#L424 Parameters ---------- west, south, east, north : sequence of float Bounding values in decimal degrees (geographic CRS). zooms : int or sequence of int One or more zoom levels. truncate : bool, optional Whether or not to truncate inputs to TMS limits. geographic_crs: pyproj.CRS, optional Geographic CRS of the given coordinates. Default to TMS's Geographic CRS Yields ------ Tile Notes ----- A small epsilon is used on the south and east parameters so that this function yields exactly one tile when given the bounds of that same tile. """ if any(math.isnan(coord) for coord in (west, south, east, north)): raise ValueError("All coordinates must be finite") if isinstance(zooms, int): zooms = (zooms,) geographic_crs = geographic_crs or self.geographic_crs or WGS84_CRS _from_geographic = TransformerFromCRS( geographic_crs, self.crs._pyproj_crs, always_xy=True ) _to_geographic = TransformerFromCRS( self.crs._pyproj_crs, geographic_crs, always_xy=True ) # TMS bbox left, bottom, right, top = self.xy_bbox bbox = BoundingBox( *_to_geographic.transform_bounds(left, bottom, right, top, densify_pts=21), ) if truncate: west, south = truncate_coordinates(west, south, bbox) east, north = truncate_coordinates(east, north, bbox) if west > east: bbox_west = (bbox.left, south, east, north) bbox_east = (west, south, bbox.right, north) bboxes = [bbox_west, bbox_east] else: bboxes = [(west, south, east, north)] for w, s, e, n in bboxes: # Clamp bounding values. es_contain_180th = lons_contain_antimeridian(e, bbox.right) w = max(bbox.left, w) s = max(bbox.bottom, s) e = max(bbox.right, e) if es_contain_180th else min(bbox.right, e) n = min(bbox.top, n) w, n = _from_geographic.transform(w + LL_EPSILON, n - LL_EPSILON) e, s = _from_geographic.transform(e - LL_EPSILON, s + LL_EPSILON) for z in zooms: nw_tile = self._tile(w, n, z, ignore_coalescence=True) se_tile = self._tile(e, s, z, ignore_coalescence=True) minx = min(nw_tile.x, se_tile.x) maxx = max(nw_tile.x, se_tile.x) miny = min(nw_tile.y, se_tile.y) maxy = max(nw_tile.y, se_tile.y) matrix = self.matrix(z) for j in range(miny, maxy + 1): cf = ( matrix.get_coalesce_factor(j) if matrix.variableMatrixWidths is not None else 1 ) for i in range(minx, maxx + 1): if cf != 1 and i % cf: continue yield Tile(i, j, z) def feature( self, tile: Tile, fid: str | None = None, props: dict | None = None, buffer: NumType | None = None, precision: int | None = None, projected: bool = False, geographic_crs: pyproj.CRS | None = None, ) -> dict: """ Get the GeoJSON feature corresponding to a tile. Originally from https://github.com/mapbox/mercantile/blob/master/mercantile/__init__.py Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. fid : str, optional A feature id. props : dict, optional Optional extra feature properties. buffer : float, optional Optional buffer distance for the GeoJSON polygon. precision: float If >= 0, geometry coordinates will be rounded to this number of decimal, otherwise original coordinate values will be preserved (default). projected : bool, optional Return coordinates in TMS projection. Default is false. geographic_crs: pyproj.CRS, optional Geographic CRS to use when `projected=False`. Default to 'EPSG:4326' as per GeoJSON specification. . Returns ------- dict """ geographic_crs = geographic_crs or WGS84_CRS feature_crs = self.crs._pyproj_crs west, south, east, north = self.xy_bounds(tile) if not projected: feature_crs = geographic_crs tr = pyproj.Transformer.from_crs( self.crs._pyproj_crs, geographic_crs, always_xy=True ) west, south, east, north = tr.transform_bounds( west, south, east, north, densify_pts=21 ) if buffer: west -= buffer south -= buffer east += buffer north += buffer if precision and precision >= 0: west, south, east, north = ( round(v, precision) for v in (west, south, east, north) ) bbox = [min(west, east), min(south, north), max(west, east), max(south, north)] geom = bbox_to_feature(west, south, east, north) xyz = str(tile) feat: dict[str, Any] = { "type": "Feature", "bbox": bbox, "id": xyz, "geometry": geom, "properties": { "title": f"XYZ tile {xyz}", "tms": self.id, "tms_crs": CRS_to_uri(self.crs._pyproj_crs), }, } if feature_crs != WGS84_CRS: warnings.warn( "CRS is no longer part of the GeoJSON specification." "Other projection than EPSG:4326 might not be supported.", UserWarning, stacklevel=1, ) if feature_crs.to_authority(min_confidence=20): feat.update( { "crs": { "type": "name", "properties": {"name": CRS_to_uri(feature_crs)}, } } ) else: feat.update( { "crs": { "type": "wkt", "properties": {"wkt": feature_crs.to_wkt()}, } } ) if props: feat["properties"].update(props) if fid is not None: feat["id"] = fid return feat def quadkey(self, *tile: Tile) -> str: """Get the quadkey of a tile Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. Returns ------- str """ if not self.is_quadtree: raise NoQuadkeySupport( "This Tile Matrix Set doesn't support 2 x 2 quadkeys." ) t = _parse_tile_arg(*tile) qk = [] for z in range(t.z, self.minzoom, -1): digit = 0 mask = 1 << (z - 1) if t.x & mask: digit += 1 if t.y & mask: digit += 2 qk.append(str(digit)) return "".join(qk) def quadkey_to_tile(self, qk: str) -> Tile: """Get the tile corresponding to a quadkey Parameters ---------- qk : str A quadkey string. Returns ------- Tile """ if not self.is_quadtree: raise NoQuadkeySupport( "This Tile Matrix Set doesn't support 2 x 2 quadkeys." ) if len(qk) == 0: return Tile(0, 0, 0) xtile, ytile = 0, 0 for i, digit in enumerate(reversed(qk)): mask = 1 << i if digit == "1": xtile = xtile | mask elif digit == "2": ytile = ytile | mask elif digit == "3": xtile = xtile | mask ytile = ytile | mask elif digit != "0": raise QuadKeyError("Unexpected quadkey digit: %r", digit) return Tile(xtile, ytile, i + 1) def minmax(self, zoom: int) -> dict: """Return TileMatrix Extrema. Parameters ---------- zoom : int The zoom level. Returns ------- dict """ m = self.matrix(zoom) return { "x": {"min": 0, "max": m.matrixWidth - 1}, "y": {"min": 0, "max": m.matrixHeight - 1}, } def is_valid(self, *tile: Tile, strict: bool = True) -> bool: """Check if a tile is valid.""" t = _parse_tile_arg(*tile) disable_overzoom = self.is_variable or strict if t.z < self.minzoom or (disable_overzoom and t.z > self.maxzoom): return False matrix = self.matrix(t.z) validx = 0 <= t.x <= matrix.matrixWidth - 1 validy = 0 <= t.y <= matrix.matrixHeight - 1 return validx and validy def neighbors(self, *tile: Tile) -> list[Tile]: """The neighbors of a tile The neighbors function makes no guarantees regarding neighbor tile ordering. The neighbors function returns up to eight neighboring tiles, where tiles will be omitted when they are not valid. Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. Returns ------- list """ t = _parse_tile_arg(*tile) matrix = self.matrix(t.z) x = t.x y = t.y tiles = set() miny = max(0, y - 1) maxy = min(y + 1, matrix.matrixHeight - 1) cf = ( matrix.get_coalesce_factor(y) if matrix.variableMatrixWidths is not None else 1 ) if cf != 1: if x % cf: x -= x % cf minx = max(0, x - (x % cf) - 1) maxx = min(x + (x % cf) + cf, matrix.matrixWidth - 1) else: minx = max(0, x - 1) maxx = min(x + 1, matrix.matrixWidth - 1) for ytile in range(miny, maxy + 1): cf = ( matrix.get_coalesce_factor(ytile) if matrix.variableMatrixWidths is not None else 1 ) for xtile in range(minx, maxx + 1): nx = xtile if cf != 1 and nx % cf: nx = nx - nx % cf if nx == x and ytile == y: continue tiles.add(Tile(x=nx, y=ytile, z=t.z)) return sorted(tiles) def parent(self, *tile: Tile, zoom: int = None): """Get the parent of a tile The parent is the tile of one zoom level lower that contains the given "child" tile. Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. zoom : int, optional Determines the *zoom* level of the returned parent tile. This defaults to one lower than the tile (the immediate parent). Returns ------- list: list of Tile """ t = _parse_tile_arg(*tile) if t.z == self.minzoom: return [] if zoom is not None and t.z <= zoom: raise InvalidZoomError("zoom must be less than that of the input tile") target_zoom = t.z - 1 if zoom is None else zoom # buffer value to apply on bbox res = self.matrix(t.z).cellSize / 10.0 bbox = self.xy_bounds(t) ul_tile = self._tile(bbox.left + res, bbox.top - res, target_zoom) lr_tile = self._tile(bbox.right - res, bbox.bottom + res, target_zoom) tiles = [] matrix = self.matrix(target_zoom) for j in range(ul_tile.y, lr_tile.y + 1): cf = ( matrix.get_coalesce_factor(j) if matrix.variableMatrixWidths is not None else 1 ) for i in range(ul_tile.x, lr_tile.x + 1): if cf != 1 and i % cf: continue tiles.append(Tile(i, j, target_zoom)) return tiles def children(self, *tile: Tile, zoom: int = None): """Get the children of a tile The children are ordered: top-left, top-right, bottom-right, bottom-left. Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. zoom : int, optional Determines the *zoom* level of the returned child tiles. This defaults to one higher than the tile (the immediate children). Returns ------- list: list of Tile """ t = _parse_tile_arg(*tile) if zoom is not None and t.z > zoom: raise InvalidZoomError("zoom must be greater than that of the input tile") target_zoom = t.z + 1 if zoom is None else zoom # buffer value to apply on bbox res = self.matrix(t.z).cellSize / 10.0 bbox = self.xy_bounds(t) ul_tile = self._tile(bbox.left + res, bbox.top - res, target_zoom) lr_tile = self._tile(bbox.right - res, bbox.bottom + res, target_zoom) tiles = [] matrix = self.matrix(target_zoom) for j in range(ul_tile.y, lr_tile.y + 1): cf = ( matrix.get_coalesce_factor(j) if matrix.variableMatrixWidths is not None else 1 ) for i in range(ul_tile.x, lr_tile.x + 1): if cf != 1 and i % cf: continue tiles.append(Tile(i, j, target_zoom)) return tiles def matrix_to_geojson( self, level: int, precision: int | None = None, buffer: NumType | None = None, geographic: bool = True, geographic_crs: pyproj.CRS | None = None, ) -> Iterator[dict]: """Yield GeoJSON representation of the tile matrix set.""" matrix = self.matrix(level) for y in range(0, matrix.matrixHeight): cf = ( matrix.get_coalesce_factor(y) if matrix.variableMatrixWidths is not None else 1 ) for x in range(0, matrix.matrixWidth): if cf != 1 and x % cf: continue feature = self.feature( Tile(x, y, level), projected=not geographic, buffer=buffer, precision=precision, geographic_crs=geographic_crs, ) feature["properties"] = { "x": x, "y": y, "z": level, } yield feature morecantile-7.1.0/morecantile/py.typed000066400000000000000000000000001525253500000200050ustar00rootroot00000000000000morecantile-7.1.0/morecantile/scripts/000077500000000000000000000000001525253500000200075ustar00rootroot00000000000000morecantile-7.1.0/morecantile/scripts/__init__.py000066400000000000000000000000271525253500000221170ustar00rootroot00000000000000"""morecantile CLI.""" morecantile-7.1.0/morecantile/scripts/cli.py000066400000000000000000000417511525253500000211400ustar00rootroot00000000000000"""Morecantile command line interface""" import json import logging import sys from typing import Any import click from pyproj import CRS import morecantile logger = logging.getLogger(__name__) WGS84_CRS = CRS.from_epsg(4326) def configure_logging(verbosity): """Configure log verbosity. Original code from https://github.com/mapbox/mercantile/blob/71bb3dbdaeb4ccf0e14bfabf1f58d36465cd5289/mercantile/scripts/__init__.py#L13-L26 License: BSD-3 Original work Copyright 2021 Mapbox """ log_level = max(10, 30 - 10 * verbosity) logging.basicConfig(stream=sys.stderr, level=log_level) def normalize_input(input): """Normalize file or string input. Original code from https://github.com/mapbox/mercantile/blob/71bb3dbdaeb4ccf0e14bfabf1f58d36465cd5289/mercantile/scripts/__init__.py#L34-L40 License: BSD-3 Original work Copyright 2021 Mapbox """ try: src = click.open_file(input).readlines() except IOError: src = [input] return src def iter_lines(lines): """Iterate over lines of input, stripping and skipping. Original code from https://github.com/mapbox/mercantile/blob/71bb3dbdaeb4ccf0e14bfabf1f58d36465cd5289/mercantile/scripts/__init__.py#L43-L48 License: BSD-3 Original work Copyright 2021 Mapbox """ for line in lines: line = line.strip() if line: yield line def normalize_source(input): """Yield features from GeoJSON source.""" src = iter(normalize_input(input)) first_line = next(src) # If input is RS-delimited JSON sequence. if first_line.startswith("\x1e"): def feature_gen(): buffer = first_line.strip("\x1e") for line in src: if line.startswith("\x1e"): if buffer: yield json.loads(buffer) buffer = line.strip("\x1e") else: buffer += line else: yield json.loads(buffer) else: def feature_gen(): yield json.loads(first_line) for line in src: yield json.loads(line) return feature_gen() def coords(obj): """Yield all coordinate coordinate tuples from a geometry or feature. From python-geojson package. Original code from https://github.com/mapbox/rasterio/blob/3910956d6cfadd55ea085dd60790246c167967cd/rasterio/rio/helpers.py License: Copyright (c) 2013, MapBox """ if isinstance(obj, (tuple, list)): coordinates = obj elif "geometry" in obj: coordinates = obj["geometry"]["coordinates"] else: coordinates = obj.get("coordinates", obj) for e in coordinates: if isinstance(e, (float, int)): yield tuple(coordinates) break else: for f in coords(e): yield f # The CLI command group. @click.group(help="Command line interface for the Morecantile Python package.") @click.option("--verbose", "-v", count=True, help="Increase verbosity.") @click.option("--quiet", "-q", count=True, help="Decrease verbosity.") @click.version_option(version=morecantile.__version__, message="%(version)s") @click.pass_context def cli(ctx, verbose, quiet): """Execute the main morecantile command""" verbosity = verbose - quiet configure_logging(verbosity) ctx.obj = {} ctx.obj["verbosity"] = verbosity ################################################################################ # The shapes command. @cli.command(short_help="Print the shapes of tiles as GeoJSON.") # This input is either a filename, stdin, or a string. @click.argument("input", default="-", required=False) @click.option( "--identifier", type=click.Choice(morecantile.tms.list()), default="WebMercatorQuad", help="TileMatrixSet identifier.", ) # Coordinate precision option. @click.option( "--precision", type=int, default=None, help="Decimal precision of coordinates." ) # JSON formatting options. @click.option( "--indent", default=None, type=int, help="Indentation level for JSON output" ) @click.option( "--compact/--no-compact", default=False, help="Use compact separators (',', ':')." ) @click.option( "--projected/--geographic", "projected", default=False, help="Output coordinate system", ) @click.option( "--seq", is_flag=True, default=False, help="Write a RS-delimited JSON sequence (default is LF).", ) # GeoJSON feature (default) or collection switch. Meaningful only # when --x-json-seq is used. @click.option( "--feature", "output_mode", flag_value="feature", default=True, help="Output as sequence of GeoJSON features (the default).", ) @click.option( "--bbox", "output_mode", flag_value="bbox", help="Output as sequence of GeoJSON bbox arrays.", ) @click.option( "--collect", is_flag=True, default=False, help="Output as a GeoJSON feature collections.", ) # Optionally write out bboxen in a form that goes # straight into GDAL utilities like gdalwarp. @click.option( "--extents/--no-extents", default=False, help="Write shape extents as ws-separated strings (default is False).", ) # Optionally buffer the shapes by shifting the x and y values of each # vertex by a constant number of decimal degrees or meters (depending # on whether --geographic or --mercator is in effect). @click.option( "--buffer", type=float, default=None, help="Shift shape x and y values by a constant number", ) @click.option( "--tms", help="Path to TileMatrixSet JSON file.", type=click.Path(), ) @click.option( "--crs", help="Geographic CRS. Default to WGS84.", type=str, ) @click.pass_context def shapes( # noqa: C901 ctx, input, identifier, precision, indent, compact, projected, seq, output_mode, collect, extents, buffer, tms, crs, ): """ Reads one or more Web Mercator tile descriptions from stdin and writes either a GeoJSON feature collection (the default) or a JSON sequence of GeoJSON features/collections to stdout. Input may be a compact newline-delimited sequences of JSON or a pretty-printed ASCII RS-delimited sequence of JSON (like https://tools.ietf.org/html/rfc8142 and https://tools.ietf.org/html/rfc7159). Tile descriptions may be either an [x, y, z] array or a JSON object of the form {"tile": [x, y, z], "properties": {"name": "foo", ...}} In the latter case, the properties object will be used to update the properties object of the output feature. """ tilematrixset = morecantile.tms.get(identifier) if tms: with open(tms, "r") as f: tilematrixset = morecantile.TileMatrixSet(**json.load(f)) dump_kwds = {"sort_keys": True} if indent: dump_kwds["indent"] = indent if compact: dump_kwds["separators"] = (",", ":") src = normalize_input(input) features = [] col_xs = [] col_ys = [] for _i, line in enumerate(iter_lines(src)): obj = json.loads(line) if isinstance(obj, dict): x, y, z = obj["tile"][:3] props = obj.get("properties") fid = obj.get("id") elif isinstance(obj, list): x, y, z = obj[:3] props = {} fid = None else: raise click.BadParameter("{0}".format(obj), param=input, param_hint="input") feature = tilematrixset.feature( (x, y, z), fid=fid, props=props, projected=projected, buffer=buffer, precision=precision, geographic_crs=CRS.from_user_input(crs) if crs else WGS84_CRS, ) bbox = feature["bbox"] w, s, e, n = bbox col_xs.extend([w, e]) col_ys.extend([s, n]) if collect: features.append(feature) elif extents: click.echo(" ".join(map(str, bbox))) else: if seq: click.echo("\x1e") if output_mode == "bbox": click.echo(json.dumps(bbox, **dump_kwds)) elif output_mode == "feature": click.echo(json.dumps(feature, **dump_kwds)) if collect and features: bbox = [min(col_xs), min(col_ys), max(col_xs), max(col_ys)] click.echo( json.dumps( {"type": "FeatureCollection", "bbox": bbox, "features": features}, **dump_kwds, ) ) ################################################################################ # The tiles command. @cli.command( short_help=( "Print tiles that overlap or contain a lng/lat point, " "bounding box, or GeoJSON objects." ) ) # Mandatory Mercator zoom level argument. @click.argument("zoom", type=int, default=-1) # This input is either a filename, stdin, or a string. # Has to follow the zoom arg. @click.argument("input", default="-", required=False) @click.option( "--identifier", type=click.Choice(morecantile.tms.list()), default="WebMercatorQuad", help="TileMatrixSet identifier.", ) @click.option( "--seq/--lf", default=False, help="Write a RS-delimited JSON sequence (default is LF).", ) @click.option( "--tms", help="Path to TileMatrixSet JSON file.", type=click.Path(), ) @click.pass_context def tiles(ctx, zoom, input, identifier, seq, tms): # noqa: C901 """ Lists TMS tiles at ZOOM level intersecting GeoJSON [west, south, east, north] bounding boxen, features, or collections read from stdin. Output is a JSON [x, y, z] array. Input may be a compact newline-delimited sequences of JSON or a pretty-printed ASCII RS-delimited sequence of JSON (like https://tools.ietf.org/html/rfc8142 and https://tools.ietf.org/html/rfc7159). Example: $ echo "[-105.05, 39.95, -105, 40]" | morecantiles tiles 12 Output: [852, 1550, 12] [852, 1551, 12] [853, 1550, 12] [853, 1551, 12] """ tilematrixset = morecantile.tms.get(identifier) if tms: with open(tms, "r") as f: tilematrixset = morecantile.TileMatrixSet(**json.load(f)) for obj in normalize_source(input): if isinstance(obj, list): bbox = obj if len(bbox) == 2: bbox += bbox if len(bbox) != 4: raise click.BadParameter( "{0}".format(bbox), param=input, param_hint="input" ) elif isinstance(obj, dict): if "bbox" in obj: bbox = obj["bbox"] else: box_xs = [] box_ys = [] for feat in obj.get("features", [obj]): lngs, lats = zip(*list(coords(feat))) box_xs.extend([min(lngs), max(lngs)]) box_ys.extend([min(lats), max(lats)]) bbox = min(box_xs), min(box_ys), max(box_xs), max(box_ys) west, south, east, north = bbox epsilon = 1.0e-10 if east != west and north != south: # 2D bbox # shrink the bounds a small amount so that # shapes/tiles round trip. west += epsilon south += epsilon east -= epsilon north -= epsilon for tile in tilematrixset.tiles( west, south, east, north, [zoom], truncate=False ): vals = (tile.x, tile.y, zoom) output = json.dumps(vals) if seq: click.echo("\x1e") click.echo(output) ################################################################################ # The tms command. @cli.command(short_help="Print TileMatrixSet JSON document.") @click.option( "--identifier", type=click.Choice(morecantile.tms.list()), help="TileMatrixSet identifier.", required=True, ) def tms(identifier): """Print TMS JSON.""" tms = morecantile.tms.get(identifier) click.echo(tms.model_dump_json(exclude_none=True)) ################################################################################ # The custom command. @cli.command(short_help="Create Custom TileMatrixSet") @click.option( "--epsg", type=int, help="EPSG number.", required=True, ) @click.option( "--extent", type=float, nargs=4, help="left, bottom, right, top Bounding box of the Tile Matrix Set.", required=True, ) @click.option( "--name", type=str, help="Identifier of the custom TMS.", default="CustomTileMatrixSet", ) @click.option("--minzoom", type=int, default=0, help="Minimum Zoom level.") @click.option("--maxzoom", type=int, default=24, help="Maximum Zoom level.") @click.option("--tile-width", type=int, default=256, help="Width of each tile.") @click.option("--tile-height", type=int, default=256, help="Height of each tile.") @click.option( "--extent-epsg", type=int, help="EPSG number for the bounding box.", ) @click.option( "--title", type=str, help="Tile Matrix Set title.", ) def custom( epsg, extent, name, minzoom, maxzoom, tile_width, tile_height, extent_epsg, title ): """Create Custom TMS.""" tms = morecantile.TileMatrixSet.custom( extent, CRS.from_epsg(epsg), id=name, minzoom=minzoom, maxzoom=maxzoom, tile_width=tile_width, tile_height=tile_height, extent_crs=CRS.from_epsg(extent_epsg) if extent_epsg else None, title=title or "Custom TileMatrixSet", ) click.echo(tms.model_dump_json(exclude_none=True)) ################################################################################ # The tms_to_geojson command. @cli.command(short_help="Print TileMatrixSet MatrixSet as GeoJSON.") @click.argument("input", type=click.File(mode="r"), default="-", required=False) @click.option("--level", type=int, required=True, help="Zoom/Matrix level.") # Coordinate precision option. @click.option( "--precision", type=int, default=None, help="Decimal precision of coordinates." ) # JSON formatting options. @click.option( "--indent", default=None, type=int, help="Indentation level for JSON output" ) @click.option( "--compact/--no-compact", default=False, help="Use compact separators (',', ':')." ) @click.option( "--projected/--geographic", "projected", default=False, help="Output coordinate system", ) @click.option( "--seq", is_flag=True, default=False, help="Write a RS-delimited JSON sequence (default is LF).", ) # GeoJSON feature (default) or collection switch. Meaningful only # when --x-json-seq is used. @click.option( "--feature", "output_mode", flag_value="feature", default=True, help="Output as sequence of GeoJSON features (the default).", ) @click.option( "--bbox", "output_mode", flag_value="bbox", help="Output as sequence of GeoJSON bbox arrays.", ) @click.option( "--collect", is_flag=True, default=False, help="Output as a GeoJSON feature collections.", ) # Optionally write out bboxen in a form that goes # straight into GDAL utilities like gdalwarp. @click.option( "--extents/--no-extents", default=False, help="Write shape extents as ws-separated strings (default is False).", ) # Optionally buffer the shapes by shifting the x and y values of each # vertex by a constant number of decimal degrees or meters (depending # on whether --geographic or --mercator is in effect). @click.option( "--buffer", type=float, default=None, help="Shift shape x and y values by a constant number", ) @click.option( "--crs", help="Geographic CRS. Default to WGS84.", type=str, ) def tms_to_geojson( # noqa: C901 input, level, precision, indent, compact, projected, seq, output_mode, collect, extents, buffer, crs, ): """Print TMS document as GeoJSON.""" tms = morecantile.TileMatrixSet(**json.load(input)) dump_kwds: dict[str, Any] = {"sort_keys": True} if indent: dump_kwds["indent"] = indent if compact: dump_kwds["separators"] = (",", ":") features = [] col_xs = [] col_ys = [] geographic_crs = CRS.from_user_input(crs) if crs else WGS84_CRS for feature in tms.matrix_to_geojson( level, precision=precision, buffer=buffer, geographic=not projected, geographic_crs=geographic_crs, ): bbox = feature["bbox"] w, s, e, n = bbox col_xs.extend([w, e]) col_ys.extend([s, n]) if collect: features.append(feature) elif extents: click.echo(" ".join(map(str, bbox))) else: if seq: click.echo("\x1e") if output_mode == "bbox": click.echo(json.dumps(bbox, **dump_kwds)) elif output_mode == "feature": click.echo(json.dumps(feature, **dump_kwds)) if collect and features: bbox = [min(col_xs), min(col_ys), max(col_xs), max(col_ys)] feature_collection = { "type": "FeatureCollection", "bbox": bbox, "features": features, } click.echo(json.dumps(feature_collection, **dump_kwds)) morecantile-7.1.0/morecantile/utils.py000066400000000000000000000105111525253500000200300ustar00rootroot00000000000000"""morecantile utils.""" import math from pyproj import CRS from pyproj.enums import WktVersion from morecantile.commons import BoundingBox, Coords, Tile from morecantile.errors import TileArgParsingError def _parse_tile_arg(*args) -> Tile: """ Parse the *tile arg of module functions Copy from https://github.com/mapbox/mercantile/blob/master/mercantile/__init__.py Parameters ---------- tile : Tile or sequence of int May be be either an instance of Tile or 3 ints, X, Y, Z. Returns ------- Tile Raises ------ TileArgParsingError """ if len(args) == 1: args = args[0] if len(args) == 3: return Tile(*args) else: raise TileArgParsingError( "the tile argument may have 1 or 3 values. Note that zoom is a keyword-only argument" ) def lons_contain_antimeridian(lon1: float, lon2: float) -> bool: """ Check if the antimeridian (180th meridian) is between two longitude points Parameters ---------- lon1: float The first longitude. lon2: float The second longitude Returns ------- A bool representing whether two longs contain the 180th meridian. """ lon1_clipped = max(-180.0, min(lon1, 180)) lon2_clipped = max(-180.0, min(lon2, 180)) lon1_converted = (lon1_clipped + 360) % 360 lon2_converted = (lon2_clipped + 360) % 360 ws = [lon1_converted, lon2_converted] sorted(ws) return ws[0] < 180 < ws[1] def meters_per_unit(crs: CRS) -> float: """ Coefficient to convert the coordinate reference system (CRS) units into meters (metersPerUnit). From note g in http://docs.opengeospatial.org/is/17-083r2/17-083r2.html#table_2: If the CRS uses meters as units of measure for the horizontal dimensions, then metersPerUnit=1; if it has degrees, then metersPerUnit=2pa/360 (a is the Earth maximum radius of the ellipsoid). """ unit_factors = { "metre": 1.0, "degree": 2 * math.pi * crs.ellipsoid.semi_major_metre / 360.0, "foot": 0.3048, "US survey foot": 0.30480060960121924, } unit_name = crs.axis_info[0].unit_name try: return unit_factors[unit_name] except KeyError as e: raise Exception( f"CRS {crs} with Unit Name `{unit_name}` is not supported, please fill an issue in developmentseed/morecantile" ) from e def bbox_to_feature(west: float, south: float, east: float, north: float) -> dict: """Create a GeoJSON feature from a bbox.""" return { "type": "Polygon", "coordinates": [ [[west, south], [west, north], [east, north], [east, south], [west, south]] ], } def point_in_bbox(point: Coords, bbox: BoundingBox, precision: int = 5) -> bool: """Check if a point is in a bounding box.""" return ( round(point.x, precision) >= round(bbox.left, precision) and round(point.x, precision) <= round(bbox.right, precision) and round(point.y, precision) >= round(bbox.bottom, precision) and round(point.y, precision) <= round(bbox.top, precision) ) def truncate_coordinates( lng: float, lat: float, bbox: BoundingBox ) -> tuple[float, float]: """ Truncate coordinates to a given bbox. Adapted from https://github.com/mapbox/mercantile/blob/master/mercantile/__init__.py """ if lng > bbox.right: lng = bbox.right elif lng < bbox.left: lng = bbox.left if lat > bbox.top: lat = bbox.top elif lat < bbox.bottom: lat = bbox.bottom return lng, lat def is_power_of_two(number: int) -> bool: """Check if a number is a power of 2""" return (number & (number - 1) == 0) and number != 0 def check_quadkey_support(tms: list) -> bool: """Check if a Tile Matrix Set supports quadkeys""" return all( (t.matrixWidth == t.matrixHeight) and is_power_of_two(t.matrixWidth) and ((t.matrixWidth * 2) == tms[i + 1].matrixWidth) for i, t in enumerate(tms[:-1]) ) def to_rasterio_crs(incrs: CRS): """Convert a pyproj CRS to a rasterio CRS""" from rasterio import crs from rasterio.env import GDALVersion if GDALVersion.runtime().major < 3: return crs.CRS.from_wkt(incrs.to_wkt(WktVersion.WKT1_GDAL)) else: return crs.CRS.from_wkt(incrs.to_wkt()) morecantile-7.1.0/pyproject.toml000066400000000000000000000056441525253500000167430ustar00rootroot00000000000000[project] name = "morecantile" description = "Construct and use map tile grids (a.k.a TileMatrixSet / TMS)." readme = "README.md" requires-python = ">=3.11" license = {file = "LICENSE"} authors = [ {name = "Vincent Sarago", email = "vincent@developmentseed.com"}, ] keywords = ["GIS", "TMS", "TileMatrixSet", "Map Tile"] classifiers = [ "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering :: GIS", ] dynamic = ["version"] dependencies = [ "attrs", "pyproj>=3.1,<4.0", "pydantic~=2.0", "click", ] [project.optional-dependencies] rasterio = [ "rasterio>=1.2.1", ] [dependency-groups] dev = [ "mercantile", "pytest", "pytest-cov", "pre-commit", ] docs = [ "mkdocs>=1.4.3", "mkdocs-material[imaging]>=9.5", "griffe-inherited-docstrings>=1.0.0", "mkdocstrings[python]>=0.25.1", "pygments", ] benchmark = [ "pytest-benchmark", ] deploy = [ "hatch", ] [project.urls] Source = "https://github.com/developmentseed/morecantile" Documentation = "https://developmentseed.org/morecantile/" [project.scripts] morecantile = "morecantile.scripts.cli:cli" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.version] path = "morecantile/__init__.py" [tool.hatch.build.targets.sdist] only-include = ["morecantile/"] [tool.hatch.build.targets.wheel] only-include = ["morecantile/"] [tool.coverage.run] branch = true parallel = true [tool.coverage.report] exclude_lines = [ "no cov", "if __name__ == .__main__.:", "if TYPE_CHECKING:", ] [tool.isort] profile = "black" known_first_party = ["morecantile"] known_third_party = ["rasterio", "pydantic", "pyproj", "mercantile"] default_section = "THIRDPARTY" [tool.mypy] no_strict_optional = true [tool.ruff.lint] select = [ "D1", # pydocstyle errors "E", # pycodestyle errors "W", # pycodestyle warnings "F", # flake8 "C", # flake8-comprehensions "B", # flake8-bugbear ] ignore = [ "E501", # line too long, handled by black "B008", # do not perform function calls in argument defaults "B905", # ignore zip() without an explicit strict= parameter, only support with python >3.10 ] [tool.ruff.lint.per-file-ignores] "tests/*.py" = ["D1"] [tool.pytest.ini_options] filterwarnings = [ "ignore:You will likely lose important projection*:UserWarning", ] [tool.bumpversion] current_version = "7.1.0" search = "{current_version}" replace = "{new_version}" regex = false tag = true commit = true tag_name = "{new_version}" [[tool.bumpversion.files]] filename = "morecantile/__init__.py" search = '__version__ = "{current_version}"' replace = '__version__ = "{new_version}"' morecantile-7.1.0/tests/000077500000000000000000000000001525253500000151605ustar00rootroot00000000000000morecantile-7.1.0/tests/__init__.py000066400000000000000000000000371525253500000172710ustar00rootroot00000000000000"""morecantile tests suite.""" morecantile-7.1.0/tests/benchmarks.py000066400000000000000000000023021525253500000176440ustar00rootroot00000000000000"""Morecantile benchmark.""" import pytest import morecantile from morecantile.commons import BoundingBox tms = morecantile.tms.get("WebMercatorQuad") # Test tiles from https://github.com/jessekrubin/utiles/blob/ea58b9a017a2e3528f03cc20f16ef531737b863f/utiles-pyo3/bench/test_bench.py TEST_TILES = ( (0, 0, 0), (1, 0, 1), (1, 1, 1), (1, 40, 7), (486, 332, 10), # HIGH ZOOM (486, 332, 20), # OUTSIDE TMS Range (486, 332, 30), ) @pytest.mark.parametrize("tile", TEST_TILES) def test_bounds(tile, benchmark): str_tile = "Tile(x={},y={},z={})".format(*tile) benchmark.name = f"morecantile.bounds-{str_tile}" benchmark.fullname = f"morecantile.bounds-{str_tile}" benchmark.group = "morecantile.bounds" r = benchmark(tms.bounds, *tile) assert isinstance(r, BoundingBox) @pytest.mark.parametrize("tile", TEST_TILES) def test_xy_bounds(tile, benchmark) -> None: str_tile = "Tile(x={},y={},z={})".format(*tile) benchmark.name = f"morecantile.xy_bounds-{str_tile}" benchmark.fullname = f"morecantile.xy_bounds-{str_tile}" benchmark.group = "morecantile.xy_bounds" r = benchmark(tms.xy_bounds, *tile) assert isinstance(r, BoundingBox) morecantile-7.1.0/tests/fixtures/000077500000000000000000000000001525253500000170315ustar00rootroot00000000000000morecantile-7.1.0/tests/fixtures/v1_tms/000077500000000000000000000000001525253500000202425ustar00rootroot00000000000000morecantile-7.1.0/tests/fixtures/v1_tms/CanadianNAD83_LCC.json000066400000000000000000000230711525253500000240150ustar00rootroot00000000000000{ "type": "TileMatrixSetType", "title": "Lambert conformal conic NAD83 for Canada", "identifier": "CanadianNAD83_LCC", "boundingBox": { "type": "BoundingBoxType", "crs": "http://www.opengis.net/def/crs/EPSG/0/3978", "lowerCorner": [ -7786476.885838887, -5153821.09213678 ], "upperCorner": [ 7148753.233541353, 7928343.534071138 ] }, "supportedCRS": "http://www.opengis.net/def/crs/EPSG/0/3978", "tileMatrix": [ { "type": "TileMatrixType", "identifier": "0", "scaleDenominator": 145000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 5, "matrixHeight": 5 }, { "type": "TileMatrixType", "identifier": "1", "scaleDenominator": 85000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "type": "TileMatrixType", "identifier": "2", "scaleDenominator": 50000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 13, "matrixHeight": 14 }, { "type": "TileMatrixType", "identifier": "3", "scaleDenominator": 30000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 21, "matrixHeight": 22 }, { "type": "TileMatrixType", "identifier": "4", "scaleDenominator": 17500000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 36, "matrixHeight": 38 }, { "type": "TileMatrixType", "identifier": "5", "scaleDenominator": 10000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 62, "matrixHeight": 66 }, { "type": "TileMatrixType", "identifier": "6", "scaleDenominator": 6000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 103, "matrixHeight": 110 }, { "type": "TileMatrixType", "identifier": "7", "scaleDenominator": 3500000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 177, "matrixHeight": 188 }, { "type": "TileMatrixType", "identifier": "8", "scaleDenominator": 2000000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 309, "matrixHeight": 329 }, { "type": "TileMatrixType", "identifier": "9", "scaleDenominator": 1200000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 515, "matrixHeight": 548 }, { "type": "TileMatrixType", "identifier": "10", "scaleDenominator": 700000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 882, "matrixHeight": 938 }, { "type": "TileMatrixType", "identifier": "11", "scaleDenominator": 420000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1470, "matrixHeight": 1563 }, { "type": "TileMatrixType", "identifier": "12", "scaleDenominator": 250000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2469, "matrixHeight": 2626 }, { "type": "TileMatrixType", "identifier": "13", "scaleDenominator": 145000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4257, "matrixHeight": 4528 }, { "type": "TileMatrixType", "identifier": "14", "scaleDenominator": 85000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 7262, "matrixHeight": 7723 }, { "type": "TileMatrixType", "identifier": "15", "scaleDenominator": 50000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 12344, "matrixHeight": 13130 }, { "type": "TileMatrixType", "identifier": "16", "scaleDenominator": 30000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 20574, "matrixHeight": 21882 }, { "type": "TileMatrixType", "identifier": "17", "scaleDenominator": 17500, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 35269, "matrixHeight": 37512 }, { "type": "TileMatrixType", "identifier": "18", "scaleDenominator": 10000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 61720, "matrixHeight": 65646 }, { "type": "TileMatrixType", "identifier": "19", "scaleDenominator": 6000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 102866, "matrixHeight": 109409 }, { "type": "TileMatrixType", "identifier": "20", "scaleDenominator": 3500, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 176341, "matrixHeight": 187558 }, { "type": "TileMatrixType", "identifier": "21", "scaleDenominator": 2000, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 308596, "matrixHeight": 328227 }, { "type": "TileMatrixType", "identifier": "22", "scaleDenominator": 1200, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 514327, "matrixHeight": 547044 }, { "type": "TileMatrixType", "identifier": "23", "scaleDenominator": 700, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 881703, "matrixHeight": 937790 }, { "type": "TileMatrixType", "identifier": "24", "scaleDenominator": 420, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1469505, "matrixHeight": 1562983 }, { "type": "TileMatrixType", "identifier": "25", "scaleDenominator": 250, "topLeftCorner": [ -34655800, 39310000 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2468768, "matrixHeight": 2625811 } ] } morecantile-7.1.0/tests/fixtures/v1_tms/UPSAntarcticWGS84Quad.json000066400000000000000000000233051525253500000250100ustar00rootroot00000000000000{ "type": "TileMatrixSetType", "title": "Universal Polar Stereographic WGS 84 Quad for Antarctic", "identifier": "UPSAntarcticWGS84Quad", "boundingBox": { "type": "BoundingBoxType", "crs": "http://www.opengis.net/def/crs/EPSG/0/5042", "lowerCorner": [ -14440759.350252, -14440759.350252 ], "upperCorner": [ 18440759.350252, 18440759.350252 ] }, "supportedCRS": "http://www.opengis.net/def/crs/EPSG/0/5042", "tileMatrix": [ { "type": "TileMatrixType", "identifier": "0", "scaleDenominator": 458726544.4, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "type": "TileMatrixType", "identifier": "1", "scaleDenominator": 229363272.2, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "type": "TileMatrixType", "identifier": "2", "scaleDenominator": 114681636.1, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "type": "TileMatrixType", "identifier": "3", "scaleDenominator": 57340818.05, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "type": "TileMatrixType", "identifier": "4", "scaleDenominator": 28670409.02, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "type": "TileMatrixType", "identifier": "5", "scaleDenominator": 14335204.51, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "type": "TileMatrixType", "identifier": "6", "scaleDenominator": 7167602.256, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "type": "TileMatrixType", "identifier": "7", "scaleDenominator": 3583801.128, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "type": "TileMatrixType", "identifier": "8", "scaleDenominator": 1791900.564, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "type": "TileMatrixType", "identifier": "9", "scaleDenominator": 895950.282, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "type": "TileMatrixType", "identifier": "10", "scaleDenominator": 447975.141, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "type": "TileMatrixType", "identifier": "11", "scaleDenominator": 223987.5705, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "type": "TileMatrixType", "identifier": "12", "scaleDenominator": 111993.7852, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "type": "TileMatrixType", "identifier": "13", "scaleDenominator": 55996.89262, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "type": "TileMatrixType", "identifier": "14", "scaleDenominator": 27998.44631, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "type": "TileMatrixType", "identifier": "15", "scaleDenominator": 13999.22316, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "type": "TileMatrixType", "identifier": "16", "scaleDenominator": 6999.611578, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "type": "TileMatrixType", "identifier": "17", "scaleDenominator": 3499.805789, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "type": "TileMatrixType", "identifier": "18", "scaleDenominator": 1749.902894, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "type": "TileMatrixType", "identifier": "19", "scaleDenominator": 874.9514472, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "type": "TileMatrixType", "identifier": "20", "scaleDenominator": 437.4757236, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "type": "TileMatrixType", "identifier": "21", "scaleDenominator": 218.7378618, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "type": "TileMatrixType", "identifier": "22", "scaleDenominator": 109.3689309, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "type": "TileMatrixType", "identifier": "23", "scaleDenominator": 54.68446545, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "type": "TileMatrixType", "identifier": "24", "scaleDenominator": 27.34223273, "topLeftCorner": [ -14440759.350252, 18440759.350252 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] } morecantile-7.1.0/tests/fixtures/v1_tms/WebMercatorQuad.json000066400000000000000000000236711525253500000241730ustar00rootroot00000000000000{ "type": "TileMatrixSetType", "title": "Google Maps Compatible for the World", "identifier": "WebMercatorQuad", "boundingBox": { "type": "BoundingBoxType", "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "lowerCorner": [ -20037508.3427892, -20037508.3427892 ], "upperCorner": [ 20037508.3427892, 20037508.3427892 ] }, "supportedCRS": "http://www.opengis.net/def/crs/EPSG/0/3857", "wellKnownScaleSet": "http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible", "tileMatrix": [ { "type": "TileMatrixType", "identifier": "0", "scaleDenominator": 559082264.028717, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1 }, { "type": "TileMatrixType", "identifier": "1", "scaleDenominator": 279541132.014358, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2, "matrixHeight": 2 }, { "type": "TileMatrixType", "identifier": "2", "scaleDenominator": 139770566.007179, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4, "matrixHeight": 4 }, { "type": "TileMatrixType", "identifier": "3", "scaleDenominator": 69885283.0035897, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8, "matrixHeight": 8 }, { "type": "TileMatrixType", "identifier": "4", "scaleDenominator": 34942641.5017948, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16, "matrixHeight": 16 }, { "type": "TileMatrixType", "identifier": "5", "scaleDenominator": 17471320.7508974, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32, "matrixHeight": 32 }, { "type": "TileMatrixType", "identifier": "6", "scaleDenominator": 8735660.37544871, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 64, "matrixHeight": 64 }, { "type": "TileMatrixType", "identifier": "7", "scaleDenominator": 4367830.18772435, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 128, "matrixHeight": 128 }, { "type": "TileMatrixType", "identifier": "8", "scaleDenominator": 2183915.09386217, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 256, "matrixHeight": 256 }, { "type": "TileMatrixType", "identifier": "9", "scaleDenominator": 1091957.54693108, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 512, "matrixHeight": 512 }, { "type": "TileMatrixType", "identifier": "10", "scaleDenominator": 545978.773465544, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1024, "matrixHeight": 1024 }, { "type": "TileMatrixType", "identifier": "11", "scaleDenominator": 272989.386732772, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2048, "matrixHeight": 2048 }, { "type": "TileMatrixType", "identifier": "12", "scaleDenominator": 136494.693366386, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4096, "matrixHeight": 4096 }, { "type": "TileMatrixType", "identifier": "13", "scaleDenominator": 68247.346683193, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8192, "matrixHeight": 8192 }, { "type": "TileMatrixType", "identifier": "14", "scaleDenominator": 34123.6733415964, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16384, "matrixHeight": 16384 }, { "type": "TileMatrixType", "identifier": "15", "scaleDenominator": 17061.8366707982, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 32768, "matrixHeight": 32768 }, { "type": "TileMatrixType", "identifier": "16", "scaleDenominator": 8530.91833539913, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 65536, "matrixHeight": 65536 }, { "type": "TileMatrixType", "identifier": "17", "scaleDenominator": 4265.45916769956, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 131072, "matrixHeight": 131072 }, { "type": "TileMatrixType", "identifier": "18", "scaleDenominator": 2132.72958384978, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 262144, "matrixHeight": 262144 }, { "type": "TileMatrixType", "identifier": "19", "scaleDenominator": 1066.36479192489, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 524288, "matrixHeight": 524288 }, { "type": "TileMatrixType", "identifier": "20", "scaleDenominator": 533.182395962445, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1048576, "matrixHeight": 1048576 }, { "type": "TileMatrixType", "identifier": "21", "scaleDenominator": 266.591197981222, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 2097152, "matrixHeight": 2097152 }, { "type": "TileMatrixType", "identifier": "22", "scaleDenominator": 133.295598990611, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 4194304, "matrixHeight": 4194304 }, { "type": "TileMatrixType", "identifier": "23", "scaleDenominator": 66.6477994953056, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 8388608, "matrixHeight": 8388608 }, { "type": "TileMatrixType", "identifier": "24", "scaleDenominator": 33.3238997476528, "topLeftCorner": [ -20037508.3427892, 20037508.3427892 ], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 16777216, "matrixHeight": 16777216 } ] } morecantile-7.1.0/tests/test_cli.py000066400000000000000000000217611525253500000173470ustar00rootroot00000000000000"""Tests of the morecantile CLI""" import json import pytest from click.testing import CliRunner from morecantile.scripts.cli import cli def test_cli_shapes(): """ Test shapes. From https://github.com/mapbox/mercantile/blob/master/tests/test_cli.py """ runner = CliRunner() result = runner.invoke(cli, ["shapes", "--precision", "6"], "[106, 193, 9]") assert result.exit_code == 0 assert ( result.output == '{"bbox": [-105.46875, 39.909736, -104.765625, 40.446947], "geometry": {"coordinates": [[[-105.46875, 39.909736], [-105.46875, 40.446947], [-104.765625, 40.446947], [-104.765625, 39.909736], [-105.46875, 39.909736]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)", "tms": "WebMercatorQuad", "tms_crs": "http://www.opengis.net/def/crs/EPSG/0/3857"}, "type": "Feature"}\n' ) result = runner.invoke( cli, ["shapes", "--precision", "6", "--geographic"], "[106, 193, 9]" ) assert result.exit_code == 0 assert ( result.output == '{"bbox": [-105.46875, 39.909736, -104.765625, 40.446947], "geometry": {"coordinates": [[[-105.46875, 39.909736], [-105.46875, 40.446947], [-104.765625, 40.446947], [-104.765625, 39.909736], [-105.46875, 39.909736]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)", "tms": "WebMercatorQuad", "tms_crs": "http://www.opengis.net/def/crs/EPSG/0/3857"}, "type": "Feature"}\n' ) # With TMS's CRS with pytest.warns(UserWarning): result = runner.invoke( cli, ["shapes", "--precision", "6", "--projected"], "[106, 193, 9]" ) assert result.exit_code == 0 feature = json.loads(result.output) assert feature["crs"] # geographic CRS (non WGS84) with pytest.warns(UserWarning): result = runner.invoke( cli, ["shapes", "--precision", "6", "--crs", "epsg:4150"], "[106, 193, 9]" ) assert result.exit_code == 0 feature = json.loads(result.output) assert feature["crs"] # tile as arg result = runner.invoke(cli, ["shapes", "[106, 193, 9]", "--precision", "6"]) assert result.exit_code == 0 assert ( result.output == '{"bbox": [-105.46875, 39.909736, -104.765625, 40.446947], "geometry": {"coordinates": [[[-105.46875, 39.909736], [-105.46875, 40.446947], [-104.765625, 40.446947], [-104.765625, 39.909736], [-105.46875, 39.909736]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)", "tms": "WebMercatorQuad", "tms_crs": "http://www.opengis.net/def/crs/EPSG/0/3857"}, "type": "Feature"}\n' ) # buffer result = runner.invoke( cli, ["shapes", "[106, 193, 9]", "--buffer", "1.0", "--precision", "6"] ) assert result.exit_code == 0 assert ( result.output == '{"bbox": [-106.46875, 38.909736, -103.765625, 41.446947], "geometry": {"coordinates": [[[-106.46875, 38.909736], [-106.46875, 41.446947], [-103.765625, 41.446947], [-103.765625, 38.909736], [-106.46875, 38.909736]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)", "tms": "WebMercatorQuad", "tms_crs": "http://www.opengis.net/def/crs/EPSG/0/3857"}, "type": "Feature"}\n' ) # Output is compact result = runner.invoke(cli, ["shapes", "--compact"], "[106, 193, 9]") assert result.exit_code == 0 assert '"type":"Feature"' in result.output.strip() # Output is indented result = runner.invoke(cli, ["shapes", "--indent", "8"], "[106, 193, 9]") assert result.exit_code == 0 assert ' "type": "Feature"' in result.output.strip() # Shapes are collected into a feature collection result = runner.invoke(cli, ["shapes", "--collect", "--feature"], "[106, 193, 9]") assert result.exit_code == 0 assert "FeatureCollection" in result.output # geojson is in WebMercator Projection with pytest.warns(UserWarning): result = runner.invoke( cli, ["shapes", "[106, 193, 9]", "--extents", "--projected", "--precision", "3"], ) assert result.exit_code == 0 assert result.output == "-11740727.545 4852834.052 -11662456.028 4931105.569\n" with pytest.warns(UserWarning): # JSON text sequences of bboxes are output. result = runner.invoke( cli, [ "shapes", "[106, 193, 9]", "--seq", "--bbox", "--projected", "--precision", "3", ], ) assert result.exit_code == 0 assert ( result.output == "\x1e\n[-11740727.545, 4852834.052, -11662456.028, 4931105.569]\n" ) # shapes_props_fid result = runner.invoke( cli, [ "shapes", '{"tile": [106, 193, 9], "properties": {"title": "foo"}, "id": "42"}', ], ) assert result.exit_code == 0 assert '"title": "foo"' in result.output assert '"id": "42"' in result.output def test_cli_shapesWGS84(): """Test shapes with other projection.""" runner = CliRunner() result = runner.invoke( cli, ["shapes", "--precision", "6", "--identifier", "WorldMercatorWGS84Quad"], "[106, 193, 9]", ) assert result.exit_code == 0 assert ( result.output == '{"bbox": [-105.46875, 40.099155, -104.765625, 40.636956], "geometry": {"coordinates": [[[-105.46875, 40.099155], [-105.46875, 40.636956], [-104.765625, 40.636956], [-104.765625, 40.099155], [-105.46875, 40.099155]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)", "tms": "WorldMercatorWGS84Quad", "tms_crs": "http://www.opengis.net/def/crs/EPSG/0/3395"}, "type": "Feature"}\n' ) def test_cli_tiles_ok(): """Test tile with correct bounds.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14"], "[-105, 39.99, -104.99, 40]") assert result.exit_code == 0 assert result.output == "[3413, 6202, 14]\n[3413, 6203, 14]\n" def test_cli_tiles_bad_bounds(): """Bounds of len 3 are bad.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14"], "[-105, 39.99, -104.99]") assert result.exit_code == 2 def test_cli_tiles_multi_bounds(): """A LF-delimited sequence can be used as input.""" runner = CliRunner() result = runner.invoke( cli, ["tiles", "14"], "[-105, 39.99, -104.99, 40]\n[-105, 39.99, -104.99, 40]" ) assert result.exit_code == 0 assert len(result.output.strip().split("\n")) == 4 def test_cli_tiles_multi_bounds_seq(): """A JSON text sequence can be used as input.""" runner = CliRunner() result = runner.invoke( cli, ["tiles", "14"], "\x1e\n[-105, 39.99, -104.99, 40]\n\x1e\n[-105, 39.99, -104.99, 40]", ) assert result.exit_code == 0 assert len(result.output.strip().split("\n")) == 4 def test_cli_tiles_implicit_stdin(): """stdin.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14"], "[-105, 39.99, -104.99, 40]") assert result.exit_code == 0 assert result.output == "[3413, 6202, 14]\n[3413, 6203, 14]\n" def test_cli_tiles_arg(): """tiles arg.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14", "[-105, 39.99, -104.99, 40]"]) assert result.exit_code == 0 assert result.output == "[3413, 6202, 14]\n[3413, 6203, 14]\n" def test_cli_tiles_geosjon(): """Geojson input.""" collection = '{"features": [{"geometry": {"coordinates": [[[-105.46875, 39.909736], [-105.46875, 40.446947], [-104.765625, 40.446947], [-104.765625, 39.909736], [-105.46875, 39.909736]]], "type": "Polygon"}, "id": "(106, 193, 9)", "properties": {"title": "XYZ tile (106, 193, 9)"}, "type": "Feature"}], "type": "FeatureCollection"}' runner = CliRunner() result = runner.invoke(cli, ["tiles", "9"], collection) assert result.exit_code == 0 assert result.output == "[106, 193, 9]\n[106, 194, 9]\n" def test_cli_strict_overlap_contain(): """Input from shapes.""" runner = CliRunner() result1 = runner.invoke(cli, ["shapes"], "[2331,1185,12]") assert result1.exit_code == 0 result2 = runner.invoke(cli, ["tiles", "12"], result1.output) assert result2.exit_code == 0 assert result2.output == "[2331, 1185, 12]\n" def test_cli_tiles_seq(): """return a sequence of tiles.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14", "--seq"], "[14.0859, 5.798]") assert result.exit_code == 0 assert result.output == "\x1e\n[8833, 7927, 14]\n" def test_cli_tiles_points(): """Create tile from a point.""" runner = CliRunner() result = runner.invoke(cli, ["tiles", "14"], "[14.0859, 5.798]") assert result.exit_code == 0 assert result.output == "[8833, 7927, 14]\n" result = runner.invoke( cli, ["tiles", "14"], '{"type":"geometry","coordinates":[14.0859, 5.798]}' ) assert result.exit_code == 0 assert result.output == "[8833, 7927, 14]\n" morecantile-7.1.0/tests/test_mercantile_conform.py000066400000000000000000000016031525253500000224370ustar00rootroot00000000000000"""Test Conformance with Mercantile.""" from random import sample import mercantile import pytest import morecantile tms = morecantile.tms.get("WebMercatorQuad") @pytest.mark.parametrize("zoom", range(0, 20)) def test_get_tile(zoom: int): """Make sure mercantile and morecantile returns the same thing.""" tile = mercantile.tile(-10, 10, zoom=zoom) morecantile_tile = tms.tile(-10, 10, zoom=zoom) assert tile == morecantile_tile @pytest.mark.parametrize("zoom", range(0, 20)) def test_bounds(zoom: int): """Make sure mercantile and morecantile returns the same thing.""" # get random x,y index x = sample(range(0, tms.matrix(zoom).matrixWidth), 1)[0] y = sample(range(0, tms.matrix(zoom).matrixHeight), 1)[0] for a, b in zip( mercantile.xy_bounds(x, y, zoom), tms.xy_bounds(morecantile.Tile(x, y, zoom)) ): assert round(a - b, 6) == 0 morecantile-7.1.0/tests/test_models.py000066400000000000000000001020571525253500000200610ustar00rootroot00000000000000"""Test TileMatrixSet model.""" import json import os import random from collections.abc import Iterable import pyproj import pytest from pydantic import ValidationError import morecantile from morecantile.commons import BoundingBox, Coords, Tile from morecantile.errors import InvalidIdentifier from morecantile.models import CRS, CRSWKT, CRSUri, TileMatrix, TileMatrixSet data_dir = os.path.join(os.path.dirname(morecantile.__file__), "data") tilesets = [ os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith(".json") ] tms_v1_dir = os.path.join(os.path.dirname(__file__), "fixtures", "v1_tms") @pytest.mark.parametrize("tileset", tilesets) def test_tile_matrix_set(tileset): """Load TileMatrixSet in models.""" # Confirm model validation is working with open(tileset, "r") as f: ts = TileMatrixSet.model_validate_json(f.read()) # This would fail if `crs` isn't supported by PROJ assert isinstance(ts.crs._pyproj_crs, pyproj.CRS) assert isinstance(ts.geographic_crs, pyproj.CRS) assert repr(ts) @pytest.mark.parametrize("tileset", tilesets) def test_geographic_crs_bbox(tileset): """check that geographic bounds are correct.""" with open(tileset, "r") as f: ts = TileMatrixSet.model_validate_json(f.read()) if not pyproj.CRS.from_epsg(4326) == ts.geographic_crs: _to_geographic = pyproj.Transformer.from_crs( ts.crs._pyproj_crs, pyproj.CRS.from_epsg(4326), always_xy=True ) bbox = _to_geographic.transform_bounds(*ts.xy_bbox, densify_pts=21) assert bbox == ts.bbox def test_tile_matrix_iter(): """Test iterator""" tms = morecantile.tms.get("WebMercatorQuad") assert isinstance(tms, Iterable) for matrix in tms: assert isinstance(matrix, TileMatrix) def test_tile_matrix_order(): """Test matrix order""" tms = morecantile.tms.get("WebMercatorQuad") matrices = tms.tileMatrices[:] random.shuffle(matrices) tms_ordered = TileMatrixSet( title=tms.title, id=tms.id, crs=tms.crs, tileMatrices=matrices, ) # Confirm sort assert [matrix.id for matrix in tms.tileMatrices] == [ matrix.id for matrix in tms_ordered.tileMatrices ] # Confirm sort direction assert int(tms_ordered.tileMatrices[-1].id) > int(tms_ordered.tileMatrices[0].id) def test_invalid_tms(): """should raise an error when tms name is not found.""" with pytest.raises(InvalidIdentifier): morecantile.tms.get("ANotValidName") @pytest.mark.parametrize( "name,result", [ ("LINZAntarticaMapTilegrid", False), ("EuropeanETRS89_LAEAQuad", True), ("CanadianNAD83_LCC", False), ("UPSArcticWGS84Quad", True), ("NZTM2000Quad", True), ("UTM31WGS84Quad", False), ("UPSAntarcticWGS84Quad", True), ("WorldMercatorWGS84Quad", True), ("WGS1984Quad", False), ("WorldCRS84Quad", False), ("WebMercatorQuad", True), ("CDB1GlobalGrid", False), ("GNOSISGlobalGrid", False), ], ) def test_quadkey_support(name, result): """test for Quadkey support.""" tms = morecantile.tms.get(name) assert tms.is_quadtree == result def test_quadkey(): """Test tile to quadkey.""" tms = morecantile.tms.get("WebMercatorQuad") expected = "0313102310" assert tms.quadkey(486, 332, 10) == expected def test_quadkey_to_tile(): """Test quadkey to tile.""" tms = morecantile.tms.get("WebMercatorQuad") qk = "0313102310" expected = Tile(486, 332, 10) assert tms.quadkey_to_tile(qk) == expected def test_empty_quadkey_to_tile(): """Empty qk should give tile 0,0,0.""" tms = morecantile.tms.get("WebMercatorQuad") qk = "" expected = Tile(0, 0, 0) assert tms.quadkey_to_tile(qk) == expected def test_quadkey_failure(): """makde sure we don't support stupid quadkeys.""" tms = morecantile.tms.get("WebMercatorQuad") with pytest.raises(morecantile.errors.QuadKeyError): tms.quadkey_to_tile("lolwut") def test_findMatrix(): """Should raise an error when TileMatrix is not found.""" tms = morecantile.tms.get("WebMercatorQuad") m = tms.matrix(0) assert m.id == "0" with pytest.warns(UserWarning): tms.matrix(26) def test_Custom(): """Create custom TMS grid.""" tms = morecantile.tms.get("WebMercatorQuad") # Web Mercator Extent extent = (-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892) custom_tms = TileMatrixSet.custom(extent, pyproj.CRS.from_epsg(3857)) assert tms.tile(20.0, 15.0, 5) == custom_tms.tile(20.0, 15.0, 5) wmMat = tms.matrix(5) cusMat = custom_tms.matrix(5) assert wmMat.matrixWidth == cusMat.matrixWidth assert wmMat.matrixHeight == cusMat.matrixHeight assert round(wmMat.scaleDenominator, 6) == round(cusMat.scaleDenominator, 6) assert round(wmMat.pointOfOrigin[0], 6) == round(cusMat.pointOfOrigin[0], 6) extent = (-180.0, -85.051128779806, 180.0, 85.051128779806) custom_tms = TileMatrixSet.custom( extent, pyproj.CRS.from_epsg(3857), extent_crs=pyproj.CRS.from_epsg(4326) ) assert tms.tile(20.0, 15.0, 5) == custom_tms.tile(20.0, 15.0, 5) wmMat = tms.matrix(5) cusMat = custom_tms.matrix(5) assert wmMat.matrixWidth == cusMat.matrixWidth assert wmMat.matrixHeight == cusMat.matrixHeight assert round(wmMat.scaleDenominator, 6) == round(cusMat.scaleDenominator, 6) assert round(wmMat.pointOfOrigin[0], 6) == round(cusMat.pointOfOrigin[0], 6) extent = (-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892) custom_tms = TileMatrixSet.custom(extent, pyproj.CRS.from_epsg(3857)) assert isinstance(custom_tms.geographic_crs, pyproj.CRS) assert custom_tms.geographic_crs == pyproj.CRS.from_epsg(4326) extent = (-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892) custom_tms = TileMatrixSet.custom(extent, pyproj.CRS.from_epsg(3857)) assert isinstance(custom_tms.geographic_crs, pyproj.CRS) def test_custom_tms_bounds_epsg4326(): """Check bounds with epsg4326.""" custom_tms = TileMatrixSet.custom((-120, 30, -110, 40), pyproj.CRS.from_epsg(4326)) assert custom_tms.xy_bbox == (-120, 30, -110, 40) assert custom_tms.bbox == (-120, 30, -110, 40) assert custom_tms.xy_bounds(0, 0, 0) == (-120, 30, -110, 40) assert custom_tms.bounds(0, 0, 0) == (-120, 30, -110, 40) # When using `from_user_input`, `morecantile.models.crs_axis_inverted` should return the valid result. def test_custom_tms_bounds_user_crs(): """Check bounds with epsg4326.""" custom_tms = TileMatrixSet.custom( (-120, 30, -110, 40), pyproj.CRS.from_epsg(4326), ) assert custom_tms.xy_bbox == (-120, 30, -110, 40) assert custom_tms.bbox == (-120, 30, -110, 40) assert custom_tms.xy_bounds(0, 0, 0) == (-120, 30, -110, 40) assert custom_tms.bounds(0, 0, 0) == (-120, 30, -110, 40) def test_custom_tms_decimation(): """Check bounds with epsg6342 and custom decimation base.""" extent = (238170, 4334121, 377264, 4473215) left, bottom, right, top = extent for decimation_base in [2, 3, 4, 5]: custom_tms = TileMatrixSet.custom( extent, pyproj.CRS.from_epsg(6342), decimation_base=decimation_base, ) if decimation_base == 2: assert custom_tms.is_quadtree else: assert not custom_tms.is_quadtree for zoom in [0, 1, 2, 3]: tile_width = (right - left) / decimation_base**zoom tile_height = (top - bottom) / decimation_base**zoom expected = (left, top - tile_height, left + tile_width, top) tile_bounds = custom_tms.xy_bounds(0, 0, zoom) for a, b in zip(expected, tile_bounds): assert round(a - b, 4) == 0 def test_nztm_quad_is_quad(): """Test NZTM2000Quad.""" tms = morecantile.tms.get("NZTM2000Quad") bound = tms.xy_bounds(morecantile.Tile(0, 0, 0)) expected = (-3260586.7284, 419435.9938, 6758167.443, 10438190.1652) for a, b in zip(expected, bound): assert round(a - b, 4) == 0 # NZTM2000Quad should use all the WebMercatorQuad zoom scales def test_nztm_quad_scales(): """Test NZTM2000Quad.""" nztm_tms = morecantile.tms.get("NZTM2000Quad") google_tms = morecantile.tms.get("WebMercatorQuad") for z in range(2, nztm_tms.maxzoom + 2): assert ( round( google_tms.matrix(z).scaleDenominator - nztm_tms.matrix(z - 2).scaleDenominator, 4, ) == 0 ) def test_InvertedLatLonGrids(): """Check Inverted LatLon grids.""" tms = morecantile.tms.get("LINZAntarticaMapTilegrid") assert tms.xy_bbox == ( -918457.73, -22441670.269999996, 28441670.269999996, 6918457.73, ) def test_zoom_for_res(): """Get TMS zoom level corresponding to a specific resolution.""" tms = morecantile.tms.get("WebMercatorQuad") # native resolution of zoom 7 is 1222.9924525628178 # native resolution of zoom 8 is 611.4962262814075 assert tms.zoom_for_res(612.0) == 8 assert tms.zoom_for_res(612.0, zoom_level_strategy="lower") == 7 assert tms.zoom_for_res(612.0, zoom_level_strategy="upper") == 8 assert tms.zoom_for_res(610.0) == 8 # native resolution of zoom 24 is 0.009330691929342784 assert tms.zoom_for_res(0.0001) == 24 # theoritical resolution of zoom 25 is 0.004665345964671392 with pytest.warns(UserWarning): assert tms.zoom_for_res(0.0001, max_z=25) == 25 # minzoom greater than 0 crs = pyproj.CRS.from_epsg(3857) extent = [-20026376.39, -20048966.10, 20026376.39, 20048966.10] tms = morecantile.TileMatrixSet.custom( extent, crs, id="MyCustomTmsEPSG3857", minzoom=6 ) assert tms.zoom_for_res(10) == 14 assert tms.zoom_for_res(5000) == 6 def test_schema(): """Translate Model to Schema.""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.model_json_schema() assert tms.model_dump_json(exclude_none=True) assert tms.model_dump(exclude_none=True) crs = pyproj.CRS.from_proj4( "+proj=stere +lat_0=90 +lon_0=0 +k=2 +x_0=0 +y_0=0 +R=3396190 +units=m +no_defs" ) extent = [-13584760.000, -13585240.000, 13585240.000, 13584760.000] tms = morecantile.TileMatrixSet.custom(extent, crs, id="MarsNPolek2MOLA5k") assert tms.model_json_schema() assert tms.model_dump(exclude_none=True) json_doc = json.loads(tms.model_dump_json(exclude_none=True)) assert json_doc["crs"] == "http://www.opengis.net/def/crs/IAU/2015/49930" crs = pyproj.CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 tms = morecantile.TileMatrixSet.custom(extent, crs, id="MyCustomTmsEPSG3031") assert tms.model_json_schema() assert tms.model_dump_json(exclude_none=True) json_doc = json.loads(tms.model_dump_json(exclude_none=True)) assert json_doc["crs"] == "http://www.opengis.net/def/crs/EPSG/0/3031" def test_mars_tms(): """The Mars global mercator scheme should broadly align with the Earth Web Mercator CRS, despite the different planetary radius and scale. """ MARS2000_SPHERE = pyproj.CRS.from_proj4("+proj=longlat +R=3396190 +no_defs") MARS_MERCATOR = pyproj.CRS.from_proj4( "+proj=merc +R=3396190 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +no_defs" ) # same boundaries as Earth mercator mars_tms = TileMatrixSet.custom( [ -179.9999999999996, -85.05112877980656, 179.9999999999996, 85.05112877980656, ], MARS_MERCATOR, extent_crs=MARS2000_SPHERE, title="Web Mercator Mars", ) assert mars_tms.geographic_crs == MARS2000_SPHERE pos = (35, 40, 3) mars_tile = mars_tms.tile(*pos) mercator_tms = morecantile.tms.get("WebMercatorQuad") earth_tile = mercator_tms.tile(*pos) assert mars_tile.x == earth_tile.x assert mars_tile.y == earth_tile.y assert mars_tile.z == earth_tile.z == 3 _to_geographic = pyproj.Transformer.from_crs( mars_tms.crs._pyproj_crs, MARS2000_SPHERE, always_xy=True ) bbox = _to_geographic.transform_bounds(*mars_tms.xy_bbox, densify_pts=21) assert bbox == mars_tms.bbox def test_mars_local_tms(): """Local TMS using Mars CRS""" MARS2000_SPHERE = pyproj.CRS.from_proj4("+proj=longlat +R=3396190 +no_defs") # A transverse mercator projection for the landing site of the Perseverance rover. SYRTIS_TM = pyproj.CRS.from_proj4( "+proj=tmerc +lat_0=17 +lon_0=76.5 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs" ) # 100km grid centered on 17N, 76.5E syrtis_tms = TileMatrixSet.custom( [-5e5, -5e5, 5e5, 5e5], SYRTIS_TM, title="Web Mercator Mars", ) assert SYRTIS_TM == syrtis_tms.crs._pyproj_crs assert syrtis_tms.geographic_crs assert syrtis_tms.model_dump(mode="json") center = syrtis_tms.ul(1, 1, 1) assert round(center.x, 6) == 76.5 assert round(center.y, 6) == 17 _to_geographic = pyproj.Transformer.from_crs( syrtis_tms.crs._pyproj_crs, MARS2000_SPHERE, always_xy=True ) bbox = _to_geographic.transform_bounds(*syrtis_tms.xy_bbox, densify_pts=21) assert bbox == syrtis_tms.bbox def test_mars_tms_construction(): mars_sphere_crs = pyproj.CRS.from_user_input("IAU_2015:49900") extent = [-180.0, -90.0, 180.0, 90.0] mars_tms = morecantile.TileMatrixSet.custom( extent, crs=mars_sphere_crs, id="MarsGeographicCRS", matrix_scale=[2, 1], ) assert "4326" not in mars_tms.geographic_crs.to_wkt() assert mars_tms.xy_bbox.left == pytest.approx(-180.0) assert mars_tms.xy_bbox.bottom == pytest.approx(-90.0) assert mars_tms.xy_bbox.right == pytest.approx(180.0) assert mars_tms.xy_bbox.top == pytest.approx(90.0) def test_mars_web_mercator_long_lat(): wkt_mars_web_mercator = 'PROJCRS["Mars (2015) - Sphere XY / Pseudo-Mercator",BASEGEOGCRS["Mars (2015) - Sphere",DATUM["Mars (2015) - Sphere",ELLIPSOID["Mars (2015) - Sphere",3396190,0,LENGTHUNIT["metre",1,ID["EPSG",9001]]],ANCHOR["Viking 1 lander : 47.95137 W"]],PRIMEM["Reference Meridian",0,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]],CONVERSION["Popular Visualisation Pseudo-Mercator",METHOD["Popular Visualisation Pseudo Mercator",ID["EPSG",1024]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["False easting",0,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1,ID["EPSG",9001]]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1,ID["EPSG",9001]]],USAGE[SCOPE["Web mapping and visualisation."],AREA["World between 85.06 S and 85.06 N."],BBOX[-85.050511287,-180,85.050511287,180]],REMARK["Use semi-major radius as sphere radius for interoperability. Source of IAU Coordinate systems: doi:10.1007/s10569-017-9805-5"]]' crs_mars_web_mercator = pyproj.CRS.from_wkt(wkt_mars_web_mercator) extent_wm = [ -10669445.554195119, -10669445.554195119, 10669445.554195119, 10669445.554195119, ] mars_tms_wm = morecantile.TileMatrixSet.custom( extent_wm, crs=crs_mars_web_mercator, id="MarsWebMercator", ) assert "4326" not in mars_tms_wm.geographic_crs.to_wkt() assert mars_tms_wm.bbox.left == pytest.approx(-180.0) assert mars_tms_wm.bbox.bottom == pytest.approx(-85.0511287) assert mars_tms_wm.bbox.right == pytest.approx(180.0) assert mars_tms_wm.bbox.top == pytest.approx(85.0511287) extent_wm_geog = [ -179.9999999999996, -85.05112877980656, 179.9999999999996, 85.05112877980656, ] mars_sphere_crs = pyproj.CRS.from_user_input("IAU_2015:49900") mars_tms_wm_geog_ext = morecantile.TileMatrixSet.custom( extent_wm_geog, extent_crs=mars_sphere_crs, crs=crs_mars_web_mercator, id="MarsWebMercator", ) assert mars_tms_wm_geog_ext.bbox.left == pytest.approx(-180.0) assert mars_tms_wm_geog_ext.bbox.bottom == pytest.approx(-85.0511287) assert mars_tms_wm_geog_ext.bbox.right == pytest.approx(180.0) assert mars_tms_wm_geog_ext.bbox.top == pytest.approx(85.0511287) @pytest.mark.parametrize( "identifier, file, crs", [ ( "UPSAntarcticWGS84Quad", os.path.join(tms_v1_dir, "UPSAntarcticWGS84Quad.json"), 5042, ), ("CanadianNAD83_LCC", os.path.join(tms_v1_dir, "CanadianNAD83_LCC.json"), 3978), ("WebMercatorQuad", os.path.join(tms_v1_dir, "WebMercatorQuad.json"), 3857), ], ) def test_from_v1(identifier, file, crs): """ Test from_v1 class method """ with open(file) as fp: v1_tms = json.load(fp) tms = TileMatrixSet.from_v1(v1_tms) assert tms.id == identifier assert tms.crs._pyproj_crs == pyproj.CRS.from_epsg(crs) @pytest.mark.parametrize( "id,result", [ ("LINZAntarticaMapTilegrid", True), ("EuropeanETRS89_LAEAQuad", True), ("CanadianNAD83_LCC", False), ("UPSArcticWGS84Quad", False), ("NZTM2000Quad", True), ("UTM31WGS84Quad", False), ("UPSAntarcticWGS84Quad", False), ("WorldMercatorWGS84Quad", False), ("WorldCRS84Quad", False), ("WGS1984Quad", True), ("WebMercatorQuad", False), ("CDB1GlobalGrid", True), ("GNOSISGlobalGrid", True), ], ) def test_inverted_tms(id, result): """Make sure _invert_axis return the correct result.""" assert morecantile.tms.get(id)._invert_axis == result @pytest.mark.parametrize( "id,result", [ ("LINZAntarticaMapTilegrid", False), ("EuropeanETRS89_LAEAQuad", False), ("CanadianNAD83_LCC", False), ("UPSArcticWGS84Quad", False), ("NZTM2000Quad", False), ("UTM31WGS84Quad", False), ("UPSAntarcticWGS84Quad", False), ("WorldMercatorWGS84Quad", False), ("WorldCRS84Quad", False), ("WGS1984Quad", False), ("WebMercatorQuad", False), ("CDB1GlobalGrid", True), ("GNOSISGlobalGrid", True), ], ) def test_variable_tms(id, result): """Make sure is_variable return the correct result.""" assert morecantile.tms.get(id).is_variable == result @pytest.mark.parametrize( "authority,code,result", [ ("EPSG", "4326", "EPSG/0/4326"), ("ESRI", "102001", "ESRI/0/102001"), ("IAU_2015", "49910", "IAU/2015/49910"), ("IGNF", "AMANU49", "IGNF/0/AMANU49"), ("NKG", "ETRF00", "NKG/0/ETRF00"), ("OGC", "CRS84", "OGC/0/CRS84"), ], ) def test_crs_uris(authority, code, result): """Test CRS URIS.""" assert ( morecantile.models.CRS_to_uri(pyproj.CRS((authority, code))) == f"http://www.opengis.net/def/crs/{result}" ) @pytest.mark.parametrize("tilematrixset", morecantile.tms.list()) def test_crs_uris_for_defaults(tilematrixset): """Test CRS URIS.""" t = morecantile.tms.get(tilematrixset) assert t.crs._pyproj_crs == morecantile.models.CRS_to_uri(t.crs._pyproj_crs) def test_rasterio_crs(): """Check rasterio CRS methods.""" _ = pytest.importorskip("rasterio") from rasterio.crs import CRS as rioCRS tms = morecantile.tms.get("WebMercatorQuad") assert isinstance(tms.rasterio_crs, rioCRS) assert isinstance(tms.rasterio_geographic_crs, rioCRS) assert tms.rasterio_crs == rioCRS.from_epsg(3857) assert tms.rasterio_geographic_crs == rioCRS.from_epsg(4326) tms = morecantile.tms.get("WGS1984Quad") assert tms.rasterio_crs == rioCRS.from_epsg(4326) assert tms.rasterio_geographic_crs == rioCRS.from_epsg(4326) def test_boundingbox(): """Test boundingbox support.""" with pytest.raises(ValidationError): TileMatrixSet( **{ "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "boundingBox": { "lowerLeft": [], "upperRight": [], "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "orderedAxes": ["X", "Y"], }, "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.028717, "cellSize": 156543.033928041, "pointOfOrigin": [-20037508.342789244, 20037508.342789244], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, }, ], } ) assert TileMatrixSet( **{ "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "boundingBox": { "lowerLeft": [-20037508.342789244, -20037508.34278919], "upperRight": [20037508.34278919, 20037508.342789244], }, "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.028717, "cellSize": 156543.033928041, "pointOfOrigin": [-20037508.342789244, 20037508.342789244], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, }, ], } ) assert TileMatrixSet( **{ "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "boundingBox": { "lowerLeft": [-20037508.342789244, -20037508.34278919], "upperRight": [20037508.34278919, 20037508.342789244], "crs": "http://www.opengis.net/def/crs/EPSG/0/3857", "orderedAxes": ["X", "Y"], }, "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.028717, "cellSize": 156543.033928041, "pointOfOrigin": [-20037508.342789244, 20037508.342789244], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, }, ], } ) def test_private_attr(): """Check private attr.""" tms = morecantile.tms.get("WebMercatorQuad") assert "_geographic_crs" in tms.__private_attributes__ assert "_tile_matrices_idx" in tms.__private_attributes__ def test_crs_type(): """Test CRSType Model.""" uri = "http://www.opengis.net/def/crs/EPSG/0/3857" crs = CRS(uri) assert crs.root == uri assert crs.model_dump() == uri # PROJ methods assert crs._pyproj_crs == pyproj.CRS.from_epsg(3857) assert crs.srs == "http://www.opengis.net/def/crs/EPSG/0/3857" assert crs.to_epsg() == 3857 assert crs.to_wkt() == pyproj.CRS.from_epsg(3857).to_wkt() assert crs.to_proj4() == pyproj.CRS.from_epsg(3857).to_proj4() assert crs.to_dict() == pyproj.CRS.from_epsg(3857).to_dict() assert crs.to_json() == pyproj.CRS.from_epsg(3857).to_json() # with Options assert crs.to_epsg(min_confidence=10) == 3857 assert crs.to_wkt(pretty=True) == pyproj.CRS.from_epsg(3857).to_wkt(pretty=True) assert crs.to_proj4(5) == pyproj.CRS.from_epsg(3857).to_proj4(5) assert crs.to_json(pretty=True) == pyproj.CRS.from_epsg(3857).to_json(pretty=True) # Outside OGC Specs but it works wkt = pyproj.CRS.from_epsg(3857).to_wkt() crs = CRS(wkt) assert crs.root == wkt assert crs.model_dump() == wkt # PROJ methods assert crs._pyproj_crs == pyproj.CRS.from_epsg(3857) assert crs.srs == wkt assert crs.to_epsg() == 3857 # CRSUri data = {"uri": "http://www.opengis.net/def/crs/EPSG/0/3857"} crs = CRS(data) assert crs.root == CRSUri(uri="http://www.opengis.net/def/crs/EPSG/0/3857") assert ( crs.model_dump(mode="json") == data ) # we use `mode=json` to dump all sub-model (URL) assert crs._pyproj_crs == pyproj.CRS.from_epsg(3857) # CRSWKT wkt = pyproj.CRS.from_epsg(3857).to_json_dict() crs = CRS({"wkt": wkt}) assert crs.root == CRSWKT(wkt=wkt) assert crs.model_dump()["wkt"] == wkt assert crs._pyproj_crs == pyproj.CRS.from_epsg(3857) # CRSRef with pytest.raises(NotImplementedError): CRS({"referenceSystem": {"yo": 1}}) # something else with pytest.raises(ValidationError): CRS({"Hey": 1}) def test_crs_type_in_tms(): """Check TMS representation when using non-string CRS.""" # CRS URI crs = {"uri": "http://www.opengis.net/def/crs/EPSG/0/3857"} tms = TileMatrixSet( **{ "crs": crs, "boundingBox": { "lowerLeft": [-20037508.342789244, -20037508.34278919], "upperRight": [20037508.34278919, 20037508.342789244], }, "tileMatrices": [ { "id": "0", "scaleDenominator": 559082264.028717, "cellSize": 156543.033928041, "pointOfOrigin": [-20037508.342789244, 20037508.342789244], "tileWidth": 256, "tileHeight": 256, "matrixWidth": 1, "matrixHeight": 1, }, ], } ) assert str(tms.crs.root.uri) == "http://www.opengis.net/def/crs/EPSG/0/3857" assert repr(tms) def test_geographic_issue164(): """ Check bbox in geographic CRS. ref: https://github.com/developmentseed/morecantile/issues/164 """ extent = [2696082.04374708, 1289407.53195196, 2696210.04374708, 1289535.53195196] crs = pyproj.CRS.from_epsg("2056") tms = morecantile.TileMatrixSet.custom(extent, crs) assert tms.geographic_crs != pyproj.CRS.from_epsg(4326) assert round(tms.bbox.bottom, 5) == 47.74957 tms.set_geographic_crs(pyproj.CRS.from_epsg(4326)) assert tms.geographic_crs == pyproj.CRS.from_epsg(4326) assert round(tms.bbox.bottom, 5) == 47.74817 @pytest.mark.parametrize( "name,is_wgs84", [ ("LINZAntarticaMapTilegrid", False), ("GNOSISGlobalGrid", True), ("EuropeanETRS89_LAEAQuad", False), ("CanadianNAD83_LCC", False), ("UPSArcticWGS84Quad", True), ("NZTM2000Quad", False), ("UTM31WGS84Quad", True), ("UPSAntarcticWGS84Quad", True), ("WorldMercatorWGS84Quad", True), ("WGS1984Quad", True), ("WorldCRS84Quad", False), ("WebMercatorQuad", True), ("CDB1GlobalGrid", True), ], ) def test_geographic_crs(name, is_wgs84): """Check Geographic CRS.""" tms = morecantile.tms.get(name) assert (tms.geographic_crs == pyproj.CRS.from_epsg(4326)) == is_wgs84 tms.set_geographic_crs(pyproj.CRS.from_epsg(4326)) assert tms.geographic_crs == pyproj.CRS.from_epsg(4326) # Confirm the original object wasn't updated tms = morecantile.tms.get(name) assert (tms.geographic_crs == pyproj.CRS.from_epsg(4326)) == is_wgs84 def test_bottomleft_origin(): """Create TMS with BottomLeft Origin.""" wmTopLeft = morecantile.tms.get("WebMercatorQuad") crs = pyproj.CRS.from_epsg(3857) extent = ( -20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244, ) corner_of_origin = "bottomLeft" tms = TileMatrixSet.custom( extent, crs, matrix_scale=[1, 1], minzoom=0, maxzoom=24, id="WebMercatorQuadBottomLeft", ordered_axes=["X", "Y"], corner_of_origin=corner_of_origin, ) assert tms.matrix(0).pointOfOrigin == (-20037508.342789244, -20037508.342789244) assert tms._matrix_origin(tms.matrix(0)) == ( -20037508.342789244, -20037508.342789244, ) assert tms.xy_bounds(0, 0, 0) == wmTopLeft.xy_bounds(0, 0, 0) # bottomLeft corner can also be used as # origin making TileRow increase towards the top assert tms.xy_bounds(1, 1, 1) == wmTopLeft.xy_bounds(1, 0, 1) assert tms.xy_bounds(1, 0, 1) == wmTopLeft.xy_bounds(1, 1, 1) assert tms._ul(0, 0, 0) == wmTopLeft._ul(0, 0, 0) assert tms._lr(0, 0, 0) == wmTopLeft._lr(0, 0, 0) # TileRow is inverted assert tms._ul(0, 0, 1).y == wmTopLeft._ul(0, 1, 1).y assert tms._ul(0, 1, 1).y == wmTopLeft._ul(0, 0, 1).y assert tms._lr(0, 0, 1).y == wmTopLeft._lr(0, 1, 1).y assert tms._lr(0, 1, 1).y == wmTopLeft._lr(0, 0, 1).y assert tms.bounds(0, 0, 0) == wmTopLeft.bounds(0, 0, 0) assert tms.xy_bounds(0, 0, 1).left == -20037508.342789244 assert tms.xy_bounds(0, 0, 1).bottom == -20037508.342789244 assert tms.xy_bounds(1, 1, 1).top == 20037508.342789244 assert tms.xy_bounds(1, 1, 1).right == 20037508.342789244 assert tms.tile(-180, -85, 0) == morecantile.Tile(x=0, y=0, z=0) assert tms.tile(-180, -85, 1) == morecantile.Tile(x=0, y=0, z=1) assert tms.tile(-180, 85, 1) == morecantile.Tile(x=0, y=1, z=1) bounds = tms.xy_bounds(486, tms.matrix(10).matrixHeight - 1 - 332, 10) expected = wmTopLeft.xy_bounds(486, 332, 10) for a, b in zip(expected, bounds): assert round(a - b, 6) == pytest.approx(0) @pytest.mark.parametrize( ("topLeft_Tile", "bottomLeft_Tile"), [ (morecantile.Tile(10, 10, 10), morecantile.Tile(10, 1013, 10)), (morecantile.Tile(10, 1013, 10), morecantile.Tile(10, 10, 10)), # Check the Origin points (morecantile.Tile(0, 0, 10), morecantile.Tile(0, 1023, 10)), (morecantile.Tile(0, 1023, 10), morecantile.Tile(0, 0, 10)), # Check the end points (morecantile.Tile(1023, 0, 10), morecantile.Tile(1023, 1023, 10)), (morecantile.Tile(1023, 1023, 10), morecantile.Tile(1023, 0, 10)), # Zoom=0 (morecantile.Tile(0, 0, 0), morecantile.Tile(0, 0, 0)), # zoom=1 on both edges of the zoom level (morecantile.Tile(0, 0, 1), morecantile.Tile(0, 1, 1)), (morecantile.Tile(0, 1, 1), morecantile.Tile(0, 0, 1)), # zoom=14 near the middle ( morecantile.Tile(x=3413, y=6202, z=14), morecantile.Tile(x=3413, y=10181, z=14), ), ], ) def test_topLeft_BottomLeft_bounds_equal_bounds(topLeft_Tile, bottomLeft_Tile): tmsTop = morecantile.tms.get("WebMercatorQuad") tmsBottom = TileMatrixSet.custom( ( -20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244, ), pyproj.CRS.from_epsg(3857), matrix_scale=[1, 1], minzoom=0, maxzoom=24, id="WebMercatorQuadBottomLeft", ordered_axes=["X", "Y"], corner_of_origin="bottomLeft", ) bounds = tmsTop.xy_bounds(topLeft_Tile) bounds2 = tmsBottom.xy_bounds(bottomLeft_Tile) for a, b in zip(bounds, bounds2): assert round(a - b, 6) == 0 def test_webmercator_bounds(): """Test WebMercatorQuad bounds. ref: https://github.com/developmentseed/morecantile/issues/175 """ tms = morecantile.tms.get("WebMercatorQuad") assert tms.bounds(0, 0, 0).left == -180.0 assert tms.bounds(0, 0, 0).right == 180.0 assert tuple(tms.xy_bounds(0, 0, 0)) == ( -20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244, ) assert tms.bounds(0, 0, 1).left == -180.0 assert tms.bounds(1, 0, 1).right == 180.0 def test_bbox_bottom_left(): """Ref: issue #193""" extent = [-100_000, -100_000, 100_000, 100_000] tms = TileMatrixSet.custom( extent, pyproj.CRS.from_epsg(3857), minzoom=0, maxzoom=2, corner_of_origin="bottomLeft", ) assert tms.xy_bbox == BoundingBox( left=-100_000, bottom=-100_000, right=100_000, top=100_000, ) assert tms.xy_bounds(Tile(x=0, y=0, z=0)) == BoundingBox( left=-100_000, bottom=-100_000, right=100_000, top=100_000, ) assert tms._ul(Tile(x=0, y=0, z=0)) == Coords(x=-100000.0, y=100000.0) assert tms._lr(Tile(x=0, y=0, z=0)) == Coords(x=100000.0, y=-100000.0) assert tms._ul(Tile(x=0, y=0, z=1)) == Coords(x=-100000.0, y=0.0) assert tms._lr(Tile(x=0, y=0, z=1)) == Coords(x=0.0, y=-100000.0) assert tms._ul(Tile(x=1, y=0, z=1)) == Coords(x=0.0, y=0.0) assert tms._lr(Tile(x=1, y=0, z=1)) == Coords(x=100000.0, y=-100000.0) assert tms._ul(Tile(x=0, y=1, z=1)) == Coords(x=-100000.0, y=100000.0) assert tms._lr(Tile(x=0, y=1, z=1)) == Coords(x=0.0, y=0.0) assert tms._ul(Tile(x=1, y=1, z=1)) == Coords(x=0.0, y=100000.0) assert tms._lr(Tile(x=1, y=1, z=1)) == Coords(x=100000.0, y=0) @pytest.mark.parametrize("tilematrixset", morecantile.tms.list()) def test_to_geojson(tilematrixset): """Test to_geojson method.""" t = morecantile.tms.get(tilematrixset) geojson = list(t.matrix_to_geojson(level=t.minzoom)) assert geojson[0]["type"] == "Feature" geojson = list(t.matrix_to_geojson(level=t.minzoom, geographic=False)) assert geojson[0]["type"] == "Feature" morecantile-7.1.0/tests/test_morecantile.py000066400000000000000000000523301525253500000210760ustar00rootroot00000000000000"""Tests for morecantile.""" import math import warnings import mercantile import pytest from pyproj import CRS import morecantile from morecantile.errors import ( InvalidIdentifier, InvalidZoomError, PointOutsideTMSBounds, ) from morecantile.utils import is_power_of_two, meters_per_unit DEFAULT_GRID_COUNT = 13 def test_default_grids(): """Morecantile.default_grids should return the correct list of grids.""" assert len(morecantile.tms.list()) == DEFAULT_GRID_COUNT with pytest.raises(InvalidIdentifier): morecantile.tms.get("ANotValidName") def test_register(): """Test register a new grid.""" assert len(morecantile.tms.list()) == DEFAULT_GRID_COUNT crs = CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 tms = morecantile.TileMatrixSet.custom(extent, crs, id="MyCustomGrid3031") # Make sure we don't update the default tms (frozen set) _ = morecantile.tms.register({"MyCustomGrid3031": tms}) assert len(morecantile.tms.list()) == DEFAULT_GRID_COUNT defaults = morecantile.tms.register({"MyCustomGrid3031": tms}) assert len(defaults.list()) == DEFAULT_GRID_COUNT + 1 assert "MyCustomGrid3031" in defaults.list() # Check it will raise an exception if TMS is already registered with pytest.raises(InvalidIdentifier): defaults = defaults.register({"MyCustomGrid3031": tms}) # Do not raise is overwrite=True defaults = defaults.register({"MyCustomGrid3031": tms}, overwrite=True) assert len(defaults.list()) == DEFAULT_GRID_COUNT + 1 # add tms in morecantile defaults (not something to do anyway) epsg3031 = morecantile.TileMatrixSet.custom(extent, crs, id="epsg3031") morecantile.defaults.default_tms["epsg3031"] = epsg3031 assert len(morecantile.defaults.default_tms.keys()) == DEFAULT_GRID_COUNT + 1 # make sure updating the default_tms dict has no effect on the default TileMatrixSets assert len(morecantile.tms.list()) == DEFAULT_GRID_COUNT # Update internal TMS dict morecantile.tms.tilematrixsets["MyCustomGrid3031"] = tms assert len(morecantile.tms.list()) == DEFAULT_GRID_COUNT + 1 # make sure it doesn't propagate to the default dict assert "MyCustomGrid3031" not in morecantile.defaults.default_tms def test_TMSproperties(): """Test TileSchema().""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.crs._pyproj_crs == CRS.from_epsg(3857) assert meters_per_unit(tms.crs._pyproj_crs) == 1.0 assert tms.minzoom == 0 assert tms.maxzoom == 24 def test_tile_coordinates(): """Test coordinates to tile index utils.""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.tile(-179, 85, 5) == (0, 0, 5) # Check equivalence between mercantile and morecantile # wlon, wlat = mercantile.xy(20.0, 15.0) assert tms.tile(20.0, 15.0, 5) == mercantile.tile(20.0, 15.0, 5) @pytest.mark.parametrize( "args", [(486, 332, 10), [(486, 332, 10)], [morecantile.Tile(486, 332, 10)]] ) def test_bounds(args): """ TileMatrixSet.bounds should return the correct coordinates. test form https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py """ expected = (-9.140625, 53.12040528310657, -8.7890625, 53.33087298301705) tms = morecantile.tms.get("WebMercatorQuad") bbox = tms.bounds(*args) for a, b in zip(expected, bbox): assert round(a - b, 6) == 0 assert bbox.left == bbox[0] assert bbox.bottom == bbox[1] assert bbox.right == bbox[2] assert bbox.top == bbox[3] @pytest.mark.parametrize( "args", [(486, 332, 10), [(486, 332, 10)], [morecantile.Tile(486, 332, 10)]] ) def test_xy_bounds(args): """ TileMatrixSet.xy_bounds should return the correct coordinates. test form https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py """ expected = ( -1017529.7205322663, 7005300.768279833, -978393.962050256, 7044436.526761846, ) tms = morecantile.tms.get("WebMercatorQuad") bounds = tms.xy_bounds(*args) for a, b in zip(expected, bounds): assert round(a - b, 6) == 0 def test_ul_tile(): """ TileMatrixSet.ul should return the correct coordinates. test form https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py """ tms = morecantile.tms.get("WebMercatorQuad") xy = tms.ul(486, 332, 10) expected = (-9.140625, 53.33087298301705) for a, b in zip(expected, xy): assert round(a - b, 6) == 0 def test_projul_tile(): """ TileMatrixSet._ul should return the correct coordinates in input projection. test form https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py """ tms = morecantile.tms.get("WebMercatorQuad") xy = tms._ul(486, 332, 10) expected = (-1017529.7205322663, 7044436.526761846) for a, b in zip(expected, xy): assert round(a - b, 6) == 0 def test_projtile(): """TileSchema._tile should return the correct tile.""" tms = morecantile.tms.get("WebMercatorQuad") assert tms._tile(1000, 1000, 1) == morecantile.Tile(1, 0, 1) def test_feature(): """TileSchema.feature should create proper geojson feature.""" tms = morecantile.tms.get("WebMercatorQuad") feat = tms.feature(morecantile.Tile(1, 0, 1)) assert feat["bbox"] assert feat["id"] assert feat["geometry"] assert len(feat["properties"].keys()) == 3 feat = tms.feature( morecantile.Tile(1, 0, 1), buffer=-10, precision=4, fid="1", props={"some": "thing"}, ) assert feat["bbox"] assert feat["id"] == "1" assert feat["geometry"] assert len(feat["properties"].keys()) == 4 with pytest.warns(UserWarning): feat = tms.feature( morecantile.Tile(1, 0, 1), projected=True, fid="1", props={"some": "thing"} ) assert feat["crs"] assert feat["bbox"] assert feat["id"] == "1" assert feat["geometry"] assert len(feat["properties"].keys()) == 4 # These extent coordinates are in EPSG:2056 (CH) custom_tms = morecantile.TileMatrixSet.custom( [2696082.04374708, 1289407.53195196, 2696210.04374708, 1289535.53195196], CRS.from_epsg("2056"), ) assert custom_tms.geographic_crs != CRS.from_epsg(4326) # Warn when geographic CRS is not WGS84 with pytest.warns(UserWarning): feat = custom_tms.feature( morecantile.Tile(1, 0, 1), projected=False, geographic_crs=custom_tms.geographic_crs, ) assert feat["crs"] # By default we use WGS84 CRS (as per GeoJSON spec) with warnings.catch_warnings(): warnings.simplefilter("error") feat = custom_tms.feature( morecantile.Tile(1, 0, 1), projected=False, ) assert not feat.get("crs") ################################################################################ # replicate mercantile tests # https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py @pytest.mark.parametrize( "args", [(486, 332, 10), [(486, 332, 10)], [morecantile.Tile(486, 332, 10)]] ) def test_ul(args): """test args.""" tms = morecantile.tms.get("WebMercatorQuad") expected = (-9.140625, 53.33087298301705) lnglat = tms.ul(*args) for a, b in zip(expected, lnglat): assert round(a - b, 6) == 0 assert lnglat[0] == lnglat.x assert lnglat[1] == lnglat.y @pytest.mark.parametrize( "args", [(486, 332, 10), [(486, 332, 10)], [mercantile.Tile(486, 332, 10)]] ) def test_bbox(args): """test bbox.""" tms = morecantile.tms.get("WebMercatorQuad") expected = (-9.140625, 53.12040528310657, -8.7890625, 53.33087298301705) bbox = tms.bounds(*args) for a, b in zip(expected, bbox): assert round(a - b, 6) == 0 assert bbox.left == bbox[0] assert bbox.bottom == bbox[1] assert bbox.right == bbox[2] assert bbox.top == bbox[3] def test_xy_tile(): """x, y for the 486-332-10 tile is correctly calculated.""" tms = morecantile.tms.get("WebMercatorQuad") ul = tms.ul(486, 332, 10) xy = tms.xy(*ul) expected = (-1017529.7205322663, 7044436.526761846) for a, b in zip(expected, xy): assert round(a - b, 6) == 0 def test_xy_null_island(): """x, y for (0, 0) is correctly calculated""" tms = morecantile.tms.get("WebMercatorQuad") xy = tms.xy(0.0, 0.0) expected = (0.0, 0.0) for a, b in zip(expected, xy): assert round(a - b, 6) == 0 @pytest.mark.xfail def test_xy_south_pole(): """Return -inf for y at South Pole Note: mercantile returns (0.0, inf) """ tms = morecantile.tms.get("WebMercatorQuad") with pytest.warns(PointOutsideTMSBounds): xy = tms.xy(0.0, -90) assert xy.x == 0.0 assert xy.y == float("inf") @pytest.mark.xfail def test_xy_north_pole(): """Return inf for y at North Pole. Note: mercantile returns (0.0, -inf) """ tms = morecantile.tms.get("WebMercatorQuad") with pytest.warns(PointOutsideTMSBounds): xy = tms.xy(0.0, 90) assert xy.x == 0.0 assert xy.y == float("inf") def test_xy_truncate(): """Input is truncated""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.xy(-181.0, 0.0, truncate=True) == tms.xy(tms.bbox.left, 0.0) @pytest.mark.xfail def test_lnglat(): """test lnglat.""" tms = morecantile.tms.get("WebMercatorQuad") # Make sure not warning is raised with warnings.catch_warnings(): warnings.simplefilter("error") xy = (-8366731.739810849, -1655181.9927159143) lnglat = tms.lnglat(*xy) assert round(lnglat.x, 5) == -75.15963 assert round(lnglat.y, 5) == -14.70462 with pytest.warns(PointOutsideTMSBounds): xy = (-28366731.739810849, -1655181.9927159143) lnglat = tms.lnglat(*xy, truncate=True) assert round(lnglat.x, 5) == -180.0 # in Mercantile (105.17731 in Morecantile) assert round(lnglat.y, 5) == -14.70462 # in Mercantile @pytest.mark.parametrize("tms_name", morecantile.tms.list()) def test_axis_inverted(tms_name): """Test axis inversion check""" tms = morecantile.tms.get(tms_name) if tms.orderedAxes: assert morecantile.models.crs_axis_inverted( tms.crs._pyproj_crs ) == morecantile.models.ordered_axis_inverted(tms.orderedAxes) def test_lnglat_gdal3(): """test lnglat.""" # PROJ>=7 returns (105.17731317609572, -14.704620000000013) tms = morecantile.tms.get("WebMercatorQuad") with pytest.warns(PointOutsideTMSBounds): xy = (-28366731.739810849, -1655181.9927159143) lnglat = tms.lnglat(*xy, truncate=True) assert round(lnglat.x, 5) == 105.17731 assert round(lnglat.y, 5) == -14.70462 def test_lnglat_xy_roundtrip(): """Test roundtrip.""" tms = morecantile.tms.get("WebMercatorQuad") lnglat = (-105.0844, 40.5853) roundtrip = tms.lnglat(*tms.xy(*lnglat)) for a, b in zip(roundtrip, lnglat): assert round(a - b, 6) == 0 @pytest.mark.parametrize( "args", [(486, 332, 10), [(486, 332, 10)], [mercantile.Tile(486, 332, 10)]] ) def test_xy_bounds_mercantile(args): """test xy_bounds.""" tms = morecantile.tms.get("WebMercatorQuad") expected = ( -1017529.7205322663, 7005300.768279833, -978393.962050256, 7044436.526761846, ) bounds = tms.xy_bounds(*args) for a, b in zip(expected, bounds): assert round(a - b, 6) == 0 def test_tile_not_truncated(): """test tile.""" tms = morecantile.tms.get("WebMercatorQuad") tile = tms.tile(20.6852, 40.1222, 9) expected = (285, 193) assert tile[0] == expected[0] assert tile[1] == expected[1] def test_tile_truncate(): """Input is truncated""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.tile(-181.0, 0.0, 9, truncate=True) == tms.tile(-180.0, 0.0, 9) def test_tiles(): """Test tiles from bbox.""" tms = morecantile.tms.get("WebMercatorQuad") # replicate mercantile tests # https://github.com/mapbox/mercantile/blob/master/tests/test_funcs.py#L115-L178 bounds = (-105, 39.99, -104.99, 40) tiles = list(tms.tiles(*bounds, zooms=[14])) expect = [ morecantile.Tile(x=3413, y=6202, z=14), morecantile.Tile(x=3413, y=6203, z=14), ] assert sorted(tiles) == sorted(expect) # Single zoom bounds = (-105, 39.99, -104.99, 40) tiles = list(tms.tiles(*bounds, zooms=14)) expect = [ morecantile.Tile(x=3413, y=6202, z=14), morecantile.Tile(x=3413, y=6203, z=14), ] assert sorted(tiles) == sorted(expect) # Input is truncated assert list(tms.tiles(-181.0, 0.0, -170.0, 10.0, zooms=[2], truncate=True)) == list( tms.tiles(-180.0, 0.0, -170.0, 10.0, zooms=[2]) ) assert list(tms.tiles(-180.0, -90.0, 180.0, 90.0, zooms=[0])) == [ morecantile.Tile(x=0, y=0, z=0) ] assert list(tms.tiles(-180.0, -90.0, 180.0, 90.0, zooms=[0], truncate=True)) == [ morecantile.Tile(x=0, y=0, z=0) ] # Antimeridian-crossing bounding boxes are handled bounds = (175.0, 5.0, -175.0, 10.0) assert len(list(tms.tiles(*bounds, zooms=[2]))) == 2 @pytest.mark.parametrize( ("bounds", "expected", "crs", "tms_bbox"), [ # case where east tms bbox crosses antimeridian ( (119.1, -32.86, 119.2, -32.82), 6, 32750, (100.23646734667152, -79.99407435445299, -158.6052850376368, 0.0), ), # case where west tms bbox crosses antimeridian ( (11.700978, 52.056474, 11.711114, 52.062706), 4, 32632, (-17.582877658817317, 0.0, 95.87417095917766, 83.95429547980198), ), ], ) def test_tiles_when_tms_bounds_and_provided_bounds_cross_antimeridian( bounds: tuple, expected: int, crs: int, tms_bbox: tuple ): utm = CRS.from_epsg(crs) rs_extent = utm.area_of_use.bounds tms = morecantile.TileMatrixSet.custom( crs=utm, extent_crs=CRS.from_epsg(4326), extent=list(rs_extent) ) # tms.tiles needs to be aware if tms bounds and input bounds crosses the # antimeridian e.g. min(119.2, -158.605) clamps to much larger area. Now # that we check to see if lons contain antimeridian, we build tiles that # actually overlap the provided bounds to tiles. # assert tms.bbox == tms_bbox for a, b in zip(tms.bbox, tms_bbox, strict=True): assert round(a - b, 6) == 0 assert len(list(tms.tiles(*bounds, zooms=11))) == expected def test_tiles_for_tms_with_non_standard_row_col_order(): """Test tiles from bbox when TMS has non-standard row/col alignment with lat/lon.""" crs = CRS.from_proj4( "+proj=s2 +lat_0=0.0 +lon_0=-90.0 +ellps=WGS84 +UVtoST=quadratic" ) extent = [0.0, 0.0, 1.0, 1.0] s2f4 = morecantile.TileMatrixSet.custom(extent, crs, id="S2F4") overlapping_tiles = s2f4.tiles(-100, 27, -95, 33, [6]) assert len(list(overlapping_tiles)) == 30 def test_global_tiles_clamped(): """Y is clamped to (0, 2 ** zoom - 1).""" tms = morecantile.tms.get("WebMercatorQuad") tiles = list(tms.tiles(-180, -90, 180, 90, [1])) assert len(tiles) == 4 assert min(t.y for t in tiles) == 0 assert max(t.y for t in tiles) == 1 def test_tiles_roundtrip_children(): """tiles(bounds(tile)) gives the tile's children""" tms = morecantile.tms.get("WebMercatorQuad") t = morecantile.Tile(x=3413, y=6202, z=14) res = list(tms.tiles(*tms.bounds(t), zooms=[15])) assert len(res) == 4 @pytest.mark.parametrize( "t", [ morecantile.Tile(x=3413, y=6202, z=14), morecantile.Tile(486, 332, 10), morecantile.Tile(10, 10, 10), ], ) def test_tiles_roundtrip(t): """Tiles(bounds(tile)) gives the tile.""" tms = morecantile.tms.get("WebMercatorQuad") res = list(tms.tiles(*tms.bounds(t), zooms=[t.z])) assert len(res) == 1 val = res.pop() assert val.x == t.x assert val.y == t.y assert val.z == t.z def test_tiles_nan_bounds(): """ nan bounds should raise an error instead of getting clamped to avoid unintentionally generating tiles for the entire TMS' extent. """ tms = morecantile.tms.get("WebMercatorQuad") bounds = (-105, math.nan, -104.99, 40) with pytest.raises(ValueError): list(tms.tiles(*bounds, zooms=[14])) def test_extend_zoom(): """TileMatrixSet.ul should return the correct coordinates.""" tms = morecantile.tms.get("WebMercatorQuad") merc = mercantile.xy_bounds(1000, 1000, 25) with pytest.warns(UserWarning): more = tms.xy_bounds(1000, 1000, 25) for a, b in zip(more, merc): assert round(a - b, 6) == 0 merc = mercantile.xy_bounds(2000, 2000, 26) with pytest.warns(UserWarning): more = tms.xy_bounds(2000, 2000, 26) for a, b in zip(more, merc): assert round(a - b, 6) == 0 merc = mercantile.xy_bounds(2000, 2000, 27) with pytest.warns(UserWarning): more = tms.xy_bounds(2000, 2000, 27) for a, b in zip(more, merc): assert round(a - b, 6) == 0 merc = mercantile.xy_bounds(2000, 2000, 30) with pytest.warns(UserWarning): more = tms.xy_bounds(2000, 2000, 30) for a, b in zip(more, merc): assert round(a - b, 6) == 0 def test_is_power_of_two(): """is power ot 2?""" assert is_power_of_two(8) assert not is_power_of_two(7) @pytest.mark.parametrize( "t,res", [ # X Y Z (morecantile.Tile(0, 0, 0), True), # zoom 0 has only tile 0,0,0 valid (morecantile.Tile(1, 0, 0), False), # MinZoom is 0 (morecantile.Tile(0, 0, -1), False), # MaxZoom is 24 (morecantile.Tile(0, 0, 24), True), (morecantile.Tile(0, 0, 25), False), # Negative X (morecantile.Tile(-1, 0, 1), False), # Negative Y (morecantile.Tile(0, -1, 1), False), ], ) def test_is_valid_tile(t, res): """test if tile are valid.""" tms = morecantile.tms.get("WebMercatorQuad") assert tms.is_valid(t) == res def test_is_valid_overzoom(): """test if tile are valid.""" tms = morecantile.tms.get("WebMercatorQuad") t = morecantile.Tile(0, 0, 25) assert tms.is_valid(t, strict=False) assert not tms.is_valid(t, strict=True) tms = morecantile.tms.get("GNOSISGlobalGrid") t = morecantile.Tile(0, 0, 28) assert tms.is_valid(t, strict=False) t = morecantile.Tile(0, 0, 29) assert not tms.is_valid(t, strict=False) # We can't overzoom VariableMatrixWidth TMS t = morecantile.Tile(0, 0, 29) assert not tms.is_valid(t) def test_neighbors(): """test neighbors.""" tms = morecantile.tms.get("WebMercatorQuad") x, y, z = 243, 166, 9 tiles = tms.neighbors(x, y, z) assert len(tiles) == 8 assert all(t.z == z for t in tiles) assert all(t.x - x in (-1, 0, 1) for t in tiles) assert all(t.y - y in (-1, 0, 1) for t in tiles) def test_neighbors_invalid(): """test neighbors.""" tms = morecantile.tms.get("WebMercatorQuad") x, y, z = 0, 166, 9 tiles = tms.neighbors(x, y, z) assert len(tiles) == 8 - 3 # no top-left, left, bottom-left assert all(t.z == z for t in tiles) assert all(t.x - x in (-1, 0, 1) for t in tiles) assert all(t.y - y in (-1, 0, 1) for t in tiles) def test_root_neighbors_invalid(): """test neighbors.""" tms = morecantile.tms.get("WebMercatorQuad") x, y, z = 0, 0, 0 tiles = tms.neighbors(x, y, z) assert len(tiles) == 0 # root tile has no neighbors def test_parent(): """test parent""" tms = morecantile.tms.get("WebMercatorQuad") parent = tms.parent(486, 332, 10) assert parent[0] == morecantile.Tile(243, 166, 9) with pytest.raises(InvalidZoomError): tms.parent(486, 332, 10, zoom=11) assert tms.parent(0, 0, 0) == [] def test_parent_multi(): """test parent""" tms = morecantile.tms.get("WebMercatorQuad") parent = tms.parent(486, 332, 10, zoom=8) assert parent[0] == morecantile.Tile(121, 83, 8) def test_children(): """test children.""" tms = morecantile.tms.get("WebMercatorQuad") x, y, z = 243, 166, 9 children = tms.children(x, y, z) assert len(children) == 4 assert morecantile.Tile(2 * x, 2 * y, z + 1) in children assert morecantile.Tile(2 * x + 1, 2 * y, z + 1) in children assert morecantile.Tile(2 * x + 1, 2 * y + 1, z + 1) in children assert morecantile.Tile(2 * x, 2 * y + 1, z + 1) in children def test_children_multi(): """test children multizoom.""" tms = morecantile.tms.get("WebMercatorQuad") children = tms.children(243, 166, 9, zoom=11) assert len(children) == 16 targets = [ (972, 664, 11), (973, 664, 11), (973, 665, 11), (972, 665, 11), (974, 664, 11), (975, 664, 11), (975, 665, 11), (974, 665, 11), (974, 666, 11), (975, 666, 11), (975, 667, 11), (974, 667, 11), (972, 666, 11), (973, 666, 11), (973, 667, 11), (972, 667, 11), ] for target in targets: assert target in children def test_children_invalid_zoom(): """invalid zoom.""" tms = morecantile.tms.get("WebMercatorQuad") with pytest.raises(InvalidZoomError): tms.children(243, 166, 9, zoom=8) with pytest.raises(InvalidZoomError): tms.children((243, 166, 9), zoom=8) morecantile-7.1.0/tests/test_tms_variable_width.py000066400000000000000000000142331525253500000224430ustar00rootroot00000000000000"""Tests for morecantile.""" import pytest import morecantile from morecantile.commons import BoundingBox, Tile from morecantile.errors import InvalidZoomError from morecantile.models import TileMatrix gnosisg_tms = morecantile.tms.get("GNOSISGlobalGrid") cdb1_tms = morecantile.tms.get("CDB1GlobalGrid") def test_coalesce(): """test get coalesce.""" matrix = TileMatrix( **{ "id": "2", "scaleDenominator": 34942641.501794859767, "cellSize": 0.087890625, "cornerOfOrigin": "topLeft", "pointOfOrigin": [90, -180], "matrixWidth": 16, "matrixHeight": 8, "tileWidth": 256, "tileHeight": 256, "variableMatrixWidths": [ {"coalesce": 4, "minTileRow": 0, "maxTileRow": 0}, {"coalesce": 2, "minTileRow": 1, "maxTileRow": 1}, {"coalesce": 2, "minTileRow": 6, "maxTileRow": 6}, {"coalesce": 4, "minTileRow": 7, "maxTileRow": 7}, ], } ) assert matrix.get_coalesce_factor(0) == 4 assert matrix.get_coalesce_factor(1) == 2 assert matrix.get_coalesce_factor(3) == 1 assert matrix.get_coalesce_factor(6) == 2 assert matrix.get_coalesce_factor(7) == 4 with pytest.raises(ValueError): matrix.get_coalesce_factor(8) with pytest.raises(ValueError): matrix.get_coalesce_factor(-1) matrix = TileMatrix( **{ "id": "2", "scaleDenominator": 34942641.501794859767, "cellSize": 0.087890625, "cornerOfOrigin": "topLeft", "pointOfOrigin": [90, -180], "matrixWidth": 16, "matrixHeight": 8, "tileWidth": 256, "tileHeight": 256, } ) with pytest.raises(ValueError): matrix.get_coalesce_factor(0) def test_invalid_matrix(): """Should raise error because we cannot construct a Matrix for variableWidth TMS.""" with pytest.raises(InvalidZoomError): cdb1_tms.matrix(22) with pytest.raises(InvalidZoomError): gnosisg_tms.matrix(29) def test_gnosisg(): """test GNOSISGlobalGrid TMS.""" bounds = gnosisg_tms.xy_bounds(0, 0, 0) assert bounds == BoundingBox(-180, 0, -90, 90) bounds = gnosisg_tms.xy_bounds(1, 1, 0) assert bounds == BoundingBox(-90, -90, 0, 0) bounds = gnosisg_tms.xy_bounds(0, 0, 1) assert bounds == BoundingBox(-180, 45, -90, 90) # tile for index 0,0 and 1,0 should have the same bounds assert gnosisg_tms.xy_bounds(0, 0, 1) == gnosisg_tms.xy_bounds(1, 0, 1) assert gnosisg_tms.xy_bounds(2, 0, 1) == gnosisg_tms.xy_bounds(3, 0, 1) assert gnosisg_tms.xy_bounds(4, 0, 1) == gnosisg_tms.xy_bounds(5, 0, 1) assert gnosisg_tms.xy_bounds(6, 0, 1) == gnosisg_tms.xy_bounds(7, 0, 1) assert gnosisg_tms.xy_bounds(0, 1, 1) != gnosisg_tms.xy_bounds(1, 1, 1) assert gnosisg_tms.xy_bounds(2, 1, 1) != gnosisg_tms.xy_bounds(3, 1, 1) assert gnosisg_tms.xy_bounds(0, 3, 1) == gnosisg_tms.xy_bounds(1, 3, 1) assert gnosisg_tms.xy_bounds(2, 3, 1) == gnosisg_tms.xy_bounds(3, 3, 1) assert gnosisg_tms.xy_bounds(4, 3, 1) == gnosisg_tms.xy_bounds(5, 3, 1) assert gnosisg_tms.xy_bounds(6, 3, 1) == gnosisg_tms.xy_bounds(7, 3, 1) # crs and geographic crs are the same assert gnosisg_tms.xy_bounds(0, 0, 0) == gnosisg_tms.bounds(0, 0, 0) assert gnosisg_tms.xy_bounds(1, 1, 0) == gnosisg_tms.bounds(1, 1, 0) assert gnosisg_tms.xy_bounds(0, 0, 1) == gnosisg_tms.bounds(0, 0, 1) tiles = gnosisg_tms.tiles(-180, -90, 180, 90, [0]) assert len(list(tiles)) == 8 ############################# # CHECK WE DON'T HAVE ALIASES tiles = list(gnosisg_tms.tiles(-180, -90, 180, 90, [1])) assert len(tiles) == 24 assert Tile(1, 0, 1) not in tiles # make sure the aliased tiles are not added assert len(gnosisg_tms.parent(Tile(0, 0, 1))) == 1 assert len(gnosisg_tms.parent(Tile(0, 0, 2))) == 1 assert len(gnosisg_tms.parent(Tile(0, 0, 3))) == 1 assert len(gnosisg_tms.children(Tile(0, 0, 0), zoom=1)) == 3 assert len(gnosisg_tms.children(Tile(0, 0, 0), zoom=2)) == 11 assert len(gnosisg_tms.children(Tile(0, 1, 1), zoom=2)) == 4 # test neighbors tiles = gnosisg_tms.neighbors(Tile(0, 0, 1)) assert tiles == [ Tile(x=0, y=1, z=1), Tile(x=1, y=1, z=1), Tile(x=2, y=0, z=1), Tile(x=2, y=1, z=1), ] tiles = gnosisg_tms.neighbors(Tile(2, 0, 1)) assert tiles == [ Tile(x=0, y=0, z=1), Tile(x=1, y=1, z=1), Tile(x=2, y=1, z=1), Tile(x=3, y=1, z=1), Tile(x=4, y=0, z=1), Tile(x=4, y=1, z=1), ] tiles = gnosisg_tms.neighbors(Tile(6, 0, 1)) assert tiles == [ Tile(x=4, y=0, z=1), Tile(x=5, y=1, z=1), Tile(x=6, y=1, z=1), Tile(x=7, y=1, z=1), ] tiles = gnosisg_tms.neighbors(Tile(0, 1, 1)) assert tiles == [ Tile(x=0, y=0, z=1), Tile(x=0, y=2, z=1), Tile(x=1, y=1, z=1), Tile(x=1, y=2, z=1), ] tiles = gnosisg_tms.neighbors(Tile(3, 1, 1)) assert tiles == [ Tile(x=2, y=0, z=1), Tile(x=2, y=1, z=1), Tile(x=2, y=2, z=1), Tile(x=3, y=2, z=1), Tile(x=4, y=0, z=1), Tile(x=4, y=1, z=1), Tile(x=4, y=2, z=1), ] tiles = gnosisg_tms.neighbors(Tile(0, 3, 1)) assert tiles == [ Tile(x=0, y=2, z=1), Tile(x=1, y=2, z=1), Tile(x=2, y=2, z=1), Tile(x=2, y=3, z=1), ] # assert alias tile have the same neighbors assert gnosisg_tms.neighbors(Tile(0, 0, 1)) == gnosisg_tms.neighbors(Tile(1, 0, 1)) assert gnosisg_tms.tile(-180, 90, 2) == Tile(0, 0, 2) assert gnosisg_tms.tile(-150, 90, 2) == Tile(0, 0, 2) assert gnosisg_tms.tile(-80, 90, 2) == Tile(4, 0, 2) assert gnosisg_tms.tile(-180, -90, 2) == Tile(0, 7, 2) assert gnosisg_tms.tile(-150, -90, 2) == Tile(0, 7, 2) assert gnosisg_tms.tile(-80, -90, 2) == Tile(4, 7, 2) # Ignore coalescence and return alias assert gnosisg_tms.tile(-150, 90, 2, ignore_coalescence=True) == Tile(1, 0, 2) assert gnosisg_tms.tile(150, -90, 2, ignore_coalescence=True) == Tile(14, 7, 2) morecantile-7.1.0/tests/test_utils.py000066400000000000000000000023331525253500000177320ustar00rootroot00000000000000"""test morecantile utils.""" import math import pytest from pyproj import CRS from morecantile import utils @pytest.mark.parametrize( "crs,unit", [ (CRS.from_epsg(4326), 2 * math.pi * 6378137 / 360.0), (CRS.from_epsg(3857), 1.0), (CRS.from_epsg(2276), 0.30480060960121924), (CRS.from_epsg(2222), 0.3048), # Mars in Meter ( CRS.from_proj4( "+proj=tmerc +lat_0=17 +lon_0=76.5 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs" ), 1.0, ), # Mars in Degrees # proj4 from https://github.com/AndrewAnnex/planetcantile/blob/5ea2577f5dc4a3bc91b0443ef0633a5f89b15e03/planetcantile/data/generate.py#L45-L47 ( CRS.from_proj4("+proj=longlat +R=3396190 +no_defs +type=crs"), 2 * math.pi * 3396190 / 360.0, ), ], ) def test_mpu(crs, unit): """test meters_per_unit.""" assert utils.meters_per_unit(crs) == unit @pytest.mark.parametrize( "lon1, lon2, contains", [(-180, 180, False), (179, -179, True)] ) def test_lons_contain_antimeridian(lon1: float, lon2: float, contains: bool): assert utils.lons_contain_antimeridian(lon1, lon2) == contains morecantile-7.1.0/uv.lock000066400000000000000000015353121525253500000153340ustar00rootroot00000000000000version = 1 revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.12'", "python_full_version < '3.12'", ] [[package]] name = "affine" version = "3.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/e9/4a4480601992a529c5d0f406605f70ca59aeaef4a6f5ba8905cfde217d0b/affine-3.0.1.tar.gz", hash = "sha256:e1b3c38c5d4d3ef5024a182a6d1bf1e0c51ab221825781c741aeb4d0c079a7e2", size = 20981, upload-time = "2026-08-28T18:38:14.452Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3d/87/e62f55c956b583380e7d2a71705dfd431ee32dd1689d50491ba0c610fc11/affine-3.0.1-py3-none-any.whl", hash = "sha256:cda3b303325e7bf2bf34817e68753a0d1c4cacbdd451fe67c4878dc2ecbaa540", size = 10887, upload-time = "2026-08-28T18:38:12.837Z" }, ] [[package]] name = "annotated-types" version = "0.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, ] [[package]] name = "anyio" version = "4.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "typing-extensions", marker = "python_full_version < '3.15'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, ] [[package]] name = "attrs" version = "26.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] [[package]] name = "babel" version = "2.18.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] [[package]] name = "backports-tarfile" version = "1.2.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", size = 86406, upload-time = "2024-05-28T17:01:54.731Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" }, ] [[package]] name = "backports-zstd" version = "1.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/75/f0/9ba1b05811aa5f5434f69768253129460a5744e1814f359efba39a01ce20/backports_zstd-1.7.0.tar.gz", hash = "sha256:1a967189c1822b6e85a2e550fdfc88a3272c17633ea0a4732dac5911a8034f2b", size = 1003722, upload-time = "2026-08-15T17:26:43.96Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/04/14/416e2e75d434bf2b8433ba54f10e5ec01a63bb1dfc7c6a82151faa735b50/backports_zstd-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:165a8898c5514b69533edf4ab1f4f4b4bacc62a137a76f36889b473150ec28a5", size = 438790, upload-time = "2026-08-15T17:25:16.171Z" }, { url = "https://files.pythonhosted.org/packages/08/0d/97e70a1d47d660c3854dfbbbd8a8ea9a98a0993976d9b0e0da07525dcff1/backports_zstd-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:700ebb797956767679dbca38e45eaa5c21630e460e31ef53bb4b849125bb5d87", size = 367595, upload-time = "2026-08-15T17:25:17.382Z" }, { url = "https://files.pythonhosted.org/packages/5c/8f/9b09bc4d29c2b697e9557a54e1e52b264a1ca3babd36542e7be6a0609cf6/backports_zstd-1.7.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:47f14a24428a2bc070e26c402f8d6d25676345c32fa116b16b60167a2925df2a", size = 507936, upload-time = "2026-08-15T17:25:18.695Z" }, { url = "https://files.pythonhosted.org/packages/89/e6/7eb513bb06fb2733e71cf358f227969996b74883de86458935c09f08d1c4/backports_zstd-1.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c358e72e5ff8f23e9f3ec778be4d67ddc5ced3e6d8f03521db29d7357a773fc3", size = 477864, upload-time = "2026-08-15T17:25:19.833Z" }, { url = "https://files.pythonhosted.org/packages/3f/68/fe0e57f2c8e04560eecc106bba18ad62d0576001722e8c5b619bb4517991/backports_zstd-1.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6c8c183027eae38f5b0643d153f7f91e569d22ee8db25639aea0745677a38ed8", size = 583229, upload-time = "2026-08-15T17:25:21.144Z" }, { url = "https://files.pythonhosted.org/packages/e3/d3/5944fbdfc8c03b8ef72c73c36652a32bb251b1b8ccefab07a8a8fbf202cb/backports_zstd-1.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d8493f71d9c5c05d18554afc6bb9a319a6674478e8f3042c7e22900c3a06f4d", size = 642898, upload-time = "2026-08-15T17:25:22.379Z" }, { url = "https://files.pythonhosted.org/packages/96/f2/661bd15e062ceb1a20a78e40598fee599a31472e60a7961dcd75b467c94f/backports_zstd-1.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2e505d8923e1e9224cf249b99c92cf728e9eb91fbd1e07a9c2816013621fad3", size = 493145, upload-time = "2026-08-15T17:25:23.833Z" }, { url = "https://files.pythonhosted.org/packages/00/6b/454369a552a3d114b293706441dc43412639a30665b9551959f0773e9b62/backports_zstd-1.7.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5d1bdc293267200e31baf35aa142c6d0ac3e8cce650f79c84e6a32980dfbfd5c", size = 567043, upload-time = "2026-08-15T17:25:25.104Z" }, { url = "https://files.pythonhosted.org/packages/bc/f2/e7af20299deb43f52aaf24f74e60b994201aea6d22c8a2adaaa13dc4b109/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d85c18170e8cdba339edc67a5021cf79ccc858f5fda6aeae71f9015c5e463f6", size = 483881, upload-time = "2026-08-15T17:25:26.634Z" }, { url = "https://files.pythonhosted.org/packages/a9/c4/0882cfac8714345cfcc5ba139e16c7b64aee9f2fec3ebff9de77131f1d14/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:96a6f8d3f4cefb6b11ebfc30fc0d970430ecfb169a6555990734a2a46977ec4b", size = 511455, upload-time = "2026-08-15T17:25:27.808Z" }, { url = "https://files.pythonhosted.org/packages/be/85/01cfbb2f07475ac1091ea93fbd04762c95ee6d82c937e2508072e12a9eb6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c2c01cb823ed1b2422905a9791759bdc986e44e7a12b4661e9d712d5c8946016", size = 587585, upload-time = "2026-08-15T17:25:29.012Z" }, { url = "https://files.pythonhosted.org/packages/61/2f/f378daf513ca0feb5740aa4b1291c5133e5095830a7052da6088974f477b/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:86785aef2b4663a97c932d829ddc9565354cc628e2ae61764d9d93c8b186d65f", size = 564894, upload-time = "2026-08-15T17:25:30.28Z" }, { url = "https://files.pythonhosted.org/packages/34/ef/cb031d27b06863aa666d49dada3c1010151306b98861b8b826ae722af1a6/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:633ceee3ba86f696fc4e992f7bce558c132c26d04d64d0bb8c2f5d487d5b3aee", size = 633546, upload-time = "2026-08-15T17:25:31.652Z" }, { url = "https://files.pythonhosted.org/packages/f0/44/b5f1480f6c250ed72f22e8682d6532f992aef0e2033b21b8d8bff96be034/backports_zstd-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a80bc6a8c9aeaad76cc3ecd58067ec038a764807186b0df970c760df39b89c7", size = 497152, upload-time = "2026-08-15T17:25:32.957Z" }, { url = "https://files.pythonhosted.org/packages/db/30/13f0447faef940a763dfddf6ba2d4941bb45a350bba8c9ba56a22e933dfd/backports_zstd-1.7.0-cp311-cp311-win32.whl", hash = "sha256:1713271e2faea852a1682a6143c19c3506cd2e1b71f60a8924c59a9d2554d2b2", size = 292182, upload-time = "2026-08-15T17:25:34.262Z" }, { url = "https://files.pythonhosted.org/packages/99/04/8f67d5436f7ef4b1d286b8b186fb4a3e371416921110f8dc0f6c4d9e497d/backports_zstd-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:ae840be71108f6020567dd389c973e70a4374a6c0b03c02d3242c8a98a9b3cdb", size = 329717, upload-time = "2026-08-15T17:25:35.517Z" }, { url = "https://files.pythonhosted.org/packages/c2/eb/e446bb3d4520e618571a929ceb7776124d6f8491ea17d3355a8867deb031/backports_zstd-1.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:8827a5601c749a986faa163f3b59d59eedc5947812be114f7132c3d4ad153fee", size = 292294, upload-time = "2026-08-15T17:25:36.797Z" }, { url = "https://files.pythonhosted.org/packages/df/23/240495dec973dcfb34816248956ca8d05b32fb75936c226c1cf497b83b83/backports_zstd-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5548a857bb0fcc5449cc3687353547396c6b1ecd4bd882f1cd34fa8d29e70ca", size = 439047, upload-time = "2026-08-15T17:25:38.084Z" }, { url = "https://files.pythonhosted.org/packages/6d/24/5556959c7d03bfee5ff14d7f07dd9bf8de737c69f81d823a32784ab39c34/backports_zstd-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bab192b934fdf5a03df4752556d9c8af2d058163fdfbafd4a253cdfe25449a6f", size = 367666, upload-time = "2026-08-15T17:25:39.233Z" }, { url = "https://files.pythonhosted.org/packages/b2/cb/557db98001c4a7202beed19e8bd42603a2315b80fd5def7e21a0b048ec3b/backports_zstd-1.7.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:8344260bed9842c415a93d9bfe23ea834e5f27758827d56933d8c0d06db507a2", size = 508475, upload-time = "2026-08-15T17:25:40.367Z" }, { url = "https://files.pythonhosted.org/packages/40/4b/820acbc2c1d1d945aedca0c0d22546a948630ffb186df523098fbd669a95/backports_zstd-1.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c55e55e1e9dee312bc5e186386e6aa5207482a6d2242bd7c14709ded254f87f", size = 478240, upload-time = "2026-08-15T17:25:41.806Z" }, { url = "https://files.pythonhosted.org/packages/f9/76/77fa9b385e79d4c106ce15d66681978f39a844b0eb5db02682687246b716/backports_zstd-1.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cf609af3735c7e697ccd13f6b0c88da57c201b6ea63c6afbfe81d6f9b50e298c", size = 583611, upload-time = "2026-08-15T17:25:43.104Z" }, { url = "https://files.pythonhosted.org/packages/95/a4/fbb7c73336f3279dad36da94382a59755100b656301ea836ebaa42736581/backports_zstd-1.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:676a37971f676830d4f90cee8fdf4e438781596fb2f2d1984ac76c9b3eb39a69", size = 642496, upload-time = "2026-08-15T17:25:44.322Z" }, { url = "https://files.pythonhosted.org/packages/1e/40/121917bd2671bc3f1507c25503c0554f0b52483edcca4e6210e6d22228df/backports_zstd-1.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:470895d0bcddc850766e593d1b26764fb138c2feed149f515a2627ef9587d54c", size = 496195, upload-time = "2026-08-15T17:25:45.503Z" }, { url = "https://files.pythonhosted.org/packages/de/c7/c6379a0d734bea1c7f14d07c23258108cc92b994654e25cfe3a3e88cd785/backports_zstd-1.7.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:02f2f6649a342d0901ddb35596ddadb7c3bb1cf6bb54d691e5e0285f1fa0674f", size = 570964, upload-time = "2026-08-15T17:25:46.648Z" }, { url = "https://files.pythonhosted.org/packages/7a/a4/372c3dd3017c3f93cda0acbc282f8073b70efdc1b56d1fdeebe023660725/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:132ba81fad59d44958b7d10da31545e7128c469cfbc2e268d0eaab96daa64175", size = 484276, upload-time = "2026-08-15T17:25:48.129Z" }, { url = "https://files.pythonhosted.org/packages/f5/50/83fa7bdd5e1d808203b9143848fdf7e15de399b8119a0d4378b2aea9be78/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a3e1c6ce0b232ee6703ed24ee126e8186107f5a4e56edbd21cd1aa5a8c6bfd12", size = 511963, upload-time = "2026-08-15T17:25:49.666Z" }, { url = "https://files.pythonhosted.org/packages/56/d2/d4ed32c353148acc18f3b665ab24a677b9c49d3640244424c5d6046400c5/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d7a7cb964eb8d1bb5d039970b16fe54802ea47dc935ae96d9874844a126bf8ff", size = 588025, upload-time = "2026-08-15T17:25:51.288Z" }, { url = "https://files.pythonhosted.org/packages/ae/5a/df8b5b848e8dfdec6edca55f22067ffbafa081d81aec1313e28155c3fea3/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:12a9842a2ec2854cbec7f252ab29d44c2b772788a9bbafded743ca4bf73b115f", size = 568223, upload-time = "2026-08-15T17:25:52.633Z" }, { url = "https://files.pythonhosted.org/packages/43/8c/f970f15e7fdbf8a251f121c91364fa68bbc2dfab4d5eca058427dec63397/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:138154eea8ced84394991bf0e819dba6b690306a178dd528c28eee724b7d4aec", size = 632937, upload-time = "2026-08-15T17:25:54.511Z" }, { url = "https://files.pythonhosted.org/packages/6a/d0/e36c18c87a74421954502d123ff7027e0a63a7624dffa99ec0f7474deff9/backports_zstd-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:468b636ed365627b364c94be1c35a52858e13b5bc1fa3f068bbc71b1af65f3d7", size = 500735, upload-time = "2026-08-15T17:25:56.064Z" }, { url = "https://files.pythonhosted.org/packages/1c/57/fc72280334d2aa94238c5882052263bd7796c1fa924044353c30d058e0c3/backports_zstd-1.7.0-cp312-cp312-win32.whl", hash = "sha256:f026fe2e89b7ff01ba6ebec6abaff34c6063919151a32afb68714cf139e17c50", size = 292394, upload-time = "2026-08-15T17:25:57.469Z" }, { url = "https://files.pythonhosted.org/packages/71/89/6cea747bdeef34cd12482b17e604b832fdb0962987132b99496f1a6c3f82/backports_zstd-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:2ea62ba2f1a6e6c9e6dc108921f9ae881969ca72e073162fa488d0de3eb2713f", size = 329876, upload-time = "2026-08-15T17:25:58.798Z" }, { url = "https://files.pythonhosted.org/packages/64/28/b4a17c07d5a50a45cb04592960d1593cdf3b3728968371f332aa3643b804/backports_zstd-1.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:cefb983345c55ccaa20423a4eb96434730e6d640ffa2db9b60e5bedb0fbef94e", size = 292461, upload-time = "2026-08-15T17:25:59.928Z" }, { url = "https://files.pythonhosted.org/packages/6f/24/32b3358ae3a4df0ebad85ebbce721818c6d76a836119bee76089d103e951/backports_zstd-1.7.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:a3fbcbf819bee2b06b8666b13742098d0f40663ee34e64a12bc360ec0f5e3d89", size = 400913, upload-time = "2026-08-15T17:26:01.089Z" }, { url = "https://files.pythonhosted.org/packages/af/f3/39ef7dd75eb1e699e25a19212737a73d3c030a0c9fd1d0ed1572b5f8e493/backports_zstd-1.7.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:efee02f18e04c2e9e6d694c5cf9b7457c4bda3ea96f48b1ee69769e06bb9d89f", size = 454915, upload-time = "2026-08-15T17:26:02.294Z" }, { url = "https://files.pythonhosted.org/packages/76/e8/8209081e094aa98b2f28bac388619c85b1a44aed813d6b3c54d1da79d19a/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ecc95fa0e91d92951d74468e7789afdf91d9e702f40af2d0fcbf0ded4d0f650a", size = 357992, upload-time = "2026-08-15T17:26:03.552Z" }, { url = "https://files.pythonhosted.org/packages/b3/65/64025302bae4ba924d613e404c6120bf194b5636786960ece274622a4a3e/backports_zstd-1.7.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:34154d82fc0246738159084d146401073f9ac9cfd755b66bb8853ca06037810c", size = 366686, upload-time = "2026-08-15T17:26:04.812Z" }, { url = "https://files.pythonhosted.org/packages/4a/b9/c4d24d113d28b774662152c462d38d28109741d6d45c1aea7834371741dc/backports_zstd-1.7.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:44b687b1c0be5cb279693d2682f91ff84c559d679b2ef2fbe501fe4b2db2c4bb", size = 447221, upload-time = "2026-08-15T17:26:05.979Z" }, { url = "https://files.pythonhosted.org/packages/cb/9f/8db55c7f77aec60879844a879ac026065d8f03aab74080701acc060c4168/backports_zstd-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dcdbd368659f46b570114eeea36b75347716523870d71f6bc5d7801862aefd6e", size = 438571, upload-time = "2026-08-15T17:26:07.421Z" }, { url = "https://files.pythonhosted.org/packages/cd/f8/72930ae4bb7bf6b9d6c7c31bce7b3e5751c062269a4ee718066e25f1973b/backports_zstd-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eda97fa535d4651a4ccdeed4ee7dde3978369046abc8a7456a7117d4271f9333", size = 367041, upload-time = "2026-08-15T17:26:08.537Z" }, { url = "https://files.pythonhosted.org/packages/17/9b/7289dc191b34279d8f176bf5b181c3b26f8e049d14a2c0a2637650f034e5/backports_zstd-1.7.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:7e3999b5141d7f85171822d06112f70f7f317d162f0120530dd2c7a28dbf8add", size = 507676, upload-time = "2026-08-15T17:26:09.909Z" }, { url = "https://files.pythonhosted.org/packages/7c/4d/6dd730b79ab96532e23fe851003545b4cc79e50c5b4c79ffcbe1b724eec4/backports_zstd-1.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69367726f4075c2574746f5883b0dc045805c5b02a81fdf8c829c26d33969de3", size = 477744, upload-time = "2026-08-15T17:26:11.038Z" }, { url = "https://files.pythonhosted.org/packages/e1/53/11687e5019d56ea47893cf2ba59a6b4884a4e2d1496d0e653aed373b973f/backports_zstd-1.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:15e97edfd173ade365c01bac7d9d297fa906686015cdbcb5f32a0d410887826b", size = 583215, upload-time = "2026-08-15T17:26:12.379Z" }, { url = "https://files.pythonhosted.org/packages/aa/c7/5a8c58542469ab31680c403b844770c119a976fd4cf1000fd7d53e7d0f77/backports_zstd-1.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:32a94cdcf16b44395cd55086ea38877395ca6bf3362cb507b0eb86db2a45a6a4", size = 644125, upload-time = "2026-08-15T17:26:13.651Z" }, { url = "https://files.pythonhosted.org/packages/11/35/be5485e65df95b86c4981ad4a577b505cfeec6b700a46a86e2e3175ac718/backports_zstd-1.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3f4887a8a1fd1290017fe5a1d29a7d1dc5c57f9477fbd64f119316a7e3ae769", size = 492714, upload-time = "2026-08-15T17:26:14.838Z" }, { url = "https://files.pythonhosted.org/packages/96/8b/a0603458ca08e4a56f09ae58588ce3c0453425e753df704d9aeaabb66ae5/backports_zstd-1.7.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e590313ce156f1d8986dff3107e8ed1651d6d106a56b3a95f965ff8d845ba979", size = 567953, upload-time = "2026-08-15T17:26:16.276Z" }, { url = "https://files.pythonhosted.org/packages/02/87/2296db4c3c578947c35ccd8dcdf7992316d7e1f5f43cc829c062b3ed9319/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:565270b0d6497970fa97a0df59593ae0d225e4176678bbce851d39e5f8aa422b", size = 483564, upload-time = "2026-08-15T17:26:17.493Z" }, { url = "https://files.pythonhosted.org/packages/c0/d8/f53a79e6bf3cdb7ae08f95220c80bd0d606f3d6c3482995deaf21d024fb9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:37ef23c6c522fe935726c8fba6344350973c4a23b06d10194d90d0868b09ff7a", size = 511193, upload-time = "2026-08-15T17:26:18.7Z" }, { url = "https://files.pythonhosted.org/packages/31/ea/d4e2eb159cd5813debd5a34d0644caff5fe7cf2e569bf5b02a82934aeee7/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b3975330159f1efdd1fba76afe1c7b84f66f26e2bf209b32630fb148d647e0d5", size = 587748, upload-time = "2026-08-15T17:26:20.148Z" }, { url = "https://files.pythonhosted.org/packages/81/d2/b5ec9709660fb1c193508215d9c30e781fac406183faac7c3c36b1c583a9/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b40bc8cd0a86cbbe8263a9c3a2bf2e34897483516c6d799725412a19524c32e3", size = 565808, upload-time = "2026-08-15T17:26:21.349Z" }, { url = "https://files.pythonhosted.org/packages/bd/13/004735cc4536483cbd973a60346a9dbc7bb977b13c28b55a11da14bb0a1e/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f37e12ef10747f76901b1f20ef70d33221e861de177dba5ba08552242c6fd4bd", size = 634520, upload-time = "2026-08-15T17:26:22.944Z" }, { url = "https://files.pythonhosted.org/packages/a3/28/05b11f7084d1100491cf7c60962aafd900c3dd01b1fc1ce85914476cdae0/backports_zstd-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5992143b2a8b71b4d17afed20cce2df50f8718228e31d6e716493b1fe9201712", size = 497098, upload-time = "2026-08-15T17:26:24.181Z" }, { url = "https://files.pythonhosted.org/packages/f5/a5/bdc98d039ddbd5815fc1dd71912bbfb9f820a46ec12004ead51c8d60ea50/backports_zstd-1.7.0-cp313-cp313-win32.whl", hash = "sha256:31ae30d216ffae9243dfa607bcb995f94a70de5765bb8fae1e35ea1ad6497959", size = 291974, upload-time = "2026-08-15T17:26:25.512Z" }, { url = "https://files.pythonhosted.org/packages/13/7d/fb0da7351e8b152d5149127594972922829281c316618df37a7e724f2eb9/backports_zstd-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:8086b4a7443bb2863f7ef8edb317b715d5f3ccec6c5512619bd23d57661ba1b7", size = 329550, upload-time = "2026-08-15T17:26:26.683Z" }, { url = "https://files.pythonhosted.org/packages/37/f9/109ac272d650483fbdfa611c0040253a405f640604fbc90acc8076c6d37f/backports_zstd-1.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:7eaceeec75e1dbdce40b81fb0ed1ffdb7ce492d970db7f8aabd6a95ccd6c3dd3", size = 292174, upload-time = "2026-08-15T17:26:27.819Z" }, { url = "https://files.pythonhosted.org/packages/7a/ea/42fe3258e02a65603d1eab26200712e37bef6ea408e7f9dbfd6858bc036a/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:de58be0a3109cfb83b4e61e2b6eb770201cc132ee5a7c677cd8e0140ad2be80c", size = 413302, upload-time = "2026-08-15T17:26:36.286Z" }, { url = "https://files.pythonhosted.org/packages/37/00/486044556d715a7b1a41e9cd69544bf8cb3988b383453657c021d24c5c27/backports_zstd-1.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c13f73d0389cdc88b02c05e8175d8ad3030e9e70ee079748763166aa843b647d", size = 343983, upload-time = "2026-08-15T17:26:37.603Z" }, { url = "https://files.pythonhosted.org/packages/02/f8/f078a32c80ef7546ec2d1206a38bedf4d150cbaac653f8f32d7329f987ff/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:a2e30ea49c673533d40eb73d0f7abc0ebe9d2e4fc6dbada5ad60b42ff98ffa86", size = 422218, upload-time = "2026-08-15T17:26:38.911Z" }, { url = "https://files.pythonhosted.org/packages/ac/e2/e5151b85ca9ddfce58388f0fb0316adaacda25d494d2a668842e09f02063/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e3f760ee9d16378e3cde9d862e1c9ced577a86736763fb486b9f731d5116807", size = 395760, upload-time = "2026-08-15T17:26:40.09Z" }, { url = "https://files.pythonhosted.org/packages/78/bf/fd7d55452431d836b3ae81170689f19ddab210fa6c385a72e22006320afe/backports_zstd-1.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25caf23dc36de3b839d16c25893751323cf51a8c986f2d01478c16b25133e2e8", size = 415725, upload-time = "2026-08-15T17:26:41.322Z" }, { url = "https://files.pythonhosted.org/packages/f9/fe/f30ad42bd082b9c6d419c23311a8904a55e248e07c61bf6b91e1691188aa/backports_zstd-1.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a64e796c7eee69dfe45827b2e003b7731785ec890c73ea5f5fbc30a1c362fcad", size = 316244, upload-time = "2026-08-15T17:26:42.614Z" }, ] [[package]] name = "backrefs" version = "8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/56/4744bcd0c82184e80c52b0ac4076c261a8ffa1f1b343ff2f6e89ce0e1cef/backrefs-8.0.tar.gz", hash = "sha256:b556cd7d36c3a3a2f256b89590b176b8eddfb73bcfaee3a3ddd84ea66d21ce50", size = 7013081, upload-time = "2026-07-26T19:54:24.638Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e3/fd/9bf53b6a6f6f519ffaac765df2f2a25e5c2fc6d32cfd2b2747099e72c911/backrefs-8.0-py310-none-any.whl", hash = "sha256:4a627b817fd2dce43b79ab48da63613340509381cd8ce0897078a0bce79a2ab8", size = 380377, upload-time = "2026-07-26T19:54:17.457Z" }, { url = "https://files.pythonhosted.org/packages/e1/29/4bd7ae72a2634da00379c2b3bcc5439e7c94620235c6afea8af15229a973/backrefs-8.0-py311-none-any.whl", hash = "sha256:f0c35cf0102ba6b6070c12a492be3c1c1d3f5839529784b9a9565d6d04569a01", size = 392169, upload-time = "2026-07-26T19:54:18.782Z" }, { url = "https://files.pythonhosted.org/packages/29/13/232505664e8e2a0c7a2eb0c505cfade9d715538f89a5d62bc4c272968f62/backrefs-8.0-py312-none-any.whl", hash = "sha256:87f0fae8c5f207fe9f4b2887efc71d42f4900ac78faa1af08d675ef303692dc5", size = 398084, upload-time = "2026-07-26T19:54:19.954Z" }, { url = "https://files.pythonhosted.org/packages/8a/69/47a3dc20abc4fa5486655fde681bd55e63211b46c886d8c02223d6468431/backrefs-8.0-py313-none-any.whl", hash = "sha256:601ce68ca12385dbda06ce264406b4c4210cf5b79fd0fd627592365c92f29a88", size = 400040, upload-time = "2026-07-26T19:54:21.194Z" }, { url = "https://files.pythonhosted.org/packages/1c/cf/e5f9b68a5b0e939a2fb933a66c20180d0c9241bf8927f7a47fa48c1675e9/backrefs-8.0-py314-none-any.whl", hash = "sha256:9ec96efa080938be92323e8e730e57718c9c88eb15ad70bbef4e1766df591408", size = 411903, upload-time = "2026-07-26T19:54:23.221Z" }, ] [[package]] name = "cairocffi" version = "1.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096, upload-time = "2024-06-18T10:56:06.741Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611, upload-time = "2024-06-18T10:55:59.489Z" }, ] [[package]] name = "cairosvg" version = "2.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cairocffi" }, { name = "cssselect2" }, { name = "defusedxml" }, { name = "pillow" }, { name = "tinycss2" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/80/db62c0a96d2e55282c83524f6b1d02f09c7fd7f612e93bf83e30de1dc75c/cairosvg-2.9.1.tar.gz", hash = "sha256:861bc28ad97ce4f537d50eb3d6ee97a7afcccec9c61ac25c4e7d073fe409aec7", size = 41256, upload-time = "2026-09-07T10:35:09.563Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/41/51/8041c2e70649e5b7f2a0aedbbbd0609ac099cfaa0cbde2014279c9c05756/cairosvg-2.9.1-py3-none-any.whl", hash = "sha256:f91c5628e834be024a0ed4544d76261cd84016a4c73bcdf26c386495825c05a1", size = 46165, upload-time = "2026-09-07T10:35:07.952Z" }, ] [[package]] name = "certifi" version = "2026.7.22" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, ] [[package]] name = "cffi" version = "2.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, ] [[package]] name = "cfgv" version = "3.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] [[package]] name = "charset-normalizer" version = "3.5.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6a/b6/034f6802e9c3f6418966cfabb7db8c9252cc2429c5098f41cc43af804149/charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30", size = 363585, upload-time = "2026-08-15T08:16:46.646Z" }, { url = "https://files.pythonhosted.org/packages/d5/fa/6a7e2a7c4b5451912b8c417732df79574354443592a88d616de03da66ae5/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488", size = 251189, upload-time = "2026-08-15T08:16:48.287Z" }, { url = "https://files.pythonhosted.org/packages/a4/c8/ab42b07cfd82e919f427fcfaa7c41abae8242833ad1aad66d42bae40b669/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22", size = 239724, upload-time = "2026-08-15T08:16:49.67Z" }, { url = "https://files.pythonhosted.org/packages/e7/80/b9348b5d3041209f98b4cdad7655766369233f1d533f4f4f7558e9717bec/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731", size = 280078, upload-time = "2026-08-15T08:16:51.228Z" }, { url = "https://files.pythonhosted.org/packages/82/38/083a24028304bc85bb9e376fed801178423dcbb67495f73b6ea0624e1894/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c", size = 276650, upload-time = "2026-08-15T08:16:52.625Z" }, { url = "https://files.pythonhosted.org/packages/0d/35/731ac04aa0a097fc1c97f0994c375bdb230c6c96619db794208fe664e9ce/charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8", size = 262325, upload-time = "2026-08-15T08:16:54.085Z" }, { url = "https://files.pythonhosted.org/packages/f5/28/c2028e7021fb89c6e56868ed0e387b8e9aa811abdd2ab3208d6578d2c930/charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486", size = 261140, upload-time = "2026-08-15T08:16:55.604Z" }, { url = "https://files.pythonhosted.org/packages/28/f0/0c0ceec6d98b7daa62e361e418135d59685811d79ba11529aad5cdf15e84/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f", size = 252791, upload-time = "2026-08-15T08:16:57.103Z" }, { url = "https://files.pythonhosted.org/packages/f0/3e/48f4cd187b1c33189d86039e9cbe4f92c05454175504b44ff81806d4d1bf/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c", size = 240730, upload-time = "2026-08-15T08:16:58.418Z" }, { url = "https://files.pythonhosted.org/packages/42/85/f9e22af69af67c54cce42be9455d9c81294f918b4ccc454db01f66efcac2/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18", size = 280791, upload-time = "2026-08-15T08:16:59.918Z" }, { url = "https://files.pythonhosted.org/packages/fd/4c/9044135f42127630b6fa742feb51256353f6ab87a78f2fdd1de3de955a7f/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5", size = 259598, upload-time = "2026-08-15T08:17:01.421Z" }, { url = "https://files.pythonhosted.org/packages/ba/ed/1dd7cfebb4e75812934c49ca3b79757d11948053f7937ab7070c151f3c55/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b", size = 278217, upload-time = "2026-08-15T08:17:02.782Z" }, { url = "https://files.pythonhosted.org/packages/bf/eb/239c84503cc9e3ba6eb34686a24bc66e84f3924efdd7e38e751a19f6bc10/charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6", size = 263417, upload-time = "2026-08-15T08:17:04.216Z" }, { url = "https://files.pythonhosted.org/packages/37/ab/4e4510e1e288478e2c8333131d1c1382382ba8cd2165053c79e39d1da961/charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b", size = 181774, upload-time = "2026-08-15T08:17:05.58Z" }, { url = "https://files.pythonhosted.org/packages/e3/57/32f0ccea59e8612057c61d6fd22ef2cb63cca93c9fe594094919696ac170/charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9", size = 206653, upload-time = "2026-08-15T08:17:07.075Z" }, { url = "https://files.pythonhosted.org/packages/17/d4/b65c433fc521e58b5f54293982a5e51c05cb5f2dd3f1c7a6acb65b75324e/charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10", size = 185630, upload-time = "2026-08-15T08:17:08.502Z" }, { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, ] [[package]] name = "click" version = "8.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, ] [[package]] name = "click-plugins" version = "1.1.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/34847b59150da33690a36da3681d6bbc2ec14ee9a846bc30a6746e5984e4/click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261", size = 8343, upload-time = "2025-06-25T00:47:37.555Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6", size = 11051, upload-time = "2025-06-25T00:47:36.731Z" }, ] [[package]] name = "cligj" version = "0.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ea/0d/837dbd5d8430fd0f01ed72c4cfb2f548180f4c68c635df84ce87956cff32/cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27", size = 9803, upload-time = "2021-05-28T21:23:27.935Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df", size = 7069, upload-time = "2021-05-28T21:23:26.877Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "coverage" version = "7.16.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/65/2d/c738872f477f5687152acae68635790387425d407ae37dd3d3a8a6692307/coverage-7.16.1.tar.gz", hash = "sha256:f83981779bcf9dfa06fa0a8d4cb43e0faec1706328ce07aa3e7b665b4ac0f210", size = 969651, upload-time = "2026-09-13T19:12:21.422Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/af/3a/d09495dfd5191b5593852bbe2f037afae768157443378d066d9ecea69a49/coverage-7.16.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72e013665e25cf9d44779f01f340af26319756f9a76822b7c94ce6b1d93813da", size = 223307, upload-time = "2026-09-13T19:08:44.914Z" }, { url = "https://files.pythonhosted.org/packages/a3/34/310196a80258e28ebf6e5aa814a5a6ffbb18c03cf3c0c0c04191ed893e88/coverage-7.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb05c0ff98b56ba6969adf35556bc43bcb8d094df8bc9cb403acff53460c4e07", size = 223817, upload-time = "2026-09-13T19:08:46.738Z" }, { url = "https://files.pythonhosted.org/packages/73/29/ed0fda1fcd440cdfc07e72a07f3c9c3b43f65a6b3d53bff2cba9b9de50e8/coverage-7.16.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d0ececb32090e3fbb03e0d352b973a0485879b4de6c58daf47227b9988b99e5", size = 254222, upload-time = "2026-09-13T19:08:48.358Z" }, { url = "https://files.pythonhosted.org/packages/ac/4e/5e2507fbd71ec1047620978f39568b0d2ed6c4468d08495a0c24f5677f65/coverage-7.16.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f0ba3892d81aacf36996c52f16bca04e39af31a6c5de930b7688ab617f4a6475", size = 256134, upload-time = "2026-09-13T19:08:49.926Z" }, { url = "https://files.pythonhosted.org/packages/7e/b1/a9f97846554bc240473656f9c3874591105f29c08eccf4282daadc6bc281/coverage-7.16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6410b75fe07d5271eaa95fc24bd0a9177ed588d9d1c10c0cf67829adb8f0567", size = 258240, upload-time = "2026-09-13T19:08:51.584Z" }, { url = "https://files.pythonhosted.org/packages/a0/c3/2b1ab208d06719394851cdd7dc322157870a93b178410b1bda6cac7755f9/coverage-7.16.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d1039cb2de093225d597109342ce1675626bd127565e80b3044f4eca07c15b2e", size = 260202, upload-time = "2026-09-13T19:08:53.204Z" }, { url = "https://files.pythonhosted.org/packages/af/14/ff4db31d6e3126d5b72aab1e868d35ec94e1b71dee46f5c3b54cb1b2438e/coverage-7.16.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cf047bc39fde5425be2628666d0f435ed8817859111c3aacc84b32d858069f5d", size = 254305, upload-time = "2026-09-13T19:08:54.833Z" }, { url = "https://files.pythonhosted.org/packages/ce/27/c28faa4818f61c49ca3bfb4a77e1c191e79a40447504b89af0bd859cd6fc/coverage-7.16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2c05913d0d5badf7ac83200f35dcf9514cce5df16a7cc89e7d1d7fff0461813b", size = 255935, upload-time = "2026-09-13T19:08:56.453Z" }, { url = "https://files.pythonhosted.org/packages/46/5a/42e64e5b716048cae33e2e15f8c6fe04a927467056c533b8e88900da895e/coverage-7.16.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4027bf6d7bc0a16df058ce913b69f10c5687f8e1ca668f08caa659ce101744bf", size = 253995, upload-time = "2026-09-13T19:08:58.159Z" }, { url = "https://files.pythonhosted.org/packages/84/e5/860287acd5a1e29acd337f302b476b54148203590091b1a1555b2e914b50/coverage-7.16.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4f48b345f831eaf4402ab6333c2dc3e2e2b5bc7b9c1b8fe12680dee3f0538f01", size = 257767, upload-time = "2026-09-13T19:08:59.958Z" }, { url = "https://files.pythonhosted.org/packages/a5/c5/4b68006da567b4b413352f891776c35776b3557a0479a28187ab57c21659/coverage-7.16.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8643baeb590726c558b2faed6cd59b0917480f9367fcc692026f1a86d824fd08", size = 253715, upload-time = "2026-09-13T19:09:01.778Z" }, { url = "https://files.pythonhosted.org/packages/a1/0e/b2d0c47cfbf11770e197f1d0f11a92864eb29fd7eaca45bc9915573d9725/coverage-7.16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d06dcc420b570bf683cdb647cc8fe62b672d9e429ef711c3cbbb7a6880ca1572", size = 254624, upload-time = "2026-09-13T19:09:03.376Z" }, { url = "https://files.pythonhosted.org/packages/2e/14/3bab8821b2b942155578fc34e88e21b0670d922f039ab23651f6035ba7f7/coverage-7.16.1-cp311-cp311-win32.whl", hash = "sha256:946f58aa59b08bcd6afcc6a7bd0ff54ed5eee844f32ad69fe6814836d15856a2", size = 225404, upload-time = "2026-09-13T19:09:05.174Z" }, { url = "https://files.pythonhosted.org/packages/9b/ce/4f4ce667a97d1c538b46a79b89161395ad2beffc248b6c782afc9f521927/coverage-7.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:684c7ee9b4c04358fe6ac8b517ab51ec35fcd79d08ff0f105dd8bcd96885bbb7", size = 225879, upload-time = "2026-09-13T19:09:06.81Z" }, { url = "https://files.pythonhosted.org/packages/26/17/f3dce5e47351ab34522dd037fd64b111742958e24861bdd2820971bc1a26/coverage-7.16.1-cp311-cp311-win_arm64.whl", hash = "sha256:1b24f79e25bcf6c73931aeca7a3dfc7595c0cb5e9364aba3fdf387a3de4b1c22", size = 225428, upload-time = "2026-09-13T19:09:08.502Z" }, { url = "https://files.pythonhosted.org/packages/1a/f7/7cd4c9f2a3b7574414222ec425d5eee21cc690d867a013315e3be8ba185c/coverage-7.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b7f2c26ce6ce0b1e0ca0d5fae96ea510e3a2e78b7207f06e76b7f2c87fa3d0af", size = 223475, upload-time = "2026-09-13T19:09:10.145Z" }, { url = "https://files.pythonhosted.org/packages/3e/f2/9ac65f9cedd43f91e2d3657c11f13aef82aebae89b2243dc9e44fe58a740/coverage-7.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070acb9da788dff743a4d36fc015feee12d68f0349959017542017c79f59c21c", size = 223845, upload-time = "2026-09-13T19:09:11.988Z" }, { url = "https://files.pythonhosted.org/packages/62/4d/f13db452d4367fe1122abfd98ae330596f65a3b40498f8e1a5811f68f123/coverage-7.16.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e366587b370bc9b8b51b7b7272c610c56db5d5b4795b9e4a29d28ff2f440f809", size = 255341, upload-time = "2026-09-13T19:09:13.708Z" }, { url = "https://files.pythonhosted.org/packages/5d/6b/85ed86e82835a96ddfbe7705c387c28ce1cbbecd1b6d606f5ddfeeb712df/coverage-7.16.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e82e10b9d290f60b63459cfb245a841aec347603997206296b93881463a93dcf", size = 258078, upload-time = "2026-09-13T19:09:15.368Z" }, { url = "https://files.pythonhosted.org/packages/cd/d2/f66945853d850b9c05f4e012e37396f1f31d0cd40d062394b229c22e7b56/coverage-7.16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d73bb1f85c4150ac208fb0755beb04b2e44897bad81414de9380f98dd74729f", size = 259191, upload-time = "2026-09-13T19:09:17.046Z" }, { url = "https://files.pythonhosted.org/packages/77/a1/7b907abe62461f289035c7ac60ab3e6334efb8c425151aac4abfa0c97820/coverage-7.16.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3397b9032553d281ad6a9253b12675b65e0cc8cd7a3b0633cf48872c9eb13360", size = 261452, upload-time = "2026-09-13T19:09:18.756Z" }, { url = "https://files.pythonhosted.org/packages/51/e6/e26f4d6b1069a2a2fee3238a132f85c5b4c1dc25aebd88e015451ff0bd68/coverage-7.16.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:77890395cf37026a5907d3ad32376aa51f41c0f163b7477fdbd4f94966cc1d08", size = 255698, upload-time = "2026-09-13T19:09:20.786Z" }, { url = "https://files.pythonhosted.org/packages/7f/ec/99db7450e813050ebce300e31bbd4f997c76a8c6e3a6d168c5dffc104109/coverage-7.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b0944dc3bee3091039bf970d73caaf930c906013128a421bdc132e797494d941", size = 257111, upload-time = "2026-09-13T19:09:22.693Z" }, { url = "https://files.pythonhosted.org/packages/2e/9d/500df9d3cd8c541ac84b5e0bcab00646be75654e05aa34e8410ec851282d/coverage-7.16.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b89d22a89d5bc05dd95b64e08295b8394aa96dc88e08f8ba210c9ebfebbe0489", size = 255258, upload-time = "2026-09-13T19:09:24.429Z" }, { url = "https://files.pythonhosted.org/packages/c0/24/53318d96da332bb4946f8ac646fa19fd37fecbd0c49144735c716ac69bf0/coverage-7.16.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:550a2a1faf7559f13d5344f12d1eb886ad87955155d7dfab2a3fe5c8ec8fe776", size = 259326, upload-time = "2026-09-13T19:09:26.32Z" }, { url = "https://files.pythonhosted.org/packages/c5/ce/abc0462b2e6ae96ae22197d2bc30fe33b6b4e52937e782745436ceb2a761/coverage-7.16.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:55eb268e5b81aefac759766c9162625b06c1bedb7b77d936225bafc4f038a6f6", size = 254827, upload-time = "2026-09-13T19:09:28.191Z" }, { url = "https://files.pythonhosted.org/packages/8b/e1/0a04eedaaf19196b51f0180968134228c7646e469ed29914e48690a7cf3e/coverage-7.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:65a8fc80898c9ce59f04349fe8b4849b1f9787f14e52ead990e5f849ff4727a0", size = 256698, upload-time = "2026-09-13T19:09:29.922Z" }, { url = "https://files.pythonhosted.org/packages/de/1d/d441a55cf22ce9d8e9e34814806c47441ab844bd534e0f4b64e1c6ae8bd1/coverage-7.16.1-cp312-cp312-win32.whl", hash = "sha256:528a61be40977c340cf201d23b69bd6a6bab507da60e9dbda85f8b30e935d70d", size = 225541, upload-time = "2026-09-13T19:09:31.752Z" }, { url = "https://files.pythonhosted.org/packages/73/27/ec3d032375735dd331477caa051419678079ff90fcb53d0284a6c2bfb757/coverage-7.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:d0f02c633630e2b74522108ee95a84ad6e1204a8016a6cca5297f335ea27147e", size = 226075, upload-time = "2026-09-13T19:09:33.556Z" }, { url = "https://files.pythonhosted.org/packages/94/00/90e9f5c4434878494306b9c0ee8068ebbd829483737d8cefccc58884d728/coverage-7.16.1-cp312-cp312-win_arm64.whl", hash = "sha256:2959978f9d1d20a2c0c15d0a68baaeccf615ac1aa214cf4a05a10d6f568926c8", size = 225461, upload-time = "2026-09-13T19:09:35.48Z" }, { url = "https://files.pythonhosted.org/packages/aa/74/c08c0c4dc9fa6bcd1d90728a63660aa1b17b488a806948598456c48f75d1/coverage-7.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ee5465db6e9152a7d09f3215309326878c6aa3ac509195a369f9d264ff4bfbd9", size = 223501, upload-time = "2026-09-13T19:09:37.276Z" }, { url = "https://files.pythonhosted.org/packages/5b/c8/784986d326663285258a8e39835c46fb730cc85284f0dbcd82078586dd22/coverage-7.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2b8256f8b525ba233d2e4cdcdce0d6673c66fc9bf70df1fd5e67c54a74e2d245", size = 223876, upload-time = "2026-09-13T19:09:39.385Z" }, { url = "https://files.pythonhosted.org/packages/15/76/73fb792928872bbb07e553f920ff55c65ee962c469265feb5d1d4ae5f97a/coverage-7.16.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d57cc400275b9a2892e905fc893f732b21ddb95271bf96406c88e2f6367848b5", size = 254863, upload-time = "2026-09-13T19:09:41.326Z" }, { url = "https://files.pythonhosted.org/packages/ca/8d/1fd78899513244b065ccecdd1cfc6aa8b8f1bdee796d8c4f2aa8e8e5397d/coverage-7.16.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6b3fd0f3435ebb7a7183b32a6062a8b755f08242ced1f3f22761d30b56b3c2a5", size = 257460, upload-time = "2026-09-13T19:09:43.086Z" }, { url = "https://files.pythonhosted.org/packages/47/1c/b23ddfcb7ef9bd7b3fdb7be9a5dccf9925ae88e556df7aa5b655283c78f2/coverage-7.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e5eb1762e7eb5fad34ef913e8107c7788a66f19d328e598ce95bf7217f9e5c8f", size = 258697, upload-time = "2026-09-13T19:09:45.161Z" }, { url = "https://files.pythonhosted.org/packages/1c/c9/19d0c6ca35778a7e9415c30c46a0c64c9d4374219d004a35563132296896/coverage-7.16.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:46cd3a73e9140410de62cceb66214bce0e08fb3922b9176fbfc1522fec151b41", size = 260827, upload-time = "2026-09-13T19:09:47.061Z" }, { url = "https://files.pythonhosted.org/packages/97/fc/5862f7344382c62b85df43d483e579168cc062e007f54d895dfa51fe3e7d/coverage-7.16.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d1ba5142d68dd2cb775cbd0ac8601819298152047803c8efe4eec6d7d7aa7878", size = 255038, upload-time = "2026-09-13T19:09:48.945Z" }, { url = "https://files.pythonhosted.org/packages/2e/9f/5c26583199a68df8d15124b4590520903f8eb7cef17db293fea712bb0783/coverage-7.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c389c6f9d1d518e1249ddcb8a7f158135644ce2c508fa6cc17b680777dad5bf2", size = 256827, upload-time = "2026-09-13T19:09:50.738Z" }, { url = "https://files.pythonhosted.org/packages/95/13/605198bff079b107336710f28a797312ab132587168600d70a290e7ecd2e/coverage-7.16.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cdc57746c7ac0ea063351b4d651c3bb4dd4fd35e64dbb8e90c10e14eb03c4080", size = 254794, upload-time = "2026-09-13T19:09:52.577Z" }, { url = "https://files.pythonhosted.org/packages/43/b7/0bbb32dc5ccdac766a13763fdfbffd7d73fc80349a69230c46c6b71e7508/coverage-7.16.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5597180ed7670cc94c04c65347418a467d3a43d5f0cf52fcac647f5425f42037", size = 258947, upload-time = "2026-09-13T19:09:54.372Z" }, { url = "https://files.pythonhosted.org/packages/13/bd/65c31ddd43ff4e61b63721b3dad17cca412dba6e2ce89f92abdf75734339/coverage-7.16.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a9647a0ac46255b8fef59a433a2161f03e5483f3a35e1cbd9dfe4600baff0c6b", size = 254613, upload-time = "2026-09-13T19:09:56.198Z" }, { url = "https://files.pythonhosted.org/packages/25/20/d278115f2ba522b3e3128c6852be265f4e0df7202b2effca4db96cf0217d/coverage-7.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e306e98186b9cd109121f3583aeb7978797ad21d948f22944c5c08845cd554d0", size = 256388, upload-time = "2026-09-13T19:09:58.095Z" }, { url = "https://files.pythonhosted.org/packages/e1/ca/d43aa396fb3a2f71c9411b99d926475f5acaf5c124f605c592865c80c8d5/coverage-7.16.1-cp313-cp313-win32.whl", hash = "sha256:48a78a66fcce49d7f6156524bf979c0ac633d584199717c68c6ffa949fc14e6a", size = 225550, upload-time = "2026-09-13T19:09:59.998Z" }, { url = "https://files.pythonhosted.org/packages/0e/30/df2f6114f6a17cffe94721bd1d298f77f86aad493717fa5bc03cb291a1a6/coverage-7.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:7af03247d598a353bbbbe1b925deb735276e4d845e7197c4073dc89352b236fa", size = 226091, upload-time = "2026-09-13T19:10:02.331Z" }, { url = "https://files.pythonhosted.org/packages/ee/31/6f90d8aab72a112492bd50e3b5485b53b772b1f5fa70da0a620e723caae6/coverage-7.16.1-cp313-cp313-win_arm64.whl", hash = "sha256:166adae25b05b04c9a84135912066d9c97482115af38df1a419a38aacc6b6f5d", size = 225481, upload-time = "2026-09-13T19:10:04.151Z" }, { url = "https://files.pythonhosted.org/packages/8e/b4/2a7c793965bae9f067aabab793a44d7a2f3ee7fb16b01ce1976bbd4a0218/coverage-7.16.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:cc0b37fe6f5ce5f1ccc62ad4fa9b1ad201d8e9b6027fd5e0170877beee4b2d15", size = 223546, upload-time = "2026-09-13T19:10:06.019Z" }, { url = "https://files.pythonhosted.org/packages/ef/e2/633469076a2dbbea036cc15a268a3a5d6b2c7dd5d9a9567b2553dfc5ad61/coverage-7.16.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6618f481053b63fc6121faf8fc676bd9b7163c2a19d9e984a2e850002c28ab57", size = 223881, upload-time = "2026-09-13T19:10:08.246Z" }, { url = "https://files.pythonhosted.org/packages/de/c3/f06150c13284569d53273b909f31222874276a595637b7852571dfeb2c18/coverage-7.16.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fa02d561eb1d8d2f8ba43ba6e3cef4c6c402a3b632a9460fa329fcadcd5df6a3", size = 254919, upload-time = "2026-09-13T19:10:10.254Z" }, { url = "https://files.pythonhosted.org/packages/d5/40/47e25b215ae18a29010c8e29be8782a6e04d18ba6224be2bf6cebfce6427/coverage-7.16.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bc5354a124799f1f87b7637bbe6f18cd4bc66a1f37f6aa2b5db40f9adad531dc", size = 257428, upload-time = "2026-09-13T19:10:12.124Z" }, { url = "https://files.pythonhosted.org/packages/27/4b/1e2a4267d14cbd12a8489364a9d40020233e6be836d929b363f0e77209e2/coverage-7.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34bafe9f4094315248573e6223e11af0ec1b25f9cbca43bf0e9a26a189ba2751", size = 258771, upload-time = "2026-09-13T19:10:14.031Z" }, { url = "https://files.pythonhosted.org/packages/be/2e/9aa6146cea929fab9185bb2642ffef7f47520a6e5efe407f75f9b12f4cf0/coverage-7.16.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:29c4d3e32a3b5efa420a3dc627c7e570deb80ef997def52c7686a474f5edc7ab", size = 261086, upload-time = "2026-09-13T19:10:16.213Z" }, { url = "https://files.pythonhosted.org/packages/13/3c/f9ad8bcd4fb3d21c9d20a16d6d6c6f999eee8f4498ed7659a3dbd2f4b74a/coverage-7.16.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2066c447fdd0bca39a9633a082d8ce67bf9a539a203b85059a364a405dc9fe9", size = 254895, upload-time = "2026-09-13T19:10:18.602Z" }, { url = "https://files.pythonhosted.org/packages/b7/d1/47eda9fd1eaeea39fa7b5b13a63b2bed92ab901841fb120b3f9f5e1dc30c/coverage-7.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fd8ac10cd2458b3c6343aac082fb9bd0e3fa806cb2c4975f2280153474b88412", size = 256783, upload-time = "2026-09-13T19:10:20.778Z" }, { url = "https://files.pythonhosted.org/packages/38/c3/565edf044877cb8cd3373c56885347ffc38f0edfd1f1679a487b208c19a8/coverage-7.16.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9d8c54ec32e5c102b9241f75d88ae26538b53662868ca491736611db448d9c7a", size = 254742, upload-time = "2026-09-13T19:10:22.733Z" }, { url = "https://files.pythonhosted.org/packages/fd/88/87d2b2aeaba719192b2089ff1c2cf89a06cf73a6d2e9f1f145626617700c/coverage-7.16.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6dd8dda3402a01a1a8fe8b753a282466f615128574a5590a9108acd07b1f8540", size = 259016, upload-time = "2026-09-13T19:10:24.769Z" }, { url = "https://files.pythonhosted.org/packages/fc/1b/70813185b125768abdcf7899fec4d37edc2e5fc9b60c7045c8f4271ec757/coverage-7.16.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:79afa9726438912e5cddd1fe541815cea9763c92935f594835e4c432565b68a9", size = 254559, upload-time = "2026-09-13T19:10:26.781Z" }, { url = "https://files.pythonhosted.org/packages/d8/fa/e7aa5af279aafda633a1ede8bfd7d6916b0c8b2082be86759e0b52e73a61/coverage-7.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3db3978211c3cead5437a80136ca0556bab8bc7828de15a762884b0598c41361", size = 256215, upload-time = "2026-09-13T19:10:28.714Z" }, { url = "https://files.pythonhosted.org/packages/38/87/7a894fa4f8c6662d2b6a87a3436950e15b1fa56e01765c9d6634fb2cbeb8/coverage-7.16.1-cp314-cp314-win32.whl", hash = "sha256:49c39c7068a494f8eb427155f5682f44feee43f9b3107fd54b1e52465379c54b", size = 225719, upload-time = "2026-09-13T19:10:30.743Z" }, { url = "https://files.pythonhosted.org/packages/8b/01/fa7193c8005fb85488f02b0e1cc3c05a233cf2640206dd978af447aeecbf/coverage-7.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:c510dad19552d912058e4c3e3cbec3fb155dbe8d0ce0ceb7e7dbf5c5822bae0b", size = 226208, upload-time = "2026-09-13T19:10:32.698Z" }, { url = "https://files.pythonhosted.org/packages/da/5c/a08634c714924c3eaef811bb3576c044128aa5e7dfa86c75e52f0761849e/coverage-7.16.1-cp314-cp314-win_arm64.whl", hash = "sha256:b7d4d7e6dcaf33e85f1919f03346403bdcc27437c420a78835f3805bca0ab71f", size = 225633, upload-time = "2026-09-13T19:10:34.79Z" }, { url = "https://files.pythonhosted.org/packages/43/df/ddb8a4c664046b1a0ee29c9c2d25b993e5dbc8fbde715df3694a64532781/coverage-7.16.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3d0a3681c12d3e0bcdea3d9414b04087828d6c1a482802d6f7f42c37ed530152", size = 224281, upload-time = "2026-09-13T19:10:36.853Z" }, { url = "https://files.pythonhosted.org/packages/e2/d0/9076e0c762d8afd91182e60a520fa5c92c4a334785eeb9fd6b8ef8fe7e3c/coverage-7.16.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f3b4469d3da3ecced775d1a8c9c5d9fc80f259e30b7b89f9fed0700d6035ecb", size = 224547, upload-time = "2026-09-13T19:10:39.359Z" }, { url = "https://files.pythonhosted.org/packages/03/e5/9c59e64b6161704f35fe91549bb19b2bb355e95caf596c26a2065564807c/coverage-7.16.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c08ae35c1be2fe1ce4b4c628df5c6fc0dc9a87f8e5fe8e20238d249678984741", size = 265906, upload-time = "2026-09-13T19:10:41.434Z" }, { url = "https://files.pythonhosted.org/packages/57/5a/13ccaffb77f766101bf6f38be9dba9e468b02cc92da4552a57877dbf1c1f/coverage-7.16.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8ee71a38c54bb2676bbe762b8b0943a79ccb1c2fd6a52054f66e63eda392f8c1", size = 268023, upload-time = "2026-09-13T19:10:43.533Z" }, { url = "https://files.pythonhosted.org/packages/ad/a1/05cfcf01d3c7c922832698ad46e51d3441d820ce87a943014bb5cf5710dd/coverage-7.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76491917771f179f9772efe218c5ccc65950dbdb35f4439298d8a8dfc6ec1f72", size = 270442, upload-time = "2026-09-13T19:10:45.895Z" }, { url = "https://files.pythonhosted.org/packages/72/15/a2f1544b8e3835d7b769f7dabcc9ac0283e0b646ef3344703ff8f18d83e6/coverage-7.16.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4aa0b0a6f81fa3deb211e643f6954e78b4376b62b9c218271236cfa757664e8", size = 271565, upload-time = "2026-09-13T19:10:48.123Z" }, { url = "https://files.pythonhosted.org/packages/df/5b/963c2993a82bd313f298d663afe03e164b96ace4d9d4c7561740a559e13d/coverage-7.16.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:756ba2d96d073c5a2a55d67fa22784763710fadbe22c41adde2d9cfa4dd78a8c", size = 264959, upload-time = "2026-09-13T19:10:50.195Z" }, { url = "https://files.pythonhosted.org/packages/12/59/5eba06d1943735d7cd61d46d8c8a20ffe8ddd2da06b3c94366078dadeb9b/coverage-7.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:99bf9ea435cefcefd220f8687c3ddbbf78dc2de0bd11b57c3ae9fbbdf8d5561a", size = 267897, upload-time = "2026-09-13T19:10:52.252Z" }, { url = "https://files.pythonhosted.org/packages/bd/48/af6c30f6ea431bb9b83f9070d268a9cc4fc97490abd32080164177ea999f/coverage-7.16.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:35cbc81f937fc402971df45c897d2df2bfb2014efcd990360032aa0a651635da", size = 265504, upload-time = "2026-09-13T19:10:54.432Z" }, { url = "https://files.pythonhosted.org/packages/80/f2/6e13852a8656d05fa83284567dd5a5b1e6d89bef79fe3effca2787159eab/coverage-7.16.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:8fae08e85b334ac6ac886002b5041396a31bcf805225bbe19847627203da99e2", size = 269235, upload-time = "2026-09-13T19:10:56.563Z" }, { url = "https://files.pythonhosted.org/packages/c2/32/b4fe465daa64ece674f83a750dfa4ba0fa3c5c74d6ef5dbb8dfce892cf0d/coverage-7.16.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:83362b64e215ef00b0ba33fcf13655ace6c9fdd144d5ad2ab59ac86c2daf166e", size = 264347, upload-time = "2026-09-13T19:10:58.634Z" }, { url = "https://files.pythonhosted.org/packages/54/f3/88b5c0e4ca3994c6d5feb7b1bf4c9a62cee205553159184968426930a7b1/coverage-7.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:33300f2e140ccf26af3d8152e62bff71993f9310cfc63ba7a20940b0d246a0ae", size = 266660, upload-time = "2026-09-13T19:11:00.746Z" }, { url = "https://files.pythonhosted.org/packages/97/72/6eff5456d7ba7f1c4678af531c33f9d957cae3201bd229b056fd13a204a3/coverage-7.16.1-cp314-cp314t-win32.whl", hash = "sha256:5539304fdbb2cc144df684d35a33b81145334d23e1c2367b5a923d25107f70b2", size = 226026, upload-time = "2026-09-13T19:11:02.846Z" }, { url = "https://files.pythonhosted.org/packages/8e/c8/6e5ae3d8d4d0f2c0078985bf4db55fafd90e8107b1bf91ee3547a13f5694/coverage-7.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:715dcb72c3280c428c3a20134b87e42c29acec9669136e899ab2de69ca86218d", size = 226862, upload-time = "2026-09-13T19:11:04.921Z" }, { url = "https://files.pythonhosted.org/packages/be/c7/68f9f0734afc904a92b974b489545b6a15700f3b1c4bd36eae764561e661/coverage-7.16.1-cp314-cp314t-win_arm64.whl", hash = "sha256:dac8b84c03e6029d272b8249c77018db83de59ca009a9adef7c144b4a62ee5e6", size = 226171, upload-time = "2026-09-13T19:11:06.969Z" }, { url = "https://files.pythonhosted.org/packages/ae/16/e11addf5322d98e86307da9e00c94644b97cb72c534c74cda89705bebeef/coverage-7.16.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:a337dc2d54c74430cd2febb8ee04f7c508ba8b3b412bf0463f077a66cfc73743", size = 223544, upload-time = "2026-09-13T19:11:09.108Z" }, { url = "https://files.pythonhosted.org/packages/92/d9/7ccd6484f615961d94b09c75904f87d86375109596069ae3a495a205dbbe/coverage-7.16.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:3acd1d78397dead78dd1b011b5fc19cc823c190349acd549e63856dff649c80e", size = 223882, upload-time = "2026-09-13T19:11:11.132Z" }, { url = "https://files.pythonhosted.org/packages/59/37/2fd78152a557df4a7e4ad78d6851ede90c211838d526e4916c6016f45144/coverage-7.16.1-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:73a32694603a34ad01d7e51a481a4023410d8099e1d0757e067945695c10f0ae", size = 254987, upload-time = "2026-09-13T19:11:13.735Z" }, { url = "https://files.pythonhosted.org/packages/7a/4a/58e2f9b8b13cc422aa7f474a498945ec7f446ef473b5b6bae18d2981f2a9/coverage-7.16.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fbbe8265736659a6be2e6042b6a35be13545d14b243cc1d7ecf65f90d788a370", size = 257902, upload-time = "2026-09-13T19:11:16.025Z" }, { url = "https://files.pythonhosted.org/packages/3c/74/63f8f6a67c03b86455c726be273b2aa5b57fd1122f22350d141bbb142e91/coverage-7.16.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b0359eb4c62f9993e176bc8f50450fc736a6b90dbcc05bb8584e948812699ae", size = 259522, upload-time = "2026-09-13T19:11:18.206Z" }, { url = "https://files.pythonhosted.org/packages/e2/3b/1f2261da7483e345fe55de11e41ffc16a543511e37c0912134c0dccc4f6c/coverage-7.16.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:da506e669a8a851b59e122b4b219ea70996a6296f44f3a9348a852526ff961de", size = 261723, upload-time = "2026-09-13T19:11:20.628Z" }, { url = "https://files.pythonhosted.org/packages/a7/8a/7eb1a361e044b7293f49c921a974b532627ed37f3bef5e7e9f58bcd0d5a2/coverage-7.16.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:64a2a5985d81810ed605ff0dc4ccd6555efcb5700353825532a9a0aea65826e1", size = 255462, upload-time = "2026-09-13T19:11:22.733Z" }, { url = "https://files.pythonhosted.org/packages/67/66/6d94f7ea87e99c519def5cfa5d4a1ab20247d6b403eb6e6b5b63d6aa5985/coverage-7.16.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:66d70132b69b861805dc1ca46cdd733e54c416890e8f1371d2fd103f70b59c9c", size = 257617, upload-time = "2026-09-13T19:11:24.933Z" }, { url = "https://files.pythonhosted.org/packages/3d/52/c3de0a3868589a1463a4f1cb0222eca0e5fa9f91da865ccf20d2e19ec19c/coverage-7.16.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:db651a9cf325a542bc2b7b8cc8f1b2bdc6492739bae3103731b2f1c85b96cff6", size = 255495, upload-time = "2026-09-13T19:11:27.158Z" }, { url = "https://files.pythonhosted.org/packages/9e/a3/ea10e75f20fc1e7be10b166a494826a965d19b1dc9c8a81c511a01153311/coverage-7.16.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:4184e78a4465dcda359fb403172b8951dd220929cb0984c02fabca1742fff06f", size = 259728, upload-time = "2026-09-13T19:11:29.33Z" }, { url = "https://files.pythonhosted.org/packages/0e/96/9d8020d97de46f0390739beda196322586cdd87e1fc357223e6a28bc4135/coverage-7.16.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:bc53c3f3adaa939b7a063533ffe0ae1259e7073393c618043a99a6970a87e3df", size = 254904, upload-time = "2026-09-13T19:11:31.86Z" }, { url = "https://files.pythonhosted.org/packages/5b/21/2ff8867d4560f4f639a82d8fcf13c27eea88a96193daba096027c48bb929/coverage-7.16.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:b44308854ef210b9b78df9cdfd4e159513382a859f5ef8464306d14a54c2a040", size = 256828, upload-time = "2026-09-13T19:11:34.078Z" }, { url = "https://files.pythonhosted.org/packages/6a/4b/feacad51cb5163e3baa13281f8a3098f15d7934cc1f28cfe656557eb4e46/coverage-7.16.1-cp315-cp315-win32.whl", hash = "sha256:dccc142614d3419ed71857deb43f1d757829a4c7fce9994464b71e7e38309827", size = 225722, upload-time = "2026-09-13T19:11:36.314Z" }, { url = "https://files.pythonhosted.org/packages/39/34/66bbc6ffd3c51fa67604c566920e772c5e3baa57f88dcf7b109c7f18b2cb/coverage-7.16.1-cp315-cp315-win_amd64.whl", hash = "sha256:961fc424e9d5229a99f8f1189942d8e7f4e1519147c3af64842f944aca03914d", size = 226195, upload-time = "2026-09-13T19:11:38.493Z" }, { url = "https://files.pythonhosted.org/packages/f7/96/4bad920d4caed127c37c136a64b0730fa495517d2eb58809e0d81e6e7dff/coverage-7.16.1-cp315-cp315-win_arm64.whl", hash = "sha256:681a9488c5a234397c4f013da065aa9e53eb7af4c78f1f80c6f15e7208acb855", size = 225625, upload-time = "2026-09-13T19:11:40.664Z" }, { url = "https://files.pythonhosted.org/packages/f5/2b/a88c7906eeb7da4394e932060d7008e153b3a2cd8d11782d82faa03bb7a3/coverage-7.16.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:8bb09a2d19b04db1fa0e087a7ca4f12458f7e0e7364cfcd838441d86fb1c61f6", size = 224271, upload-time = "2026-09-13T19:11:42.876Z" }, { url = "https://files.pythonhosted.org/packages/1f/1f/98db59c595680d16f553890deac6d72610e04f192c1964ec9b69cbe790ab/coverage-7.16.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:2270a794600b635ca9452ce4c32e2fe81a35f9caa17ffac0eba99f14f275bd4d", size = 224564, upload-time = "2026-09-13T19:11:45.071Z" }, { url = "https://files.pythonhosted.org/packages/b5/e8/699e236d4cb97ec282b0655afc85acf12349e71a02fff0f1a7d0fb643079/coverage-7.16.1-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a4eff405b545dfcf79cf0d9d3ff750e5c5a887aa066114175193a81d249c5ee6", size = 265423, upload-time = "2026-09-13T19:11:47.666Z" }, { url = "https://files.pythonhosted.org/packages/96/1b/6eaa21912863b3e3bf23cfe605fb62929bb1a41dc33d2bfa8e92000232bd/coverage-7.16.1-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ee1d5fc9e3bd6a217906929cc97880239a91d20dae7746f538eb0eefee705ab1", size = 268503, upload-time = "2026-09-13T19:11:50.12Z" }, { url = "https://files.pythonhosted.org/packages/9f/ac/4eb46bffa98c28a80559a58c12f17e19308d52b31174af1bd49decf76606/coverage-7.16.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4ec944947de098ad5a1738413f9364689a57067ecbc328e9de37218aa1e5cc1", size = 271059, upload-time = "2026-09-13T19:11:52.363Z" }, { url = "https://files.pythonhosted.org/packages/ed/d4/17a51ef1f6a084c9abbead522cfbee0fe9d29a593128781e724b7a0795b3/coverage-7.16.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3f73ee3956fde2d461c9e2955dd48166e4821fc8587d135e8780fb84da2a098b", size = 272039, upload-time = "2026-09-13T19:11:54.935Z" }, { url = "https://files.pythonhosted.org/packages/4a/ff/9fdeba8b8aa0848030f45f869ddedc306795a8c6e53e901b8553afbf5415/coverage-7.16.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ec9a4ee989c0d06ad95add0dbfdbb72b00ef53f43431ca0b612384e7878e5de", size = 265869, upload-time = "2026-09-13T19:11:57.423Z" }, { url = "https://files.pythonhosted.org/packages/95/eb/ab3eb506b2e4dd278440fbbbc7ed18424a86d8a981db0b90fdba66f5d34d/coverage-7.16.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:7e5727b2508f817f3126d6c33327dda32fe69d15514badfcd61db8bc4209ecef", size = 268883, upload-time = "2026-09-13T19:11:59.71Z" }, { url = "https://files.pythonhosted.org/packages/d5/0c/f4edefdce33f01954a74237df5ee83ccef5dcd1165e04abf0adf47543fca/coverage-7.16.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:19a3ea2f364012ef06678118fffdc92442a16bef4a5c8ad4f4019dd8f9ac8876", size = 265359, upload-time = "2026-09-13T19:12:01.953Z" }, { url = "https://files.pythonhosted.org/packages/df/86/ce5ed885fc7ce2adc9a5971134ace257d0f84f19c3d117da89c179b9662e/coverage-7.16.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:996c2b891b441ec2b39725ee3e8386e2f11b4894b92be225fdfd54a3eeada2c8", size = 270056, upload-time = "2026-09-13T19:12:04.46Z" }, { url = "https://files.pythonhosted.org/packages/48/a1/5dbd5f95070cece25c6df9e6ea4ded2a87dc695ce82a49bcb2116452b342/coverage-7.16.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:a125fac1f6b1e88488d208a86b578e1790e3c4937f2e1568d23356141d236220", size = 265498, upload-time = "2026-09-13T19:12:06.811Z" }, { url = "https://files.pythonhosted.org/packages/8e/ff/254b26f3300f87c7c53ac97da41ae75f0e2ac066aa964bc073c0f3750b38/coverage-7.16.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b10095528b866d322d33d6bf1709b7f8cbf959f12e8cb2ba22fc59c8717866b0", size = 267459, upload-time = "2026-09-13T19:12:09.479Z" }, { url = "https://files.pythonhosted.org/packages/61/20/bf9958f8ddbbf6a2d39da3d4009f33e0fcf19c2d2fd99715c6494cdc8e8c/coverage-7.16.1-cp315-cp315t-win32.whl", hash = "sha256:531d9be377fdcc05593b974656872eb82e808ebeb42a72515e3aaeb8bb7166f5", size = 226021, upload-time = "2026-09-13T19:12:11.933Z" }, { url = "https://files.pythonhosted.org/packages/35/8f/12d46948704d9e437c8dca2718e5d54ecc2f85396b64b500c29d8dbe10db/coverage-7.16.1-cp315-cp315t-win_amd64.whl", hash = "sha256:46a88f51770df7c9bc376bd57d3f86cdc7624b8e16ac4b585a655c22b7a1b4db", size = 226853, upload-time = "2026-09-13T19:12:14.254Z" }, { url = "https://files.pythonhosted.org/packages/a5/7f/1ca5fd0601054fce5a3539375b997e67683646e2bf62f60c41e70b529fcc/coverage-7.16.1-cp315-cp315t-win_arm64.whl", hash = "sha256:7580432cbe1e8b762660ae5806f04f869e1c02e519836a43f8094437e561e9f0", size = 226163, upload-time = "2026-09-13T19:12:16.589Z" }, { url = "https://files.pythonhosted.org/packages/96/1a/d6d16babd0a5fe4c3fae40702158c570351694e74516d8d81b86c5637448/coverage-7.16.1-py3-none-any.whl", hash = "sha256:3d8bd4e58b6a5c2018d808f297905393c6c61da466a48c3f0596a76a4900ebe4", size = 215264, upload-time = "2026-09-13T19:12:18.895Z" }, ] [package.optional-dependencies] toml = [ { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] name = "cryptography" version = "50.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bb/ad/5d6702db60b1e40b41ef513b6967ff5848f307d50f8449baf1634f5908f1/cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20", size = 880381, upload-time = "2026-08-25T19:45:45.499Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/90/34/9ce9a62ed9dc82ca9fd6a34445b6904af56e5f38b3eae2ed32e49c36053d/cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f", size = 4723133, upload-time = "2026-08-25T19:44:05.461Z" }, { url = "https://files.pythonhosted.org/packages/57/26/e6d4fc8512a51a5f9ee7bfdbfb853bce1197087df40c9ad993ad370b846f/cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef", size = 4712478, upload-time = "2026-08-25T19:44:07.375Z" }, { url = "https://files.pythonhosted.org/packages/e6/de/d3cdc2815697aae84126cbd6a030ca7b6b452e28a88b501b836bd3aa7a86/cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8", size = 4730726, upload-time = "2026-08-25T19:44:09.294Z" }, { url = "https://files.pythonhosted.org/packages/55/32/38c0d344b98c06d34b5df8946565a9c0d6dbf32c8e0730a7f05f0a3c6cab/cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45", size = 5353524, upload-time = "2026-08-25T19:44:11.96Z" }, { url = "https://files.pythonhosted.org/packages/e1/1b/82f0f0d8858d4432be1af790477edf62aef90324041aa07c57e57bef1af7/cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad", size = 4746720, upload-time = "2026-08-25T19:44:14.051Z" }, { url = "https://files.pythonhosted.org/packages/29/ba/042ca458b8c64348c768284b5d23e69b92ed53d057ab779fee628564676d/cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49", size = 4361866, upload-time = "2026-08-25T19:44:16.167Z" }, { url = "https://files.pythonhosted.org/packages/39/3b/e96c1ef71edef71057c7e3c3d982ce8fda554e0c52d0cc19c18845cde3eb/cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f", size = 4730028, upload-time = "2026-08-25T19:44:18.085Z" }, { url = "https://files.pythonhosted.org/packages/e3/38/45abd72ef63f2e7d0754a6cacf97bd8b69512ace7f6130d24c39ece65da2/cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527", size = 5308405, upload-time = "2026-08-25T19:44:20.197Z" }, { url = "https://files.pythonhosted.org/packages/85/66/6ccca4722987ddedaa7fc9c3f4708af7431f5535666c174350830888c6b7/cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a", size = 4746230, upload-time = "2026-08-25T19:44:22.376Z" }, { url = "https://files.pythonhosted.org/packages/13/0e/b1f92e013228111413f2e6743948b80bc24dfd3c1b87ba98ceea16f5df89/cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959", size = 4862596, upload-time = "2026-08-25T19:44:24.472Z" }, { url = "https://files.pythonhosted.org/packages/7e/22/c3654cccc856e9d682817b04ac3ee79731cb09ca6f95996a95c904de2883/cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b", size = 5014082, upload-time = "2026-08-25T19:44:26.709Z" }, { url = "https://files.pythonhosted.org/packages/4d/72/3a2711d967977ab5fc80b782837c7e8d1ac7445e764c20c381a265c57ef3/cryptography-50.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a", size = 4708817, upload-time = "2026-08-25T19:44:32.773Z" }, { url = "https://files.pythonhosted.org/packages/b4/f2/bb1f56e10815b789df0b409a69fa4992ff3d3fef9c72747f4a6b26fed38e/cryptography-50.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367", size = 4697300, upload-time = "2026-08-25T19:44:35.144Z" }, { url = "https://files.pythonhosted.org/packages/08/bd/ed5396be499ffcf8807a585bfe38b71a1fbdd1c342b4f9b6d0ef5162a946/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5", size = 4716039, upload-time = "2026-08-25T19:44:37.192Z" }, { url = "https://files.pythonhosted.org/packages/f6/6e/1cf405c5c8e8df7545378048e954792f00b7f2367af8863ce8b8f3e10607/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9", size = 5332388, upload-time = "2026-08-25T19:44:39.16Z" }, { url = "https://files.pythonhosted.org/packages/47/92/b4317e8c32c4f47b062f5398bd79106b220a124546f42be83bf32b761e2a/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0", size = 4730293, upload-time = "2026-08-25T19:44:41.298Z" }, { url = "https://files.pythonhosted.org/packages/39/0d/a1e7633e2c744d0f2983320a27e924ef2264c79c56e1a58d5fb0a1cfd413/cryptography-50.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc", size = 4346031, upload-time = "2026-08-25T19:44:43.245Z" }, { url = "https://files.pythonhosted.org/packages/88/dd/b215616f9bab3fc18510c78a4e5c9f362d77838503c363dc747c7d4f5c6f/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17", size = 4715344, upload-time = "2026-08-25T19:44:45.291Z" }, { url = "https://files.pythonhosted.org/packages/b1/1b/ec3ebd31741d0e963612c4fe43caa39341b9b1e031e469820e42e4c83918/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6", size = 5287201, upload-time = "2026-08-25T19:44:47.297Z" }, { url = "https://files.pythonhosted.org/packages/1a/01/0127d11a762b31a9ee0221894f540318761783f3fdc4bc5d057698caebd5/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3", size = 4730023, upload-time = "2026-08-25T19:44:49.435Z" }, { url = "https://files.pythonhosted.org/packages/9e/b9/e7425ebfb599241a0c1d7000f1b466c3062da66c19d9525031315dff7213/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6", size = 4847362, upload-time = "2026-08-25T19:44:51.94Z" }, { url = "https://files.pythonhosted.org/packages/2d/fd/60d0ddf4defa12e482c9d5e0f554384d6e8ab25341fd15f060028fd92e6a/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149", size = 4999247, upload-time = "2026-08-25T19:44:53.876Z" }, { url = "https://files.pythonhosted.org/packages/5e/a5/9ec7e81e8526c0d7a387d73386b2daed3f39e10d81a85930bd1b6bfba65c/cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23", size = 4751900, upload-time = "2026-08-25T19:45:00.401Z" }, { url = "https://files.pythonhosted.org/packages/7e/3c/0e77bd5ffcf078e9dd27d3074aad6c030d9b10d0bf69329d573c927a188c/cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733", size = 4738357, upload-time = "2026-08-25T19:45:02.786Z" }, { url = "https://files.pythonhosted.org/packages/27/3a/3c5f80daa4dcd47323c7af8a2fcb90de27a33564d4fcac69846c0972691a/cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88", size = 4758474, upload-time = "2026-08-25T19:45:04.889Z" }, { url = "https://files.pythonhosted.org/packages/6e/2b/214cf0cf93db9628c3c20c896b229f327f6fb1b20e4b3743d8ad3f00af8b/cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054", size = 5375862, upload-time = "2026-08-25T19:45:07.163Z" }, { url = "https://files.pythonhosted.org/packages/d6/51/3f9701867a46b6c1740c9b52fc4d3bed6cbdcfedcc9b6e64305c07f39cff/cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5", size = 4772942, upload-time = "2026-08-25T19:45:09.396Z" }, { url = "https://files.pythonhosted.org/packages/0d/5c/13ea642e08e2544d0f5396122055f4820cfacb3203562197b5967125ea97/cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361", size = 4383347, upload-time = "2026-08-25T19:45:11.659Z" }, { url = "https://files.pythonhosted.org/packages/84/d5/7d1fe1cb93f91c428093ff234e128c89ba8ea61a6f26aab406081f9b996e/cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71", size = 4758050, upload-time = "2026-08-25T19:45:13.745Z" }, { url = "https://files.pythonhosted.org/packages/dd/04/557fc5ead96a829e0bc812a3b9dc4a52a2f27e4f7f5950da7ff27653a805/cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80", size = 5332955, upload-time = "2026-08-25T19:45:16.193Z" }, { url = "https://files.pythonhosted.org/packages/8c/eb/5d7124083e8d8cda8f5b348f544b71ad6f707ad63193758ef4d8e569da02/cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239", size = 4772694, upload-time = "2026-08-25T19:45:18.315Z" }, { url = "https://files.pythonhosted.org/packages/63/8e/f1f955e0921dd2b6d22eae7e8d24a4c4b638d10735ffbf6a71f99eb0fcb8/cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558", size = 4888413, upload-time = "2026-08-25T19:45:20.4Z" }, { url = "https://files.pythonhosted.org/packages/1f/ab/89e2b798d2c3925f82e2bb72d5979f3d2f6da2dd22ef4a8cd8b70d920039/cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e", size = 5044355, upload-time = "2026-08-25T19:45:22.353Z" }, { url = "https://files.pythonhosted.org/packages/14/9a/6d3a4d7852e22d657438b7bf51f66102c7d71c0e1fafeec652281d0403e5/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5fe939deeb161024a6be98229c953b6591fef1f41214497a78fe793a244c017f", size = 4698675, upload-time = "2026-08-25T19:45:28.658Z" }, { url = "https://files.pythonhosted.org/packages/73/35/5c3717edf9e68a0550ce04e28eab493fe545eccd81742af03f6a75fe260b/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fb4b9672d389c738b175c4166e78310f8a70358886aacd9173ee03a85ffdc671", size = 4707410, upload-time = "2026-08-25T19:45:30.816Z" }, { url = "https://files.pythonhosted.org/packages/1d/e0/e786934472e3ac4ecdecc7b129a0ca1a2a40dffdafcf2c3ea9d4397f8def/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d63ae8f6481fec907ac0f588eee8a90aefde112c633131fe540e5711ddbb5a4e", size = 4698378, upload-time = "2026-08-25T19:45:33.043Z" }, { url = "https://files.pythonhosted.org/packages/51/cf/5b3f53a0b74d122f023476ede40ba5d3e70d5cf475f73b899740d26a4fb2/cryptography-50.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:804728ce710890870f3aaa344b2e161172d258d768ac139d02cfd9092d0d94e6", size = 4706889, upload-time = "2026-08-25T19:45:35.086Z" }, ] [[package]] name = "cssselect2" version = "0.10.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "tinycss2" }, { name = "webencodings" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/00/2456b6b664c7a770989cbe3c352aac4eb962c938486f03a2e1255ae963c6/cssselect2-0.10.1.tar.gz", hash = "sha256:83b0d820ef589dabaf693289b647c2f5b410f76d285f56deba911ffa75a7b9d1", size = 35653, upload-time = "2026-08-31T21:57:42.59Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bd/59/6b1daa3b94de8970e2a2787ba73616c2d0675d2f948ef4cad8bef7f21bc6/cssselect2-0.10.1-py3-none-any.whl", hash = "sha256:25cc4494d55985d6a6da359be48da6ce98c28dcbafa2314c383ace3fc32ec868", size = 15489, upload-time = "2026-08-31T21:57:41.162Z" }, ] [[package]] name = "defusedxml" version = "0.7.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] [[package]] name = "distlib" version = "0.4.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, ] [[package]] name = "distro" version = "1.9.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, ] [[package]] name = "filelock" version = "3.32.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/0f/59/e19834834cb01a32febfbb0f8a23a9088088f5d45991824ff2bc3b5e8acb/filelock-3.32.7.tar.gz", hash = "sha256:37b8a3d9811b0f9aef7e5ec5c71bb320de52df51e6ca9bcd6f5ad81187660da7", size = 225154, upload-time = "2026-09-16T00:24:20.907Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/15/df/31098c5aeb4d966b553641472bd55fcf5fdfac953549894b8a765ba44e91/filelock-3.32.7-py3-none-any.whl", hash = "sha256:65ff0d0190ea42038b32bda4b77834fb05be2cad4c5b9b01aa4dfb3614536e52", size = 100157, upload-time = "2026-09-16T00:24:19.543Z" }, ] [[package]] name = "ghp-import" version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, ] [[package]] name = "griffe-inherited-docstrings" version = "1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffelib" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/da/fd002dc5f215cd896bfccaebe8b4aa1cdeed8ea1d9d60633685bd61ff933/griffe_inherited_docstrings-1.1.3.tar.gz", hash = "sha256:cd1f937ec9336a790e5425e7f9b92f5a5ab17f292ba86917f1c681c0704cb64e", size = 26738, upload-time = "2026-02-21T09:38:44.312Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/16/20/4bc15f242181daad1c104e0a7d33be49e712461ea89e548152be0365b9ea/griffe_inherited_docstrings-1.1.3-py3-none-any.whl", hash = "sha256:aa7f6e624515c50d9325a5cfdf4b2acac547f1889aca89092d5da7278f739695", size = 6710, upload-time = "2026-02-20T11:06:38.75Z" }, ] [[package]] name = "griffelib" version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/27/af/018c10bc9edd42b6ef6db2e96b09542050d5253f9b195e74bc910b2d13ab/griffelib-2.3.0.tar.gz", hash = "sha256:7b0952caf5bca6afa4bb5ee8c6a2d183fe3f21b62efc5f6c7243cb2b26d2d115", size = 234534, upload-time = "2026-09-04T15:08:17.472Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/41/63/e876e789525063c840ccfa8857febdabd6523bcef9ce7eb979b9305ea895/griffelib-2.3.0-py3-none-any.whl", hash = "sha256:1b8f9cd525681c26b1d6d574faa1371651e8459ca51d209684f50b8096ae06e0", size = 169423, upload-time = "2026-09-04T15:08:12.956Z" }, ] [[package]] name = "h11" version = "0.16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] [[package]] name = "hatch" version = "1.18.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-zstd", marker = "python_full_version < '3.14'" }, { name = "click" }, { name = "distro", marker = "sys_platform == 'linux'" }, { name = "hatchling" }, { name = "httpx2" }, { name = "hyperlink" }, { name = "keyring" }, { name = "packaging" }, { name = "pexpect" }, { name = "platformdirs" }, { name = "pyproject-hooks" }, { name = "python-discovery" }, { name = "rich" }, { name = "shellingham" }, { name = "tomli-w" }, { name = "tomlkit" }, { name = "userpath" }, { name = "uv" }, { name = "virtualenv" }, ] sdist = { url = "https://files.pythonhosted.org/packages/10/fd/634c575b5becad2dfa7135f3ad66d57102cd77d834cf473756d868a808ff/hatch-1.18.0.tar.gz", hash = "sha256:463d214cb068391454be198e58d3cc0846f71e39d68c5568ba650af7781e8ae3", size = 5275084, upload-time = "2026-08-11T05:06:41.513Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fd/b1/d14265cb26c57af1485c01fd95037a35f13748b718617405cdefc6150429/hatch-1.18.0-py3-none-any.whl", hash = "sha256:75874c0905fe76b44fd39585c49bc9bd2b9fee638abb11f1f3d087042e7f9122", size = 171310, upload-time = "2026-08-11T05:06:39.807Z" }, ] [[package]] name = "hatchling" version = "1.32.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "pathspec" }, { name = "pluggy" }, { name = "tomlkit" }, { name = "trove-classifiers" }, ] sdist = { url = "https://files.pythonhosted.org/packages/69/08/33331757185504aae48b8d9bd78cec03a76e3aecfb52e549d05a2347c0dd/hatchling-1.32.0.tar.gz", hash = "sha256:0bdbde4a52b06c37e3eca395f85a762bf0ef06fe374fd8ae429dc6be10230f5f", size = 57783, upload-time = "2026-08-11T05:03:44.114Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a9/84/1798b6d85ecde0e31546004efd25c5de1b1f49250644a60cce460e12593a/hatchling-1.32.0-py3-none-any.whl", hash = "sha256:0e17c9c3b9aa7c625acc8d0f5b622f107d5049af9ecf5ada4de1aada5be7cdbc", size = 78435, upload-time = "2026-08-11T05:03:42.644Z" }, ] [[package]] name = "httpcore2" version = "2.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "h11" }, { name = "truststore" }, ] sdist = { url = "https://files.pythonhosted.org/packages/15/8c/e925b1c92018abb3a1863ce1549d76d2381e334d21d65d4ac8f65dabd78a/httpcore2-2.13.0.tar.gz", hash = "sha256:2adc8be4fb285fbcd6d894298db3b52c177e74b6674eda3a76bd36be3292a3db", size = 67740, upload-time = "2026-09-14T14:18:04.717Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7e/0d/117a771a2bb91df334b66bf4da14cd02f21aefbcfe53180f336ce55e8f90/httpcore2-2.13.0-py3-none-any.whl", hash = "sha256:35ae5be347aa40467b4a5dc032ac67ebb6d27189fc97e8cebcf99616f6a1bb9e", size = 83162, upload-time = "2026-09-14T14:18:02.529Z" }, ] [[package]] name = "httpx2" version = "2.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "sys_platform != 'emscripten'" }, { name = "httpcore2", marker = "sys_platform != 'emscripten'" }, { name = "httpx2-jsfetch", marker = "python_full_version >= '3.12' and sys_platform == 'emscripten'" }, { name = "idna" }, { name = "truststore", marker = "sys_platform != 'emscripten'" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/a0/e9deef4654132857b5a5dbe4eddd0ac59c2814500e11f2f5044cd81103ee/httpx2-2.13.0.tar.gz", hash = "sha256:81bd07dc67a3701729ef1f777a3c00c915d4539604fdb5afd327f8682f6b7b44", size = 100290, upload-time = "2026-09-14T14:18:05.486Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fe/d1/a0c72b0e006df654709fbc366cc5bcb53e5aee13e1e3395152c6dd293376/httpx2-2.13.0-py3-none-any.whl", hash = "sha256:fc12720cedf72faa26cca6b4ca394e05c894e7d7933fc45cafe767960804e49a", size = 95565, upload-time = "2026-09-14T14:18:03.553Z" }, ] [[package]] name = "httpx2-jsfetch" version = "1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/0e5636363151a2a1795e0a77617168b9ca438e1748ec05fc9b5687f93d64/httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60", size = 6872, upload-time = "2026-08-07T00:13:07.492Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size = 6382, upload-time = "2026-08-07T00:13:06.567Z" }, ] [[package]] name = "hyperlink" version = "21.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3a/51/1947bd81d75af87e3bb9e34593a4cf118115a8feb451ce7a69044ef1412e/hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", size = 140743, upload-time = "2021-01-08T05:51:20.972Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4", size = 74638, upload-time = "2021-01-08T05:51:22.906Z" }, ] [[package]] name = "identify" version = "2.6.19" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, ] [[package]] name = "idna" version = "3.19" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, ] [[package]] name = "importlib-metadata" version = "9.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/7e/1e7e8dc30634b93ebb3d58a3dea569ad146e656218d3960ab04f62047b29/importlib_metadata-9.0.1.tar.gz", hash = "sha256:ab830580bc0ef3db61ce8fae716389e5462b67e033018bab6d8f80ef17172f99", size = 59124, upload-time = "2026-08-28T15:30:34.646Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/55/ecca97ae19075f1fac62def77731e7f535e6c1fb8f92ff08160c5e6dade8/importlib_metadata-9.0.1-py3-none-any.whl", hash = "sha256:bba5600596a7e21f3eef53281cf28d6a5195634d2f2b78ff9501a3272c6eaab0", size = 27920, upload-time = "2026-08-28T15:30:33.433Z" }, ] [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] name = "jaraco-classes" version = "3.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, ] [[package]] name = "jaraco-context" version = "6.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-tarfile", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, ] [[package]] name = "jaraco-functools" version = "4.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6c/1f/c23395957d41ccf27c4e535c3d334c4051e5395b3752057ba4cbaec35c56/jaraco_functools-4.6.0.tar.gz", hash = "sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280", size = 20837, upload-time = "2026-07-14T01:28:02.544Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/02/36/ecc85bc96c273dc8a11273ed4782272975e6338d4a3e9228621175edf0e3/jaraco_functools-4.6.0-py3-none-any.whl", hash = "sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30", size = 11677, upload-time = "2026-07-14T01:28:01.59Z" }, ] [[package]] name = "jeepney" version = "0.9.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, ] [[package]] name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] [[package]] name = "keyring" version = "25.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, { name = "jaraco-classes" }, { name = "jaraco-context" }, { name = "jaraco-functools" }, { name = "jeepney", marker = "sys_platform == 'linux'" }, { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, { name = "secretstorage", marker = "sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, ] [[package]] name = "markdown" version = "3.10.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" }, ] [[package]] name = "markdown-it-py" version = "4.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[package]] name = "markupsafe" version = "3.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "mercantile" version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d2/c6/87409bcb26fb68c393fa8cf58ba09363aa7298cfb438a0109b5cb14bc98b/mercantile-1.2.1.tar.gz", hash = "sha256:fa3c6db15daffd58454ac198b31887519a19caccee3f9d63d17ae7ff61b3b56b", size = 26352, upload-time = "2021-04-21T14:42:41.096Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl", hash = "sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f", size = 14779, upload-time = "2021-04-21T14:42:39.841Z" }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, ] [[package]] name = "mkdocs" version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "ghp-import" }, { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, { name = "mergedeep" }, { name = "mkdocs-get-deps" }, { name = "packaging" }, { name = "pathspec" }, { name = "pyyaml" }, { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, ] [[package]] name = "mkdocs-autorefs" version = "1.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "markupsafe" }, { name = "mkdocs" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" }, ] [[package]] name = "mkdocs-get-deps" version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mergedeep" }, { name = "platformdirs" }, { name = "pyyaml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, ] [[package]] name = "mkdocs-material" version = "9.7.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, { name = "backrefs" }, { name = "colorama" }, { name = "jinja2" }, { name = "markdown" }, { name = "mkdocs" }, { name = "mkdocs-material-extensions" }, { name = "paginate" }, { name = "pygments" }, { name = "pymdown-extensions" }, { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f1/cd/c05d3a530ba7934f144fb45f7203cd236adc25c7bdcc34673d202f4b0278/mkdocs_material-9.7.7.tar.gz", hash = "sha256:c0649c065b1b0512d60aad8c10f947f8e455284475239b364b610f2deb4d0855", size = 4097923, upload-time = "2026-07-17T16:21:33.156Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ad/21/17c1bc9e6f47c972ad66fb2ac2568f99f90f1207eeb6fc3b34d094dba7b5/mkdocs_material-9.7.7-py3-none-any.whl", hash = "sha256:8ea9bb1737a5b524a5f9dcf2e1b4ebda8274ae3008aa7845720a97083bef708f", size = 9305438, upload-time = "2026-07-17T16:21:30.017Z" }, ] [package.optional-dependencies] imaging = [ { name = "cairosvg" }, { name = "pillow" }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, ] [[package]] name = "mkdocstrings" version = "1.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, { name = "mkdocs" }, { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/53/71/f85bdf13355073ae15a7375f09879375a830553552e58c1c4b7e0bbc5c8b/mkdocstrings-1.0.6.tar.gz", hash = "sha256:a0b8c2bdd29a6416c80d717aa369bbf7831946bd9f23c2a66db1b1dbe7693dbd", size = 100649, upload-time = "2026-07-11T19:38:05.732Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5d/5b/4c1902e8bdd5c4db63284e9d101dece4038d4025d6d88850ffe0a1578980/mkdocstrings-1.0.6-py3-none-any.whl", hash = "sha256:2703708697487d1b6d6d7b412e176fa436edf120c1bf81dc9e126b12d00893c7", size = 35787, upload-time = "2026-07-11T19:38:04.417Z" }, ] [package.optional-dependencies] python = [ { name = "mkdocstrings-python" }, ] [[package]] name = "mkdocstrings-python" version = "2.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffelib" }, { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c5/65/0db919b7c91bf033b42d04f15ff16a56f4edd6afb26e84d448359660ece3/mkdocstrings_python-2.0.8.tar.gz", hash = "sha256:34545b54681cf0b212aab95394d37b0f5326a93b102f6ad1df3d965c79384c9d", size = 201771, upload-time = "2026-08-31T20:16:06.698Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0b/b7/a5a854d4e44853f26decc0c5e0d68df052399f3da344a313da4178f00816/mkdocstrings_python-2.0.8-py3-none-any.whl", hash = "sha256:e555d9ef53b0febdeae4dd603144d4f86ec90fef672276645ea3bb61232c3d24", size = 105443, upload-time = "2026-08-31T20:16:05.25Z" }, ] [[package]] name = "more-itertools" version = "11.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/de/1d/f4da6f02cdffe04d6362210b807146a26044c88d839208aec273bb0d9184/more_itertools-11.1.0.tar.gz", hash = "sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d", size = 145772, upload-time = "2026-05-22T14:14:29.909Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" }, ] [[package]] name = "morecantile" source = { editable = "." } dependencies = [ { name = "attrs" }, { name = "click" }, { name = "pydantic" }, { name = "pyproj", version = "3.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "pyproj", version = "3.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] [package.optional-dependencies] rasterio = [ { name = "rasterio", version = "1.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "rasterio", version = "1.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] [package.dev-dependencies] benchmark = [ { name = "pytest-benchmark" }, ] deploy = [ { name = "hatch" }, ] dev = [ { name = "mercantile" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-cov" }, ] docs = [ { name = "griffe-inherited-docstrings" }, { name = "mkdocs" }, { name = "mkdocs-material", extra = ["imaging"] }, { name = "mkdocstrings", extra = ["python"] }, { name = "pygments" }, ] [package.metadata] requires-dist = [ { name = "attrs" }, { name = "click" }, { name = "pydantic", specifier = "~=2.0" }, { name = "pyproj", specifier = ">=3.1,<4.0" }, { name = "rasterio", marker = "extra == 'rasterio'", specifier = ">=1.2.1" }, ] provides-extras = ["rasterio"] [package.metadata.requires-dev] benchmark = [{ name = "pytest-benchmark" }] deploy = [{ name = "hatch" }] dev = [ { name = "mercantile" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-cov" }, ] docs = [ { name = "griffe-inherited-docstrings", specifier = ">=1.0.0" }, { name = "mkdocs", specifier = ">=1.4.3" }, { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.5" }, { name = "mkdocstrings", extras = ["python"], specifier = ">=0.25.1" }, { name = "pygments" }, ] [[package]] name = "nodeenv" version = "1.10.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] [[package]] name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.12'", ] sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, ] [[package]] name = "numpy" version = "2.5.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", ] sdist = { url = "https://files.pythonhosted.org/packages/13/01/11703282db468b85f6f7b8c7f22d058de5970d5c7e60a3a8aaa313c3de36/numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563", size = 20791231, upload-time = "2026-09-06T16:27:47.073Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/d6/50/8fdbb16af64895706a45f06a4068e29db732ec180f3c1375f14123359138/numpy-2.5.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb189f09db39283b26bfd061ec16189e14f71c6755207f72a0f7540867afe5b9", size = 16994982, upload-time = "2026-09-06T16:24:29.244Z" }, { url = "https://files.pythonhosted.org/packages/60/39/789131c1188c078dcb3a1692e72e1e050c68b88ffe72c9ccaac9bcd7a9cd/numpy-2.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f59a878c33d6b88122d80d239bb3b845d58708750b0cb06a09aebb9b18ec696c", size = 12009327, upload-time = "2026-09-06T16:24:32.491Z" }, { url = "https://files.pythonhosted.org/packages/9c/59/a312e95696e5f601914dd8b6dd844692ba61670807417e24b68e337b5c70/numpy-2.5.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a72f874bc9e10e4b8f80426fb49716d5141f64442a0c8418065093ec8017fbb0", size = 5445405, upload-time = "2026-09-06T16:24:35.071Z" }, { url = "https://files.pythonhosted.org/packages/30/d0/5623a1707ed4fe16e3909fe3cf5ee3da004ae677ad23d83bbf3adf1a6faf/numpy-2.5.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fc36dc566135b5eceec4cf89758fcb719266a019ef07dae1754ae7c9f617ef3e", size = 6783213, upload-time = "2026-09-06T16:24:37.253Z" }, { url = "https://files.pythonhosted.org/packages/f1/32/84146fc020ad3c25f805f70ab60da46fe3c540a21369754a7e4369754b6f/numpy-2.5.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76c2c1e6bfa5c84adc6434dfbf013aa92096a7985221762c8f11fedfd20fff58", size = 15687872, upload-time = "2026-09-06T16:24:39.751Z" }, { url = "https://files.pythonhosted.org/packages/65/af/aa78d1a88805456e212b65461354cd943197fb9acecc4c90fd12295123a3/numpy-2.5.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7e18c623bb5c95acb3b3328861272816ba199fb531921c5d6d0b675f1fde9e3", size = 16717410, upload-time = "2026-09-06T16:24:42.745Z" }, { url = "https://files.pythonhosted.org/packages/3b/24/faa79d865e69a97ba17473b23a1b74094b2259c03e820c70297293b9ea49/numpy-2.5.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4f8929ee6c96bfbd7b4ed2032e0c03af86fe1826740ab61ddabf9072d06e57ff", size = 17040975, upload-time = "2026-09-06T16:24:45.961Z" }, { url = "https://files.pythonhosted.org/packages/62/4a/8877e629445a7176297dffcaf9c485faa96a95d81728a62521ad55bd4c0f/numpy-2.5.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b5d93cf48f687479941d12b69c873ad2cc76bbd487f0091c2200636497f34034", size = 18476479, upload-time = "2026-09-06T16:24:49.35Z" }, { url = "https://files.pythonhosted.org/packages/c8/db/35e1c2d38b04cbd5b731f9d71495e055e813197669d22b612f11748d2ff9/numpy-2.5.3-cp312-cp312-win32.whl", hash = "sha256:bf63afbe037eb5d2fe87fbcc7778e61da53ebaf21d938a4515aa73b62532a5d4", size = 6133378, upload-time = "2026-09-06T16:24:51.915Z" }, { url = "https://files.pythonhosted.org/packages/3c/a1/accf6d4f0c80c5d9ba9735d6b1550e444180599f34dec69ca01360f717ad/numpy-2.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:0a59a421a32580a009e8a1751345bf829631b990dc1794b80514ab722b435def", size = 12567828, upload-time = "2026-09-06T16:24:54.255Z" }, { url = "https://files.pythonhosted.org/packages/22/43/1764aff32e4652526ae2f71fa8b3efd8d25c8a3d6926914454e47138ed1e/numpy-2.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:ccb32e0525d29e8b0572eb84c9a57af0e7a4e615726927506f55063c62414034", size = 10485432, upload-time = "2026-09-06T16:24:57.278Z" }, { url = "https://files.pythonhosted.org/packages/79/e5/8fb89cd46d14e35699d13bf943a5f5f441ecee8667120a1f6105ab89e349/numpy-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034", size = 16991061, upload-time = "2026-09-06T16:25:00.411Z" }, { url = "https://files.pythonhosted.org/packages/2f/06/9dc9e48b5e5e941c8b10350c5ff2d721da42a20517d911d15544246775ff/numpy-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e", size = 12003676, upload-time = "2026-09-06T16:25:03.475Z" }, { url = "https://files.pythonhosted.org/packages/ab/2a/98282aa5b8f58b1157d440bb6282eed47e3632a5de53a714fbab17e659fe/numpy-2.5.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09", size = 5439695, upload-time = "2026-09-06T16:25:05.978Z" }, { url = "https://files.pythonhosted.org/packages/a1/f9/b6533d777be9d6ffd29dc1be0867e563e6e8cc9a220ff1b716adc317f060/numpy-2.5.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958", size = 6779395, upload-time = "2026-09-06T16:25:08.599Z" }, { url = "https://files.pythonhosted.org/packages/73/85/735720d04ec197c5dcfacdfc9922667c7f1f5f496a279b7ba4d7c74c4cc7/numpy-2.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b", size = 15681750, upload-time = "2026-09-06T16:25:11.173Z" }, { url = "https://files.pythonhosted.org/packages/3a/1b/3b16a9bc514a440a7a0883684111dcb1ef1aee960af2ca95da8fc775f124/numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321", size = 16708577, upload-time = "2026-09-06T16:25:14.171Z" }, { url = "https://files.pythonhosted.org/packages/69/c4/386f397831b07328b639c96c5b62719346cf4baf07c68d927239752b1534/numpy-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231", size = 17042047, upload-time = "2026-09-06T16:25:17.582Z" }, { url = "https://files.pythonhosted.org/packages/5f/3e/a700ecbf36e85ae8328fd3b0e12eeddc22ed6358a64cb2bd913e0d195d65/numpy-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0", size = 18465724, upload-time = "2026-09-06T16:25:20.949Z" }, { url = "https://files.pythonhosted.org/packages/41/ee/38e785e88a4045f6ad1d1f2808dcdfafdca48c760260c0587bf171e29fc9/numpy-2.5.3-cp313-cp313-win32.whl", hash = "sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f", size = 6129003, upload-time = "2026-09-06T16:25:23.664Z" }, { url = "https://files.pythonhosted.org/packages/f3/ec/100f2b1794ede74a9b3d7ec6b9736927f56713414c1dfe19ab6c383494bf/numpy-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec", size = 12560965, upload-time = "2026-09-06T16:25:26.602Z" }, { url = "https://files.pythonhosted.org/packages/80/b1/7dc825ca94c12acebbce4c37caa5e198695eb31424bc579679f32b1bb49d/numpy-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204", size = 10482343, upload-time = "2026-09-06T16:25:29.772Z" }, { url = "https://files.pythonhosted.org/packages/70/78/cf416f15dc29375a229d9dfebf8db6e313f291580b39fa1a568b6052bb07/numpy-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:350ba9783ce969cf9f7ce6e6a9a58e1a6e2a19ca025b7ee448c4db727706212a", size = 16998686, upload-time = "2026-09-06T16:25:33.171Z" }, { url = "https://files.pythonhosted.org/packages/9e/59/abcc2d8def4fd60eec7d87f92d27c13448ffd9ab14339bcc63a0d7a2fdea/numpy-2.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:012e66aca395d795496446e52aeeb5866312a5d4d3f27da270e5a0b43f70dc5c", size = 12013862, upload-time = "2026-09-06T16:25:36.748Z" }, { url = "https://files.pythonhosted.org/packages/94/75/4640d2d6e4b64a049e48425a82728a41ef4adb61332d2cba68055774878b/numpy-2.5.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:adc1ada2662f8a5f960b8a10d9986897e7499ef07e06d4cfe7197f8cce923c07", size = 5449793, upload-time = "2026-09-06T16:25:39.476Z" }, { url = "https://files.pythonhosted.org/packages/96/cd/625b57ae33d4ca560f32cc0b47b4a5922146d9beb998ddf773900d440a73/numpy-2.5.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:54a115e5a73b8fc44f0cebef486365a1894b5c9760685d4558b72b7c3eb846e0", size = 6785176, upload-time = "2026-09-06T16:25:42.069Z" }, { url = "https://files.pythonhosted.org/packages/9c/72/12918652e7912ef9751e8694c88820fcd1908e0618cb23f5f3caa6004b7b/numpy-2.5.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be5a8381859b6da607c84f4f7d6847725f1cf1853ef8a2c9e115b7d58bef47dc", size = 15703377, upload-time = "2026-09-06T16:25:45.135Z" }, { url = "https://files.pythonhosted.org/packages/45/8f/9beacf79ca7c650688ad0baa80931adb988fe6e6e5d5903c23cc3dbd70eb/numpy-2.5.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b0521d0f4aebb6e06189451025fa17a913287b13c03d5fe05c017333b654ea5b", size = 16711928, upload-time = "2026-09-06T16:25:48.461Z" }, { url = "https://files.pythonhosted.org/packages/09/8d/41d0a56e1ac4c87495c897a211b1368691b7237aadabec8b3b8f3a74d48f/numpy-2.5.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9deb49575e5b0b94ed72c8a64ec4d033381adc27e9060ae842971f697ba96104", size = 17059507, upload-time = "2026-09-06T16:25:51.873Z" }, { url = "https://files.pythonhosted.org/packages/08/1e/0dfbc5cc251d54e2af790f254d24ec38637fa97ec7d5d11de7ffed787098/numpy-2.5.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b00eefbcf0f292945c4b4dec2ae845389ef5bcdcd596e6e4328051db5b5ba694", size = 18471002, upload-time = "2026-09-06T16:25:55.233Z" }, { url = "https://files.pythonhosted.org/packages/b5/2c/dfa40f6991f8185c8c30ffd023dfcbb11888e823cfab9557b920f3bb7bed/numpy-2.5.3-cp314-cp314-win32.whl", hash = "sha256:c2381f82999704f818e2c987a865050e285ec3621262c66d40f5a96c8f899f8e", size = 6180485, upload-time = "2026-09-06T16:25:58.157Z" }, { url = "https://files.pythonhosted.org/packages/a4/73/d2c08231e4fde7e415501fd02c715d96e98599b2d8384445933944152984/numpy-2.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:2c25dfa72943e4336ddb6b0ee4277b47a0c85bede0807530ec68103bf58e2c10", size = 12698179, upload-time = "2026-09-06T16:26:00.789Z" }, { url = "https://files.pythonhosted.org/packages/5c/e9/dcdcc9b95cf5f49815055573aee1b11cfbf5299f38a180e437ded050810f/numpy-2.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:15aa985ac73a8db02db7663381aa109510449d3819d37206caed27b33a65a8a6", size = 10769383, upload-time = "2026-09-06T16:26:04.011Z" }, { url = "https://files.pythonhosted.org/packages/49/c4/af8bc08a7ef4e1529a7c0cf24969accce316b783999802089a581ec99272/numpy-2.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ac7bb1c52d445bd4f8f7f97fefe6abc3a084dc4d63df50d79b17fa2b78e89297", size = 12132668, upload-time = "2026-09-06T16:26:07.138Z" }, { url = "https://files.pythonhosted.org/packages/c5/ae/0f15eb56d4ec5e13c1f7ff04ff407f997d1acbadb45d3e1f2e2645a8f43c/numpy-2.5.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e6ab667ba76450084eb64013762c438ea76d9d29cc676dcd6c2e9892ba37f841", size = 5568580, upload-time = "2026-09-06T16:26:09.828Z" }, { url = "https://files.pythonhosted.org/packages/23/fb/c72a8f25d4b6e96c354e7ab45ace3b27dc11e5d6a13b6c7d0cd6b08bf112/numpy-2.5.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:f7fabeb6cea87d65f3b926de33d03fb016cfdc29314c90974383b5582ae72891", size = 6882634, upload-time = "2026-09-06T16:26:12.524Z" }, { url = "https://files.pythonhosted.org/packages/07/a9/968c90ed2ab15060c338e8137f1215b5a60756ae07328e0a60d1c6734df4/numpy-2.5.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fb6f8fb9ff0b3a69f52c66ce397b0246583e9f28616231b0e32ca49259a5fa6", size = 15748923, upload-time = "2026-09-06T16:26:15.092Z" }, { url = "https://files.pythonhosted.org/packages/59/08/9df04103947b95e3b6b1f2ed1a70521f325647a31b82da6a2aae3a485508/numpy-2.5.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93e1f5447e2b1e479d7bd74701e84746b86450cff1fc368b132d195e2b8f8211", size = 16746748, upload-time = "2026-09-06T16:26:18.43Z" }, { url = "https://files.pythonhosted.org/packages/41/a0/14c8d5fe5b53a334aabb653deb391c0fef49558f491880ea300ed6785224/numpy-2.5.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c00abe94c1a69d75d827dcf1c025b25c8a45d230b3bcd77a9020883a1b047653", size = 17111561, upload-time = "2026-09-06T16:26:22.113Z" }, { url = "https://files.pythonhosted.org/packages/c4/a6/d7e96e42f01522e154c32489640f16dfc4f6181d165d05fc3bec8c2c4999/numpy-2.5.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:536f963710a4e63934d80ac0dc4f478804a83e9a84b6828018f25d09953ada33", size = 18513945, upload-time = "2026-09-06T16:26:25.401Z" }, { url = "https://files.pythonhosted.org/packages/25/39/3453afb7119d0449ef11c886874120ff180e2c337760e0e2d88f70f1a945/numpy-2.5.3-cp314-cp314t-win32.whl", hash = "sha256:4c8a6d2ebce6305fd82fbefca827775437147052a976ee7c94b36a0c1b52ac6c", size = 6335421, upload-time = "2026-09-06T16:26:28.175Z" }, { url = "https://files.pythonhosted.org/packages/99/01/22815d2b19a1a746b1d45205cffebb3fe511a18acb75fba6c88491fc9894/numpy-2.5.3-cp314-cp314t-win_amd64.whl", hash = "sha256:9a37475425b431b4d060f23b4f52cd2f3aef6bc7c654bd760adf0040eec9d435", size = 12896420, upload-time = "2026-09-06T16:26:31.265Z" }, { url = "https://files.pythonhosted.org/packages/fa/ee/a7cbba67eeaff038dc29ca8b98a88396c8b0cc9c89d4924f4a27a5c9150b/numpy-2.5.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2d8240cb4c16fd831074aa2b2cf9fc54664d826341d61c372245b96a74a49a9a", size = 10857177, upload-time = "2026-09-06T16:26:34.167Z" }, { url = "https://files.pythonhosted.org/packages/45/56/78194492883ff5eec90423fe56a3a44b154da047d88a6307f629713c584f/numpy-2.5.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:a6391fafaba97500887132cd582abc6e19452b1ac775a47caa7b24490e152058", size = 16996531, upload-time = "2026-09-06T16:26:37.287Z" }, { url = "https://files.pythonhosted.org/packages/11/39/dd55c0af90bbab564b09ae3b0aa60ec5c02b900fa4f1ba23440525c8b32d/numpy-2.5.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:09d5a423c71ad5feb5625844ad58050e35df43871004b52ac9c0ad44a56775be", size = 12012569, upload-time = "2026-09-06T16:26:40.707Z" }, { url = "https://files.pythonhosted.org/packages/b6/51/04f67d32e4862b281b1cb84ceeaed3421189a84fb6fb51a391cd6d5009f7/numpy-2.5.3-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:f9579f383d1bf9df80081e72760e84960a7fd4f88cf0c9e535a8597c9bb646f5", size = 5448498, upload-time = "2026-09-06T16:26:43.435Z" }, { url = "https://files.pythonhosted.org/packages/a3/c9/25b4dc0dd1344ec26c7319e84fd4e9809d2b5628f4e12decd618036e5178/numpy-2.5.3-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:86bff898a431c0fb71f7610b75726e75a54d47b37edc9d537f48de63bb3c0b90", size = 6783026, upload-time = "2026-09-06T16:26:46.374Z" }, { url = "https://files.pythonhosted.org/packages/fc/c7/29285be1e5232a6e7ee3268a33c85843f5a8ee93350c6465cddd66ebbf76/numpy-2.5.3-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f3ed25271581281f2fccb1adcedfcde4c07362eec69189b50baf6f90e3ae159", size = 15697322, upload-time = "2026-09-06T16:26:49.415Z" }, { url = "https://files.pythonhosted.org/packages/55/49/bbad5335fb4996a16881f853ff3e0ba582f01720e55c89b1c06b8fc42a90/numpy-2.5.3-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffdc76bfcae6b255dff75202c5e7feaf95b40246bc0a17944facc1fecf9f79ab", size = 16708995, upload-time = "2026-09-06T16:26:53.127Z" }, { url = "https://files.pythonhosted.org/packages/ef/e9/1df35483760b04a65ea44669f89dc64f30e5aca098b48ceb8b1310b0e0fe/numpy-2.5.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:116f96cadd935c6122e9228d676fe7ede19e741f5c8bb1c3cddbe0c51ccebea2", size = 17052508, upload-time = "2026-09-06T16:26:56.464Z" }, { url = "https://files.pythonhosted.org/packages/b8/99/66e54da8265cc8be8a7382bf96edce17aaa2837d6f484432025932a3caa5/numpy-2.5.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:09ffa5d903faeaa5c4dd05009cf81c8bab9f2cb37c548b8d39b65b4cfa7c97f7", size = 18468224, upload-time = "2026-09-06T16:26:59.966Z" }, { url = "https://files.pythonhosted.org/packages/01/bc/b5e90a91c115168d793dfd2ad9c69c438c2fe7a13a437e770bc5b078e732/numpy-2.5.3-cp315-cp315-win32.whl", hash = "sha256:e01c918ac3d48e18a927cf7b14a26a3e29ff2bdf2eacb976da0aecd6a43ed034", size = 6179919, upload-time = "2026-09-06T16:27:03.166Z" }, { url = "https://files.pythonhosted.org/packages/37/ea/780748fd3985109075514ef8fc64cd25f943e40dde13a6d59141eb268fc8/numpy-2.5.3-cp315-cp315-win_amd64.whl", hash = "sha256:e931e4f499e0dc7ef29d269a8e5b35dd722e5d14be07df6240166ea7c6532fae", size = 12697656, upload-time = "2026-09-06T16:27:06.153Z" }, { url = "https://files.pythonhosted.org/packages/b3/16/407be69a2a87c8cab64d95975a8977a426a29e138f07e276ec258f0fe4e5/numpy-2.5.3-cp315-cp315-win_arm64.whl", hash = "sha256:26e15e4aecd8617dfbaecb37d223e365d7b39411fba20454be2670a96aa74cb5", size = 10767601, upload-time = "2026-09-06T16:27:09.297Z" }, { url = "https://files.pythonhosted.org/packages/44/bf/a97ffb01e41d50a32a9177aef942a4d0e389a3daf451d04e5f38ef6afb87/numpy-2.5.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:6cef4bb1706dfec49243c05d921eefb4e190d41e2528b30d8035ea1f36b4c24a", size = 17090092, upload-time = "2026-09-06T16:27:12.907Z" }, { url = "https://files.pythonhosted.org/packages/d1/24/136c02f2c2af9a067a84d0c3aa10c99012c0476fa5066732fa4a4202557d/numpy-2.5.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d1c89973648c85069c5046ad460f7b8a00218b29a2e42359ac8cc63e9ab94832", size = 12129429, upload-time = "2026-09-06T16:27:16.089Z" }, { url = "https://files.pythonhosted.org/packages/fe/6c/b47582d6597789bf946d5efbeb6b9e56fd8bcbd5efc6fbf51dbe1ea31eb3/numpy-2.5.3-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:214045a5bf00113a146ab9ee9730c44501af6723cdf1f6830932f7b5ef2e7af0", size = 5565452, upload-time = "2026-09-06T16:27:19.868Z" }, { url = "https://files.pythonhosted.org/packages/be/b4/ef3cc6da73774202d4deae16bb321fd8298a4e0561e3539f8c4be237d916/numpy-2.5.3-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:8617bbfae4486cf99c9f899966699428d19da931d06ca94ad3da986c76e15997", size = 6876736, upload-time = "2026-09-06T16:27:22.232Z" }, { url = "https://files.pythonhosted.org/packages/9e/24/e3813329498596cb842703dcacac1741612ed9fb9c4e6a3e0c7e2ebbc597/numpy-2.5.3-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:595d020938c84e320bcf40ad71089e108eac0d377cd018e14a8c094f39e98d85", size = 15745777, upload-time = "2026-09-06T16:27:25.181Z" }, { url = "https://files.pythonhosted.org/packages/4a/9e/4e7a07fd0776dc2210cdacf2010be8665194d094defc10c419d7dea794cc/numpy-2.5.3-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f24021b9f22bc6301c37b196974a92c1c18dccedb6fef3dd252e95f2d6adbe4", size = 16746949, upload-time = "2026-09-06T16:27:28.576Z" }, { url = "https://files.pythonhosted.org/packages/91/db/01674c0e20335057813a00c2ebd546ed25bff9ed7914f9bced00f8c55d94/numpy-2.5.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:71b39d9f935b6ec0f8753e3e2afb51e3efba6f2e05b68b32a40754d24bcd4a3c", size = 17108994, upload-time = "2026-09-06T16:27:31.946Z" }, { url = "https://files.pythonhosted.org/packages/45/7a/584c5e71f8d378e57cac0b033891ed65c683ef90573ba4854e8c28203db0/numpy-2.5.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:6b05c171afb3aa07adbd20abc00aea86fe375beb0fdb9ef780ec5b7f63bab1c0", size = 18512266, upload-time = "2026-09-06T16:27:35.196Z" }, { url = "https://files.pythonhosted.org/packages/a1/d2/4e1014173aa3c55e6a756e0e567290743a6ab33a288460374d7ef6bcd239/numpy-2.5.3-cp315-cp315t-win32.whl", hash = "sha256:f54660b0eb6b0b9f36e7fe1cdfdff472028dd0d14acd9b9b65098efbad059469", size = 6330292, upload-time = "2026-09-06T16:27:38.149Z" }, { url = "https://files.pythonhosted.org/packages/6c/b0/ff5658a58199b7bcaad87bf260eef6713d9d42cca4e028f935b4fc5fbac6/numpy-2.5.3-cp315-cp315t-win_amd64.whl", hash = "sha256:1aad64d99730d013cfc6debafed22783b4fc5a7f4b8bc744d2d8cf7dcc880551", size = 12884918, upload-time = "2026-09-06T16:27:40.965Z" }, { url = "https://files.pythonhosted.org/packages/fb/0b/b12a2df5d1b774bd9007a6fdff9381145b6223d37f11afc9c37ab0efd9a1/numpy-2.5.3-cp315-cp315t-win_arm64.whl", hash = "sha256:befa1ae5bd6030b3f512b43ff3fa5290bbed6b84411a44244b14adf835f5b89d", size = 10850807, upload-time = "2026-09-06T16:27:43.868Z" }, ] [[package]] name = "packaging" version = "26.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, ] [[package]] name = "pathspec" version = "1.1.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, ] [[package]] name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] [[package]] name = "pillow" version = "12.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, ] [[package]] name = "platformdirs" version = "4.11.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/58/b9/8adc4e1b422b27fd88540ec7bf1f406f77ef393ec070e26fc430e914cde8/platformdirs-4.11.9.tar.gz", hash = "sha256:e2c66a8d384596cd98e3c4aea2d761df7bac95d9d8a2cc3946daa8cdafdaebc1", size = 38345, upload-time = "2026-09-16T13:31:45.259Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f3/94/803ba86705257d7eedddac4b02eb88a7483b1600e9200c1fefc6f1a9a3ff/platformdirs-4.11.9-py3-none-any.whl", hash = "sha256:0a3958f58a9e30321eaef0a424dd0b77cce242886b36b8aa992f9731ef2d59c1", size = 24472, upload-time = "2026-09-16T13:31:44.049Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "pre-commit" version = "4.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, { name = "identify" }, { name = "nodeenv" }, { name = "pyyaml" }, { name = "virtualenv" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/89/1f3e8e1fc3e97de0fa963495832f581f025f29471602a309e48808244292/pre_commit-4.6.2.tar.gz", hash = "sha256:8f5d7bfb021ecdbcd9d49d89847082dd24172ccde534390081a679ad046e2441", size = 198670, upload-time = "2026-08-10T22:07:18.421Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/45/e2/bbb7129c9e7999a6b8ee9cca3b66486c25c423ab5a75f34071798b74ce94/pre_commit-4.6.2-py2.py3-none-any.whl", hash = "sha256:e2dde9a75d3bce11bd3831c26d134df00a2803c1d818be6a0383c3dcda25dc4e", size = 226202, upload-time = "2026-08-10T22:07:16.942Z" }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, ] [[package]] name = "py-cpuinfo2" version = "10.1.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/dc/97/a8b1ddada14c8280a047c0746f95cb05d94a31b1a331cea22bcdc2b2a82d/py_cpuinfo2-10.1.1.tar.gz", hash = "sha256:7861133863663f16e06eca63b12904ef100b5760415e92372dac0162799a4771", size = 100840, upload-time = "2026-03-25T21:49:40.797Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/23/0a/ba69d2dde1ae12ef1d389ea5a216384c5ff6ef7a1e7a48d1e9b6686f6790/py_cpuinfo2-10.1.1-py3-none-any.whl", hash = "sha256:adc53396bfb206e6498d078ec2ab407f85799ecd819584ac36a8f80a2d4d762d", size = 23791, upload-time = "2026-03-25T21:49:39.574Z" }, ] [[package]] name = "pycparser" version = "3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, ] [[package]] name = "pydantic" version = "2.13.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, { name = "typing-extensions" }, { name = "typing-inspection" }, ] sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, ] [[package]] name = "pydantic-core" version = "2.46.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a2/b6/81d2d19ea0be2c03664381b59f65fa72fc7969decedae00bc2c4ad835708/pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f", size = 2074737, upload-time = "2026-08-28T09:57:57.711Z" }, { url = "https://files.pythonhosted.org/packages/0c/18/b70da8300e292df4099684ea11b1958043580d2f50d2dc8bf7e542bdd84a/pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f", size = 1921751, upload-time = "2026-08-28T09:57:59.265Z" }, { url = "https://files.pythonhosted.org/packages/e7/1a/0d590341b6ffa4b4aca83508e6b8db4761aaeacfc15a25ca3815876d4797/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061", size = 1948231, upload-time = "2026-08-28T09:58:00.678Z" }, { url = "https://files.pythonhosted.org/packages/7d/1d/02eb35761c51f2f7b1b042d6ab4cda6600f0c8c88a2243b3f734376201e5/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be", size = 2020708, upload-time = "2026-08-28T09:58:02.267Z" }, { url = "https://files.pythonhosted.org/packages/4a/ea/f86073830e35d508cc8ddf9c3d9e6e6840fcb88d34bf726b0b4710186f27/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a", size = 2194914, upload-time = "2026-08-28T09:58:03.934Z" }, { url = "https://files.pythonhosted.org/packages/bb/d7/fc36240d7791ce90939e51608568c33bfdae26202016f9770c229a487d86/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b", size = 2235622, upload-time = "2026-08-28T09:58:05.516Z" }, { url = "https://files.pythonhosted.org/packages/cf/bc/3fa2d76b83162820a17da7f645b28d1cba99fc8e1e5fc6517067ec450fa1/pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c", size = 2062091, upload-time = "2026-08-28T09:58:07.135Z" }, { url = "https://files.pythonhosted.org/packages/ab/9a/095d557bb492c90cd8a70a6dd048bf793d433d03d86c81c11e912e4cd049/pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee", size = 2089904, upload-time = "2026-08-28T09:58:08.814Z" }, { url = "https://files.pythonhosted.org/packages/24/98/7b76b1ad10a19a617a52aaa1d80e159115af939b095e86f8e756fd52e0df/pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e", size = 2132244, upload-time = "2026-08-28T09:58:10.435Z" }, { url = "https://files.pythonhosted.org/packages/20/32/7d6ca365fadba186a0c8f85de1a701663bce81efd309d9479be58687622f/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2", size = 2143901, upload-time = "2026-08-28T09:58:12.033Z" }, { url = "https://files.pythonhosted.org/packages/f8/09/eb9a6aa57f22fd1541a9c0aa2a1f3aeef3ec65347d33e10a6da2f43e0ee9/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689", size = 2299425, upload-time = "2026-08-28T09:58:13.614Z" }, { url = "https://files.pythonhosted.org/packages/8a/f9/548a5bb9d4ba8cd26e26daf48052236f6b38bb61e7b7241fbc3c995719eb/pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec", size = 2318566, upload-time = "2026-08-28T09:58:15.199Z" }, { url = "https://files.pythonhosted.org/packages/4a/20/06454d18834c02c406c9133f1a3b485305fd9ee984f9636c2f730bef6a9d/pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129", size = 1954258, upload-time = "2026-08-28T09:58:16.813Z" }, { url = "https://files.pythonhosted.org/packages/9e/c2/718b9deb4b72453b5d8c7447a3b14cb77bef36917ef5f514e0948a4096a0/pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c", size = 2041030, upload-time = "2026-08-28T09:58:18.288Z" }, { url = "https://files.pythonhosted.org/packages/67/ea/c1d1a5b72d6e1ff7f377a4d9199f6591f095beb5b409a8a5d89f7238d939/pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8", size = 2009234, upload-time = "2026-08-28T09:58:19.929Z" }, { url = "https://files.pythonhosted.org/packages/82/3f/76358795aa7a8c6d4f36e2cb828ad1c90ee118e1393a9281664f5aade9d4/pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d", size = 2076516, upload-time = "2026-08-28T09:58:21.576Z" }, { url = "https://files.pythonhosted.org/packages/db/50/26b091836076ce4cb2fac264186936acc069e0595772cfd02a563bc4761a/pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e", size = 1922874, upload-time = "2026-08-28T09:58:23.766Z" }, { url = "https://files.pythonhosted.org/packages/09/f0/2a8ce3849e299d44e2d2c196b6082643a3235565a735cb51db7a6261f614/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29", size = 1951772, upload-time = "2026-08-28T09:58:25.435Z" }, { url = "https://files.pythonhosted.org/packages/87/46/ac0dc8bdd9e6048183a14eb127764e7ad9240021c17513074a4711b0e31e/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4", size = 2031832, upload-time = "2026-08-28T09:58:27.102Z" }, { url = "https://files.pythonhosted.org/packages/c4/c2/339de5bef7be36301a2231eaa52e62163742c2281f11b5f4892bc79785cd/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a", size = 2208645, upload-time = "2026-08-28T09:58:28.948Z" }, { url = "https://files.pythonhosted.org/packages/7b/a0/9ff22b797724262da14427abaed4dd1d864a139693fc5e7809114376a716/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62", size = 2265935, upload-time = "2026-08-28T09:58:30.625Z" }, { url = "https://files.pythonhosted.org/packages/c0/a4/eb9409ec0736e50aa70a412f16c204ed149516846912f7e6724d4c73ee53/pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2", size = 2066284, upload-time = "2026-08-28T09:58:32.289Z" }, { url = "https://files.pythonhosted.org/packages/c0/02/7f6156ffc926857f1c37c07d9a388682865a81830ab6a1b637082c25e399/pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869", size = 2105889, upload-time = "2026-08-28T09:58:33.986Z" }, { url = "https://files.pythonhosted.org/packages/92/b1/e781d357ebe09fc929f995700f1b3503e8897f1cece183ecb1300d4d67e9/pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5", size = 2158006, upload-time = "2026-08-28T09:58:35.647Z" }, { url = "https://files.pythonhosted.org/packages/70/0a/644597d84ab400e50609c192120b85c9681c22d3a20461b9060a79be0a7a/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3", size = 2158408, upload-time = "2026-08-28T09:58:37.38Z" }, { url = "https://files.pythonhosted.org/packages/1e/ee/ca3b7b3a4b3769ffe9ce9432a7c9be755de9593a46d3b0d54d0409323e44/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b", size = 2309609, upload-time = "2026-08-28T09:58:39.22Z" }, { url = "https://files.pythonhosted.org/packages/ce/52/39fa1f451486019524ca685020390e7ca351832fd874530ba30c8628e6dc/pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0", size = 2342618, upload-time = "2026-08-28T09:58:40.89Z" }, { url = "https://files.pythonhosted.org/packages/81/5e/468fc630568c61dcef3cd47ad32ffbeed9af643f49208d1ea86ab4f890c4/pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b", size = 1939475, upload-time = "2026-08-28T09:58:42.591Z" }, { url = "https://files.pythonhosted.org/packages/cf/c9/4c19f41b84cf6b622a72fbeed7665b25d47a187d68d47d0d430c07f23268/pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8", size = 2043140, upload-time = "2026-08-28T09:58:44.272Z" }, { url = "https://files.pythonhosted.org/packages/af/dd/0c1a050299147c746e5256db16d645ab5efd4f78c59937d581a0524e74a2/pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084", size = 1997729, upload-time = "2026-08-28T09:58:46.13Z" }, { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, { url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" }, { url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" }, { url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" }, { url = "https://files.pythonhosted.org/packages/08/c3/8ec0e290a9ebaebd64047bf5fda94be835c6b1551b02437e4b76778fbcd7/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c", size = 2026371, upload-time = "2026-08-28T09:59:22.227Z" }, { url = "https://files.pythonhosted.org/packages/01/72/4fd20ad520fb8da0157f95b27a7eb05a72790ef08138e7701ac972c342ea/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21", size = 2202822, upload-time = "2026-08-28T09:59:24.277Z" }, { url = "https://files.pythonhosted.org/packages/31/b0/d16e0771206b29314f0d52198b720be21e8a99ab2bf11e3bc0d7c9cebdff/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f", size = 2262756, upload-time = "2026-08-28T09:59:26.608Z" }, { url = "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", size = 2068352, upload-time = "2026-08-28T09:59:29.044Z" }, { url = "https://files.pythonhosted.org/packages/08/7c/570abb1ad2155348dc754ea91be22e5aaa18eb6d69a6068f7c6f2679a6ed/pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a", size = 2104777, upload-time = "2026-08-28T09:59:30.95Z" }, { url = "https://files.pythonhosted.org/packages/8e/25/5bf74adc65a1ac5b7be3f6cb0bcb5433615c1598a801c19d830d84c98ded/pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821", size = 2156312, upload-time = "2026-08-28T09:59:32.604Z" }, { url = "https://files.pythonhosted.org/packages/90/6a/2ef38830675e050121040618135564ed56b860b45433b02d9b4ebece46f3/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2", size = 2150067, upload-time = "2026-08-28T09:59:34.453Z" }, { url = "https://files.pythonhosted.org/packages/90/ef/a7dbb03a14a64c2a4621f989c615ed9a892535a6cad938fc27079f919d80/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47", size = 2304516, upload-time = "2026-08-28T09:59:36.194Z" }, { url = "https://files.pythonhosted.org/packages/68/f8/6bb4c4b80e8a6fde1904c64a51c62a1d04fcdfa3ea521a66b2ddefa1d885/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a", size = 2335223, upload-time = "2026-08-28T09:59:37.931Z" }, { url = "https://files.pythonhosted.org/packages/2a/80/f46b8c681195190b2c1f1c7c0a81abce60663e987613e09ef64d433dd96b/pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074", size = 1934827, upload-time = "2026-08-28T09:59:39.836Z" }, { url = "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", size = 2042648, upload-time = "2026-08-28T09:59:41.792Z" }, { url = "https://files.pythonhosted.org/packages/69/0c/117c562c7c1babdf44576b72a5e496906506c93690387ecfbca7c729ae2e/pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5", size = 1989652, upload-time = "2026-08-28T09:59:43.702Z" }, { url = "https://files.pythonhosted.org/packages/e8/66/9336ae58f9eb68c41d121894e52c4c89eccb07eb8f602a04ee9c3f37736a/pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7", size = 2065829, upload-time = "2026-08-28T09:59:45.364Z" }, { url = "https://files.pythonhosted.org/packages/c5/02/bc19b47a96c2d3109760711acf22369e56bd7e405ca52f7ade164d2ead57/pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3", size = 1905716, upload-time = "2026-08-28T09:59:47.18Z" }, { url = "https://files.pythonhosted.org/packages/52/a4/70b47c0509923dd98ccfed04fb3e32ea3849c82a0ff2205bb41009b43c00/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f", size = 1934216, upload-time = "2026-08-28T09:59:49.241Z" }, { url = "https://files.pythonhosted.org/packages/52/ab/aa03b65f7bb198585edf806b906c3223ecf1795543e39e23aec4cce27ad2/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7", size = 2010635, upload-time = "2026-08-28T09:59:51.692Z" }, { url = "https://files.pythonhosted.org/packages/3c/8b/0da06343f30b84ec549aafd309c6456223d5dc8bd36af504c573faad561d/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c", size = 2209369, upload-time = "2026-08-28T09:59:53.582Z" }, { url = "https://files.pythonhosted.org/packages/d6/5b/844c4defaa34a3df66eb9257087d121d70c201298b96abdf9f492fc2f1bf/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111", size = 2253238, upload-time = "2026-08-28T09:59:55.484Z" }, { url = "https://files.pythonhosted.org/packages/f4/64/a4e536cb16d7f61a7fd3120b46c577fc7fa7325992f69c4f52bc786d77d8/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829", size = 2065740, upload-time = "2026-08-28T09:59:58.038Z" }, { url = "https://files.pythonhosted.org/packages/5f/75/aaa38c6bc2d085f6605b34eabdc6a8a4e0b2e61fc9c8e6e52b28e97b3125/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa", size = 2087425, upload-time = "2026-08-28T09:59:59.898Z" }, { url = "https://files.pythonhosted.org/packages/55/ae/fcab4cfc39aba3689e1d20c8b5250ad280957022c09af2ed9cd585602a5e/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034", size = 2139306, upload-time = "2026-08-28T10:00:03.057Z" }, { url = "https://files.pythonhosted.org/packages/2d/f4/f1d03a4bc9d9acbc62f4d742b8a319af52f71885079868b2ff8e48a651ee/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184", size = 2144589, upload-time = "2026-08-28T10:00:05.645Z" }, { url = "https://files.pythonhosted.org/packages/83/f3/7a53bb1356de514a4cd295f25b6ac39237895620c0462d2592b76c16e114/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38", size = 2288882, upload-time = "2026-08-28T10:00:07.931Z" }, { url = "https://files.pythonhosted.org/packages/cd/94/5a81583660c175c59d49ffb09f4b3a44debeaf86a19fca664ae1cdd9ee32/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9", size = 2335210, upload-time = "2026-08-28T10:00:10.177Z" }, { url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" }, { url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" }, { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" }, { url = "https://files.pythonhosted.org/packages/af/1e/ecca01fce348f7e8afa9572441ff6f7d1cc70d21e4859f33944d10877e1e/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2", size = 2075342, upload-time = "2026-08-28T10:00:51.353Z" }, { url = "https://files.pythonhosted.org/packages/1f/4c/af80c7a8032dfc897040ad5cb772bebde529a381186499e6e29987f23f8c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c", size = 1907219, upload-time = "2026-08-28T10:00:53.438Z" }, { url = "https://files.pythonhosted.org/packages/be/3e/54d89e2b092e778716bf6153634ef479e955f48c261090be23aa1e0fb0b5/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47", size = 1953393, upload-time = "2026-08-28T10:00:55.58Z" }, { url = "https://files.pythonhosted.org/packages/ea/89/828ee90cda28ce17bdefaa3a6eaf74fe430e113295a10e6126beca559d6c/pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a", size = 2099024, upload-time = "2026-08-28T10:00:57.794Z" }, { url = "https://files.pythonhosted.org/packages/df/dd/053c2e4303f791f3b8f8a14ab0b22008e8eb21d868c0c90b4f9be705b76a/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942", size = 2062540, upload-time = "2026-08-28T10:01:00.318Z" }, { url = "https://files.pythonhosted.org/packages/d7/dd/a18df751a5e37dd51bfad7f68e766999125bebe68c9e1d10a493ad01bd63/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f", size = 1902040, upload-time = "2026-08-28T10:01:02.529Z" }, { url = "https://files.pythonhosted.org/packages/b7/13/01d40f9d07ce8a779fd6e0bd8ad4fba91309500dd67b869e2e219d261a6d/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433", size = 1967479, upload-time = "2026-08-28T10:01:05.004Z" }, { url = "https://files.pythonhosted.org/packages/fa/04/c81d4841331c2178b6fb09ae225425e110ed72d990c9fe556c4ec03d1013/pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c", size = 2111034, upload-time = "2026-08-28T10:01:07.345Z" }, { url = "https://files.pythonhosted.org/packages/20/21/22102e9950b3049526d20e811b95396508377d87651edd2b80d2b3d28659/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f", size = 2071333, upload-time = "2026-08-28T10:01:09.636Z" }, { url = "https://files.pythonhosted.org/packages/d8/18/87aefa427d191e6d3ab1447f1efc1cdcac86af1069239b133e8a0fd7f7c9/pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0", size = 1912713, upload-time = "2026-08-28T10:01:12.285Z" }, { url = "https://files.pythonhosted.org/packages/1f/93/fd89e9ad49b1805ca94d24ce1088b7d305f05c35ffafcedb9819d03588a0/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4", size = 2090926, upload-time = "2026-08-28T10:01:15.19Z" }, { url = "https://files.pythonhosted.org/packages/6f/45/8e59dab6acf8d35f02f0a958980074f31038968bdb2c983fcae9d1efee03/pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25", size = 2131303, upload-time = "2026-08-28T10:01:17.937Z" }, { url = "https://files.pythonhosted.org/packages/d5/a5/e1d4dc5180dd887a9522efc1f8716b8692b7606b1d3273d7862eaf66be44/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6", size = 2145128, upload-time = "2026-08-28T10:01:20.694Z" }, { url = "https://files.pythonhosted.org/packages/c2/d7/ad493864a7fb21c0c4df98f965e2db430cb25a9d7369b5778d5016c09fd9/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e", size = 2294560, upload-time = "2026-08-28T10:01:23.495Z" }, { url = "https://files.pythonhosted.org/packages/02/8e/b41c84c913f29973a268e6c2b5bbf13c95adb9956c126d10da11ba3b2bef/pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda", size = 2317531, upload-time = "2026-08-28T10:01:26.334Z" }, { url = "https://files.pythonhosted.org/packages/db/1d/068464f23075f66a8f1b806935e9cd9363ee446636ea70d2c22ee8659dbf/pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266", size = 2140686, upload-time = "2026-08-28T10:01:28.947Z" }, ] [[package]] name = "pygments" version = "2.21.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, ] [[package]] name = "pymdown-extensions" version = "12.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/7e/53144b512818c75d459523e3a91d9bf7b65cd6a1dfb964fe690adc8b3670/pymdown_extensions-12.0.1.tar.gz", hash = "sha256:88fe2c97fb9153b9f2cc1da59f1d7c7cb74971110daf33cccb2a5514e0f7e970", size = 866904, upload-time = "2026-09-15T23:20:33.187Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8c/30/c866b3ca8ad5cca79a3ee1a55c12d61d3e72381e5eadbfdaceb6006ebc84/pymdown_extensions-12.0.1-py3-none-any.whl", hash = "sha256:15d629e8035892b93d788a8424ccea754d4aa3cec247a64cbfe7b15089c9ad7f", size = 276957, upload-time = "2026-09-15T23:20:31.551Z" }, ] [[package]] name = "pyparsing" version = "3.3.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] [[package]] name = "pyproj" version = "3.7.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.12'", ] dependencies = [ { name = "certifi", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/90/67bd7260b4ea9b8b20b4f58afef6c223ecb3abf368eb4ec5bc2cdef81b49/pyproj-3.7.2.tar.gz", hash = "sha256:39a0cf1ecc7e282d1d30f36594ebd55c9fae1fda8a2622cee5d100430628f88c", size = 226279, upload-time = "2025-08-14T12:05:42.18Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a6/bd/f205552cd1713b08f93b09e39a3ec99edef0b3ebbbca67b486fdf1abe2de/pyproj-3.7.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:2514d61f24c4e0bb9913e2c51487ecdaeca5f8748d8313c933693416ca41d4d5", size = 6227022, upload-time = "2025-08-14T12:03:51.474Z" }, { url = "https://files.pythonhosted.org/packages/75/4c/9a937e659b8b418ab573c6d340d27e68716928953273e0837e7922fcac34/pyproj-3.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8693ca3892d82e70de077701ee76dd13d7bca4ae1c9d1e739d72004df015923a", size = 4625810, upload-time = "2025-08-14T12:03:53.808Z" }, { url = "https://files.pythonhosted.org/packages/c0/7d/a9f41e814dc4d1dc54e95b2ccaf0b3ebe3eb18b1740df05fe334724c3d89/pyproj-3.7.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5e26484d80fea56273ed1555abaea161e9661d81a6c07815d54b8e883d4ceb25", size = 9638694, upload-time = "2025-08-14T12:03:55.669Z" }, { url = "https://files.pythonhosted.org/packages/ad/ab/9bdb4a6216b712a1f9aab1c0fcbee5d3726f34a366f29c3e8c08a78d6b70/pyproj-3.7.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:281cb92847814e8018010c48b4069ff858a30236638631c1a91dd7bfa68f8a8a", size = 9493977, upload-time = "2025-08-14T12:03:57.937Z" }, { url = "https://files.pythonhosted.org/packages/c9/db/2db75b1b6190f1137b1c4e8ef6a22e1c338e46320f6329bfac819143e063/pyproj-3.7.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9c8577f0b7bb09118ec2e57e3babdc977127dd66326d6c5d755c76b063e6d9dc", size = 10841151, upload-time = "2025-08-14T12:04:00.271Z" }, { url = "https://files.pythonhosted.org/packages/89/f7/989643394ba23a286e9b7b3f09981496172f9e0d4512457ffea7dc47ffc7/pyproj-3.7.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a23f59904fac3a5e7364b3aa44d288234af267ca041adb2c2b14a903cd5d3ac5", size = 10751585, upload-time = "2025-08-14T12:04:02.228Z" }, { url = "https://files.pythonhosted.org/packages/53/6d/ad928fe975a6c14a093c92e6a319ca18f479f3336bb353a740bdba335681/pyproj-3.7.2-cp311-cp311-win32.whl", hash = "sha256:f2af4ed34b2cf3e031a2d85b067a3ecbd38df073c567e04b52fa7a0202afde8a", size = 5908533, upload-time = "2025-08-14T12:04:04.821Z" }, { url = "https://files.pythonhosted.org/packages/79/e0/b95584605cec9ed50b7ebaf7975d1c4ddeec5a86b7a20554ed8b60042bd7/pyproj-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:0b7cb633565129677b2a183c4d807c727d1c736fcb0568a12299383056e67433", size = 6320742, upload-time = "2025-08-14T12:04:06.357Z" }, { url = "https://files.pythonhosted.org/packages/b7/4d/536e8f93bca808175c2d0a5ac9fdf69b960d8ab6b14f25030dccb07464d7/pyproj-3.7.2-cp311-cp311-win_arm64.whl", hash = "sha256:38b08d85e3a38e455625b80e9eb9f78027c8e2649a21dec4df1f9c3525460c71", size = 6245772, upload-time = "2025-08-14T12:04:08.365Z" }, { url = "https://files.pythonhosted.org/packages/8d/ab/9893ea9fb066be70ed9074ae543914a618c131ed8dff2da1e08b3a4df4db/pyproj-3.7.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:0a9bb26a6356fb5b033433a6d1b4542158fb71e3c51de49b4c318a1dff3aeaab", size = 6219832, upload-time = "2025-08-14T12:04:10.264Z" }, { url = "https://files.pythonhosted.org/packages/53/78/4c64199146eed7184eb0e85bedec60a4aa8853b6ffe1ab1f3a8b962e70a0/pyproj-3.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:567caa03021178861fad27fabde87500ec6d2ee173dd32f3e2d9871e40eebd68", size = 4620650, upload-time = "2025-08-14T12:04:11.978Z" }, { url = "https://files.pythonhosted.org/packages/b6/ac/14a78d17943898a93ef4f8c6a9d4169911c994e3161e54a7cedeba9d8dde/pyproj-3.7.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c203101d1dc3c038a56cff0447acc515dd29d6e14811406ac539c21eed422b2a", size = 9667087, upload-time = "2025-08-14T12:04:13.964Z" }, { url = "https://files.pythonhosted.org/packages/b8/be/212882c450bba74fc8d7d35cbd57e4af84792f0a56194819d98106b075af/pyproj-3.7.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1edc34266c0c23ced85f95a1ee8b47c9035eae6aca5b6b340327250e8e281630", size = 9552797, upload-time = "2025-08-14T12:04:16.624Z" }, { url = "https://files.pythonhosted.org/packages/ba/c0/c0f25c87b5d2a8686341c53c1792a222a480d6c9caf60311fec12c99ec26/pyproj-3.7.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aa9f26c21bc0e2dc3d224cb1eb4020cf23e76af179a7c66fea49b828611e4260", size = 10837036, upload-time = "2025-08-14T12:04:18.733Z" }, { url = "https://files.pythonhosted.org/packages/5d/37/5cbd6772addde2090c91113332623a86e8c7d583eccb2ad02ea634c4a89f/pyproj-3.7.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9428b318530625cb389b9ddc9c51251e172808a4af79b82809376daaeabe5e9", size = 10775952, upload-time = "2025-08-14T12:04:20.709Z" }, { url = "https://files.pythonhosted.org/packages/69/a1/dc250e3cf83eb4b3b9a2cf86fdb5e25288bd40037ae449695550f9e96b2f/pyproj-3.7.2-cp312-cp312-win32.whl", hash = "sha256:b3d99ed57d319da042f175f4554fc7038aa4bcecc4ac89e217e350346b742c9d", size = 5898872, upload-time = "2025-08-14T12:04:22.485Z" }, { url = "https://files.pythonhosted.org/packages/4a/a6/6fe724b72b70f2b00152d77282e14964d60ab092ec225e67c196c9b463e5/pyproj-3.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:11614a054cd86a2ed968a657d00987a86eeb91fdcbd9ad3310478685dc14a128", size = 6312176, upload-time = "2025-08-14T12:04:24.736Z" }, { url = "https://files.pythonhosted.org/packages/5d/68/915cc32c02a91e76d02c8f55d5a138d6ef9e47a0d96d259df98f4842e558/pyproj-3.7.2-cp312-cp312-win_arm64.whl", hash = "sha256:509a146d1398bafe4f53273398c3bb0b4732535065fa995270e52a9d3676bca3", size = 6233452, upload-time = "2025-08-14T12:04:27.287Z" }, { url = "https://files.pythonhosted.org/packages/be/14/faf1b90d267cea68d7e70662e7f88cefdb1bc890bd596c74b959e0517a72/pyproj-3.7.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:19466e529b1b15eeefdf8ff26b06fa745856c044f2f77bf0edbae94078c1dfa1", size = 6214580, upload-time = "2025-08-14T12:04:28.804Z" }, { url = "https://files.pythonhosted.org/packages/35/48/da9a45b184d375f62667f62eba0ca68569b0bd980a0bb7ffcc1d50440520/pyproj-3.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:c79b9b84c4a626c5dc324c0d666be0bfcebd99f7538d66e8898c2444221b3da7", size = 4615388, upload-time = "2025-08-14T12:04:30.553Z" }, { url = "https://files.pythonhosted.org/packages/5e/e7/d2b459a4a64bca328b712c1b544e109df88e5c800f7c143cfbc404d39bfb/pyproj-3.7.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ceecf374cacca317bc09e165db38ac548ee3cad07c3609442bd70311c59c21aa", size = 9628455, upload-time = "2025-08-14T12:04:32.435Z" }, { url = "https://files.pythonhosted.org/packages/f8/85/c2b1706e51942de19076eff082f8495e57d5151364e78b5bef4af4a1d94a/pyproj-3.7.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5141a538ffdbe4bfd157421828bb2e07123a90a7a2d6f30fa1462abcfb5ce681", size = 9514269, upload-time = "2025-08-14T12:04:34.599Z" }, { url = "https://files.pythonhosted.org/packages/34/38/07a9b89ae7467872f9a476883a5bad9e4f4d1219d31060f0f2b282276cbe/pyproj-3.7.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f000841e98ea99acbb7b8ca168d67773b0191de95187228a16110245c5d954d5", size = 10808437, upload-time = "2025-08-14T12:04:36.485Z" }, { url = "https://files.pythonhosted.org/packages/12/56/fda1daeabbd39dec5b07f67233d09f31facb762587b498e6fc4572be9837/pyproj-3.7.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8115faf2597f281a42ab608ceac346b4eb1383d3b45ab474fd37341c4bf82a67", size = 10745540, upload-time = "2025-08-14T12:04:38.568Z" }, { url = "https://files.pythonhosted.org/packages/0d/90/c793182cbba65a39a11db2ac6b479fe76c59e6509ae75e5744c344a0da9d/pyproj-3.7.2-cp313-cp313-win32.whl", hash = "sha256:f18c0579dd6be00b970cb1a6719197fceecc407515bab37da0066f0184aafdf3", size = 5896506, upload-time = "2025-08-14T12:04:41.059Z" }, { url = "https://files.pythonhosted.org/packages/be/0f/747974129cf0d800906f81cd25efd098c96509026e454d4b66868779ab04/pyproj-3.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:bb41c29d5f60854b1075853fe80c58950b398d4ebb404eb532536ac8d2834ed7", size = 6310195, upload-time = "2025-08-14T12:04:42.974Z" }, { url = "https://files.pythonhosted.org/packages/82/64/fc7598a53172c4931ec6edf5228280663063150625d3f6423b4c20f9daff/pyproj-3.7.2-cp313-cp313-win_arm64.whl", hash = "sha256:2b617d573be4118c11cd96b8891a0b7f65778fa7733ed8ecdb297a447d439100", size = 6230748, upload-time = "2025-08-14T12:04:44.491Z" }, { url = "https://files.pythonhosted.org/packages/aa/f0/611dd5cddb0d277f94b7af12981f56e1441bf8d22695065d4f0df5218498/pyproj-3.7.2-cp313-cp313t-macosx_13_0_x86_64.whl", hash = "sha256:d27b48f0e81beeaa2b4d60c516c3a1cfbb0c7ff6ef71256d8e9c07792f735279", size = 6241729, upload-time = "2025-08-14T12:04:46.274Z" }, { url = "https://files.pythonhosted.org/packages/15/93/40bd4a6c523ff9965e480870611aed7eda5aa2c6128c6537345a2b77b542/pyproj-3.7.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:55a3610d75023c7b1c6e583e48ef8f62918e85a2ae81300569d9f104d6684bb6", size = 4652497, upload-time = "2025-08-14T12:04:48.203Z" }, { url = "https://files.pythonhosted.org/packages/1b/ae/7150ead53c117880b35e0d37960d3138fe640a235feb9605cb9386f50bb0/pyproj-3.7.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8d7349182fa622696787cc9e195508d2a41a64765da9b8a6bee846702b9e6220", size = 9942610, upload-time = "2025-08-14T12:04:49.652Z" }, { url = "https://files.pythonhosted.org/packages/d8/17/7a4a7eafecf2b46ab64e5c08176c20ceb5844b503eaa551bf12ccac77322/pyproj-3.7.2-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:d230b186eb876ed4f29a7c5ee310144c3a0e44e89e55f65fb3607e13f6db337c", size = 9692390, upload-time = "2025-08-14T12:04:51.731Z" }, { url = "https://files.pythonhosted.org/packages/c3/55/ae18f040f6410f0ea547a21ada7ef3e26e6c82befa125b303b02759c0e9d/pyproj-3.7.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:237499c7862c578d0369e2b8ac56eec550e391a025ff70e2af8417139dabb41c", size = 11047596, upload-time = "2025-08-14T12:04:53.748Z" }, { url = "https://files.pythonhosted.org/packages/e6/2e/d3fff4d2909473f26ae799f9dda04caa322c417a51ff3b25763f7d03b233/pyproj-3.7.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8c225f5978abd506fd9a78eaaf794435e823c9156091cabaab5374efb29d7f69", size = 10896975, upload-time = "2025-08-14T12:04:55.875Z" }, { url = "https://files.pythonhosted.org/packages/f2/bc/8fc7d3963d87057b7b51ebe68c1e7c51c23129eee5072ba6b86558544a46/pyproj-3.7.2-cp313-cp313t-win32.whl", hash = "sha256:2da731876d27639ff9d2d81c151f6ab90a1546455fabd93368e753047be344a2", size = 5953057, upload-time = "2025-08-14T12:04:58.466Z" }, { url = "https://files.pythonhosted.org/packages/cc/27/ea9809966cc47d2d51e6d5ae631ea895f7c7c7b9b3c29718f900a8f7d197/pyproj-3.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f54d91ae18dd23b6c0ab48126d446820e725419da10617d86a1b69ada6d881d3", size = 6375414, upload-time = "2025-08-14T12:04:59.861Z" }, { url = "https://files.pythonhosted.org/packages/5b/f8/1ef0129fba9a555c658e22af68989f35e7ba7b9136f25758809efec0cd6e/pyproj-3.7.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fc52ba896cfc3214dc9f9ca3c0677a623e8fdd096b257c14a31e719d21ff3fdd", size = 6262501, upload-time = "2025-08-14T12:05:01.39Z" }, { url = "https://files.pythonhosted.org/packages/42/17/c2b050d3f5b71b6edd0d96ae16c990fdc42a5f1366464a5c2772146de33a/pyproj-3.7.2-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:2aaa328605ace41db050d06bac1adc11f01b71fe95c18661497763116c3a0f02", size = 6214541, upload-time = "2025-08-14T12:05:03.166Z" }, { url = "https://files.pythonhosted.org/packages/03/68/68ada9c8aea96ded09a66cfd9bf87aa6db8c2edebe93f5bf9b66b0143fbc/pyproj-3.7.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:35dccbce8201313c596a970fde90e33605248b66272595c061b511c8100ccc08", size = 4617456, upload-time = "2025-08-14T12:05:04.563Z" }, { url = "https://files.pythonhosted.org/packages/81/e4/4c50ceca7d0e937977866b02cb64e6ccf4df979a5871e521f9e255df6073/pyproj-3.7.2-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:25b0b7cb0042444c29a164b993c45c1b8013d6c48baa61dc1160d834a277e83b", size = 9615590, upload-time = "2025-08-14T12:05:06.094Z" }, { url = "https://files.pythonhosted.org/packages/05/1e/ada6fb15a1d75b5bd9b554355a69a798c55a7dcc93b8d41596265c1772e3/pyproj-3.7.2-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:85def3a6388e9ba51f964619aa002a9d2098e77c6454ff47773bb68871024281", size = 9474960, upload-time = "2025-08-14T12:05:07.973Z" }, { url = "https://files.pythonhosted.org/packages/51/07/9d48ad0a8db36e16f842f2c8a694c1d9d7dcf9137264846bef77585a71f3/pyproj-3.7.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b1bccefec3875ab81eabf49059e2b2ea77362c178b66fd3528c3e4df242f1516", size = 10799478, upload-time = "2025-08-14T12:05:14.102Z" }, { url = "https://files.pythonhosted.org/packages/85/cf/2f812b529079f72f51ff2d6456b7fef06c01735e5cfd62d54ffb2b548028/pyproj-3.7.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d5371ca114d6990b675247355a801925814eca53e6c4b2f1b5c0a956336ee36e", size = 10710030, upload-time = "2025-08-14T12:05:16.317Z" }, { url = "https://files.pythonhosted.org/packages/99/9b/4626a19e1f03eba4c0e77b91a6cf0f73aa9cb5d51a22ee385c22812bcc2c/pyproj-3.7.2-cp314-cp314-win32.whl", hash = "sha256:77f066626030f41be543274f5ac79f2a511fe89860ecd0914f22131b40a0ec25", size = 5991181, upload-time = "2025-08-14T12:05:19.492Z" }, { url = "https://files.pythonhosted.org/packages/04/b2/5a6610554306a83a563080c2cf2c57565563eadd280e15388efa00fb5b33/pyproj-3.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:5a964da1696b8522806f4276ab04ccfff8f9eb95133a92a25900697609d40112", size = 6434721, upload-time = "2025-08-14T12:05:21.022Z" }, { url = "https://files.pythonhosted.org/packages/ae/ce/6c910ea2e1c74ef673c5d48c482564b8a7824a44c4e35cca2e765b68cfcc/pyproj-3.7.2-cp314-cp314-win_arm64.whl", hash = "sha256:e258ab4dbd3cf627809067c0ba8f9884ea76c8e5999d039fb37a1619c6c3e1f6", size = 6363821, upload-time = "2025-08-14T12:05:22.627Z" }, { url = "https://files.pythonhosted.org/packages/e4/e4/5532f6f7491812ba782a2177fe9de73fd8e2912b59f46a1d056b84b9b8f2/pyproj-3.7.2-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:bbbac2f930c6d266f70ec75df35ef851d96fdb3701c674f42fd23a9314573b37", size = 6241773, upload-time = "2025-08-14T12:05:24.577Z" }, { url = "https://files.pythonhosted.org/packages/20/1f/0938c3f2bbbef1789132d1726d9b0e662f10cfc22522743937f421ad664e/pyproj-3.7.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:b7544e0a3d6339dc9151e9c8f3ea62a936ab7cc446a806ec448bbe86aebb979b", size = 4652537, upload-time = "2025-08-14T12:05:26.391Z" }, { url = "https://files.pythonhosted.org/packages/c7/a8/488b1ed47d25972f33874f91f09ca8f2227902f05f63a2b80dc73e7b1c97/pyproj-3.7.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f7f5133dca4c703e8acadf6f30bc567d39a42c6af321e7f81975c2518f3ed357", size = 9940864, upload-time = "2025-08-14T12:05:27.985Z" }, { url = "https://files.pythonhosted.org/packages/c7/cc/7f4c895d0cb98e47b6a85a6d79eaca03eb266129eed2f845125c09cf31ff/pyproj-3.7.2-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:5aff3343038d7426aa5076f07feb88065f50e0502d1b0d7c22ddfdd2c75a3f81", size = 9688868, upload-time = "2025-08-14T12:05:30.425Z" }, { url = "https://files.pythonhosted.org/packages/b2/b7/c7e306b8bb0f071d9825b753ee4920f066c40fbfcce9372c4f3cfb2fc4ed/pyproj-3.7.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b0552178c61f2ac1c820d087e8ba6e62b29442debddbb09d51c4bf8acc84d888", size = 11045910, upload-time = "2025-08-14T12:05:32.507Z" }, { url = "https://files.pythonhosted.org/packages/42/fb/538a4d2df695980e2dde5c04d965fbdd1fe8c20a3194dc4aaa3952a4d1be/pyproj-3.7.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:47d87db2d2c436c5fd0409b34d70bb6cdb875cca2ebe7a9d1c442367b0ab8d59", size = 10895724, upload-time = "2025-08-14T12:05:35.465Z" }, { url = "https://files.pythonhosted.org/packages/e8/8b/a3f0618b03957de9db5489a04558a8826f43906628bb0b766033aa3b5548/pyproj-3.7.2-cp314-cp314t-win32.whl", hash = "sha256:c9b6f1d8ad3e80a0ee0903a778b6ece7dca1d1d40f6d114ae01bc8ddbad971aa", size = 6056848, upload-time = "2025-08-14T12:05:37.553Z" }, { url = "https://files.pythonhosted.org/packages/bc/56/413240dd5149dd3291eda55aa55a659da4431244a2fd1319d0ae89407cfb/pyproj-3.7.2-cp314-cp314t-win_amd64.whl", hash = "sha256:1914e29e27933ba6f9822663ee0600f169014a2859f851c054c88cf5ea8a333c", size = 6517676, upload-time = "2025-08-14T12:05:39.126Z" }, { url = "https://files.pythonhosted.org/packages/15/73/a7141a1a0559bf1a7aa42a11c879ceb19f02f5c6c371c6d57fd86cefd4d1/pyproj-3.7.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d9d25bae416a24397e0d85739f84d323b55f6511e45a522dd7d7eae70d10c7e4", size = 6391844, upload-time = "2025-08-14T12:05:40.745Z" }, ] [[package]] name = "pyproj" version = "3.8.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", ] dependencies = [ { name = "certifi", marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c8/29/6598570c90cbfc84ddefc3ccac4aa412bf51a527d72c74cc4fe64a5e6f24/pyproj-3.8.0.tar.gz", hash = "sha256:efa59725bba68bf97fa808b61302df32934acdceb6a5c92a8dd0e71dc266a876", size = 242018, upload-time = "2026-09-05T20:05:09.353Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/bb/c0/e2cdf9555f4feb6a17717de08527b0358ecccca7892ac78b17f5a04903cb/pyproj-3.8.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8606ccbc110ce2e8cbe4c9ba6c3f24cd73f603795ac0fce1ceb8fc27a9bb786e", size = 4990712, upload-time = "2026-09-05T20:03:10.928Z" }, { url = "https://files.pythonhosted.org/packages/4e/99/4ec34c75e06d18bd4b8e08189ef8a76170bab339a9bee7d6eaeed075d444/pyproj-3.8.0-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:2d4c49e27d404a95d244196fdadb6b0b0ba3c3cbb43a8d2a357fc579a36b7835", size = 6098819, upload-time = "2026-09-05T20:03:13.066Z" }, { url = "https://files.pythonhosted.org/packages/28/c3/a819a14ff040ad441f09589fff28cca88c82cb8537818316c798f2ddafb2/pyproj-3.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d8e00ccd9195d9dbb968d490ae9e51c3a59378665506c05e36bfdb6493a38a69", size = 10120591, upload-time = "2026-09-05T20:03:15.214Z" }, { url = "https://files.pythonhosted.org/packages/5f/ed/035354de8fbc1c1350f5b7f66361995f187d89675622eb63016bf7261dd5/pyproj-3.8.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6b34cec6bdd66b721980c003cc2a0fce0cab7949444ad037fc2a7ecb6f3b996c", size = 10037552, upload-time = "2026-09-05T20:03:17.43Z" }, { url = "https://files.pythonhosted.org/packages/76/62/04809135418fb84402acf2a1d37beaeb770d66d78061962cbf0d459a0b07/pyproj-3.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:859caa91bd9a1c614bac7de110f3a62f715e6c5a4fe9140c3fd6a0c5034e390d", size = 11498786, upload-time = "2026-09-05T20:03:20.178Z" }, { url = "https://files.pythonhosted.org/packages/55/ce/7e29ca3df78c59b413ab20d2d2dfb1ef36329f051597992eaa65e4306ac0/pyproj-3.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e6e21972a28e65fdec4b794b6298206516853e03fc9ac40c14271c5dce6b0d32", size = 11497184, upload-time = "2026-09-05T20:03:22.591Z" }, { url = "https://files.pythonhosted.org/packages/9a/8c/010481b3629eb70f8c8c433d706207b1ec91fdb76fc10cf4ec1d92f51bdd/pyproj-3.8.0-cp312-cp312-win32.whl", hash = "sha256:7914e83760284e4d8d3b6b2a6845c21270a07f214bfd89344d45f9ab63e1b4b5", size = 6295859, upload-time = "2026-09-05T20:03:24.738Z" }, { url = "https://files.pythonhosted.org/packages/b7/d7/2c861a429581577a441e03020d27274812d7969748f5951d972f6e34597f/pyproj-3.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:0556ce011e1530aea2084a12e39dc9c6ccd25a16c1db5457f39bf83161e7c301", size = 6714045, upload-time = "2026-09-05T20:03:26.863Z" }, { url = "https://files.pythonhosted.org/packages/09/bb/2d1ff197922cfe106f204041503fb8039d2cee9c34c2a61a0b65f4121b4c/pyproj-3.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:a792112106471f97c3f74b51639068388c9ad0605cc1ca100f11fd0bf47a004e", size = 6663720, upload-time = "2026-09-05T20:03:28.625Z" }, { url = "https://files.pythonhosted.org/packages/3a/6c/50e8846bda4502d2967c78a106e3565f0e3008965066e65a90cfa295c673/pyproj-3.8.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d7bd22f1d4f058db72b5f09d0fcc9a2346178ccf965139ca483edaa5c3a7f2d3", size = 4987064, upload-time = "2026-09-05T20:03:30.544Z" }, { url = "https://files.pythonhosted.org/packages/56/71/108a8a1fe4dfd6d0bfea14835d834d2a10a89c82b1807084f34f480c5599/pyproj-3.8.0-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:c90bf55c42d3d5475958196bf7331b9aa87e1505af49570f126739ad7e808c1e", size = 6096593, upload-time = "2026-09-05T20:03:32.128Z" }, { url = "https://files.pythonhosted.org/packages/6d/c4/e9213bb303205912bce7d0681c39da654f9e0a9585cc227b1ee142b5156c/pyproj-3.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8e01abceec40fd8326637cc207a4da089a3c3f61e64001cbd86951c746c54085", size = 10051120, upload-time = "2026-09-05T20:03:34.006Z" }, { url = "https://files.pythonhosted.org/packages/c9/80/3cdcc2e6942eec2774c8c27655705329e0d76b1eea849136d27dd75aea38/pyproj-3.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:01a1601da9c6ad247a12d304f96f9e0b4ddd00b307636341c136442a70c5e218", size = 9974666, upload-time = "2026-09-05T20:03:36.226Z" }, { url = "https://files.pythonhosted.org/packages/99/c4/f890986aa51e846de464e5054d46ea5443c7cf6fa677631b0e2aa0659dc4/pyproj-3.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efefc85d3f262d4e5b43d0ffc4ea30e89881ed21feb281b1d1b1294423411ac", size = 11437839, upload-time = "2026-09-05T20:03:38.752Z" }, { url = "https://files.pythonhosted.org/packages/c6/1e/e720a2d83424181be89ea5201c1f38c1ea8c73fdfae54e549bb44a14ace1/pyproj-3.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d7f3526031ba810922b15eeab446667f02af4e78de49141e7f0d4a3c7e10ce1", size = 11436240, upload-time = "2026-09-05T20:03:41.128Z" }, { url = "https://files.pythonhosted.org/packages/9b/0a/8cf66c2a355e2af80ce1dd41386ef2c9f6986c16893b5251e437a03cc5e3/pyproj-3.8.0-cp313-cp313-win32.whl", hash = "sha256:efe9f067215397d719df759083dda09b7012de99439003b12dff5109b339771d", size = 6293886, upload-time = "2026-09-05T20:03:43.392Z" }, { url = "https://files.pythonhosted.org/packages/b7/70/c5477f4bcc1e1dfeb53ba082f8102467a5675f66ffc21fce1f2564c5ce5d/pyproj-3.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:d7b542e249eb593c1af737b7124648868383b69744ab6a1a0a2ffd0113c997f4", size = 6710283, upload-time = "2026-09-05T20:03:45.185Z" }, { url = "https://files.pythonhosted.org/packages/99/c5/986fc93c7569e82f21dc2e68cf3603843a57a9837e40f48651a69b4bd27f/pyproj-3.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:b761da280804bb02574c3d950d5e56c47e2aec782d8a3e6714c9c10645cfd020", size = 6661749, upload-time = "2026-09-05T20:03:46.976Z" }, { url = "https://files.pythonhosted.org/packages/1f/f0/9eb71bd1a38680e0bed2dafc7bb86893944c389fc4d1e4861411f9bc00a3/pyproj-3.8.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:ad96cf05cfea67e54c16b2119b29ea60ba3b3562643ed3e8a0ce0ecc55efb50e", size = 4991052, upload-time = "2026-09-05T20:03:49.004Z" }, { url = "https://files.pythonhosted.org/packages/fa/be/9c9839d8a95b57d6fea342802073886ce58a64b7f6e8f8d58054f2c245a8/pyproj-3.8.0-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:45d3abdf17a26396f86d353b957323d53e5fc9d9558bed311ae3b1bf6665448d", size = 6098992, upload-time = "2026-09-05T20:03:50.961Z" }, { url = "https://files.pythonhosted.org/packages/81/f5/3dd3d75c124a12a9fb69f607a8c9d3af15439c78d57f0dc8d30edac3342e/pyproj-3.8.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b3ba65286a1ea401ca51fd35f2bd375f26fd29d517d5ee980159f9f739b2109", size = 10047009, upload-time = "2026-09-05T20:03:52.921Z" }, { url = "https://files.pythonhosted.org/packages/15/7e/ccee7d6b307bb635b47dbd96eb3471c3a7d6053b8f903723756f8a3ba00a/pyproj-3.8.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:8cff207c2a92235f79bb2caab29790e1743776e02331143bc5de4224bd695911", size = 9942031, upload-time = "2026-09-05T20:03:55.327Z" }, { url = "https://files.pythonhosted.org/packages/2b/1d/48a2f7d3242da15a75f6ef3ec33ebb250c4218735ac1ca0144e8fef7274c/pyproj-3.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c9a4e37ce375a87a407e8771475680b757903be59cd41b29e60f90bd56fa6b65", size = 11438119, upload-time = "2026-09-05T20:03:57.875Z" }, { url = "https://files.pythonhosted.org/packages/c6/f7/4118e918180a6edc9267c2d7635167f96bd3c7fa634442b92cb7210a8298/pyproj-3.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ba53cff2c6e768f1b84844ff621291c5ab89ac8875bd8036ab6065aaf58cdbd9", size = 11408758, upload-time = "2026-09-05T20:04:00.587Z" }, { url = "https://files.pythonhosted.org/packages/12/80/7b2aa0703cfd676a8c8545286cc58ea62ca647c60059c185f0ba484a6a92/pyproj-3.8.0-cp314-cp314-win32.whl", hash = "sha256:dba62da116d92a724723b6e206d792993486458369f65db2381f43564d0d2984", size = 6405456, upload-time = "2026-09-05T20:04:02.92Z" }, { url = "https://files.pythonhosted.org/packages/f9/26/058eaa656d4e4c43a2528b51a39f6d4b3082e6eb38731ddab4088a744bc1/pyproj-3.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:653b49e2d5aa87c22c1c32520700ed8f394583a0174a6e69ceb280bdbee1b4e6", size = 6856493, upload-time = "2026-09-05T20:04:05.836Z" }, { url = "https://files.pythonhosted.org/packages/a5/41/8c7c837c863611745e4ad6d30ef2f64838ac7dd77532934120abb4e280f4/pyproj-3.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:c211c35bd8bbf6693fd2787bf8cb15bbac6fbdbad4f6495e9baf53e84923b1a8", size = 6815331, upload-time = "2026-09-05T20:04:08.149Z" }, { url = "https://files.pythonhosted.org/packages/29/2a/c187159cdd3c0d77a47008b67848433c7663f6f330fdda31d33994525ba6/pyproj-3.8.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e2129d03506414ff22fa4bc2541100ce3bfd9b6d1d9af805e77631aae04b866b", size = 5034204, upload-time = "2026-09-05T20:04:09.811Z" }, { url = "https://files.pythonhosted.org/packages/5a/3a/33a116141601104596f8d13fb8475124fffc0b79eba7dea607eed7d479ad/pyproj-3.8.0-cp314-cp314t-macosx_15_0_x86_64.whl", hash = "sha256:1271c631c28c1d646c1e0b890bd691d1c4b736f9745a9d8a00f750fefd77de9c", size = 6124713, upload-time = "2026-09-05T20:04:11.517Z" }, { url = "https://files.pythonhosted.org/packages/d4/42/c95c4a06f59271be31b893ddc9b55e3a2c0a577ab6a1204bd4047a3a2898/pyproj-3.8.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a510721719b9e3f5964ad8235e3530bdd82a38093266ad037ee08f71fb9995e9", size = 10326257, upload-time = "2026-09-05T20:04:13.682Z" }, { url = "https://files.pythonhosted.org/packages/2e/ef/a23a52a64fd8669a3bb65e6af754f60b3622f30cfd86092007baec3afcdd/pyproj-3.8.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:faa68c0996bdd3fd997d86c676e758b72a96209ab14b7c5e8b8dcf3b23f85881", size = 10127655, upload-time = "2026-09-05T20:04:16.52Z" }, { url = "https://files.pythonhosted.org/packages/de/d5/7ce0841f952c44daff8673636e112e07320dcf19d34cb02b830619eafcfd/pyproj-3.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fe26eb69e78f8b8d30ee67a6a6cfc172dd6085bc2c164a7143568138cb3a5a39", size = 11645798, upload-time = "2026-09-05T20:04:19.251Z" }, { url = "https://files.pythonhosted.org/packages/e7/23/f921f08d883431d69486e18c127a4b5ad5d4d47ebc530e89ec49faa9e962/pyproj-3.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2da8c0be5660e4f261bf1e63c1d51a8c503947af1c0a330e15e5cddec7ef1e5c", size = 11569070, upload-time = "2026-09-05T20:04:22.142Z" }, { url = "https://files.pythonhosted.org/packages/ba/b1/e1a20545949c2dc13c6dfc80593f07c1ba32eb6d5f7134732eb1306c5540/pyproj-3.8.0-cp314-cp314t-win32.whl", hash = "sha256:cb38a247201b26be0a2513262e0014847fba6a28400a921d26f6d23db924e345", size = 6475514, upload-time = "2026-09-05T20:04:24.428Z" }, { url = "https://files.pythonhosted.org/packages/af/46/b3def124148728753a60e8ce3123aed8fec135fd050304c8aa9917aeeeae/pyproj-3.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:cd047cfb04e451b95ff8b91f824e641a54944fbf64dfef7946e4e8bad6f3f752", size = 6946924, upload-time = "2026-09-05T20:04:26.276Z" }, { url = "https://files.pythonhosted.org/packages/66/24/c6b0cd6cb625ebc07aeea9bccca5802d9685ee178e9da8c03baadc035f2e/pyproj-3.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:a02db72ac71f36d4da337e43e98f59ec216613d1bbc2aa1543a9488f3a2a17cc", size = 6847919, upload-time = "2026-09-05T20:04:28.301Z" }, { url = "https://files.pythonhosted.org/packages/51/00/2c47781ba80bfbeec612815eee45f7b08c4727d4da4d7853981338ff38d1/pyproj-3.8.0-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:54750d95c7aa1cbe78ec7be522ceef9b82b8f6f185d26ca413995a953bf8f1e8", size = 4990032, upload-time = "2026-09-05T20:04:30.104Z" }, { url = "https://files.pythonhosted.org/packages/ba/5a/d8fb1ceb8044bcacfbe1af15169c5674748228c6f6aa8d036399ecfe856f/pyproj-3.8.0-cp315-cp315-macosx_15_0_x86_64.whl", hash = "sha256:dd5bc46f443466cf18418290ef6b69b604b706b24adf84f2ea1d32e58a2f7209", size = 6097707, upload-time = "2026-09-05T20:04:32.346Z" }, { url = "https://files.pythonhosted.org/packages/a2/24/0a5d3900c001f23d220ae4babd375f17667a505981be573c270c9952bb8f/pyproj-3.8.0-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:f6e7aa6b2da0c7ae6b6185cb9769bf2f941c5f9cd0c246e98e04fc6751621eac", size = 10052422, upload-time = "2026-09-05T20:04:34.365Z" }, { url = "https://files.pythonhosted.org/packages/81/68/3cdb0bc8eb5e30e21e2fadbf090c2a92cb92b92175fe9b76d2c74351cc6f/pyproj-3.8.0-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:0fb11c0d6a7caa396275012a9bda461ddf2d209cf6edfe53c477fb9c71778672", size = 9950482, upload-time = "2026-09-05T20:04:36.814Z" }, { url = "https://files.pythonhosted.org/packages/b1/b7/d08c09c7d10aacd7705ef71b8fa8e0aed5b625b3f410038d7a198a81fd48/pyproj-3.8.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:ea85d85e71d03d9b26d3bab78384226ebcfa71ac61bc25fcca5f50a144003575", size = 11443699, upload-time = "2026-09-05T20:04:39.324Z" }, { url = "https://files.pythonhosted.org/packages/84/12/c24538a68b5d8ec33e1a2fe4d1dc309108bcfbd9991e976e1a8933063500/pyproj-3.8.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:ba88a9b5bfb39a141361e6ccc2a06136383ea2757fbfe3e6df2dd1133ad55304", size = 11410580, upload-time = "2026-09-05T20:04:41.739Z" }, { url = "https://files.pythonhosted.org/packages/55/13/5bbb11d7d84d4d90b7a5c32c7b48dfaf49a00b04cc1572a92a68e06ae80f/pyproj-3.8.0-cp315-cp315-win32.whl", hash = "sha256:d3a37e54316ebb90f5740aed4728f43cb563109dd4ef610d0a1bc7238666d2a2", size = 6405053, upload-time = "2026-09-05T20:04:43.921Z" }, { url = "https://files.pythonhosted.org/packages/de/f3/93daa94374eae77a188558cb20b159645eae4fb812fcadd066fc4935d018/pyproj-3.8.0-cp315-cp315-win_amd64.whl", hash = "sha256:d752eaaae639719abdb4d357008b4311c0931977f4ea0f019e79e4176ab243a7", size = 6856131, upload-time = "2026-09-05T20:04:45.619Z" }, { url = "https://files.pythonhosted.org/packages/78/ce/69d83ccaf270916392e4625fad611e0a72a8fca8287db015f67787c193a5/pyproj-3.8.0-cp315-cp315-win_arm64.whl", hash = "sha256:dde9f238bb08f961c040ce7c6202ad5b841b508ece76eacfd8e18bc202778de7", size = 6815088, upload-time = "2026-09-05T20:04:47.339Z" }, { url = "https://files.pythonhosted.org/packages/c2/f7/8efd72b1c73377fa41bd161b20a257b33a8497a0fcc1d2073c743622717c/pyproj-3.8.0-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:d31e9ddbd0ffcb65fcd902ab726b26741c9a8e8b90b60844596fd5b67030b39c", size = 5028580, upload-time = "2026-09-05T20:04:49.337Z" }, { url = "https://files.pythonhosted.org/packages/12/17/9785c98b37e99fe2d67118198b9c379c0883d4b215b1dd1594cd98dc12c7/pyproj-3.8.0-cp315-cp315t-macosx_15_0_x86_64.whl", hash = "sha256:19db3f429013d20d31cfc56b2db44246fe5c33514b320eaef09f71f1762836bb", size = 6118988, upload-time = "2026-09-05T20:04:51.566Z" }, { url = "https://files.pythonhosted.org/packages/eb/d2/ecfbd0c96dbf1370c4f8931dcee451620e08eb77c1f288b262ee2d962217/pyproj-3.8.0-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:f0540dea10339be8bb9f90c95685607b262547c53fa7645eef010965b80c4a90", size = 10316986, upload-time = "2026-09-05T20:04:53.498Z" }, { url = "https://files.pythonhosted.org/packages/f5/c8/6783f31b178506a8faf55eb4e2f0007c281251a0303d59aa0c9ce9a85a80/pyproj-3.8.0-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:1074ab4aac836cb0e211fcf0e36dda7d51126c7ce15062ed9007164c6ae93183", size = 10128479, upload-time = "2026-09-05T20:04:56.441Z" }, { url = "https://files.pythonhosted.org/packages/fc/03/212cb8445d84d20bca10b9c02516e99793a9b3d645e30892ca343499e9be/pyproj-3.8.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c6da4fedc9b86970cca828b871b3fcbf8f9ad2da353b0669445fd8c03c89a9f7", size = 11641773, upload-time = "2026-09-05T20:04:59.129Z" }, { url = "https://files.pythonhosted.org/packages/5c/fe/7a390eeb54cf3294d23dd6b03435485b4b28e1e6ca9217ce1e0c1941fe1e/pyproj-3.8.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:79e222f6f8486d0af3ebc5544edecebf396492e38f46500f668c6c389a20e4df", size = 11562250, upload-time = "2026-09-05T20:05:01.817Z" }, { url = "https://files.pythonhosted.org/packages/ed/7a/faad58c948947b217fcf06f80d308fff27bab5730ad6c9cd4c35bcf8bc90/pyproj-3.8.0-cp315-cp315t-win32.whl", hash = "sha256:0ff22ad49d1f59e18a57384926aabcb0ee8bbe9213e5abe375fd18b1b6ace194", size = 6471511, upload-time = "2026-09-05T20:05:04.113Z" }, { url = "https://files.pythonhosted.org/packages/cf/a8/5ed4f4042031e13a0fede12e81af1e4143102221c373f966a24f38b0d284/pyproj-3.8.0-cp315-cp315t-win_amd64.whl", hash = "sha256:d5a408b215ef98c9ae19e58ec512360b8ad9b25f8792138f983a58d159ac7157", size = 6940114, upload-time = "2026-09-05T20:05:05.737Z" }, { url = "https://files.pythonhosted.org/packages/12/14/9c291ad92b565629cf4eacee72cbc8071ca8d93c9d719b47f304b1b2ea76/pyproj-3.8.0-cp315-cp315t-win_arm64.whl", hash = "sha256:bbf8a786ebfa9a904802dfde0e95e1325df8efbb573a19686c1937499a8f04e8", size = 6843958, upload-time = "2026-09-05T20:05:07.527Z" }, ] [[package]] name = "pyproject-hooks" version = "1.3.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/6d/5d/f2ddeef4a855a102aaae5e97826a0260007522ab504421b75addfdb1517c/pyproject_hooks-1.3.3.tar.gz", hash = "sha256:defda19b854fa0d3bd4f76ea4ddcba8abd7dcfcdd585a6690ade050744fc5f43", size = 21013, upload-time = "2026-09-16T08:58:03.999Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/85/11/044d1ae1b4ec0d7af88ee5bc91e081be1022533032b906a7bdabdbb60977/pyproject_hooks-1.3.3-py3-none-any.whl", hash = "sha256:5fc53fdac9f7bd63fbcdc868fb5f90b4784d78a53a3d3388cd738b807441a20b", size = 10724, upload-time = "2026-09-16T08:58:02.96Z" }, ] [[package]] name = "pytest" version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] name = "pytest-benchmark" version = "5.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "py-cpuinfo2" }, { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/8f/83a15e40dbc34a580ee56eb56983cae5394c6e94d50cf28fe268e457be25/pytest_benchmark-5.3.0.tar.gz", hash = "sha256:358444d4e89be901ee2b6404fb043ac3d7684002ad7f3563cc153fca6339c965", size = 375410, upload-time = "2026-08-23T17:45:08.891Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/eb/42/7e80f7cfa191e0a766d1de99b4661847415ad5db34f8209d81fd42175b59/pytest_benchmark-5.3.0-py3-none-any.whl", hash = "sha256:920ab1dfcffa718d49aa15ba144c7e357bda59216a0dc308016cc1c7236f719d", size = 48401, upload-time = "2026-08-23T17:45:07.094Z" }, ] [[package]] name = "pytest-cov" version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, ] [[package]] name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] [[package]] name = "python-discovery" version = "1.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, ] sdist = { url = "https://files.pythonhosted.org/packages/91/96/0f93e27c9f60a650838f2118159aa115fd5732c0716247917b7ba7ede665/python_discovery-1.6.0.tar.gz", hash = "sha256:6393b4eae1be8b2182670635e7baff89ac21cb9f8e86fd1ff40c7b1144febb4c", size = 82849, upload-time = "2026-08-28T17:30:02.366Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/43/5e/21abf578182fb15006a57faf3711a1e659e29d600d19b6e557eae908c81d/python_discovery-1.6.0-py3-none-any.whl", hash = "sha256:d4e244cf17b8b29819ed78003d55fbacf86eda23425b075454fff9271b79377a", size = 38451, upload-time = "2026-08-28T17:30:01.236Z" }, ] [[package]] name = "pywin32-ctypes" version = "0.2.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, ] [[package]] name = "pyyaml" version = "6.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] name = "pyyaml-env-tag" version = "1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, ] [[package]] name = "rasterio" version = "1.4.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.12'", ] dependencies = [ { name = "affine", marker = "python_full_version < '3.12'" }, { name = "attrs", marker = "python_full_version < '3.12'" }, { name = "certifi", marker = "python_full_version < '3.12'" }, { name = "click", marker = "python_full_version < '3.12'" }, { name = "click-plugins", marker = "python_full_version < '3.12'" }, { name = "cligj", marker = "python_full_version < '3.12'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "pyparsing", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ec/fa/fce8dc9f09e5bc6520b6fc1b4ecfa510af9ca06eb42ad7bdff9c9b8989d0/rasterio-1.4.4.tar.gz", hash = "sha256:c95424e2c7f009b8f7df1095d645c52895cd332c0c2e1b4c2e073ea28b930320", size = 445004, upload-time = "2025-12-12T18:01:08.971Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c6/0d/d3859e49ab94464de2623fec82c6798d8d7c8bea2473cd2696fc5e09f717/rasterio-1.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:b8eea428b5f0c78a963f6003a19b60777df83a0aba8c28231d65431e32ac160e", size = 21144125, upload-time = "2025-12-12T17:58:59.511Z" }, { url = "https://files.pythonhosted.org/packages/aa/3c/97ba4b146309cdc0e36f289b02ac69465b026a21afc828e4e4e1dc39466a/rasterio-1.4.4-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:1cc0ea5aa0d22f5f349aa221674481de689b7b3a99607ce6bb58a29e5be54d17", size = 25746406, upload-time = "2025-12-12T17:59:02.902Z" }, { url = "https://files.pythonhosted.org/packages/ce/33/75f81bd837ac2336b24456fdb249597a4b9af2a212b7151f64d09022be36/rasterio-1.4.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7eb25b23666b29dadfc49a59206cead62c99190584b61771bba0e95f7da06801", size = 34587242, upload-time = "2025-12-12T17:59:05.848Z" }, { url = "https://files.pythonhosted.org/packages/f9/77/3869a426f6e752dde13f3868cdf16253ca0214f92107db79c1583c9aa07b/rasterio-1.4.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e24b7b8c2df801dde2a1dffb44c58902bd76b5cab740dc11de4ff9963992a71a", size = 35881871, upload-time = "2025-12-12T17:59:09.779Z" }, { url = "https://files.pythonhosted.org/packages/66/d0/3818859ddbd3750d0ef5a6580a3272e81764286d943c689dd41e49b8b786/rasterio-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:0718630f607be2f5742d8e4b34b434746fd788a192d77eefc9bb924399fea802", size = 25716477, upload-time = "2025-12-12T17:59:13.519Z" }, { url = "https://files.pythonhosted.org/packages/4b/02/039eb4970c93aaef4c9eb1ee159abad18e6e7f932c2eed575c95f78d94f6/rasterio-1.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:0308ff4762ae9eb40a991f12d758626b59af4376b13675480391dd7295d17bbf", size = 24075993, upload-time = "2025-12-12T17:59:16.407Z" }, { url = "https://files.pythonhosted.org/packages/4c/fc/63d89ddfcb4643730553683ee322566b9b15fe56d026e4c21c4f4f5d9d26/rasterio-1.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f3c4f0cbd188f893011f2a0a6dc2852b3892799b3a0d79eddf92f2b115ec7ed7", size = 21120715, upload-time = "2025-12-12T17:59:19.35Z" }, { url = "https://files.pythonhosted.org/packages/43/70/2c003f76a23dbb078fdee35c8e2ec490d2ad8982f4dc956ba08b56027b87/rasterio-1.4.4-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:6fce26090b9f509eab337228420145947c491a13628965410f25bc3e6e05cf75", size = 25732944, upload-time = "2025-12-12T17:59:22.533Z" }, { url = "https://files.pythonhosted.org/packages/f6/cc/4a8e92362c0ff496dd1007c3dcba66e9ededf1a45eca8ad1db302b071c49/rasterio-1.4.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c1c722da390dc264aeccdc0dc200ca37923875d910ca4cd5bec0fec351bb818e", size = 34295209, upload-time = "2025-12-12T17:59:26.035Z" }, { url = "https://files.pythonhosted.org/packages/e6/6d/717d2dec47fbefad33ca0d27bd5f0d543b1d1bc9fcab5ef82a13adaaf38d/rasterio-1.4.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:98b6dfb8282b2a54b9d75c3dc8d2520a69bbc66916c7d43de8e0bbf6e0240ca1", size = 35661866, upload-time = "2025-12-12T17:59:29.928Z" }, { url = "https://files.pythonhosted.org/packages/ed/60/ae3351fba2726ec0976974ce2eb030c159edd3363b8771e832b8db571c24/rasterio-1.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:9513f4c7a6d93b45098f8dff2421fa9516604e3bfbf35aa144484a88d36a321f", size = 25682853, upload-time = "2025-12-12T17:59:35.869Z" }, { url = "https://files.pythonhosted.org/packages/38/ee/35387296bbacfc5cbbb4273228b1b959793d3ce38b0402a07f11a248420b/rasterio-1.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:60b49a482e0f12f12ce9d2cc3090add02f89f3d422e85f2cffaa9207adb83c04", size = 24043249, upload-time = "2025-12-12T17:59:39.915Z" }, { url = "https://files.pythonhosted.org/packages/c1/fe/e3e37041c49956f4f4cbe473c3fe290aaba96ed20e9c07da304e0cad2015/rasterio-1.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:df26c96aa81ffbd0b33189680859211eadf9950123c21579f84de73bb0f91d81", size = 21107336, upload-time = "2025-12-12T17:59:43.585Z" }, { url = "https://files.pythonhosted.org/packages/f3/02/c217fdcc8e80a4b7d1b1bc4529d78f98452816e9add53ff8742049a77ae7/rasterio-1.4.4-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:b3af0ecc922a80f3755516629f7948e37bade9077b5f5c12a3869a5e7f01619b", size = 25719929, upload-time = "2025-12-12T17:59:47.64Z" }, { url = "https://files.pythonhosted.org/packages/c0/d0/7f177f37bc9595d809dabb0073abd0c42358469f6b10875192b46331c652/rasterio-1.4.4-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:7ce3b0f9a22e95a27790087908753973644d7c3877d495ec9bd6e04a25233ca4", size = 34198845, upload-time = "2025-12-12T17:59:52.405Z" }, { url = "https://files.pythonhosted.org/packages/7b/84/66c0d9cca2a09074ec2ce6fffa87709ca51b0d197ae742d835e841bac660/rasterio-1.4.4-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c072450caa96428b1218b030500bb908fd6f09bc013a88969ff81a124b6a112a", size = 35576074, upload-time = "2025-12-12T17:59:56.392Z" }, { url = "https://files.pythonhosted.org/packages/32/68/f7df5478458ace2fa50be43e9fab1a39957a0e71afaa3e6147ec289e0fc8/rasterio-1.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:16ee92ef10c0ba89f45f9c2b40fca9f971f357385f04ee9b716fb09cbd9ce20c", size = 25680573, upload-time = "2025-12-12T18:00:00.45Z" }, { url = "https://files.pythonhosted.org/packages/34/e5/1bdaccb658430dfd391ad4a63d206546f36639d7e4130bf31f125c6525b4/rasterio-1.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:65c10afe64b5e488185aaff0b659e08eda22c89285b54a3e433b80e6c6621770", size = 24040367, upload-time = "2025-12-12T18:00:04.443Z" }, { url = "https://files.pythonhosted.org/packages/32/76/54643a7d1d650fd7f1acea9093c298603e4c01bba6f90be2254310b48507/rasterio-1.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:18c2c1130e789dc2771d0aa5ec4b56d5b8a0097c648ccb94882d5ff3ab55c928", size = 21247203, upload-time = "2025-12-12T18:00:07.547Z" }, { url = "https://files.pythonhosted.org/packages/76/ef/434b4849ccd6a3e03a0b1ac37c963c1771564945745613d15c5d96ce768d/rasterio-1.4.4-cp313-cp313t-macosx_15_0_x86_64.whl", hash = "sha256:2d1654b7ffa6f3dde42c5fd27159ae45148c11e352de26f12fe7313a3236aeed", size = 25822050, upload-time = "2025-12-12T18:00:11.081Z" }, { url = "https://files.pythonhosted.org/packages/2d/fa/fe9a478aa0cde246da58baeb0df3248c7ca174e4d9c9b27e81b504e40a76/rasterio-1.4.4-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c4022cbddb659856e120603b12233cec8913ae760fff220657ce888c3c6b9f9d", size = 34833783, upload-time = "2025-12-12T18:00:14.525Z" }, { url = "https://files.pythonhosted.org/packages/04/cd/ed4716590dbcd4b8ae633417d758564e510bee4d6aaac5050a0f6d5179c5/rasterio-1.4.4-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:96b88880551a07b7a3b50439483cefbd9af91a09e19ff2b736815994e5671314", size = 35738114, upload-time = "2025-12-12T18:00:17.96Z" }, { url = "https://files.pythonhosted.org/packages/7e/29/da7050d11ba1d041e0333ac14768e6e9ca1aa2b9fa8416f317d2650ed276/rasterio-1.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:def75d486d0ab8f306f918a913c425ed57159495518c54efe8e18d5164d37d90", size = 25896835, upload-time = "2025-12-12T18:00:21.411Z" }, { url = "https://files.pythonhosted.org/packages/88/80/304dbe5434c4aa8dfaf90480c16d770161796a6a61fa88e72e8a402153df/rasterio-1.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:770b7e86f6c565e6f9cf30f6fa4479a5a2bab4e10ff44fe7acfd518ca4a71d1b", size = 24128074, upload-time = "2025-12-12T18:00:24.653Z" }, { url = "https://files.pythonhosted.org/packages/03/01/d5a3dc51cd5fef62b76ecc77d33c1ca20de305fed7e16c71bcdf4858e466/rasterio-1.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:019693f14a83ae9225cb57c16e466901d0e6284962dcf13a9f4bb1175b979011", size = 21120237, upload-time = "2025-12-12T18:00:27.723Z" }, { url = "https://files.pythonhosted.org/packages/50/da/db18362602b17327c0e00c9e9c0847c1c4ac657c1a289169ca06a26faccb/rasterio-1.4.4-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:87d7c3e97e3b40c9041d1602e2dcb4fc2d88abe6c645fccb4939dec297a91cf8", size = 25720506, upload-time = "2025-12-12T18:00:30.592Z" }, { url = "https://files.pythonhosted.org/packages/5a/8f/a15d66c9c05bffb176c9707ef1f2bfcf9c0b835272937c80ac7207a20b5c/rasterio-1.4.4-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a2401e4c43a31c7382154d4042b60a63b9bca5886802983c5c9362cdc5b09548", size = 34153931, upload-time = "2025-12-12T18:00:33.852Z" }, { url = "https://files.pythonhosted.org/packages/05/2d/cd778286b910db7a3f0bc1743ca362173f1fbb7365137e4982ca857b6d26/rasterio-1.4.4-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6c4287d8934d953f7870b8e2a1df1096fbf47eba39ad0f777a31ea500f4e5010", size = 35421139, upload-time = "2025-12-12T18:00:37.482Z" }, { url = "https://files.pythonhosted.org/packages/70/97/13a2e33aede8d7a42178c696a6a93868d1f9560f73de05033a1675f0806a/rasterio-1.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:c3ba1871549221140661227dd4fa1f9a472ded4a6d2f2c2e367b0648bb15b99d", size = 26419132, upload-time = "2025-12-12T18:00:40.871Z" }, { url = "https://files.pythonhosted.org/packages/27/d8/2dcfcb362d6a2fd07c14cfb803a345a7926d4d9fb6243e196df105671e97/rasterio-1.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:7c9d7dc824cb8d222808be153643cd4e65ea3e1f66019ada1ccd630221edfe30", size = 24800998, upload-time = "2025-12-12T18:00:45.332Z" }, { url = "https://files.pythonhosted.org/packages/13/f8/16e9b648e7f16cadb41df7c0116dbab26b4a2ba02c85cbe3f744065bdf56/rasterio-1.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:98e17bded830a59992d9f8f8d9f227ce1c4be0694930afcc4360358f5cb1a5db", size = 21247046, upload-time = "2025-12-12T18:00:49.429Z" }, { url = "https://files.pythonhosted.org/packages/a8/ea/f3dc3a25d7591821d488f5c5eb89f6abcd1f5c8e2ef4bd2792f965cbc9c8/rasterio-1.4.4-cp314-cp314t-macosx_15_0_x86_64.whl", hash = "sha256:56134ca203f952855e60774b06672033cf65057eb9810fcc5c1a75f1921053a3", size = 25821677, upload-time = "2025-12-12T18:00:52.458Z" }, { url = "https://files.pythonhosted.org/packages/2e/d3/1e038350218e852f904c8dc4ab751aa023a2e82e68998767b7b42e33832c/rasterio-1.4.4-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:52edde65515b33fe4314c8a44a9ee2fc00b550deed6d56e1a8d085d42bbca3e6", size = 34829572, upload-time = "2025-12-12T18:00:56.294Z" }, { url = "https://files.pythonhosted.org/packages/0b/ce/28abf7a5f5d9cb014c2e14cc396bebe953b3deefbf604d49f4322e73fa35/rasterio-1.4.4-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d61d3f2c171c64050bd75e54a5d964ff7f165b3f5d2b92c9ee09b9716aa1b8bf", size = 35735171, upload-time = "2025-12-12T18:00:59.531Z" }, { url = "https://files.pythonhosted.org/packages/54/91/1ce35cfda2d56dacd6395faf20a5290268bd9009c53393ac42b5f9bb2c4c/rasterio-1.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:40137fe512c0d6e96c0167a0ae4e56d82c488f244163c45494b7392e51c844de", size = 26700712, upload-time = "2025-12-12T18:01:03.023Z" }, { url = "https://files.pythonhosted.org/packages/3b/33/4d13f48a8f01d782ffc1eece20821586518f3f515dca7cf152bca9fd22d4/rasterio-1.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:29ec3a794454b5bb255c9c0374cc380030a8a1e295c81eee7feb036802d2a9e3", size = 24875933, upload-time = "2025-12-12T18:01:06.134Z" }, ] [[package]] name = "rasterio" version = "1.5.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", ] dependencies = [ { name = "affine", marker = "python_full_version >= '3.12'" }, { name = "attrs", marker = "python_full_version >= '3.12'" }, { name = "certifi", marker = "python_full_version >= '3.12'" }, { name = "click", marker = "python_full_version >= '3.12'" }, { name = "numpy", version = "2.5.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pyparsing", marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1d/1a/ee73b447f1623a6bb6490af08d4bbed3fb6e38b0adc54553a0d244d4103a/rasterio-1.5.1.tar.gz", hash = "sha256:c1b6ae15f4ccad704f1fe8417da5c2250145c7bcdb91acb53833bf5aefdd9e48", size = 457868, upload-time = "2026-08-08T02:45:15.844Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/87/88/95d2d41889f86fc7f532caf672c789db1ecf48fcf56a62c6a26450025c65/rasterio-1.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:c209e670abf0f30695a784c4f0170366462b9a3eaea3e49122ab2ce81799460b", size = 23239114, upload-time = "2026-08-08T02:35:37.501Z" }, { url = "https://files.pythonhosted.org/packages/1a/7c/d38dc9ba3caa6feb0202178327ccc6e0010973aae9211e46fbc59c2a7970/rasterio-1.5.1-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:833511f045ca49dafbf25da4762a0b19dcf5d046ded8b318c094363e2d65f474", size = 24957692, upload-time = "2026-08-08T02:34:23.295Z" }, { url = "https://files.pythonhosted.org/packages/34/52/b85411d37e87ce5561693918a944ecbe6dc3af1d4a375c9d77f2ec1c283e/rasterio-1.5.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:821d49afd18498fb0918b72961b1b667193c64edf8cc484081c522d10b33980d", size = 36943874, upload-time = "2026-08-08T02:36:28.56Z" }, { url = "https://files.pythonhosted.org/packages/79/6c/badf2c4d54482a1192d0057994eb48a6ff25ba6a84011d8fa2d9c230bf73/rasterio-1.5.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a270366c4f44f7bb4367d7068b6de08c56b2b04049e3dfcd06d451141fee3a7f", size = 38396579, upload-time = "2026-08-08T02:32:48.289Z" }, { url = "https://files.pythonhosted.org/packages/8b/23/c12e0a536efc60f7730e96855c5cae20bd3af850debf08a99ec50d37a46a/rasterio-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:6fbafe970d44ec06179c7884cdb160a90311e3d19da25bff970fab06123f0201", size = 30621456, upload-time = "2026-08-08T02:37:46.26Z" }, { url = "https://files.pythonhosted.org/packages/02/00/cc447f6d8dfad6f86f8bb9bdb0bf0083ef44ec848b8bf60269b56eea87c1/rasterio-1.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:e31b65231a631b0b59471aeae4423167d42f88da0c5ee5a519dc07deb7a4666b", size = 28859019, upload-time = "2026-08-08T02:38:57.974Z" }, { url = "https://files.pythonhosted.org/packages/c9/f0/d3c613d845b35a3800b812f0fe0351675f6310972bbd6349f844499ebd6a/rasterio-1.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:937944c445d4ea4d6969e9dbfcf305143c05fc4df2f8fadfa360cb2d0f65d7b0", size = 23227832, upload-time = "2026-08-08T02:35:42.525Z" }, { url = "https://files.pythonhosted.org/packages/e9/ca/54c1976340df39ea6bd77ff4b41eec932ff260b635a8512ceae0945595c4/rasterio-1.5.1-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:e863b614cadad435a4394792b6cdc84324b15197629ad5a20c8d56cbc4eeff92", size = 24947000, upload-time = "2026-08-08T02:34:28.155Z" }, { url = "https://files.pythonhosted.org/packages/9f/be/b759df521f9d3df913af5bf71a3799305f5cabd5183b51319907b5738d5d/rasterio-1.5.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b117209922784ef7948f702a0e9eb26be744f4b24d31f5eb97c45c0f04e2e4c3", size = 36842195, upload-time = "2026-08-08T02:36:35.343Z" }, { url = "https://files.pythonhosted.org/packages/f2/bd/1e84b24be51ce3950c73832c098b4cab49190ffdf343f13b51a35ca73a00/rasterio-1.5.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9093a9277559ac0f954d9a0266886bc4037e3ffd7a40837f6ea6486a96c8c258", size = 38311716, upload-time = "2026-08-08T02:32:56.612Z" }, { url = "https://files.pythonhosted.org/packages/9e/e8/676dd01db4e8a1735b6d893cd0f76920dab41d1b508579a7f5778ee1cf3c/rasterio-1.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:b3686865af2c67114f5dfb67df483db61bccad4078083a3dad481ea035e5d701", size = 30619960, upload-time = "2026-08-08T02:37:55.016Z" }, { url = "https://files.pythonhosted.org/packages/5c/7f/182833e6a7ad02191a72c8e0aa8ab4283379cf2f7c92c4d3ca0f9c881848/rasterio-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:0898355908ed3614ba1415532432cf4a1a308b189b2c9d8307a26a44bcb1713b", size = 28856656, upload-time = "2026-08-08T02:39:03.232Z" }, { url = "https://files.pythonhosted.org/packages/16/ae/90778e26e8c85f8187feeb1b86d789381e5715f005074846ee5568115a00/rasterio-1.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:c8702772d6e91c0578d84af88de7d4926c48b0b6eca33d0660e90d7f37c06bf1", size = 23240236, upload-time = "2026-08-08T02:35:47.185Z" }, { url = "https://files.pythonhosted.org/packages/e7/3e/27c957e788913445266728e9a81deb3a91fd5b8dff5bc9dd8281b3cceb18/rasterio-1.5.1-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:d8064e9b2820c3f1027399f410d8cdbfb57bdedfad46e5381afb527a9b6f74a2", size = 24951609, upload-time = "2026-08-08T02:34:39.468Z" }, { url = "https://files.pythonhosted.org/packages/ec/bb/6ca85602f26f55e0b673af34eb458f041f222673549ce6b54f93ba9707b5/rasterio-1.5.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:ee01dc4b114a21078af87da916816c6c62ba5b5d216725f148ae695ef4deebf2", size = 36811929, upload-time = "2026-08-08T02:36:43.183Z" }, { url = "https://files.pythonhosted.org/packages/1a/4a/d691dfcbf3692ee2f57bc9fa7de61b03fca136cff1927ce08ab72bf4beab/rasterio-1.5.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5ff9db698a88e716254fb0788768f75d7b58532c8253674261fa05abd40f621e", size = 38176919, upload-time = "2026-08-08T02:33:03.729Z" }, { url = "https://files.pythonhosted.org/packages/f6/82/cc05ee6ae639801f79c35667bf0b1b163819625483b3231fb70858c1155f/rasterio-1.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:546ca44c4417772a48c5224b037f10330a75cde74b429f07ac43838e20f9b2c9", size = 31446190, upload-time = "2026-08-08T02:38:01.855Z" }, { url = "https://files.pythonhosted.org/packages/1b/fd/07c25fe92cf9a9e7095f396291dbc48186f17f3320119ccd1d5d8cc91fe9/rasterio-1.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:a685d2e97684b275b12859f9e0b95a8f511a51a2ac51b284428c6f50f1bcfd17", size = 29705188, upload-time = "2026-08-08T02:39:08.802Z" }, { url = "https://files.pythonhosted.org/packages/f1/54/c4848b8bc666a16dc768d89ab63b2c0f509aa1e94f292d7d6109c081da9b/rasterio-1.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c361ed93cb8ceb314bf42d98815f2b6dd0254f7367d2b932435a8cf0aeaecf96", size = 23379128, upload-time = "2026-08-08T02:35:52.521Z" }, { url = "https://files.pythonhosted.org/packages/66/3a/228a659e55c3da4bec7cdb857ad8fb201ea80a5c85a1bd1717e4c7997788/rasterio-1.5.1-cp314-cp314t-macosx_15_0_x86_64.whl", hash = "sha256:00c78697cb565e97f99deb485fc7f23f28ff30e857124872ef0c5a3e83dd7e47", size = 25062694, upload-time = "2026-08-08T02:34:44.193Z" }, { url = "https://files.pythonhosted.org/packages/0c/59/15f99c480fffc044dde1ea8cde9c7a746997ceb639c624505f6a058e7f4b/rasterio-1.5.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:82719d4de76f3bafb165e932ad997b07116aa08621db079750ef1031dc514e11", size = 37417460, upload-time = "2026-08-08T02:36:52.372Z" }, { url = "https://files.pythonhosted.org/packages/79/9a/7303424657fd71a1f8f4d17d8186de38e98e84f6fe36fe0a8660b7c918bf/rasterio-1.5.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8683074903018918341908e714f792ed5d696bad441ecec1787de8eb896573cd", size = 38474098, upload-time = "2026-08-08T02:33:11.294Z" }, { url = "https://files.pythonhosted.org/packages/2c/54/fbfa20a98485cb39b70574e3bf9bd12603ffc319f80f64e0fbada1c743bf/rasterio-1.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0cd79ed52481d55395f1d3def075ff45173ed07ccd238fddeb0c63522b3d137", size = 31731560, upload-time = "2026-08-08T02:38:09.629Z" }, { url = "https://files.pythonhosted.org/packages/25/db/89bb06e64809c7644fc221895494068b23d7078509c8d070754bb01043cc/rasterio-1.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:11e2e9c68971beeec603c2613fa7740cf0a02dd026ef1aaa75d1cdf4246fbde6", size = 29788520, upload-time = "2026-08-08T02:39:15.126Z" }, { url = "https://files.pythonhosted.org/packages/a6/77/c639c0fc46d775d47e70e0bec4af549313509dfcfbeaffdb903c16859f0e/rasterio-1.5.1-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:3aa1a3441587341b78558b5359aa5d2694b45a911d7b5df23af726420e420bce", size = 23239908, upload-time = "2026-08-08T02:35:59.075Z" }, { url = "https://files.pythonhosted.org/packages/e9/e9/ab1d83a84cae5514606dfba896761f02086db5af0f07b811e70e9b4ed23d/rasterio-1.5.1-cp315-cp315-macosx_15_0_x86_64.whl", hash = "sha256:60d74d11f290510639046c447256085eae0a925acdfe07e37f7436fb97cb9f46", size = 24951595, upload-time = "2026-08-08T02:34:49.352Z" }, { url = "https://files.pythonhosted.org/packages/51/5d/2c8f4d8bb0582b7dac694413892af901f14a4526a8a9f46d28cfb36b8d0b/rasterio-1.5.1-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:5933e56b15ef29fcbec370a2e0b5ac39b33023d85a3f5b01cdf0cbe4231c6204", size = 36816241, upload-time = "2026-08-08T02:37:00.822Z" }, { url = "https://files.pythonhosted.org/packages/0a/93/f39df98b09524d0b44fdc54722e3b044fbf6620723415eef241760b5ffdb/rasterio-1.5.1-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:01f927ee7ef08cbc111b34092df266308fd2c64fad2e21a97c991973eb8e0c25", size = 38221966, upload-time = "2026-08-08T02:33:19.142Z" }, { url = "https://files.pythonhosted.org/packages/16/a2/d6eb95f239878d2a964a1cf2785378626c7cf4431ce2f54bc3b0210c0a6f/rasterio-1.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:55e18b8a6a7f4a9769942d48a1545c5a97920cf841fe5e4099032ba855bdf95c", size = 31446344, upload-time = "2026-08-08T02:38:15.559Z" }, { url = "https://files.pythonhosted.org/packages/87/7c/5f390f8e9fa17cf55c62558dd3a08adfc1cbe7216f2718e8edf5caadab72/rasterio-1.5.1-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:94ae0fe4c0eb031da99614a1a1cd27819f900f86bc84976cd9f713eee05584a3", size = 23378528, upload-time = "2026-08-08T02:36:04.295Z" }, { url = "https://files.pythonhosted.org/packages/eb/cd/788c62b2f5764f81d9906d3ec15dfc4ba4535487e2dd9f6f46d2151e495c/rasterio-1.5.1-cp315-cp315t-macosx_15_0_x86_64.whl", hash = "sha256:bf5d2cf43791651522fedb284cc08398f96fecc018dff24d7fc97965c909ab3a", size = 25060703, upload-time = "2026-08-08T02:34:53.961Z" }, { url = "https://files.pythonhosted.org/packages/59/d2/13f9d16f2cfd4e163973bff03dc730d21d1b6ebdcfc6bf8c4eca1e9ec746/rasterio-1.5.1-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:e4ea970d39f0b134fc91141d767b3c49bc2dea38a32f0b036fbdd5ec2e8ca457", size = 37369002, upload-time = "2026-08-08T02:37:08.127Z" }, { url = "https://files.pythonhosted.org/packages/ed/20/8a44acb103a9f6a5a0f605d4c8825a2de26ea5420b561b4a23b9da864f6a/rasterio-1.5.1-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:fbb933659035f0aca32e4dc0dc022c7162b4f6598b15366c5b19b4a7e65c1991", size = 38538441, upload-time = "2026-08-08T02:33:26.991Z" }, { url = "https://files.pythonhosted.org/packages/12/3f/aa7fd1beda974c7e2ded73abdbc3978c7d60165ee70c0ee29c0ebef22a8b/rasterio-1.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:ac450a2c1e6de990eaaee347ebceca160b1531c9f13c5db489d0e3113ea13984", size = 31728213, upload-time = "2026-08-08T02:38:21.338Z" }, ] [[package]] name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "charset-normalizer" }, { name = "idna" }, { name = "urllib3" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] [[package]] name = "rich" version = "15.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] [[package]] name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "jeepney" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] [[package]] name = "tinycss2" version = "1.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, ] [[package]] name = "tomli" version = "2.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] name = "tomli-w" version = "1.2.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, ] [[package]] name = "tomlkit" version = "0.15.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/94/96/e07752635b98536177fa1f37671c8f3cdde2e724c6bcf6034b2cfb571565/tomlkit-0.15.1.tar.gz", hash = "sha256:e25bbf38843005246210a12982776f27f99cb9be67160e14434d0c0d21ee1e97", size = 180129, upload-time = "2026-07-17T01:48:04.562Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/13/bc/8c13eb66537dce1d2bd3a57132902f38d0e7f5bb46fa9f4daed9fe9d76ee/tomlkit-0.15.1-py3-none-any.whl", hash = "sha256:177a05aece5a8ca5266fd3c448abb47b8d352f09d477d3ca8332db4d89b24304", size = 49449, upload-time = "2026-07-17T01:48:05.728Z" }, ] [[package]] name = "trove-classifiers" version = "2026.6.1.19" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c2/e3/7ca82ee24c82d344584abd5b8637b3bd056f2900226e8d82fc22f1184b92/trove_classifiers-2026.6.1.19.tar.gz", hash = "sha256:c5132b4b61a829d11cfbd2d72e97f20a45ed6edb95e45c5efdeb5e00836b2745", size = 17059, upload-time = "2026-06-01T19:41:34.649Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/7c/a4/81502f486f01db95bc8320646a8a12511f5e556cb63d5e224d91816605c4/trove_classifiers-2026.6.1.19-py3-none-any.whl", hash = "sha256:ab4c4ec93cc4a4e7815fa759906e05e6bb3f2fbd92ea0f897288c6a43efd15b3", size = 14211, upload-time = "2026-06-01T19:41:33.434Z" }, ] [[package]] name = "truststore" version = "0.10.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, ] [[package]] name = "typing-extensions" version = "4.16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] [[package]] name = "typing-inspection" version = "0.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, ] [[package]] name = "urllib3" version = "2.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, ] [[package]] name = "userpath" version = "1.9.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d5/b7/30753098208505d7ff9be5b3a32112fb8a4cb3ddfccbbb7ba9973f2e29ff/userpath-1.9.2.tar.gz", hash = "sha256:6c52288dab069257cc831846d15d48133522455d4677ee69a9781f11dbefd815", size = 11140, upload-time = "2024-02-29T21:39:08.742Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl", hash = "sha256:2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d", size = 9065, upload-time = "2024-02-29T21:39:07.551Z" }, ] [[package]] name = "uv" version = "0.12.15" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/db/02/15fddc6cae927d0e44dfc107fcd81682ea3864d87a78c168bbdd440fd805/uv-0.12.15.tar.gz", hash = "sha256:5eef1c0d2e0ae26cbe1daa49de855b09dfb63a45eaf1fe63dea2827249eadc05", size = 7016185, upload-time = "2026-09-15T12:07:45.915Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fa/d6/222dcbce2419cf4c198b83e35cd215b796a9cb38cbc0f54dd16bb25f9f98/uv-0.12.15-py3-none-linux_armv6l.whl", hash = "sha256:7a1c9edcd333e7c78f635f000fe50e5aa3b3b8774004f5c66bb034110ce8755c", size = 22189974, upload-time = "2026-09-15T12:07:02.367Z" }, { url = "https://files.pythonhosted.org/packages/18/73/b01ea8bbab093efb573fad02bed6d5c00a4ea0edccc4d2faa5303854dbda/uv-0.12.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a1499a507461774f222114732f145d50579e75a3fab0d91ee680c0ed04322552", size = 20490659, upload-time = "2026-09-15T12:07:05.346Z" }, { url = "https://files.pythonhosted.org/packages/84/62/82e86e03e111463ab224c132c0f0e6b649d98d22710b177fbc000d379103/uv-0.12.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:03b2c763f8b3c5595fa103221bc667e3af0146f8cb327aa06630ebcf5cfe16e9", size = 16801224, upload-time = "2026-09-15T12:07:07.611Z" }, { url = "https://files.pythonhosted.org/packages/49/1a/eb1f5f38b09f9aa6d31cfc8d29ca919ee3d8368dd6ba01883a1f9dda7259/uv-0.12.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:a673bc39e677eaa012f618cab2e6e99fb82919f37ea45043fca530e9ca94c082", size = 21641142, upload-time = "2026-09-15T12:07:10.051Z" }, { url = "https://files.pythonhosted.org/packages/51/b5/bc60ba5684abbc823d9e1234f9d51c39fc91f97bd3e84568d4e928e29a1f/uv-0.12.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:e6bce690fbfdc443f25f49017fd64f802dea1b93681c27a0c4f6269df00f672a", size = 21690645, upload-time = "2026-09-15T12:07:12.574Z" }, { url = "https://files.pythonhosted.org/packages/ba/32/eabcba8202668559fe267cbba5b8fc756edb9fc4a103b559e8bd3f066849/uv-0.12.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:176533b084f9b5875e7bfa8d4e47ef800683a717d788c584f7ca919c7659383d", size = 21725003, upload-time = "2026-09-15T12:07:14.902Z" }, { url = "https://files.pythonhosted.org/packages/1e/6f/6d7b8a04b9e3de3a311a4076407601b3e524998aeba1a1619c81531ba0e4/uv-0.12.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f85bf3f58ad624b3427c6e5d9bf47112016c2366b327c7381e3e9a9485bcae92", size = 22430464, upload-time = "2026-09-15T12:07:17.136Z" }, { url = "https://files.pythonhosted.org/packages/1d/10/18bd9f1821c325bd8c8838b1cf9469d7217263c5f818d9ffc4947867d983/uv-0.12.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45342637678531fe514c8aa0bda19fd98cc3be4c6d589c7bee99f99b74a89979", size = 23810037, upload-time = "2026-09-15T12:07:19.434Z" }, { url = "https://files.pythonhosted.org/packages/8a/8d/6a24d10442dac28718bcabadccd6d5377a17b033615604f202f48b48f278/uv-0.12.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f21620417724c3252922e150e9bcc06aeb7288cc8ab1e103b60f01e7d5160cfc", size = 23413401, upload-time = "2026-09-15T12:07:22.029Z" }, { url = "https://files.pythonhosted.org/packages/1e/fd/432451d732917c49152a291de3ef171aa6b0f1a22d39780fb2c1f085ca4c/uv-0.12.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9802f46bae436bd91751bb33ddeb379ef1596b5c19df193219d545d244b60", size = 20081404, upload-time = "2026-09-15T12:07:24.324Z" }, { url = "https://files.pythonhosted.org/packages/e9/3a/52e6f0c159d133b03890b5c54823bdc10163ce6f010515f649e5804b5bba/uv-0.12.15-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:013e3a5774fb2cc036a9422edc51c8c5273cca011ec04c2817249b8a4a0b0f02", size = 19510133, upload-time = "2026-09-15T12:07:26.737Z" }, { url = "https://files.pythonhosted.org/packages/f4/09/cdb9dace249645cdc4a7a33d364df7326faca369132b8ee87da0cf2659f7/uv-0.12.15-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:0e5abf7c998da413823d08fe5c5d40fa9c4c7ae3c65291c360b61eb5ae53ed19", size = 22506249, upload-time = "2026-09-15T12:07:29.24Z" }, { url = "https://files.pythonhosted.org/packages/6c/17/c14d402af704d28d86ebc16ba405a52e1d632537d1839170e979f100f8c6/uv-0.12.15-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9a3c6540880a8016952a66817e4773c33900a2b8f10ad464abfe55a6f112cb5b", size = 22627543, upload-time = "2026-09-15T12:07:31.65Z" }, { url = "https://files.pythonhosted.org/packages/6f/4f/90c0275d97f722c9e19d5ea454144027f31f670303eb00caecbb6b8f0d81/uv-0.12.15-py3-none-musllinux_1_1_i686.whl", hash = "sha256:c8121cd0895e783aae90ae3fc95ba1a9c3e1493792b355ccacfe67233354789c", size = 21566506, upload-time = "2026-09-15T12:07:34.635Z" }, { url = "https://files.pythonhosted.org/packages/1d/59/390f97099f5bcf2d649869dc37820e08dd60d7824d549297e615846e151b/uv-0.12.15-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:3984acc938d49e0dc4e3000c63556e306f6d54a9479a85557b4b23625f5fa31d", size = 23065570, upload-time = "2026-09-15T12:07:37.112Z" }, { url = "https://files.pythonhosted.org/packages/98/83/c2b6ae550db35411a6d17d2364ef8b6ec9ef37e3b031465c1b81f9250a3a/uv-0.12.15-py3-none-win32.whl", hash = "sha256:366556cb4af1c2ffa38bd1740106e320b4ae387fb0ee5758fef646542d39f8b5", size = 19591224, upload-time = "2026-09-15T12:07:39.359Z" }, { url = "https://files.pythonhosted.org/packages/ac/d8/0b4fdfb56c79a307237295f8a0f7c64a34d5d1e8c090fab0bc1201cab2a8/uv-0.12.15-py3-none-win_amd64.whl", hash = "sha256:39af7d437b6d1f962f11c0b77f891d302ea675a0ebbcfe9792f633d843740a25", size = 17674023, upload-time = "2026-09-15T12:07:41.464Z" }, { url = "https://files.pythonhosted.org/packages/fa/0b/42464bda69be2673768b6abb52458773c19fe231dd80fa1a69f2e87b3fbe/uv-0.12.15-py3-none-win_arm64.whl", hash = "sha256:2ed8c7fdf466c5c90451d356510fea6850e7cd44e70c59717bc9ecf2ce88a4a2", size = 18975635, upload-time = "2026-09-15T12:07:43.779Z" }, ] [[package]] name = "virtualenv" version = "21.7.10" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, { name = "python-discovery" }, ] sdist = { url = "https://files.pythonhosted.org/packages/45/9d/5acd348310e0803c658c8cf7c4d928e2d22fc4f79c29098b651cd3edfdba/virtualenv-21.7.10.tar.gz", hash = "sha256:a7bf10f37ecc36f1942d6e469d6b59f5fe308f60ac711f66f51ef3bd8cb2c9aa", size = 5350247, upload-time = "2026-09-15T23:36:05.739Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/85/7c/b75957b57ef372d84628b1099c4a530b3c361878cc6c54a8dfc5071d371a/virtualenv-21.7.10-py3-none-any.whl", hash = "sha256:d7ac9669ba19e675ffadbb97fe8e887ef92fb1743fe9a0032be62b947657327a", size = 5324900, upload-time = "2026-09-15T23:36:03.751Z" }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, ] [[package]] name = "webencodings" version = "0.6.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d5/a0/8fd707bcb776a7be556bad06a2ea5fb9bd519df78ef8e26f70ccf0f38bff/webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910", size = 15001, upload-time = "2026-08-15T14:22:57.549Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/77/c6/040cbc72480d789a5f40d63fb484d3106554c4dfa2d2b70ad5022057750f/webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b", size = 8745, upload-time = "2026-08-15T14:22:56.31Z" }, ] [[package]] name = "zipp" version = "4.1.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, ]