From 702e03299092cd43f8723b9230f0dc6372f25fed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Wo=C5=BAniak?= Date: Thu, 9 Mar 2023 22:26:32 +0100 Subject: [PATCH 1/3] chore: make h3neighbourhood return only available indexes, add tests for get_neighbours --- srai/neighbourhoods/h3_neighbourhood.py | 29 ++++++++- tests/neighbourhoods/test_h3_neighbourhood.py | 65 ++++++++++++++++++- 2 files changed, 90 insertions(+), 4 deletions(-) diff --git a/srai/neighbourhoods/h3_neighbourhood.py b/srai/neighbourhoods/h3_neighbourhood.py index 3a4a35004..8ecf41d29 100644 --- a/srai/neighbourhoods/h3_neighbourhood.py +++ b/srai/neighbourhoods/h3_neighbourhood.py @@ -3,8 +3,9 @@ This module contains the H3Neighbourhood class, that allows to get the neighbours of an H3 region. """ -from typing import Set +from typing import Optional, Set +import geopandas as gpd import h3 from srai.neighbourhoods import Neighbourhood @@ -17,6 +18,23 @@ class H3Neighbourhood(Neighbourhood[str]): This class allows to get the neighbours of an H3 region. """ + def __init__(self, regions_gdf: Optional[gpd.GeoDataFrame] = None) -> None: + """ + Initializes the H3Neighbourhood. + + If a regions GeoDataFrame is provided, only the neighbours + that are in the regions GeoDataFrame will be returned by the methods of this instance. + + Args: + regions_gdf (Optional[gpd.GeoDataFrame], optional): The regions that are being analyzed. + The H3Neighbourhood will only look for neighbours among these regions. + Defaults to None. + """ + super().__init__() + self._available_indices: Optional[Set[str]] = None + if regions_gdf is not None: + self._available_indices = set(regions_gdf.index) + def get_neighbours(self, index: str) -> Set[str]: """ Get the direct neighbours of an H3 region using its index. @@ -45,7 +63,7 @@ def get_neighbours_up_to_distance(self, index: str, distance: int) -> Set[str]: neighbours: Set[str] = h3.grid_disk(index, distance) neighbours.discard(index) - return neighbours + return self._select_available(neighbours) def get_neighbours_at_distance(self, index: str, distance: int) -> Set[str]: """ @@ -63,7 +81,12 @@ def get_neighbours_at_distance(self, index: str, distance: int) -> Set[str]: neighbours: Set[str] = h3.grid_ring(index, distance) neighbours.discard(index) - return neighbours + return self._select_available(neighbours) + + def _select_available(self, indices: Set[str]) -> Set[str]: + if self._available_indices is None: + return indices + return indices.intersection(self._available_indices) def _distance_incorrect(self, distance: int) -> bool: return distance <= 0 diff --git a/tests/neighbourhoods/test_h3_neighbourhood.py b/tests/neighbourhoods/test_h3_neighbourhood.py index abf2d3562..86b7226a6 100644 --- a/tests/neighbourhoods/test_h3_neighbourhood.py +++ b/tests/neighbourhoods/test_h3_neighbourhood.py @@ -1,10 +1,73 @@ -from typing import Set +from typing import Any, Set +import geopandas as gpd import pytest +from shapely.geometry import Polygon from srai.neighbourhoods import H3Neighbourhood +@pytest.fixture # type: ignore +def empty_gdf() -> gpd.GeoDataFrame: + """Fixture for an empty GeoDataFrame.""" + return gpd.GeoDataFrame() + + +@pytest.fixture # type: ignore +def single_hex_gdf() -> gpd.GeoDataFrame: + """Fixture for a GeoDataFrame with a single hexagon.""" + return gpd.GeoDataFrame( + {"index": ["811e3ffffffffff"], "geometry": [Polygon([(0, 0), (0, 1), (1, 0), (1, 1)])]} + ) + + +@pytest.fixture # type: ignore +def hex_without_one_neighbour_gdf() -> gpd.GeoDataFrame: + """Fixture for a GeoDataFrame with a single hexagon.""" + return gpd.GeoDataFrame( + geometry=gpd.points_from_xy([0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]), + index=[ + "811e3ffffffffff", + "811f3ffffffffff", + "811fbffffffffff", + "811ebffffffffff", + "811efffffffffff", + "811e7ffffffffff", + ], + ) + + +@pytest.mark.parametrize( # type: ignore + "regions_gdf_fixture,expected", + [ + ( + "empty_gdf", + set(), + ), + ( + "single_hex_gdf", + set(), + ), + ( + "hex_without_one_neighbour_gdf", + { + "811f3ffffffffff", + "811fbffffffffff", + "811ebffffffffff", + "811efffffffffff", + "811e7ffffffffff", + }, + ), + ], +) +def test_get_neighbours_with_regions_gdf( + regions_gdf_fixture: str, expected: Set[str], request: Any +) -> None: + """Test get_neighbours of H3Neighbourhood with a specified regions GeoDataFrame.""" + regions_gdf = request.getfixturevalue(regions_gdf_fixture) + assert H3Neighbourhood(regions_gdf).get_neighbours("811e3ffffffffff") == expected + + @pytest.mark.parametrize( # type: ignore "index,expected", [ From e4845fc25938282853f19a2161be02e5bc52ff98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Wo=C5=BAniak?= Date: Fri, 10 Mar 2023 23:09:26 +0100 Subject: [PATCH 2/3] chore: add tests for H3Neighbourhood with regions_gdf specified --- .../test_no_regions.py} | 65 +----- tests/neighbourhoods/h3/test_with_regions.py | 201 ++++++++++++++++++ 2 files changed, 202 insertions(+), 64 deletions(-) rename tests/neighbourhoods/{test_h3_neighbourhood.py => h3/test_no_regions.py} (68%) create mode 100644 tests/neighbourhoods/h3/test_with_regions.py diff --git a/tests/neighbourhoods/test_h3_neighbourhood.py b/tests/neighbourhoods/h3/test_no_regions.py similarity index 68% rename from tests/neighbourhoods/test_h3_neighbourhood.py rename to tests/neighbourhoods/h3/test_no_regions.py index 86b7226a6..abf2d3562 100644 --- a/tests/neighbourhoods/test_h3_neighbourhood.py +++ b/tests/neighbourhoods/h3/test_no_regions.py @@ -1,73 +1,10 @@ -from typing import Any, Set +from typing import Set -import geopandas as gpd import pytest -from shapely.geometry import Polygon from srai.neighbourhoods import H3Neighbourhood -@pytest.fixture # type: ignore -def empty_gdf() -> gpd.GeoDataFrame: - """Fixture for an empty GeoDataFrame.""" - return gpd.GeoDataFrame() - - -@pytest.fixture # type: ignore -def single_hex_gdf() -> gpd.GeoDataFrame: - """Fixture for a GeoDataFrame with a single hexagon.""" - return gpd.GeoDataFrame( - {"index": ["811e3ffffffffff"], "geometry": [Polygon([(0, 0), (0, 1), (1, 0), (1, 1)])]} - ) - - -@pytest.fixture # type: ignore -def hex_without_one_neighbour_gdf() -> gpd.GeoDataFrame: - """Fixture for a GeoDataFrame with a single hexagon.""" - return gpd.GeoDataFrame( - geometry=gpd.points_from_xy([0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]), - index=[ - "811e3ffffffffff", - "811f3ffffffffff", - "811fbffffffffff", - "811ebffffffffff", - "811efffffffffff", - "811e7ffffffffff", - ], - ) - - -@pytest.mark.parametrize( # type: ignore - "regions_gdf_fixture,expected", - [ - ( - "empty_gdf", - set(), - ), - ( - "single_hex_gdf", - set(), - ), - ( - "hex_without_one_neighbour_gdf", - { - "811f3ffffffffff", - "811fbffffffffff", - "811ebffffffffff", - "811efffffffffff", - "811e7ffffffffff", - }, - ), - ], -) -def test_get_neighbours_with_regions_gdf( - regions_gdf_fixture: str, expected: Set[str], request: Any -) -> None: - """Test get_neighbours of H3Neighbourhood with a specified regions GeoDataFrame.""" - regions_gdf = request.getfixturevalue(regions_gdf_fixture) - assert H3Neighbourhood(regions_gdf).get_neighbours("811e3ffffffffff") == expected - - @pytest.mark.parametrize( # type: ignore "index,expected", [ diff --git a/tests/neighbourhoods/h3/test_with_regions.py b/tests/neighbourhoods/h3/test_with_regions.py new file mode 100644 index 000000000..980593ff6 --- /dev/null +++ b/tests/neighbourhoods/h3/test_with_regions.py @@ -0,0 +1,201 @@ +from typing import Any, Set + +import geopandas as gpd +import pytest + +from srai.neighbourhoods import H3Neighbourhood + + +@pytest.fixture # type: ignore +def empty_gdf() -> gpd.GeoDataFrame: + """Fixture for an empty GeoDataFrame.""" + return gpd.GeoDataFrame() + + +@pytest.fixture # type: ignore +def single_hex_gdf() -> gpd.GeoDataFrame: + """Fixture for a GeoDataFrame with a single hexagon.""" + return gpd.GeoDataFrame( + index=["811e3ffffffffff"], + ) + + +@pytest.fixture # type: ignore +def hex_without_one_neighbour_gdf() -> gpd.GeoDataFrame: + """Fixture for a GeoDataFrame with a single hexagon, and its neighbours except for one.""" + return gpd.GeoDataFrame( + index=[ + "811e3ffffffffff", + "811f3ffffffffff", + "811fbffffffffff", + "811ebffffffffff", + "811efffffffffff", + "811e7ffffffffff", + ], + ) + + +@pytest.fixture # type: ignore +def two_rings_regions_some_missing() -> gpd.GeoDataFrame: + """ + Fixture for a GeoDataFrame with regions up to two rings around initial one. + + Some regions are missing. + """ + + initial_region = ["862bac507ffffff"] + first_ring = [ + "862bac50fffffff", + "862bac517ffffff", + "862bac51fffffff", + "862bac527ffffff", + "862bac52fffffff", + "862bac537ffffff", + ] + second_ring = [ + "862ba124fffffff", + "862ba126fffffff", + "862bac427ffffff", + "862bac437ffffff", + "862bac557ffffff", + "862bac577ffffff", + "862bac5a7ffffff", + "862bac5afffffff", + "862bacc8fffffff", + "862bacc9fffffff", + "862baccd7ffffff", + "862baccdfffffff", + ] + # This is the result of running h3.grid_disk("862bac507ffffff", 2) + indices = initial_region + first_ring + second_ring + + # Explicitly remove the 'missing' regions so it's clear what's going on + # Remove two regions from first ring + indices.remove("862bac52fffffff") + indices.remove("862bac537ffffff") + # Remove three regions from second ring + indices.remove("862bacc9fffffff") + indices.remove("862baccd7ffffff") + indices.remove("862baccdfffffff") + return gpd.GeoDataFrame(index=indices) + + +@pytest.mark.parametrize( # type: ignore + "regions_gdf_fixture,expected", + [ + ( + "empty_gdf", + set(), + ), + ( + "single_hex_gdf", + set(), + ), + ( + "hex_without_one_neighbour_gdf", + { + "811f3ffffffffff", + "811fbffffffffff", + "811ebffffffffff", + "811efffffffffff", + "811e7ffffffffff", + }, + ), + ], +) +def test_get_neighbours_with_regions_gdf( + regions_gdf_fixture: str, expected: Set[str], request: Any +) -> None: + """Test get_neighbours of H3Neighbourhood with a specified regions GeoDataFrame.""" + regions_gdf = request.getfixturevalue(regions_gdf_fixture) + assert H3Neighbourhood(regions_gdf).get_neighbours("811e3ffffffffff") == expected + + +@pytest.mark.parametrize( # type: ignore + "distance,expected", + [ + ( + 0, + set(), + ), + ( + 1, + { + "862bac50fffffff", + "862bac517ffffff", + "862bac51fffffff", + "862bac527ffffff", + }, + ), + ( + 2, + { + "862bac50fffffff", + "862bac517ffffff", + "862bac51fffffff", + "862bac527ffffff", + "862ba124fffffff", + "862ba126fffffff", + "862bac427ffffff", + "862bac437ffffff", + "862bac557ffffff", + "862bac577ffffff", + "862bac5a7ffffff", + "862bac5afffffff", + "862bacc8fffffff", + }, + ), + ], +) +def test_get_neighbours_up_to_distance_with_regions_gdf( + distance: int, expected: Set[str], request: Any +) -> None: + """Test get_neighbours_up_to_distance of H3Neighbourhood with a specified regions + GeoDataFrame. + """ + regions_gdf = request.getfixturevalue("two_rings_regions_some_missing") + neighbourhood = H3Neighbourhood(regions_gdf) + initial_region_index = "862bac507ffffff" + assert neighbourhood.get_neighbours_up_to_distance(initial_region_index, distance) == expected + + +@pytest.mark.parametrize( # type: ignore + "distance,expected", + [ + ( + 0, + set(), + ), + ( + 1, + { + "862bac50fffffff", + "862bac517ffffff", + "862bac51fffffff", + "862bac527ffffff", + }, + ), + ( + 2, + { + "862ba124fffffff", + "862ba126fffffff", + "862bac427ffffff", + "862bac437ffffff", + "862bac557ffffff", + "862bac577ffffff", + "862bac5a7ffffff", + "862bac5afffffff", + "862bacc8fffffff", + }, + ), + ], +) +def test_get_neighbours_at_distance_with_regions_gdf( + distance: int, expected: Set[str], request: Any +) -> None: + """Test get_neighbours_at_distance of H3Neighbourhood with a specified regions GeoDataFrame.""" + regions_gdf = request.getfixturevalue("two_rings_regions_some_missing") + neighbourhood = H3Neighbourhood(regions_gdf) + initial_region_index = "862bac507ffffff" + assert neighbourhood.get_neighbours_at_distance(initial_region_index, distance) == expected From d3a4de5e930f185c2961762b899e737bbd25bd41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Wo=C5=BAniak?= Date: Mon, 13 Mar 2023 21:34:51 +0100 Subject: [PATCH 3/3] chore: add example notebook for H3Neighbourhood, add folium and mapclassify dependencies, add notice to H3Neighbourhood --- .../neighbourhoods/h3_neighbourhood.ipynb | 221 ++++++++++++++++ pdm.lock | 235 ++++++------------ pyproject.toml | 2 + srai/neighbourhoods/h3_neighbourhood.py | 4 + 4 files changed, 299 insertions(+), 163 deletions(-) create mode 100644 examples/neighbourhoods/h3_neighbourhood.ipynb diff --git a/examples/neighbourhoods/h3_neighbourhood.ipynb b/examples/neighbourhoods/h3_neighbourhood.ipynb new file mode 100644 index 000000000..331f83d45 --- /dev/null +++ b/examples/neighbourhoods/h3_neighbourhood.ipynb @@ -0,0 +1,221 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from srai.neighbourhoods import H3Neighbourhood\n", + "import osmnx as ox\n", + "from srai.regionizers import H3Regionizer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "from typing import Set, Optional\n", + "\n", + "\n", + "def show_neighbours(\n", + " regions_gdf: gpd.GeoDataFrame, region_id: str, neighbours_ids: Optional[Set[str]] = None\n", + "):\n", + " regions = regions_gdf.copy()\n", + " regions[\"type\"] = \"none\"\n", + " regions.loc[region_id, \"type\"] = \"region\"\n", + " if neighbours_ids is not None:\n", + " regions.loc[list(neighbours_ids), \"type\"] = \"neighbour\"\n", + " return regions.explore(tiles=\"CartoDB positron\", column=\"type\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gdf_sf = ox.geocode_to_gdf(\"Wrocław, PL\")\n", + "regions_gdf = H3Regionizer(8).transform(gdf_sf)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Region somewhere in the middle of the area under analysis" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Direct neighbours" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "neighbourhood_with_regions = H3Neighbourhood(regions_gdf)\n", + "region_id = \"881e204089fffff\"\n", + "neighbours_ids = neighbourhood_with_regions.get_neighbours(region_id)\n", + "show_neighbours(regions_gdf, region_id, neighbours_ids)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Only 3rd ring" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "neighbours_ids = neighbourhood_with_regions.get_neighbours_at_distance(region_id, 3)\n", + "show_neighbours(regions_gdf, region_id, neighbours_ids)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Regions up to distance 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "neighbours_ids = neighbourhood_with_regions.get_neighbours_up_to_distance(region_id, 3)\n", + "show_neighbours(regions_gdf, region_id, neighbours_ids)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Edge region" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Neighbourhood only returns the indices of available regions if provided with regions_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "edge_region_id = \"881e2050bdfffff\"\n", + "neighbours_ids = neighbourhood_with_regions.get_neighbours(edge_region_id)\n", + "print(neighbours_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "show_neighbours(regions_gdf, edge_region_id, neighbours_ids)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On the other hand, an \"unbiased\" H3Neighbourhood returns all 6 neighbours from H3." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "neighbourhood_without_regions = H3Neighbourhood()\n", + "neighbourhood_without_regions.get_neighbours(edge_region_id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regions with a gap" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One thing to note when using the H3Neighbourhood is that it uses the h3 library under the hood. The only post-processing step is to select from among the regions under analysis. Due to that some neighbours can be included as K-th neighbours, even if there is no path of length K between them and the regions you ask for. This is because H3 still treats them as a part of the K-th ring. An example is shown below" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "edge_region_id = \"881e2050bdfffff\"\n", + "neighbours_ids = neighbourhood_with_regions.get_neighbours_at_distance(edge_region_id, 2)\n", + "print(neighbours_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "show_neighbours(regions_gdf, edge_region_id, neighbours_ids)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pdm.lock b/pdm.lock index 54796be8d..a9bf7a788 100644 --- a/pdm.lock +++ b/pdm.lock @@ -663,6 +663,12 @@ dependencies = [ "MarkupSafe>=2.0", ] +[[package]] +name = "joblib" +version = "1.2.0" +requires_python = ">=3.7" +summary = "Lightweight pipelining with Python functions" + [[package]] name = "jsbeautifier" version = "1.14.7" @@ -872,6 +878,18 @@ version = "4.9.2" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" summary = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +[[package]] +name = "mapclassify" +version = "2.5.0" +summary = "Classification Schemes for Choropleth Maps." +dependencies = [ + "networkx", + "numpy>=1.3", + "pandas>=1.0", + "scikit-learn", + "scipy>=1.0", +] + [[package]] name = "markdown" version = "3.3.7" @@ -1271,41 +1289,6 @@ version = "1.24.2" requires_python = ">=3.8" summary = "Fundamental package for array computing in Python" -[[package]] -name = "nvidia-cublas-cu11" -version = "11.10.3.66" -requires_python = ">=3" -summary = "CUBLAS native runtime libraries" -dependencies = [ - "setuptools", - "wheel", -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu11" -version = "11.7.99" -requires_python = ">=3" -summary = "NVRTC native runtime libraries" - -[[package]] -name = "nvidia-cuda-runtime-cu11" -version = "11.7.99" -requires_python = ">=3" -summary = "CUDA Runtime native Libraries" -dependencies = [ - "setuptools", - "wheel", -] - -[[package]] -name = "nvidia-cudnn-cu11" -version = "8.5.0.96" -requires_python = ">=3" -summary = "cuDNN runtime libraries" -dependencies = [ - "nvidia-cublas-cu11", -] - [[package]] name = "osmium" version = "3.6.0" @@ -1332,21 +1315,6 @@ dependencies = [ "requests>=2.28", ] -[[package]] -name = "osmpythontools" -version = "0.3.5" -summary = "A library to access OpenStreetMap related services" -dependencies = [ - "beautifulsoup4", - "geojson", - "lxml", - "matplotlib", - "numpy", - "pandas", - "ujson", - "xarray", -] - [[package]] name = "overpass" version = "0.7" @@ -1814,6 +1782,18 @@ dependencies = [ "wheel>=0.36.1", ] +[[package]] +name = "scikit-learn" +version = "1.2.2" +requires_python = ">=3.8" +summary = "A set of python modules for machine learning and data mining" +dependencies = [ + "joblib>=1.1.1", + "numpy>=1.17.3", + "scipy>=1.3.2", + "threadpoolctl>=2.0.0", +] + [[package]] name = "scipy" version = "1.9.3" @@ -1905,6 +1885,12 @@ dependencies = [ "tornado>=6.1.0", ] +[[package]] +name = "threadpoolctl" +version = "3.1.0" +requires_python = ">=3.6" +summary = "threadpoolctl" + [[package]] name = "tinycss2" version = "1.2.1" @@ -1947,10 +1933,6 @@ version = "1.13.1" requires_python = ">=3.7.0" summary = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" dependencies = [ - "nvidia-cublas-cu11==11.10.3.66; platform_system == \"Linux\"", - "nvidia-cuda-nvrtc-cu11==11.7.99; platform_system == \"Linux\"", - "nvidia-cuda-runtime-cu11==11.7.99; platform_system == \"Linux\"", - "nvidia-cudnn-cu11==8.5.0.96; platform_system == \"Linux\"", "typing-extensions", ] @@ -2042,12 +2024,6 @@ version = "4.5.0" requires_python = ">=3.7" summary = "Backported and Experimental Type Hints for Python 3.7+" -[[package]] -name = "ujson" -version = "5.7.0" -requires_python = ">=3.7" -summary = "Ultra fast JSON encoder and decoder for Python" - [[package]] name = "untokenize" version = "0.1.1" @@ -2137,17 +2113,6 @@ dependencies = [ "notebook>=4.4.1", ] -[[package]] -name = "xarray" -version = "2023.1.0" -requires_python = ">=3.8" -summary = "N-D labeled arrays and datasets in Python" -dependencies = [ - "numpy>=1.20", - "packaging>=21.3", - "pandas>=1.3", -] - [[package]] name = "yarl" version = "1.8.2" @@ -2166,7 +2131,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" [metadata] lock_version = "4.1" -content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc288965408" +content_hash = "sha256:99c295c599a759eb30a17013697c0d8ed645d53982b5587cce407289406f7e85" [metadata.files] "aiohttp 3.8.4" = [ @@ -2884,6 +2849,10 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/7a/ff/75c28576a1d900e87eb6335b063fab47a8ef3c8b4d88524c4bf78f670cce/Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, {url = "https://files.pythonhosted.org/packages/bc/c3/f068337a370801f372f2f8f6bad74a5c140f6fda3d9de154052708dd3c65/Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, ] +"joblib 1.2.0" = [ + {url = "https://files.pythonhosted.org/packages/45/dd/a5435a6902d6315241c48a5343e6e6675b007e05d3738ed97a7a47864e53/joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, + {url = "https://files.pythonhosted.org/packages/91/d4/3b4c8e5a30604df4c7518c562d4bf0502f2fa29221459226e140cf846512/joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, +] "jsbeautifier 1.14.7" = [ {url = "https://files.pythonhosted.org/packages/7d/0a/6cb21f26972a794ba994a4680998177fdd4130b2ee2d1b82d424721cc103/jsbeautifier-1.14.7.tar.gz", hash = "sha256:77993254db1ff6f84eb6e1d75e3b6b72cba2ef20813a585b2d81e8e5e3c713c6"}, ] @@ -3102,6 +3071,10 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/f6/45/232a3be71587fc534c009147b36081eb9bebd3bf6e608aec84598325aa41/lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, {url = "https://files.pythonhosted.org/packages/ff/d9/e821232295ec540a9c62bbfd6121c2e2969996ee8bc3b0c5325cc88272d0/lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, ] +"mapclassify 2.5.0" = [ + {url = "https://files.pythonhosted.org/packages/a1/63/d5cce1d7deee87721f98c5a72a563d5f5d6e616eaff647b247cdd6538062/mapclassify-2.5.0.tar.gz", hash = "sha256:5eb1f782155b5a90ec93c1dc52b300a2fad33117dcf08b7c858ed96da2a7baa0"}, + {url = "https://files.pythonhosted.org/packages/c0/e3/66416c37afce85fee750de8641314dda2a5af9457c8802ca4b173874f4e5/mapclassify-2.5.0-py3-none-any.whl", hash = "sha256:90299a8ae3a06cdb531f02ab8160a3693ff4bc710ba52c05bec0d0a192b3d608"}, +] "markdown 3.3.7" = [ {url = "https://files.pythonhosted.org/packages/d6/58/79df20de6e67a83f0d0bbfe6c19bb82adf68cdf362885257eb01099f930a/Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, {url = "https://files.pythonhosted.org/packages/f3/df/ca72f352e15b6f8ce32b74af029f1189abffb906f7c137501ffe69c98a65/Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, @@ -3458,23 +3431,6 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/fa/df/53e8c0c8ccecf360b827a3d2b1b6060644c635c3149a9d6415a6fe4ccf44/numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, {url = "https://files.pythonhosted.org/packages/ff/98/7b71cabcce208f8c67398e812068524e473a143342583d55955cbb92b463/numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, ] -"nvidia-cublas-cu11 11.10.3.66" = [ - {url = "https://files.pythonhosted.org/packages/7a/08/57e6b6481af73590259a9600c32a68eb853966e354fca147cde17ed9ea27/nvidia_cublas_cu11-11.10.3.66-py3-none-win_amd64.whl", hash = "sha256:8ac17ba6ade3ed56ab898a036f9ae0756f1e81052a317bf98f8c6d18dc3ae49e"}, - {url = "https://files.pythonhosted.org/packages/ce/41/fdeb62b5437996e841d83d7d2714ca75b886547ee8017ee2fe6ea409d983/nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"}, -] -"nvidia-cuda-nvrtc-cu11 11.7.99" = [ - {url = "https://files.pythonhosted.org/packages/9e/10/c9fc448f33d439981d6a74b693526871c4ef13e8d81a7b4de12e3a12a1b9/nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:f2effeb1309bdd1b3854fc9b17eaf997808f8b25968ce0c7070945c4265d64a3"}, - {url = "https://files.pythonhosted.org/packages/ea/8d/0709ba16c2831c17ec1c2ea1eeb89ada11ffa8d966d773cce0a7463b22bb/nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:f7d9610d9b7c331fa0da2d1b2858a4a8315e6d49765091d28711c8946e7425e7"}, - {url = "https://files.pythonhosted.org/packages/ef/25/922c5996aada6611b79b53985af7999fc629aee1d5d001b6a22431e18fec/nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"}, -] -"nvidia-cuda-runtime-cu11 11.7.99" = [ - {url = "https://files.pythonhosted.org/packages/32/2c/d89ea2b4051fbabff8d2edda8c735dabae6d5d1b8d5215f9749d38dcdb72/nvidia_cuda_runtime_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:bc77fa59a7679310df9d5c70ab13c4e34c64ae2124dd1efd7e5474b71be125c7"}, - {url = "https://files.pythonhosted.org/packages/36/92/89cf558b514125d2ebd8344dd2f0533404b416486ff681d5434a5832a019/nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"}, -] -"nvidia-cudnn-cu11 8.5.0.96" = [ - {url = "https://files.pythonhosted.org/packages/db/69/4d28d4706946f89fffe3f87373a079ae95dc17f9c0fcd840fe570c67e36b/nvidia_cudnn_cu11-8.5.0.96-py3-none-manylinux1_x86_64.whl", hash = "sha256:71f8111eb830879ff2836db3cccf03bbd735df9b0d17cd93761732ac50a8a108"}, - {url = "https://files.pythonhosted.org/packages/dc/30/66d4347d6e864334da5bb1c7571305e501dcb11b9155971421bb7bb5315f/nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"}, -] "osmium 3.6.0" = [ {url = "https://files.pythonhosted.org/packages/01/3a/408e2e6ad6d18a0ed4323f425117713eef3171a7da6a6aec994f730489d6/osmium-3.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb99685d18f08e766ba8d971a7f93a3bfb2829b917996591a7cfec053c2711b3"}, {url = "https://files.pythonhosted.org/packages/10/cd/145fe62f4a5a77d7cf78177c10f211afacce09ce3add2f546be5e76e2e7d/osmium-3.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7665829f16ecea783e037ef2ed6c983909ce48ea7b0e7fdff4fbc23159a27368"}, @@ -3500,9 +3456,6 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/0b/39/5132e483efee609feedbb769ac0a9031785fec4181b0dbeb79614710b50c/osmnx-1.2.2-py2.py3-none-any.whl", hash = "sha256:94f2a3929e857d8c0da39ae552c6da3b1a3f4bcfea6de108696bda5ee3a7689d"}, {url = "https://files.pythonhosted.org/packages/da/93/2711a45fe7a9ea7d6498df61dde5e2bb4ac51fb74206c459cee2cdd29961/osmnx-1.2.2.tar.gz", hash = "sha256:30924452ca02758ece3301f9fcfb1b80edf31e2be7abe7fa7e0fefddb5050408"}, ] -"osmpythontools 0.3.5" = [ - {url = "https://files.pythonhosted.org/packages/b8/c0/d7fac2c6992a07bedec01de2ed3b1678b28fb9c374961a124c7d6bb73772/OSMPythonTools-0.3.5.tar.gz", hash = "sha256:13ff721f760fdad5dd78b4d1461d286b78bba96ee151a7301ee8c11a0c258be9"}, -] "overpass 0.7" = [ {url = "https://files.pythonhosted.org/packages/14/39/4db852d37598f1e415523f2b03b82d4a55cda511a6b8dafb90812bddee2c/overpass-0.7.tar.gz", hash = "sha256:267fac92d15caac15e15db6d9752341493065c94e7eae1187a8aea0d64005650"}, {url = "https://files.pythonhosted.org/packages/62/4e/7a5aebe8db73394682f13548b9b016c815c7a9d5a38af3211d23c73a44c1/overpass-0.7-py3-none-any.whl", hash = "sha256:1db80a3afd7693056033b61577fba56747ede6f47cf70a6ced6dae47b9ac0bb4"}, @@ -4135,6 +4088,29 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/f1/95/dae88019fcff89cc1cc3b6fc85b9fc3a25a264b21b67000a665dd3ae372a/scalene-1.5.19-cp310-cp310-win_amd64.whl", hash = "sha256:cdb9be734cfb6b42eef1105fee1876a5c465eb72e109c0d0ceea6e6bdbce21c6"}, {url = "https://files.pythonhosted.org/packages/fb/08/ed0d55f81bc2bc261c922a2d4171360b1a3a5d6a4e57ccc640fb09a02706/scalene-1.5.19-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:d8bc53334b13e486ed6ba03fe4b7595ad4038d05537793eed9999952ba1b34c6"}, ] +"scikit-learn 1.2.2" = [ + {url = "https://files.pythonhosted.org/packages/17/13/d4142c9105507ba363d9f3602941b7baf79763cc17e73fa9be826ba3aa89/scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, + {url = "https://files.pythonhosted.org/packages/27/4a/1afe473760b07663710a75437b795ef37362aebb8bf513ff3bbf78fbd0c6/scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, + {url = "https://files.pythonhosted.org/packages/2f/fd/9fcbe7fe94150e72d87120cbc462bde1971c3674e726b81f4a4c4fdfa8e1/scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, + {url = "https://files.pythonhosted.org/packages/39/85/95298f12ec1ed756938edafe9f15498109ec8dbfc833ae492ae1cc333933/scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, + {url = "https://files.pythonhosted.org/packages/3a/9c/7e26446b45192186c63bf6e9fc50a4834b8c9d85a719e06d60a244ded6f3/scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, + {url = "https://files.pythonhosted.org/packages/3c/21/ee21352f69a980614cb4193d68a64a83aa2c0f80183c9485d6d61821a922/scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, + {url = "https://files.pythonhosted.org/packages/48/92/a39d1c9e0a6cb5ed4112899ecca590138484356ba8c4274dde6c3893ff14/scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, + {url = "https://files.pythonhosted.org/packages/4c/64/a1e6e92b850b39200c82e3bc54d556b2c634b3904c39ac5cdb10b1c5765f/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, + {url = "https://files.pythonhosted.org/packages/4f/6b/a204ee49e2d4dec62b38394adbdc7672e9a9df9f359a80705a07a46cace6/scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, + {url = "https://files.pythonhosted.org/packages/51/b6/d9a414b6579c4ec5703cebc0fe7b7b6821344190bffa3d46a1a23efd173a/scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, + {url = "https://files.pythonhosted.org/packages/51/d1/58faa69e97ee60e99dcdde5df43f17f0887eda5de9eafb6534a51b63d791/scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, + {url = "https://files.pythonhosted.org/packages/5a/43/5c4d21217df6a033999ee531fdfd52809263727b4afb26f7196a8ec709ae/scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, + {url = "https://files.pythonhosted.org/packages/5b/fb/478a0460ae2843dd2fc7a7f9ddcd8bb033ae21eb968df6a8cbe8094a28bc/scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, + {url = "https://files.pythonhosted.org/packages/72/aa/a97b6ae8fc4ce0e1b3837b3613b0563ce843eb34cf4089fb41d613dee957/scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, + {url = "https://files.pythonhosted.org/packages/81/84/756be2b975959a5f94124d5584ead75d7ca99184f2d16664a0157b274b9a/scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, + {url = "https://files.pythonhosted.org/packages/ae/a8/829ef05dbeb9aa4436190ea00c8db6d59a39751b45e17932221d27fe9e51/scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, + {url = "https://files.pythonhosted.org/packages/c9/fa/8e158d81e3602da1e7bafbd4987938bc003fe4b0f44d65681e7f8face95a/scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, + {url = "https://files.pythonhosted.org/packages/d7/8a/301594a8bb1cfeeb95dd86aa7dfedd31e93211940105429abddf0933cfff/scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, + {url = "https://files.pythonhosted.org/packages/db/98/169b46a84b48f92df2b5e163fce75d471f4df933f8b3d925a61133210776/scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, + {url = "https://files.pythonhosted.org/packages/f4/4d/fe3b35e18407da4b386be58616bd0f941ea1762a6c6798267f3aa64ef5d5/scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, + {url = "https://files.pythonhosted.org/packages/fa/1e/36d7609e84b50d4a2e5bc43cd5013d9ea885799e5813a1e9cf5bb1afd3f4/scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, +] "scipy 1.9.3" = [ {url = "https://files.pythonhosted.org/packages/0a/2e/44795c6398e24e45fa0bb61c3e98de1cfea567b1b51efd3751e2f7ff9720/scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, {url = "https://files.pythonhosted.org/packages/40/0e/3ff193b6ba6a0a6f13f8d367e8976370232e769bd609c8c11d86e0353adf/scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, @@ -4262,6 +4238,10 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/55/be/748034192602b9fd69ba94544c1675ff18b039ed8f346ad783478e31144f/terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, {url = "https://files.pythonhosted.org/packages/84/a7/c7628d79651b8c8c775d27b374315a825141b5783512e82026fb210dd639/terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, ] +"threadpoolctl 3.1.0" = [ + {url = "https://files.pythonhosted.org/packages/1b/c7/3d85f8b3894ba7228d0c74e16e97a36a72b2cd2b0e0f8f89b5d435d11f71/threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, + {url = "https://files.pythonhosted.org/packages/61/cf/6e354304bcb9c6413c4e02a747b600061c21d38ba51e7e544ac7bc66aecc/threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, +] "tinycss2 1.2.1" = [ {url = "https://files.pythonhosted.org/packages/75/be/24179dfaa1d742c9365cbd0e3f0edc5d3aa3abad415a2327c5a6ff8ca077/tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, {url = "https://files.pythonhosted.org/packages/da/99/fd23634d6962c2791fb8cb6ccae1f05dcbfc39bce36bba8b1c9a8d92eae8/tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, @@ -4354,73 +4334,6 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/31/25/5abcd82372d3d4a3932e1fa8c3dbf9efac10cc7c0d16e78467460571b404/typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, {url = "https://files.pythonhosted.org/packages/d3/20/06270dac7316220643c32ae61694e451c98f8caf4c8eab3aa80a2bedf0df/typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] -"ujson 5.7.0" = [ - {url = "https://files.pythonhosted.org/packages/00/6f/4f16d6a9c30994aabc13b6fbbd0df62077892ad3b4c63d62d8472a1c7d5f/ujson-5.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ff0004c3f5a9a6574689a553d1b7819d1a496b4f005a7451f339dc2d9f4cf98c"}, - {url = "https://files.pythonhosted.org/packages/00/8c/ef2884d41cdeb0324c69be5acf4367282e34c0c80b7c255ac6955203b4a8/ujson-5.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:581c945b811a3d67c27566539bfcb9705ea09cb27c4be0002f7a553c8886b817"}, - {url = "https://files.pythonhosted.org/packages/01/ac/d06d6361ffb641cda6ffd16c763a76eed07abb073c49a41fbf007c764242/ujson-5.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5eba5e69e4361ac3a311cf44fa71bc619361b6e0626768a494771aacd1c2f09b"}, - {url = "https://files.pythonhosted.org/packages/02/5f/bef7d57cd7dba6c3124ce2c42c215e2194f51835c2e9176e2833ea04e15c/ujson-5.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:75204a1dd7ec6158c8db85a2f14a68d2143503f4bafb9a00b63fe09d35762a5e"}, - {url = "https://files.pythonhosted.org/packages/08/47/41f40896aad1a098b4fea2e0bfe66a3fed8305d2457945f7082b7f493307/ujson-5.7.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a5d2f44331cf04689eafac7a6596c71d6657967c07ac700b0ae1c921178645da"}, - {url = "https://files.pythonhosted.org/packages/11/bd/bdc0a3aaae8e14449adb232b15a66f641dee75a2cf5d524a85d78c3c1577/ujson-5.7.0-cp39-cp39-win32.whl", hash = "sha256:cd90027e6d93e8982f7d0d23acf88c896d18deff1903dd96140613389b25c0dd"}, - {url = "https://files.pythonhosted.org/packages/13/c0/a13ebed6b1538c258957a67c0f021e280a28a366d5f298bbbe9785b169d5/ujson-5.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0e4e8981c6e7e9e637e637ad8ffe948a09e5434bc5f52ecbb82b4b4cfc092bfb"}, - {url = "https://files.pythonhosted.org/packages/18/19/2754b8d50affbf4456f31af5a75a1904d40499e89facdb742496b0a9c8c7/ujson-5.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b01a9af52a0d5c46b2c68e3f258fdef2eacaa0ce6ae3e9eb97983f5b1166edb6"}, - {url = "https://files.pythonhosted.org/packages/1f/b5/2717793593172454fa7cfd61ca523bca71c9839ea6651b3d37260ef1b225/ujson-5.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:c96e3b872bf883090ddf32cc41957edf819c5336ab0007d0cf3854e61841726d"}, - {url = "https://files.pythonhosted.org/packages/21/0b/9fd1a3dc94175d8cf141c3356776346e1b5fca10571441fc370fbf560e1c/ujson-5.7.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:800bf998e78dae655008dd10b22ca8dc93bdcfcc82f620d754a411592da4bbf2"}, - {url = "https://files.pythonhosted.org/packages/22/27/81b6b0537fbc6ff0baaeb175738ee7464d643ad5ff30105e03a9e744682d/ujson-5.7.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e87cec407ec004cf1b04c0ed7219a68c12860123dfb8902ef880d3d87a71c172"}, - {url = "https://files.pythonhosted.org/packages/23/46/874217a97b822d0d9c072fe49db362ce1ece8e912ea6422a3f12fa5e56e1/ujson-5.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54384ce4920a6d35fa9ea8e580bc6d359e3eb961fa7e43f46c78e3ed162d56ff"}, - {url = "https://files.pythonhosted.org/packages/29/5f/52a99a8ae0ae74213f1994a8180afd32b4d0cde427e2610f6e1ffb0fa15c/ujson-5.7.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e80f0d03e7e8646fc3d79ed2d875cebd4c83846e129737fdc4c2532dbd43d9e"}, - {url = "https://files.pythonhosted.org/packages/2c/fe/855ee750936e9d065e6e49f7340571bd2db756fbcaf338c00456d39dd217/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bab10165db6a7994e67001733f7f2caf3400b3e11538409d8756bc9b1c64f7e8"}, - {url = "https://files.pythonhosted.org/packages/2e/4a/e802a5f22e0fffdeaceb3d139c79ab7995f118c2fadb8cdb129a7fd83c8d/ujson-5.7.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c0d1f7c3908357ee100aa64c4d1cf91edf99c40ac0069422a4fd5fd23b263263"}, - {url = "https://files.pythonhosted.org/packages/2f/47/645054e94562a5b43604c55e967d91464603bcb64b6c8c4447211c41a6da/ujson-5.7.0-cp311-cp311-win32.whl", hash = "sha256:26c2b32b489c393106e9cb68d0a02e1a7b9d05a07429d875c46b94ee8405bdb7"}, - {url = "https://files.pythonhosted.org/packages/30/c3/adb327b07e554f9c14f05df79bbad914532054f31303bb0716744354fe51/ujson-5.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341f891d45dd3814d31764626c55d7ab3fd21af61fbc99d070e9c10c1190680b"}, - {url = "https://files.pythonhosted.org/packages/31/5c/c8b9e14583aeaf473596c3861edf20c0c3d850e00873858f8279c6e884f5/ujson-5.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14f9082669f90e18e64792b3fd0bf19f2b15e7fe467534a35ea4b53f3bf4b755"}, - {url = "https://files.pythonhosted.org/packages/32/ca/e1bf3d4d263e4e30f176c454aa7498be0059bc4eecce92563ed403014273/ujson-5.7.0-cp37-cp37m-win32.whl", hash = "sha256:6faf46fa100b2b89e4db47206cf8a1ffb41542cdd34dde615b2fc2288954f194"}, - {url = "https://files.pythonhosted.org/packages/34/ad/98c4bd2cfe2d04330bc7d6b7e3dee5b52b7358430b1cf4973ca25b7413c3/ujson-5.7.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a3d794afbf134df3056a813e5c8a935208cddeae975bd4bc0ef7e89c52f0ce0"}, - {url = "https://files.pythonhosted.org/packages/37/34/017f0904417617d2af2a30021f0b494535e63cb4a343dc32b05d9f0e96dd/ujson-5.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18679484e3bf9926342b1c43a3bd640f93a9eeeba19ef3d21993af7b0c44785d"}, - {url = "https://files.pythonhosted.org/packages/3b/bd/a7ad5d56a4a9491487bd658cda12c2a7a0d5a41c9943086471e6cfa73854/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64772a53f3c4b6122ed930ae145184ebaed38534c60f3d859d8c3f00911eb122"}, - {url = "https://files.pythonhosted.org/packages/43/1a/b0a027144aa5c8f4ea654f4afdd634578b450807bb70b9f8bad00d6f6d3c/ujson-5.7.0.tar.gz", hash = "sha256:e788e5d5dcae8f6118ac9b45d0b891a0d55f7ac480eddcb7f07263f2bcf37b23"}, - {url = "https://files.pythonhosted.org/packages/47/f8/8e5668e80f7389281954e283222bfaf7f3936809ecf9b9293b9d8b4b40e2/ujson-5.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7312731c7826e6c99cdd3ac503cd9acd300598e7a80bcf41f604fee5f49f566c"}, - {url = "https://files.pythonhosted.org/packages/4a/c4/cabfd64d4b0021285803703af67042aa01e1b1bc646fdf8847cd7e814b15/ujson-5.7.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f7f241488879d91a136b299e0c4ce091996c684a53775e63bb442d1a8e9ae22a"}, - {url = "https://files.pythonhosted.org/packages/4d/f2/035e82d3baacc9c225ca3bae95bed5963bcdd796dd66ffa3fd0a5a087da7/ujson-5.7.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:adf445a49d9a97a5a4c9bb1d652a1528de09dd1c48b29f79f3d66cea9f826bf6"}, - {url = "https://files.pythonhosted.org/packages/50/bf/1893d4f5dc6a2acb9a6db7ff018aa1cb7df367c35d491ebef6e30cdcc8ce/ujson-5.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d3b3499c55911f70d4e074c626acdb79a56f54262c3c83325ffb210fb03e44d"}, - {url = "https://files.pythonhosted.org/packages/52/b9/7909bc873470f3fb663857d05856c4bce2846a9a72439ca51095b88b81ab/ujson-5.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed24406454bb5a31df18f0a423ae14beb27b28cdfa34f6268e7ebddf23da807e"}, - {url = "https://files.pythonhosted.org/packages/58/57/bbc3e7efa9967247fba684b60a392174b7d18222931edcef2d52565bc0ac/ujson-5.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b0f2680ce8a70f77f5d70aaf3f013d53e6af6d7058727a35d8ceb4a71cdd4e9"}, - {url = "https://files.pythonhosted.org/packages/59/9e/447bce1a6f29ff1bfd726ea5aa9b934bc02fef9f2b41689a00e17538f436/ujson-5.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3af9f9f22a67a8c9466a32115d9073c72a33ae627b11de6f592df0ee09b98b6"}, - {url = "https://files.pythonhosted.org/packages/5a/b1/7edca18e74a218d39fd8d00efc489cfd07c94271959103c647b794ce7bd5/ujson-5.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b5ac3d5c5825e30b438ea92845380e812a476d6c2a1872b76026f2e9d8060fc2"}, - {url = "https://files.pythonhosted.org/packages/61/dd/38fc61ee050bd7cd24126721fae6cd7044b34cd8821e9d12a02c04757b7d/ujson-5.7.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7316d3edeba8a403686cdcad4af737b8415493101e7462a70ff73dd0609eafc"}, - {url = "https://files.pythonhosted.org/packages/65/89/398648bb869af5fce3d246ba61fb154528d5e71c24d6bcb008676d15fc2c/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b4257307e3662aa65e2644a277ca68783c5d51190ed9c49efebdd3cbfd5fa44"}, - {url = "https://files.pythonhosted.org/packages/69/24/a7df580e9981c4f8a28eb96eb897ab7363b96fca7f8a398ddc735bf190ea/ujson-5.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f242eec917bafdc3f73a1021617db85f9958df80f267db69c76d766058f7b19"}, - {url = "https://files.pythonhosted.org/packages/71/bc/c8851ac5cf2ec8b0a69ef1e220fc27a88f8ff72fe1751fda0d7b28b58604/ujson-5.7.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:afff311e9f065a8f03c3753db7011bae7beb73a66189c7ea5fcb0456b7041ea4"}, - {url = "https://files.pythonhosted.org/packages/73/34/8821ac107019227a5ba3a544208cff444fee14bf779e08ec4e3706c91d00/ujson-5.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dda9aa4c33435147262cd2ea87c6b7a1ca83ba9b3933ff7df34e69fee9fced0c"}, - {url = "https://files.pythonhosted.org/packages/75/4e/5b17c981aee3d98aeac66d4e7a8cab8d8bb49172d9bc73692af14c7a18fb/ujson-5.7.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ed22f9665327a981f288a4f758a432824dc0314e4195a0eaeb0da56a477da94d"}, - {url = "https://files.pythonhosted.org/packages/75/82/b08227424871ac0cd739d142a7fd071d2934755dfcf8460e6e13d649f1b1/ujson-5.7.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ee997799a23227e2319a3f8817ce0b058923dbd31904761b788dc8f53bd3e30"}, - {url = "https://files.pythonhosted.org/packages/76/23/86820eb933c7d626380881a2d88bf9e395771ce349e5261df1e6760d209c/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7592f40175c723c032cdbe9fe5165b3b5903604f774ab0849363386e99e1f253"}, - {url = "https://files.pythonhosted.org/packages/7b/77/14bef9f13f68f93643d1e8f3652bd40e7bdf54fc8968f20976c3c2a1dbe1/ujson-5.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5593263a7fcfb934107444bcfba9dde8145b282de0ee9f61e285e59a916dda0f"}, - {url = "https://files.pythonhosted.org/packages/7b/f6/f363b991aae592a77fe80f2882753211b59ed6a5174fddbb1ed6f5deccad/ujson-5.7.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d7ff6ebb43bc81b057724e89550b13c9a30eda0f29c2f506f8b009895438f5a6"}, - {url = "https://files.pythonhosted.org/packages/85/4a/1db9cc0d4d78d4485a6527cf5ed2602729d87d8c35a4f11ec6890708ac75/ujson-5.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6411aea4c94a8e93c2baac096fbf697af35ba2b2ed410b8b360b3c0957a952d3"}, - {url = "https://files.pythonhosted.org/packages/87/f1/d5ee0307d455aab6fe90fde167a00feeb8f71eaf66292d2926221d1de2fe/ujson-5.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a19fd8e7d8cc58a169bea99fed5666023adf707a536d8f7b0a3c51dd498abf"}, - {url = "https://files.pythonhosted.org/packages/95/91/b1a647f700e26ec93571992322fe0f92fe03254fefb74ee3eb5342db10ef/ujson-5.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:523ee146cdb2122bbd827f4dcc2a8e66607b3f665186bce9e4f78c9710b6d8ab"}, - {url = "https://files.pythonhosted.org/packages/95/fb/fcd8f947f773ea55f650d64acd15240592c5637b3bfea164b4cd83da84c1/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35209cb2c13fcb9d76d249286105b4897b75a5e7f0efb0c0f4b90f222ce48910"}, - {url = "https://files.pythonhosted.org/packages/a8/0d/51c70250116700017a3dc84ca910ff7c480c8d22afa76366920e8b1fdbfc/ujson-5.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aae4d9e1b4c7b61780f0a006c897a4a1904f862fdab1abb3ea8f45bd11aa58f3"}, - {url = "https://files.pythonhosted.org/packages/aa/e5/7655459351a1ce26202bbe971a6e6959d366925babe716f3751e1de96920/ujson-5.7.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00343501dbaa5172e78ef0e37f9ebd08040110e11c12420ff7c1f9f0332d939e"}, - {url = "https://files.pythonhosted.org/packages/af/9d/d9bb491a5a4bcf99dfda45ac60dd803e6950df24ca6462b9a2bc633c4689/ujson-5.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:af4639f684f425177d09ae409c07602c4096a6287027469157bfb6f83e01448b"}, - {url = "https://files.pythonhosted.org/packages/b0/9b/7ae752c8f1e2e7bf261c4d5ded14a7e8dd6878350d130c78a74a833f37ac/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea7423d8a2f9e160c5e011119741682414c5b8dce4ae56590a966316a07a4618"}, - {url = "https://files.pythonhosted.org/packages/b4/50/5146b9464506718a9372e12d15f2cff330575ee7cf5faf3c51aa83d82e4a/ujson-5.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a6961fc48821d84b1198a09516e396d56551e910d489692126e90bf4887d29"}, - {url = "https://files.pythonhosted.org/packages/b5/27/b8d3830cb60adc08505321b21cd2ae3930fe9d140728026dee17b2f795ef/ujson-5.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8cd622c069368d5074bd93817b31bdb02f8d818e57c29e206f10a1f9c6337dd"}, - {url = "https://files.pythonhosted.org/packages/c1/39/a4e45a0b9f1be517d0236a52292adb21ffdf6531bd36310488ed1ee07071/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d36a807a24c7d44f71686685ae6fbc8793d784bca1adf4c89f5f780b835b6243"}, - {url = "https://files.pythonhosted.org/packages/c8/0c/68c7e7cf5209f6ecb000a2d9876180db8697e70467631fcc0487bad21848/ujson-5.7.0-cp38-cp38-win32.whl", hash = "sha256:bea8d30e362180aafecabbdcbe0e1f0b32c9fa9e39c38e4af037b9d3ca36f50c"}, - {url = "https://files.pythonhosted.org/packages/cd/9b/79454ea8f78e61ad553307cbdf2f93a2cf56f16fd8cff22deef0365c93be/ujson-5.7.0-cp310-cp310-win32.whl", hash = "sha256:7df3fd35ebc14dafeea031038a99232b32f53fa4c3ecddb8bed132a43eefb8ad"}, - {url = "https://files.pythonhosted.org/packages/d1/7d/ec4dace4c686be92845e3d593f01828465546c5b8254ca296324cbcda8f8/ujson-5.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b738282e12a05f400b291966630a98d622da0938caa4bc93cf65adb5f4281c60"}, - {url = "https://files.pythonhosted.org/packages/d2/5b/876d7ca50f6be9c72a806a74d55a585043faae36d9a160ca4351f5d64b4d/ujson-5.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24ad1aa7fc4e4caa41d3d343512ce68e41411fb92adf7f434a4d4b3749dc8f58"}, - {url = "https://files.pythonhosted.org/packages/d4/13/4c59d1dd29f7ec9b80cffb8ac393e735c5171e9430eb9a9af10e8fbc7b66/ujson-5.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2e43ccdba1cb5c6d3448eadf6fc0dae7be6c77e357a3abc968d1b44e265866d"}, - {url = "https://files.pythonhosted.org/packages/d9/3e/507663d97fb574b56b35df2fb3d059516f9d11c270ab0ff170ef9cca2853/ujson-5.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:137831d8a0db302fb6828ee21c67ad63ac537bddc4376e1aab1c8573756ee21c"}, - {url = "https://files.pythonhosted.org/packages/da/bc/d8b84c6e1156a7cdc4b3269994aff52e90101ddbfc0a8dabebbd8f484f54/ujson-5.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b9dc5a90e2149643df7f23634fe202fed5ebc787a2a1be95cf23632b4d90651"}, - {url = "https://files.pythonhosted.org/packages/df/7f/e86c8dad0935b0bdcff712945fd2387f190700c7594786f829daeb955e5e/ujson-5.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c592eb91a5968058a561d358d0fef59099ed152cfb3e1cd14eee51a7a93879e"}, - {url = "https://files.pythonhosted.org/packages/e3/c1/2e7163fdad47acb63ac2231b70b637cd8dada78c2ad985a438930ef0ac8c/ujson-5.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6abb8e6d8f1ae72f0ed18287245f5b6d40094e2656d1eab6d99d666361514074"}, - {url = "https://files.pythonhosted.org/packages/ea/f8/e547383551149f23a9cb40a717d75d2a72c6df50416c68538c64b79cd5bb/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90712dfc775b2c7a07d4d8e059dd58636bd6ff1776d79857776152e693bddea6"}, - {url = "https://files.pythonhosted.org/packages/ef/f5/76dfa7e2e8135213ece8cd18478338bc9a3b4820152ecec5632dce598f66/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b522be14a28e6ac1cf818599aeff1004a28b42df4ed4d7bc819887b9dac915fc"}, - {url = "https://files.pythonhosted.org/packages/f8/d1/369fceb26e8eb69f9f8792323d123351c187c7866a0457c3ffe90ee9793c/ujson-5.7.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:16b2254a77b310f118717715259a196662baa6b1f63b1a642d12ab1ff998c3d7"}, - {url = "https://files.pythonhosted.org/packages/fa/d6/01756485dd9c42f12f9b74c6b4b3f3008917e091597390a970cc85486631/ujson-5.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ee295761e1c6c30400641f0a20d381633d7622633cdf83a194f3c876a0e4b7e"}, -] "untokenize 0.1.1" = [ {url = "https://files.pythonhosted.org/packages/f7/46/e7cea8159199096e1df52da20a57a6665da80c37fb8aeb848a3e47442c32/untokenize-0.1.1.tar.gz", hash = "sha256:3865dbbbb8efb4bb5eaa72f1be7f3e0be00ea8b7f125c69cbd1f5fda926f37a2"}, ] @@ -4501,10 +4414,6 @@ content_hash = "sha256:f473040349f39a3e06c17f1bca129841c8247e35f547c6c2ec706cc28 {url = "https://files.pythonhosted.org/packages/69/3f/4fec898c106ecf3c0b8dc474ddf754f58dd87cb8eaa59aeb2c2876508b1b/widgetsnbextension-3.6.2-py2.py3-none-any.whl", hash = "sha256:ddc70ae828b5d5bfdeaa4444f11a2076a0b08216b82322f616439db25e259d22"}, {url = "https://files.pythonhosted.org/packages/c0/41/16909493b0832ae6d588abc441131b074a725c63c7ab4fdf943891658e8f/widgetsnbextension-3.6.2.tar.gz", hash = "sha256:401b3b4613acceb392f7b80f03ddaf0346a15f1cfe8c1e05702ff233a0dde26e"}, ] -"xarray 2023.1.0" = [ - {url = "https://files.pythonhosted.org/packages/30/05/c52545c83de39d5ccb3f0b06d9bb3ebde74ea0e775b7da5f2f8e11ab4879/xarray-2023.1.0.tar.gz", hash = "sha256:7bee552751ff1b29dab8b7715726e5ecb56691ac54593cf4881dff41978ce0cd"}, - {url = "https://files.pythonhosted.org/packages/b4/a7/897f484225bd8e179a4f39f8e9a4ca26c14e9f7055b495384b1d56e1382d/xarray-2023.1.0-py3-none-any.whl", hash = "sha256:7e530b1deafdd43e5c2b577d0944e6b528fbe88045fd849e49a8d11871ecd522"}, -] "yarl 1.8.2" = [ {url = "https://files.pythonhosted.org/packages/02/51/c33498373d2e0ff5d7f3e76038b7057003927d481405780d22f140906b24/yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"}, {url = "https://files.pythonhosted.org/packages/02/c6/13751bb69244e4835fa8192a20d1d1110091f717f1e1b0168320ed1a29c9/yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"}, diff --git a/pyproject.toml b/pyproject.toml index 8791007e3..254b480ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -87,6 +87,8 @@ visualization = [ "matplotlib>=3.6.1", "plotly>=5.10.0", "kaleido==0.2.1", + "folium>=0.14.0", + "mapclassify>=2.5.0", ] # pdm add -dG docs docs = [ diff --git a/srai/neighbourhoods/h3_neighbourhood.py b/srai/neighbourhoods/h3_neighbourhood.py index 8ecf41d29..e21a11747 100644 --- a/srai/neighbourhoods/h3_neighbourhood.py +++ b/srai/neighbourhoods/h3_neighbourhood.py @@ -24,6 +24,10 @@ def __init__(self, regions_gdf: Optional[gpd.GeoDataFrame] = None) -> None: If a regions GeoDataFrame is provided, only the neighbours that are in the regions GeoDataFrame will be returned by the methods of this instance. + NOTICE: If a region is a part of the k-th ring of a region + and is included in the GeoDataFrame, it will be returned + by get_neighbours_at_distance method with distance k + even when there is no path of length k between the two regions. Args: regions_gdf (Optional[gpd.GeoDataFrame], optional): The regions that are being analyzed.