From be4b363d08b4bb0180c80fbf0da34f2da095402c Mon Sep 17 00:00:00 2001 From: Serge Rey Date: Wed, 18 Jan 2023 20:32:21 -0800 Subject: [PATCH 01/28] add skater_reg to api --- docs/api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api.rst b/docs/api.rst index e70fc232..7ca22b87 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -59,6 +59,7 @@ Regimes models are variants of spatial regression models which allow for structu spreg.GM_Endog_Error_Regimes spreg.GM_Endog_Error_Hom_Regimes spreg.GM_Endog_Error_Het_Regimes + spreg.Skater_reg Seemingly-Unrelated Regressions -------------------------------- From 8882826fd4f54f0f0eb57b4847271abe3b6f1334 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Fri, 24 Mar 2023 13:31:31 -0500 Subject: [PATCH 02/28] Revision of Skater_reg's example notebook and its inclusion in the docs. --- docs/tutorials.rst | 6 + notebooks/skater_reg.ipynb | 43367 +---------------------------------- 2 files changed, 395 insertions(+), 42978 deletions(-) diff --git a/docs/tutorials.rst b/docs/tutorials.rst index a2a450a0..b3f6e1b1 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -15,3 +15,9 @@ Tutorials :caption: Spatial Panel Models with Fixed Effects notebooks/Panel_FE_example.ipynb + +.. toctree:: + :maxdepth: 1 + :caption: Skater_reg: Endogenous Spatial Regimes + + notebooks/skater_reg.ipynb diff --git a/notebooks/skater_reg.ipynb b/notebooks/skater_reg.ipynb index 4427a740..38f05ac6 100644 --- a/notebooks/skater_reg.ipynb +++ b/notebooks/skater_reg.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "0a500c14", "metadata": {}, "source": [ "# Skater Regression" @@ -9,6 +10,7 @@ }, { "cell_type": "markdown", + "id": "1847d3c6", "metadata": {}, "source": [ "### This notebook shows the use of the Skater Regression funcion (Skater_reg), introduced by Anselin & Amaral (2021). For more information on the method, check:\n", @@ -16,1076 +18,109 @@ ] }, { - "cell_type": "code", - "execution_count": 1, + "cell_type": "markdown", + "id": "e4afc8e0", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/anaconda3/envs/analysis/lib/python3.9/site-packages/geopandas/_compat.py:106: UserWarning: The Shapely GEOS version (3.9.1dev-CAPI-1.14.1) is incompatible with the GEOS version PyGEOS was compiled with (3.9.1-CAPI-1.14.2). Conversions between both will be slow.\n", - " warnings.warn(\n" - ] - } - ], "source": [ - "# Required imports\n", - "import libpysal as ps\n", - "import numpy as np\n", - "import spreg\n", - "from spreg.skater_reg import Skater_reg" + "In this example, in addition to the required packages, we will use geopandas to load the data and matplotlib to plot the results. Alternatively, PySAL's own IO could also be used to load the data." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, + "id": "a7a0de53", "metadata": {}, "outputs": [], "source": [ + "# Required imports\n", + "import libpysal as ps\n", + "import numpy as np\n", + "import spreg\n", + "from spreg.skater_reg import Skater_reg\n", + "\n", "# Optional imports\n", - "import geopandas as gpd\n", - "import pandas as pd\n", - "import plotly.express as px\n", - "import plotly.graph_objects as go" + "import matplotlib.pyplot as plt\n", + "import geopandas as gpd" ] }, { "cell_type": "markdown", + "id": "c01ad58d", "metadata": {}, "source": [ - "### To load the data, we can use pure PySAL or (Geo)Pandas\n", - "### Data can be any discrete spatial objects such as points or polygons. Here we use Columbus for simplicity" + "We use Messner et al. (2000) data on homicides and selected socio-economic characteristics for continental U.S. counties to exemplify the use of Skater_reg. It can be downloaded from PySAL's examples repository." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, + "id": "52f82039", "metadata": {}, "outputs": [], "source": [ - "# Pure PySAL alternative\n", - "data = ps.io.open(ps.examples.get_path('columbus.dbf'))\n", - "y = np.array(data.by_col('HOVAL')).reshape((-1,1))\n", - "x = np.array([data.by_col(name) for name in ['INC','CRIME']]).T\n", - "w = ps.weights.Queen.from_shapefile(ps.examples.get_path(\"columbus.shp\"))" + "# Load the example from PySAL\n", + "ps.examples.load_example(\"NCOVR\")\n", + "data = gpd.read_file(ps.examples.get_path('NAT.shp')).set_index('FIPS')\n", + "\n", + "# Set depedent and independent variables and the W matrix.\n", + "y = data['HR90'].to_numpy()\n", + "x = data[['RD90','PS90','UE90']].to_numpy()\n", + "w = ps.weights.Queen.from_dataframe(data, use_index=True)" ] }, { - "cell_type": "code", - "execution_count": 4, + "cell_type": "markdown", + "id": "25be6fcf", "metadata": {}, - "outputs": [], "source": [ - "# GeoPandas approach\n", - "data = gpd.read_file(ps.examples.get_path('columbus.shp'))\n", - "y = data['HOVAL'].to_numpy()\n", - "x = data[['INC','CRIME']].to_numpy()\n", - "w = ps.weights.Queen.from_dataframe(data)" + "Skater_reg by default uses Euclidean distance to compute the Minimum Spanning Tree (MST). Therefore, we standardize the variables that will be used to compute the MST before calling the main Skater_reg function. Here, we use the X variables to compute the MST. Alternative specifications can be used.\n", + "\n", + "We set the number of clusters to 20 and minimum quorum to 100." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, + "id": "ae2bd006", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 2, 0,\n", - " 1, 2, 0, 0, 3, 3, 0, 0, 2, 1, 3, 2, 3, 2, 3, 0, 2, 1, 1, 2, 3, 3,\n", - " 3, 2, 1, 3, 3], dtype=int32)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 33s, sys: 31.3 s, total: 2min 4s\n", + "Wall time: 34.7 s\n" + ] } ], "source": [ + "%%time\n", "# Standardize the variables to be used to compute the minimum spanning tree (could add/remove any variable)\n", "x_std = (x - np.mean(x,axis=0)) / np.std(x,axis=0)\n", "\n", "# Call the Skater_reg method based on OLS\n", - "results = Skater_reg().fit(4, w, x_std, {'reg':spreg.OLS,'y':y,'x':x}, quorum=10)\n", - "\n", - "# The cluster allocations from the final step are stored in the attribute current_labels_\n", - "results.current_labels_" + "results = Skater_reg().fit(20, w, x_std, {'reg':spreg.OLS,'y':y,'x':x}, quorum=100)" ] }, { "cell_type": "markdown", + "id": "53218349", "metadata": {}, "source": [ - "### Optionally, to see the decrease in the Sum of Squared Residuals (SSR), we can use the trace from Skater_reg to plot the SSR from each step" + "The intermediate steps are stored in the attibute \\_trace. We can use this information to plot the decrease in the total sum of squared residuals by number of clusters. This information can be helpful to select the number of desired clusters." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, + "id": "4e862e49", "metadata": {}, "outputs": [ { "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "line": { - "color": "black", - "width": 2 - }, - "mode": "lines+markers", - "type": "scatter", - "x": [ - 2, - 3, - 4 - ], - "y": [ - 9560.148546865878, - 8776.404522267145, - 8372.603714597415 - ] - } - ], - "layout": { - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "xaxis": { - "title": { - "text": "Number of clusters" - } - }, - "yaxis": { - "title": { - "text": "Total sum of squared residuals" - } - } - } - }, - "text/html": [ - "
" + "image/png": "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yEgMGzasQDHxPpMmTcL8+fPxxx9/ICkpCVOnTsW5c+cwfvx4hY+hr6+PKVOmYPLkyfj9999x/fp1JCQkYN26dYW2b9OmDSpXrozvvvsO//33H7Zs2YINGzaI21+9eoVx48YhNjYWt2/fxtGjR3Hq1CmxkLOxsUFmZiYOHjyIR48e4eXLl2jYsCEGDhyIr7/+Gjt27MDNmzdx6tQpzJ8/H3///XeRsd+8eRPTpk3D8ePHcfv2bURGRuLq1atKFY1EFQ2LJiL6YHPmzClwOalx48ZYtWoVVq5ciebNm+PkyZNF3ln2IYKCgjB//nw0b94ccXFx2L17N0xNTQEAlpaWOHr0KGQyGdzc3NC0aVOMHz8eRkZGcuOnFOHn54fAwEAEBgbCzs4OERER2LNnDxo0aKDUcaZPn47AwED8+OOPaNy4Mfr161dgnFY+ExMThIWF4e+//4adnR22bt0qN5WBVCrF48eP8fXXX6Nhw4bw8vJC165dMWvWLABAu3btMHr0aPTr1w81atTAggULALy5zPb1118jMDAQtra26NWrF06cOAFra+si465cuTL+/fdffPXVV2jYsCFGjhyJcePGYdSoUUrlT1SRSIR3/8cjIiIiogLY00RERESkABZNRERERApg0URERESkABZNRERERApg0URERESkABZNRERERApg0URERESkABZNRERERApg0URERESkABZNRERERApg0URERESkgP8HeW7RDjXuVoYAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" ] }, "metadata": {}, @@ -1094,41897 +129,44 @@ ], "source": [ "trace = [results._trace[i][1][2] for i in range(1,len(results._trace))]\n", - "fig = go.Figure(data=go.Scatter(x=list(range(2,len(trace)+2)), y=trace,mode='lines+markers',\n", - " line=dict(color='black', width=2)))\n", - "fig.update_layout(xaxis_title='Number of clusters',\n", - " yaxis_title='Total sum of squared residuals')\n", - "fig.show()" + "fig, ax = plt.subplots()\n", + "ax.plot(list(range(2,len(trace)+2)), trace, '-o', color='black', linewidth=2)\n", + "\n", + "ax.set(xlabel='Number of clusters', ylabel='Total sum of squared residuals')\n", + "ax.grid()\n", + "\n", + "plt.show()" ] }, { "cell_type": "markdown", + "id": "a3c6cf08", "metadata": {}, "source": [ - "### We can also plot the cluster allocations from the final step using the attribute current_labels_" + "Let's say we choose 12 clusters. We can plot the results using geopandas and matplotlib." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, + "id": "ff616fb3", "metadata": {}, "outputs": [ { "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "colorscale": [ - [ - 0.0, - "#636efa" - ], - [ - 1.0, - "#636efa" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=0
locations=%{location}", - "locations": [ - 0, - 1, - 2, - 3, - 4, - 6, - 7, - 10, - 11, - 12, - 13, - 14, - 15, - 21, - 24, - 25, - 28, - 29, - 37 - ], - "name": "0", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "colorscale": [ - [ - 0.0, - "#EF553B" - ], - [ - 1.0, - "#EF553B" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=1
locations=%{location}", - "locations": [ - 5, - 8, - 9, - 16, - 19, - 22, - 31, - 39, - 40, - 46 - ], - "name": "1", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "colorscale": [ - [ - 0.0, - "#00cc96" - ], - [ - 1.0, - "#00cc96" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=2
locations=%{location}", - "locations": [ - 17, - 18, - 20, - 23, - 30, - 33, - 35, - 38, - 41, - 45 - ], - "name": "2", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "colorscale": [ - [ - 0.0, - "#ab63fa" - ], - [ - 1.0, - "#ab63fa" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=3
locations=%{location}", - "locations": [ - 26, - 27, - 32, - 34, - 36, - 42, - 43, - 44, - 47, - 48 - ], - "name": "3", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - } - ], - "layout": { - "geo": { - "center": {}, - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "fitbounds": "locations", - "visible": false - }, - "legend": { - "title": { - "text": "cluster" - }, - "tracegroupgap": 0 - }, - "margin": { - "t": 60 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - } - } - }, - "text/html": [ - "
" + "text/plain": [ + "(-127.6195011138916, -64.0817699432373, 23.735178565979005, 50.59252300262451)" ] }, + "execution_count": 5, "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig = px.choropleth(pd.concat([data,pd.Series(results.current_labels_.astype(str), name='cluster', index=data.index)], axis=1),\n", - " geojson=data.geometry,\n", - " locations=data.index,\n", - " color=\"cluster\")\n", - "fig.update_geos(fitbounds=\"locations\", visible=False)\n", - "fig.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The trace can also be used to recall the cluster allocations from any intermediate step" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ + "output_type": "execute_result" + }, { "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "colorscale": [ - [ - 0.0, - "#636efa" - ], - [ - 1.0, - "#636efa" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=0
locations=%{location}", - "locations": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 19, - 21, - 22, - 24, - 25, - 28, - 29, - 31, - 37, - 39, - 40, - 46 - ], - "name": "0", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "colorscale": [ - [ - 0.0, - "#EF553B" - ], - [ - 1.0, - "#EF553B" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=1
locations=%{location}", - "locations": [ - 17, - 18, - 20, - 23, - 30, - 33, - 35, - 38, - 41, - 45 - ], - "name": "1", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - }, - { - "colorscale": [ - [ - 0.0, - "#00cc96" - ], - [ - 1.0, - "#00cc96" - ] - ], - "geo": "geo", - "geojson": { - "bbox": [ - 5.87490701675415, - 10.788629531860352, - 11.287420272827148, - 14.742449760437012 - ], - "features": [ - { - "bbox": [ - 8.559700012207031, - 13.995059967041016, - 9.09996509552002, - 14.742449760437012 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.559700012207031, - 14.742449760437012 - ], - [ - 8.809452056884766, - 14.734430313110352 - ], - [ - 8.808412551879883, - 14.636520385742188 - ], - [ - 8.919304847717285, - 14.638500213623047 - ], - [ - 9.087138175964355, - 14.63049030303955 - ], - [ - 9.09996509552002, - 14.244830131530762 - ], - [ - 9.015047073364258, - 14.241840362548828 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ] - ] - ], - "type": "Polygon" - }, - "id": "0", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.950088977813721, - 13.72739028930664, - 8.666550636291504, - 14.263930320739746 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.252790451049805, - 14.236940383911133 - ], - [ - 8.282757759094238, - 14.229940414428711 - ], - [ - 8.330711364746094, - 14.229940414428711 - ], - [ - 8.383658409118652, - 14.228930473327637 - ], - [ - 8.444600105285645, - 14.228919982910156 - ], - [ - 8.544504165649414, - 14.23490047454834 - ], - [ - 8.624129295349121, - 14.236980438232422 - ], - [ - 8.625825881958008, - 14.22367000579834 - ], - [ - 8.63259220123291, - 14.1705904006958 - ], - [ - 8.642902374267578, - 14.089710235595703 - ], - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.22661304473877, - 13.744379997253418 - ], - [ - 8.215643882751465, - 13.794329643249512 - ], - [ - 8.198686599731445, - 13.858280181884766 - ], - [ - 8.16972541809082, - 13.883259773254395 - ], - [ - 8.12777042388916, - 13.89225959777832 - ], - [ - 8.093802452087402, - 13.891260147094727 - ], - [ - 8.063838005065918, - 13.90526008605957 - ], - [ - 8.044872283935547, - 13.943220138549805 - ], - [ - 8.037888526916504, - 13.96720027923584 - ], - [ - 7.999115943908691, - 14.02457046508789 - ], - [ - 7.99936580657959, - 14.0349702835083 - ], - [ - 8.003013610839844, - 14.187020301818848 - ], - [ - 7.950088977813721, - 14.243969917297363 - ], - [ - 8.111939430236816, - 14.263930320739746 - ], - [ - 8.147891998291016, - 14.232959747314453 - ], - [ - 8.181855201721191, - 14.225959777832031 - ], - [ - 8.20982837677002, - 14.226949691772461 - ], - [ - 8.252790451049805, - 14.236940383911133 - ] - ] - ], - "type": "Polygon" - }, - "id": "1", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.653305053710938, - 13.544429779052734, - 9.351485252380371, - 14.008090019226074 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.653305053710938, - 14.008090019226074 - ], - [ - 8.818140029907227, - 14.002050399780273 - ], - [ - 9.008951187133789, - 13.995059967041016 - ], - [ - 9.008928298950195, - 13.9381103515625 - ], - [ - 9.34359073638916, - 13.913080215454102 - ], - [ - 9.351485252380371, - 13.67529010772705 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.662188529968262, - 13.909899711608887 - ], - [ - 8.653305053710938, - 14.008090019226074 - ] - ] - ], - "type": "Polygon" - }, - "id": "2", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.19859504699707, - 13.586509704589844, - 8.685274124145508, - 13.861700057983398 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.45949935913086, - 13.82034969329834 - ], - [ - 8.473407745361328, - 13.832269668579102 - ], - [ - 8.502935409545898, - 13.838729858398438 - ], - [ - 8.516386985778809, - 13.841679573059082 - ], - [ - 8.540358543395996, - 13.842399597167969 - ], - [ - 8.562577247619629, - 13.84253978729248 - ], - [ - 8.579310417175293, - 13.8412504196167 - ], - [ - 8.605281829833984, - 13.839249610900879 - ], - [ - 8.666550636291504, - 13.861700057983398 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.201583862304688, - 13.614489555358887 - ], - [ - 8.19859504699707, - 13.635479927062988 - ], - [ - 8.233589172363281, - 13.703410148620605 - ], - [ - 8.229602813720703, - 13.72739028930664 - ], - [ - 8.291547775268555, - 13.74137020111084 - ], - [ - 8.284571647644043, - 13.784330368041992 - ], - [ - 8.323546409606934, - 13.786080360412598 - ], - [ - 8.37348747253418, - 13.78831958770752 - ], - [ - 8.387155532836914, - 13.788969993591309 - ], - [ - 8.415447235107422, - 13.79030990600586 - ], - [ - 8.431432723999023, - 13.793310165405273 - ], - [ - 8.45949935913086, - 13.82034969329834 - ] - ] - ], - "type": "Polygon" - }, - "id": "3", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.677577018737793, - 12.861089706420898, - 9.401384353637695, - 13.722209930419922 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.677577018737793, - 13.722209930419922 - ], - [ - 8.909939765930176, - 13.715530395507812 - ], - [ - 9.161684036254883, - 13.708290100097656 - ], - [ - 9.166626930236816, - 13.581399917602539 - ], - [ - 9.190605163574219, - 13.586389541625977 - ], - [ - 9.196581840515137, - 13.544429779052734 - ], - [ - 9.24254322052002, - 13.558409690856934 - ], - [ - 9.244555473327637, - 13.59138011932373 - ], - [ - 9.273821830749512, - 13.588560104370117 - ], - [ - 9.298501014709473, - 13.589380264282227 - ], - [ - 9.310471534729004, - 13.54541015625 - ], - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.685274124145508, - 13.639519691467285 - ] - ] - ], - "type": "Polygon" - }, - "id": "4", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.333296775817871, - 13.272419929504395, - 10.1806001663208, - 13.698240280151367 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.401384353637695, - 13.550399780273438 - ], - [ - 9.43441104888916, - 13.694270133972168 - ], - [ - 9.605246543884277, - 13.698240280151367 - ], - [ - 9.651198387145996, - 13.692239761352539 - ], - [ - 9.687166213989258, - 13.697230339050293 - ], - [ - 9.686145782470703, - 13.645279884338379 - ], - [ - 9.845992088317871, - 13.652250289916992 - ], - [ - 10.050789833068848, - 13.650230407714844 - ], - [ - 10.103719711303711, - 13.603260040283203 - ], - [ - 10.175629615783691, - 13.565290451049805 - ], - [ - 10.1806001663208, - 13.482359886169434 - ], - [ - 10.16759967803955, - 13.471369743347168 - ], - [ - 10.153610229492188, - 13.454389572143555 - ], - [ - 10.1356201171875, - 13.439399719238281 - ], - [ - 10.119629859924316, - 13.429409980773926 - ], - [ - 10.121600151062012, - 13.344490051269531 - ], - [ - 10.096619606018066, - 13.342490196228027 - ], - [ - 10.085630416870117, - 13.333499908447266 - ], - [ - 10.05265998840332, - 13.33650016784668 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.401384353637695, - 13.550399780273438 - ] - ] - ], - "type": "Polygon" - }, - "id": "5", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.801973819732666, - 12.942020416259766, - 8.456572532653809, - 13.644510269165039 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.037740707397461, - 13.60752010345459 - ], - [ - 8.062715530395508, - 13.604519844055176 - ], - [ - 8.072694778442383, - 13.58053970336914 - ], - [ - 8.115653038024902, - 13.579540252685547 - ], - [ - 8.130637168884277, - 13.576539993286133 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.052460670471191, - 12.963089942932129 - ], - [ - 8.052496910095215, - 13.052009582519531 - ], - [ - 8.048531532287598, - 13.129940032958984 - ], - [ - 8.032543182373047, - 13.117950439453125 - ], - [ - 8.01356029510498, - 13.114959716796875 - ], - [ - 7.989583969116211, - 13.115960121154785 - ], - [ - 7.962619781494141, - 13.137940406799316 - ], - [ - 7.923679828643799, - 13.191900253295898 - ], - [ - 7.898725986480713, - 13.243860244750977 - ], - [ - 7.88774299621582, - 13.25784969329834 - ], - [ - 7.871758937835693, - 13.25885009765625 - ], - [ - 7.868794918060303, - 13.338780403137207 - ], - [ - 7.866809844970703, - 13.371749877929688 - ], - [ - 7.851837158203125, - 13.40073013305664 - ], - [ - 7.844857215881348, - 13.432700157165527 - ], - [ - 7.8408918380737305, - 13.50862979888916 - ], - [ - 7.824925899505615, - 13.552599906921387 - ], - [ - 7.803965091705322, - 13.596559524536133 - ], - [ - 7.801973819732666, - 13.61553955078125 - ], - [ - 7.90187406539917, - 13.608539581298828 - ], - [ - 7.90288782119751, - 13.644510269165039 - ], - [ - 7.9967942237854, - 13.63949966430664 - ], - [ - 7.998781204223633, - 13.614520072937012 - ], - [ - 8.037740707397461, - 13.60752010345459 - ] - ] - ], - "type": "Polygon" - }, - "id": "6", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.10498046875, - 13.104069709777832, - 8.733969688415527, - 13.644430160522461 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.247527122497559, - 13.586509704589844 - ], - [ - 8.279500007629395, - 13.596500396728516 - ], - [ - 8.294443130493164, - 13.604570388793945 - ], - [ - 8.316472053527832, - 13.616479873657227 - ], - [ - 8.385412216186523, - 13.63444995880127 - ], - [ - 8.380410194396973, - 13.616470336914062 - ], - [ - 8.439335823059082, - 13.605520248413086 - ], - [ - 8.450570106506348, - 13.60453987121582 - ], - [ - 8.459343910217285, - 13.644430160522461 - ], - [ - 8.505298614501953, - 13.644430160522461 - ], - [ - 8.537267684936523, - 13.644430160522461 - ], - [ - 8.547515869140625, - 13.643819808959961 - ], - [ - 8.571109771728516, - 13.64126968383789 - ], - [ - 8.588301658630371, - 13.641819953918457 - ], - [ - 8.628178596496582, - 13.639459609985352 - ], - [ - 8.685274124145508, - 13.639519691467285 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.380322456359863, - 13.40466022491455 - ], - [ - 8.293397903442383, - 13.408490180969238 - ], - [ - 8.181536674499512, - 13.415909767150879 - ], - [ - 8.10498046875, - 13.420989990234375 - ], - [ - 8.109848022460938, - 13.432640075683594 - ], - [ - 8.121718406677246, - 13.461039543151855 - ], - [ - 8.128536224365234, - 13.470100402832031 - ], - [ - 8.14012622833252, - 13.479769706726074 - ], - [ - 8.164705276489258, - 13.511059761047363 - ], - [ - 8.179450035095215, - 13.529829978942871 - ], - [ - 8.189590454101562, - 13.545760154724121 - ], - [ - 8.1974515914917, - 13.575770378112793 - ], - [ - 8.201574325561523, - 13.591509819030762 - ], - [ - 8.247527122497559, - 13.586509704589844 - ] - ] - ], - "type": "Polygon" - }, - "id": "7", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.595190048217773, - 10.095430374145508, - 13.298540115356445 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.333296775817871, - 13.272419929504395 - ], - [ - 9.67100715637207, - 13.27361011505127 - ], - [ - 9.677009582519531, - 13.296589851379395 - ], - [ - 9.772106170654297, - 13.292110443115234 - ], - [ - 10.027669906616211, - 13.298540115356445 - ], - [ - 9.950613975524902, - 12.983830451965332 - ], - [ - 10.004560470581055, - 12.976829528808594 - ], - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.23626708984375, - 12.876279830932617 - ], - [ - 9.333296775817871, - 13.272419929504395 - ] - ] - ], - "type": "Polygon" - }, - "id": "8", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.015439987182617, - 12.72404956817627, - 10.649680137634277, - 13.272509574890137 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.082509994506836, - 13.033769607543945 - ], - [ - 10.092499732971191, - 13.052749633789062 - ], - [ - 10.126489639282227, - 13.090709686279297 - ], - [ - 10.182459831237793, - 13.157649993896484 - ], - [ - 10.267419815063477, - 13.254549980163574 - ], - [ - 10.289389610290527, - 13.247550010681152 - ], - [ - 10.316360473632812, - 13.244549751281738 - ], - [ - 10.33234977722168, - 13.23954963684082 - ], - [ - 10.368260383605957, - 13.246430397033691 - ], - [ - 10.39428997039795, - 13.246540069580078 - ], - [ - 10.417269706726074, - 13.247540473937988 - ], - [ - 10.450240135192871, - 13.251529693603516 - ], - [ - 10.4752197265625, - 13.261520385742188 - ], - [ - 10.4752197265625, - 13.272509574890137 - ], - [ - 10.534159660339355, - 13.271499633789062 - ], - [ - 10.566129684448242, - 13.271499633789062 - ], - [ - 10.603090286254883, - 13.26550006866455 - ], - [ - 10.632060050964355, - 13.263489723205566 - ], - [ - 10.639049530029297, - 13.24450969696045 - ], - [ - 10.640040397644043, - 13.21953010559082 - ], - [ - 10.649020195007324, - 13.199549674987793 - ], - [ - 10.646010398864746, - 13.176569938659668 - ], - [ - 10.64700984954834, - 13.15758991241455 - ], - [ - 10.645999908447266, - 13.144599914550781 - ], - [ - 10.637999534606934, - 13.129610061645508 - ], - [ - 10.63899040222168, - 13.104630470275879 - ], - [ - 10.631979942321777, - 13.070659637451172 - ], - [ - 10.62697982788086, - 13.051679611206055 - ], - [ - 10.627969741821289, - 13.026700019836426 - ], - [ - 10.631959915161133, - 13.008720397949219 - ], - [ - 10.633950233459473, - 12.983739852905273 - ], - [ - 10.62893009185791, - 12.945779800415039 - ], - [ - 10.639909744262695, - 12.918800354003906 - ], - [ - 10.637900352478027, - 12.890819549560547 - ], - [ - 10.645890235900879, - 12.865839958190918 - ], - [ - 10.647870063781738, - 12.842860221862793 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.095430374145508, - 12.876899719238281 - ], - [ - 10.093509674072266, - 12.900219917297363 - ], - [ - 10.091629981994629, - 12.923040390014648 - ], - [ - 10.089170455932617, - 12.952810287475586 - ], - [ - 10.086819648742676, - 12.981430053710938 - ], - [ - 10.083649635314941, - 13.019869804382324 - ], - [ - 10.082509994506836, - 13.033769607543945 - ] - ] - ], - "type": "Polygon" - }, - "id": "9", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.572946548461914, - 12.810150146484375, - 8.757728576660156, - 13.116339683532715 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.596989631652832, - 13.111889839172363 - ], - [ - 8.651877403259277, - 13.113670349121094 - ], - [ - 8.733969688415527, - 13.116339683532715 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.585997581481934, - 13.106889724731445 - ] - ] - ], - "type": "Polygon" - }, - "id": "10", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.456572532653809, - 12.809200286865234, - 8.632829666137695, - 13.106889724731445 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.517032623291016, - 13.105389595031738 - ], - [ - 8.585997581481934, - 13.106889724731445 - ], - [ - 8.572946548461914, - 12.950030326843262 - ], - [ - 8.629888534545898, - 12.945030212402344 - ], - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456572532653809, - 13.104069709777832 - ] - ] - ], - "type": "Polygon" - }, - "id": "11", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.145203590393066, - 12.930660247802734, - 8.487373352050781, - 13.104069709777832 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.154367446899414, - 12.978059768676758 - ], - [ - 8.22030258178711, - 12.979049682617188 - ], - [ - 8.232307434082031, - 13.020009994506836 - ], - [ - 8.28026294708252, - 13.026000022888184 - ], - [ - 8.2882719039917, - 13.063969612121582 - ], - [ - 8.351269721984863, - 13.066499710083008 - ], - [ - 8.412152290344238, - 13.068949699401855 - ], - [ - 8.425149917602539, - 13.09391975402832 - ], - [ - 8.456572532653809, - 13.104069709777832 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.145203590393066, - 12.942020416259766 - ] - ] - ], - "type": "Polygon" - }, - "id": "12", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.062442779541016, - 12.787229537963867, - 8.512937545776367, - 12.944100379943848 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.062442779541016, - 12.944100379943848 - ], - [ - 8.104400634765625, - 12.943050384521484 - ], - [ - 8.145203590393066, - 12.942020416259766 - ], - [ - 8.245318412780762, - 12.938819885253906 - ], - [ - 8.337125778198242, - 12.935720443725586 - ], - [ - 8.402054786682129, - 12.9335298538208 - ], - [ - 8.456042289733887, - 12.931710243225098 - ], - [ - 8.487373352050781, - 12.930660247802734 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.062442779541016, - 12.944100379943848 - ] - ] - ], - "type": "Polygon" - }, - "id": "13", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.757728576660156, - 12.532369613647461, - 9.233386993408203, - 12.86400032043457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.943572998046875, - 12.86221981048584 - ], - [ - 9.233386993408203, - 12.86400032043457 - ], - [ - 9.220885276794434, - 12.805720329284668 - ], - [ - 9.213532447814941, - 12.778030395507812 - ], - [ - 9.206208229064941, - 12.75883960723877 - ], - [ - 9.187246322631836, - 12.7091703414917 - ], - [ - 9.166311264038086, - 12.679980278015137 - ], - [ - 9.146787643432617, - 12.658740043640137 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.757728576660156, - 12.861089706420898 - ] - ] - ], - "type": "Polygon" - }, - "id": "14", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.50916576385498, - 12.361550331115723, - 8.785566329956055, - 12.861089706420898 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.632829666137695, - 12.810150146484375 - ], - [ - 8.693771362304688, - 12.811140060424805 - ], - [ - 8.700782775878906, - 12.857099533081055 - ], - [ - 8.757728576660156, - 12.861089706420898 - ], - [ - 8.777865409851074, - 12.628029823303223 - ], - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.50916576385498, - 12.809200286865234 - ], - [ - 8.582889556884766, - 12.809769630432129 - ], - [ - 8.632829666137695, - 12.810150146484375 - ] - ] - ], - "type": "Polygon" - }, - "id": "15", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.356060028076172, - 12.44025993347168, - 10.709790229797363, - 12.838859558105469 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.501099586486816, - 12.805319786071777 - ], - [ - 10.649680137634277, - 12.830180168151855 - ], - [ - 10.70281982421875, - 12.838859558105469 - ], - [ - 10.709790229797363, - 12.774909973144531 - ], - [ - 10.664819717407227, - 12.762929916381836 - ], - [ - 10.6697998046875, - 12.703980445861816 - ], - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356599807739258, - 12.781140327453613 - ] - ] - ], - "type": "Polygon" - }, - "id": "16", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.358473777770996, - 12.355310440063477, - 8.58968734741211, - 12.788189888000488 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.478970527648926, - 12.788189888000488 - ], - [ - 8.512937545776367, - 12.788180351257324 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.431012153625488, - 12.788060188293457 - ] - ] - ], - "type": "Polygon" - }, - "id": "17", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.122319221496582, - 12.445659637451172, - 8.431012153625488, - 12.788060188293457 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.122319221496582, - 12.787229537963867 - ], - [ - 8.259181022644043, - 12.787599563598633 - ], - [ - 8.431012153625488, - 12.788060188293457 - ], - [ - 8.423884391784668, - 12.448490142822266 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.13826847076416, - 12.703310012817383 - ], - [ - 8.138282775878906, - 12.737279891967773 - ], - [ - 8.122319221496582, - 12.787229537963867 - ] - ] - ], - "type": "Polygon" - }, - "id": "18", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.841083526611328, - 11.741860389709473, - 10.425640106201172, - 12.781140327453613 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 10.178409576416016, - 12.751319885253906 - ], - [ - 10.356599807739258, - 12.781140327453613 - ], - [ - 10.356389999389648, - 12.712010383605957 - ], - [ - 10.356060028076172, - 12.598119735717773 - ], - [ - 10.420989990234375, - 12.578129768371582 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 10.015439987182617, - 12.72404956817627 - ] - ] - ], - "type": "Polygon" - }, - "id": "19", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 7.0613298416137695, - 11.527389526367188, - 8.563572883605957, - 12.725419998168945 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.842434883117676, - 12.405599594116211 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.37365436553955, - 11.774089813232422 - ], - [ - 8.282732009887695, - 11.74413013458252 - ], - [ - 8.256792068481445, - 11.828060150146484 - ], - [ - 8.103923797607422, - 11.785120010375977 - ], - [ - 8.120859146118164, - 11.670220375061035 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.717282772064209, - 11.741209983825684 - ], - [ - 7.580474853515625, - 11.882100105285645 - ], - [ - 7.637434005737305, - 11.917059898376465 - ], - [ - 7.616511821746826, - 12.057939529418945 - ], - [ - 7.40372896194458, - 12.080949783325195 - ], - [ - 7.404763221740723, - 12.164870262145996 - ], - [ - 7.323862075805664, - 12.21183967590332 - ], - [ - 7.19602108001709, - 12.295780181884766 - ], - [ - 7.135107040405273, - 12.359729766845703 - ], - [ - 7.108152866363525, - 12.406700134277344 - ], - [ - 7.092213153839111, - 12.51261043548584 - ], - [ - 7.0613298416137695, - 12.725419998168945 - ], - [ - 7.143249988555908, - 12.724410057067871 - ], - [ - 7.155218124389648, - 12.674460411071777 - ], - [ - 7.173169136047363, - 12.598520278930664 - ], - [ - 7.206113815307617, - 12.544560432434082 - ], - [ - 7.27003812789917, - 12.510580062866211 - ], - [ - 7.341958045959473, - 12.486599922180176 - ], - [ - 7.429862976074219, - 12.46660041809082 - ], - [ - 7.459833145141602, - 12.463600158691406 - ], - [ - 7.481781005859375, - 12.389659881591797 - ], - [ - 7.498770236968994, - 12.403650283813477 - ], - [ - 7.516755104064941, - 12.409640312194824 - ], - [ - 7.548725128173828, - 12.412630081176758 - ], - [ - 7.5597147941589355, - 12.414629936218262 - ], - [ - 7.55869197845459, - 12.356679916381836 - ], - [ - 7.569672107696533, - 12.334699630737305 - ], - [ - 7.616611003875732, - 12.29872989654541 - ], - [ - 7.6695709228515625, - 12.327690124511719 - ], - [ - 7.721512794494629, - 12.307709693908691 - ], - [ - 7.708548069000244, - 12.36266040802002 - ], - [ - 7.639626979827881, - 12.389639854431152 - ], - [ - 7.646636009216309, - 12.430609703063965 - ], - [ - 7.842434883117676, - 12.405599594116211 - ] - ] - ], - "type": "Polygon" - }, - "id": "20", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.357977867126465, - 12.22655963897705, - 10.015439987182617, - 12.72404956817627 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.471497535705566, - 12.595709800720215 - ], - [ - 9.555828094482422, - 12.595190048217773 - ], - [ - 9.723674774169922, - 12.595199584960938 - ], - [ - 9.763668060302734, - 12.67313003540039 - ], - [ - 10.015439987182617, - 12.72404956817627 - ], - [ - 9.93346881866455, - 12.599410057067871 - ], - [ - 9.941193580627441, - 12.512129783630371 - ], - [ - 9.935688018798828, - 12.501870155334473 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.386005401611328, - 12.596240043640137 - ] - ] - ], - "type": "Polygon" - }, - "id": "21", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.42175006866455, - 11.990639686584473, - 10.888489723205566, - 12.652009963989258 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.667770385742188, - 12.648030281066895 - ], - [ - 10.776670455932617, - 12.652009963989258 - ], - [ - 10.88755989074707, - 12.644009590148926 - ], - [ - 10.888489723205566, - 12.49213981628418 - ], - [ - 10.884440422058105, - 12.34926986694336 - ], - [ - 10.884380340576172, - 12.19340991973877 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.42175006866455, - 12.44025993347168 - ], - [ - 10.669699668884277, - 12.483180046081543 - ], - [ - 10.667340278625488, - 12.580109596252441 - ], - [ - 10.666970252990723, - 12.595029830932617 - ], - [ - 10.667770385742188, - 12.648030281066895 - ] - ] - ], - "type": "Polygon" - }, - "id": "22", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.131139755249023, - 12.088789939880371, - 8.790392875671387, - 12.645350456237793 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.148235321044922, - 12.645350456237793 - ], - [ - 8.223162651062012, - 12.645339965820312 - ], - [ - 8.296090126037598, - 12.645339965820312 - ], - [ - 8.299444198608398, - 12.609780311584473 - ], - [ - 8.301017761230469, - 12.593090057373047 - ], - [ - 8.30504322052002, - 12.550419807434082 - ], - [ - 8.33201789855957, - 12.547419548034668 - ], - [ - 8.3489990234375, - 12.547419548034668 - ], - [ - 8.347976684570312, - 12.493459701538086 - ], - [ - 8.350508689880371, - 12.481929779052734 - ], - [ - 8.358473777770996, - 12.445659637451172 - ], - [ - 8.369997024536133, - 12.428179740905762 - ], - [ - 8.391569137573242, - 12.407380104064941 - ], - [ - 8.406447410583496, - 12.396730422973633 - ], - [ - 8.438838958740234, - 12.373559951782227 - ], - [ - 8.4813814163208, - 12.362910270690918 - ], - [ - 8.502638816833496, - 12.357080459594727 - ], - [ - 8.523073196411133, - 12.355310440063477 - ], - [ - 8.554715156555176, - 12.355330467224121 - ], - [ - 8.565507888793945, - 12.355330467224121 - ], - [ - 8.58968734741211, - 12.361550331115723 - ], - [ - 8.605761528015137, - 12.367939949035645 - ], - [ - 8.657632827758789, - 12.391510009765625 - ], - [ - 8.69460678100586, - 12.417490005493164 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.519205093383789, - 12.115229606628418 - ], - [ - 8.505514144897461, - 12.128210067749023 - ], - [ - 8.495033264160156, - 12.13776969909668 - ], - [ - 8.471713066101074, - 12.145750045776367 - ], - [ - 8.43419361114502, - 12.139209747314453 - ], - [ - 8.408769607543945, - 12.134770393371582 - ], - [ - 8.358863830566406, - 12.145950317382812 - ], - [ - 8.32612133026123, - 12.153280258178711 - ], - [ - 8.310224533081055, - 12.156929969787598 - ], - [ - 8.25028133392334, - 12.194430351257324 - ], - [ - 8.225326538085938, - 12.206859588623047 - ], - [ - 8.190520286560059, - 12.237640380859375 - ], - [ - 8.174397468566895, - 12.2504301071167 - ], - [ - 8.157790184020996, - 12.281220436096191 - ], - [ - 8.14834976196289, - 12.298720359802246 - ], - [ - 8.141800880432129, - 12.326470375061035 - ], - [ - 8.136807441711426, - 12.348549842834473 - ], - [ - 8.131139755249023, - 12.373600006103516 - ], - [ - 8.137151718139648, - 12.416560173034668 - ], - [ - 8.14915943145752, - 12.462510108947754 - ], - [ - 8.160175323486328, - 12.528459548950195 - ], - [ - 8.155200958251953, - 12.5794095993042 - ], - [ - 8.147226333618164, - 12.619379997253418 - ], - [ - 8.148235321044922, - 12.645350456237793 - ] - ] - ], - "type": "Polygon" - }, - "id": "23", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.707547187805176, - 12.12572956085205, - 9.131059646606445, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.785566329956055, - 12.532369613647461 - ], - [ - 8.855527877807617, - 12.606300354003906 - ], - [ - 8.913296699523926, - 12.609800338745117 - ], - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.784432411193848, - 12.206660270690918 - ], - [ - 8.758467674255371, - 12.230640411376953 - ], - [ - 8.767485618591309, - 12.29557991027832 - ], - [ - 8.707547187805176, - 12.302590370178223 - ], - [ - 8.7083158493042, - 12.350500106811523 - ], - [ - 8.708919525146484, - 12.39048957824707 - ], - [ - 8.709477424621582, - 12.4273099899292 - ], - [ - 8.726524353027344, - 12.455209732055664 - ], - [ - 8.75838565826416, - 12.49685001373291 - ], - [ - 8.785566329956055, - 12.532369613647461 - ] - ] - ], - "type": "Polygon" - }, - "id": "24", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.124277114868164, - 12.182160377502441, - 9.394844055175781, - 12.63424015045166 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.124277114868164, - 12.63424015045166 - ], - [ - 9.258048057556152, - 12.630610466003418 - ], - [ - 9.383021354675293, - 12.627209663391113 - ], - [ - 9.386005401611328, - 12.596240043640137 - ], - [ - 9.35901927947998, - 12.56527042388916 - ], - [ - 9.357977867126465, - 12.462360382080078 - ], - [ - 9.380951881408691, - 12.45536994934082 - ], - [ - 9.38573932647705, - 12.361639976501465 - ], - [ - 9.386472702026367, - 12.34727954864502 - ], - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.129522323608398, - 12.284629821777344 - ], - [ - 9.127169609069824, - 12.441459655761719 - ], - [ - 9.124981880187988, - 12.587260246276855 - ], - [ - 9.124277114868164, - 12.63424015045166 - ] - ] - ], - "type": "Polygon" - }, - "id": "25", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.468775749206543, - 12.002750396728516, - 10.007160186767578, - 12.341389656066895 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.656930923461914, - 12.274029731750488 - ], - [ - 9.841083526611328, - 12.314740180969238 - ], - [ - 9.96633243560791, - 12.341389656066895 - ], - [ - 10.001230239868164, - 12.170539855957031 - ], - [ - 9.884350776672363, - 12.191530227661133 - ], - [ - 9.892878532409668, - 12.173850059509277 - ], - [ - 9.899951934814453, - 12.163689613342285 - ], - [ - 9.914779663085938, - 12.142390251159668 - ], - [ - 9.956293106079102, - 12.08275032043457 - ], - [ - 9.991960525512695, - 12.031510353088379 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.468775749206543, - 12.234550476074219 - ] - ] - ], - "type": "Polygon" - }, - "id": "26", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.734999656677246, - 9.492551803588867, - 12.234550476074219 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.394844055175781, - 12.22655963897705 - ], - [ - 9.468775749206543, - 12.234550476074219 - ], - [ - 9.478416442871094, - 12.161820411682129 - ], - [ - 9.481962203979492, - 12.065779685974121 - ], - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.25829792022705, - 12.203579902648926 - ], - [ - 9.394844055175781, - 12.22655963897705 - ] - ] - ], - "type": "Polygon" - }, - "id": "27", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.790384292602539, - 11.792989730834961, - 9.131059646606445, - 12.182160377502441 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.116094589233398, - 12.17965030670166 - ], - [ - 9.131059646606445, - 12.182160377502441 - ], - [ - 9.115089416503906, - 12.158659934997559 - ], - [ - 9.103628158569336, - 12.128439903259277 - ], - [ - 9.100104331970215, - 12.063579559326172 - ], - [ - 9.098085403442383, - 12.025779724121094 - ], - [ - 9.093652725219727, - 11.930830001831055 - ], - [ - 9.090069770812988, - 11.873970031738281 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.95518970489502, - 12.153010368347168 - ], - [ - 9.116094589233398, - 12.17965030670166 - ] - ] - ], - "type": "Polygon" - }, - "id": "28", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.386432647705078, - 11.785490036010742, - 8.898137092590332, - 12.12572956085205 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.643799781799316, - 12.102089881896973 - ], - [ - 8.790392875671387, - 12.12572956085205 - ], - [ - 8.790384292602539, - 12.10575008392334 - ], - [ - 8.81535530090332, - 12.09276008605957 - ], - [ - 8.813672065734863, - 12.06682014465332 - ], - [ - 8.811333656311035, - 12.030810356140137 - ], - [ - 8.868269920349121, - 12.013819694519043 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.618428230285645, - 11.80504035949707 - ], - [ - 8.508537292480469, - 11.809040069580078 - ], - [ - 8.386432647705078, - 11.785490036010742 - ], - [ - 8.404298782348633, - 11.800470352172852 - ], - [ - 8.412508010864258, - 11.807350158691406 - ], - [ - 8.455998420715332, - 11.847610473632812 - ], - [ - 8.471677780151367, - 11.863730430603027 - ], - [ - 8.517660140991211, - 11.91471004486084 - ], - [ - 8.525978088378906, - 11.924659729003906 - ], - [ - 8.563572883605957, - 12.023850440979004 - ], - [ - 8.544462203979492, - 12.073599815368652 - ], - [ - 8.538623809814453, - 12.088789939880371 - ], - [ - 8.643799781799316, - 12.102089881896973 - ] - ] - ], - "type": "Polygon" - }, - "id": "29", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.781330108642578, - 7.185831069946289, - 12.078980445861816 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.7633137702941895, - 11.981120109558105 - ], - [ - 6.942171096801758, - 12.0560302734375 - ], - [ - 7.004114151000977, - 12.067009925842285 - ], - [ - 7.078045845031738, - 12.076990127563477 - ], - [ - 7.125000953674316, - 12.078980445861816 - ], - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.674379825592041, - 11.931170463562012 - ], - [ - 6.7633137702941895, - 11.981120109558105 - ] - ] - ], - "type": "Polygon" - }, - "id": "30", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.424249649047852, - 11.633870124816895, - 11.204830169677734, - 12.037540435791016 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.424249649047852, - 11.990639686584473 - ], - [ - 10.640899658203125, - 12.0131196975708 - ], - [ - 10.876319885253906, - 12.037540435791016 - ], - [ - 10.886269569396973, - 11.946619987487793 - ], - [ - 10.915240287780762, - 11.941619873046875 - ], - [ - 10.932220458984375, - 11.938619613647461 - ], - [ - 10.963190078735352, - 11.940620422363281 - ], - [ - 10.983169555664062, - 11.936619758605957 - ], - [ - 10.995160102844238, - 11.937620162963867 - ], - [ - 11.045080184936523, - 11.853679656982422 - ], - [ - 11.112970352172852, - 11.761759757995605 - ], - [ - 11.204830169677734, - 11.638850212097168 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.424249649047852, - 11.990639686584473 - ] - ] - ], - "type": "Polygon" - }, - "id": "31", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.480667114257812, - 11.76294994354248, - 10.049909591674805, - 12.009679794311523 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.480667114257812, - 12.002750396728516 - ], - [ - 9.755396842956543, - 12.004929542541504 - ], - [ - 10.007160186767578, - 12.009679794311523 - ], - [ - 10.02422046661377, - 11.962309837341309 - ], - [ - 10.04207992553711, - 11.912759780883789 - ], - [ - 10.048910140991211, - 11.858799934387207 - ], - [ - 10.04928970336914, - 11.822830200195312 - ], - [ - 10.049750328063965, - 11.778960227966309 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.488198280334473, - 11.881449699401855 - ], - [ - 9.482346534729004, - 11.975689888000488 - ], - [ - 9.480667114257812, - 12.002750396728516 - ] - ] - ], - "type": "Polygon" - }, - "id": "32", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.966993808746338, - 11.329950332641602, - 7.733179092407227, - 11.872119903564453 - ], - "geometry": { - "coordinates": [ - [ - [ - 7.185831069946289, - 11.84823989868164 - ], - [ - 7.317720890045166, - 11.856149673461914 - ], - [ - 7.508541107177734, - 11.872119903564453 - ], - [ - 7.4845499992370605, - 11.838150024414062 - ], - [ - 7.463559150695801, - 11.80918025970459 - ], - [ - 7.469532012939453, - 11.757220268249512 - ], - [ - 7.493495941162109, - 11.728249549865723 - ], - [ - 7.492452144622803, - 11.619339942932129 - ], - [ - 7.688279151916504, - 11.66327953338623 - ], - [ - 7.733179092407227, - 11.527389526367188 - ], - [ - 7.710183143615723, - 11.482439994812012 - ], - [ - 7.674202919006348, - 11.446470260620117 - ], - [ - 7.624241828918457, - 11.421500205993652 - ], - [ - 7.562289237976074, - 11.388540267944336 - ], - [ - 7.4683637619018555, - 11.349579811096191 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.185831069946289, - 11.84823989868164 - ] - ] - ], - "type": "Polygon" - }, - "id": "33", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.341614723205566, - 11.531109809875488, - 10.05659008026123, - 11.866829872131348 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.489535331726074, - 11.859919548034668 - ], - [ - 9.6394681930542, - 11.863249778747559 - ], - [ - 9.800299644470215, - 11.866829872131348 - ], - [ - 9.831770896911621, - 11.858819961547852 - ], - [ - 9.859211921691895, - 11.851739883422852 - ], - [ - 9.877091407775879, - 11.8441801071167 - ], - [ - 9.925159454345703, - 11.82384967803955 - ], - [ - 9.973393440246582, - 11.809060096740723 - ], - [ - 9.986115455627441, - 11.802860260009766 - ], - [ - 10.026479721069336, - 11.787699699401855 - ], - [ - 10.049909591674805, - 11.76294994354248 - ], - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 9.917131423950195, - 11.737930297851562 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.492551803588867, - 11.751970291137695 - ], - [ - 9.489535331726074, - 11.859919548034668 - ] - ] - ], - "type": "Polygon" - }, - "id": "34", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.456532001495361, - 11.439629554748535, - 7.019946098327637, - 11.82621955871582 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.741261005401611, - 11.799280166625977 - ], - [ - 7.013006210327148, - 11.82621955871582 - ], - [ - 7.019946098327637, - 11.695340156555176 - ], - [ - 6.966993808746338, - 11.687350273132324 - ], - [ - 6.9718852043151855, - 11.633569717407227 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.741261005401611, - 11.799280166625977 - ] - ] - ], - "type": "Polygon" - }, - "id": "35", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.713337898254395, - 11.434320449829102, - 9.09585952758789, - 11.810020446777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 8.713337898254395, - 11.810020446777344 - ], - [ - 8.8291654586792, - 11.80486011505127 - ], - [ - 8.898137092590332, - 11.80247974395752 - ], - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.713337898254395, - 11.810020446777344 - ] - ] - ], - "type": "Polygon" - }, - "id": "36", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.084967613220215, - 11.546170234680176, - 9.3436918258667, - 11.792989730834961 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.084967613220215, - 11.792989730834961 - ], - [ - 9.200423240661621, - 11.767109870910645 - ], - [ - 9.3436918258667, - 11.734999656677246 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.085843086242676, - 11.639080047607422 - ], - [ - 9.084967613220215, - 11.792989730834961 - ] - ] - ], - "type": "Polygon" - }, - "id": "37", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 5.87490701675415, - 11.057000160217285, - 6.481366157531738, - 11.781330108642578 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.181705951690674, - 11.553569793701172 - ], - [ - 6.394561767578125, - 11.710399627685547 - ], - [ - 6.456532001495361, - 11.781330108642578 - ], - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.088609218597412, - 11.097979545593262 - ], - [ - 6.088623046875, - 11.132949829101562 - ], - [ - 6.084632873535156, - 11.148940086364746 - ], - [ - 6.085638046264648, - 11.160920143127441 - ], - [ - 6.035704135894775, - 11.202890396118164 - ], - [ - 5.9847540855407715, - 11.203900337219238 - ], - [ - 5.948803901672363, - 11.239870071411133 - ], - [ - 5.96979284286499, - 11.263850212097168 - ], - [ - 5.970815181732178, - 11.31779956817627 - ], - [ - 5.87490701675415, - 11.313819885253906 - ], - [ - 6.181705951690674, - 11.553569793701172 - ] - ] - ], - "type": "Polygon" - }, - "id": "38", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.05659008026123, - 11.213310241699219, - 10.808690071105957, - 11.74390983581543 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.05659008026123, - 11.74390983581543 - ], - [ - 10.252799987792969, - 11.742819786071777 - ], - [ - 10.425640106201172, - 11.741860389709473 - ], - [ - 10.531530380249023, - 11.743849754333496 - ], - [ - 10.560500144958496, - 11.723859786987305 - ], - [ - 10.613459587097168, - 11.723299980163574 - ], - [ - 10.656399726867676, - 11.72284984588623 - ], - [ - 10.677379608154297, - 11.72284984588623 - ], - [ - 10.766209602355957, - 11.720080375671387 - ], - [ - 10.78335952758789, - 11.719550132751465 - ], - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.613240242004395, - 11.216300010681152 - ], - [ - 10.595250129699707, - 11.213310241699219 - ], - [ - 10.555290222167969, - 11.22029972076416 - ], - [ - 10.480369567871094, - 11.221309661865234 - ], - [ - 10.421429634094238, - 11.23231029510498 - ], - [ - 10.364489555358887, - 11.254300117492676 - ], - [ - 10.343520164489746, - 11.272279739379883 - ], - [ - 10.329560279846191, - 11.328240394592285 - ], - [ - 10.320590019226074, - 11.369199752807617 - ], - [ - 10.279640197753906, - 11.403180122375488 - ], - [ - 10.226710319519043, - 11.45613956451416 - ], - [ - 10.168800354003906, - 11.523090362548828 - ], - [ - 10.109880447387695, - 11.5900297164917 - ], - [ - 10.07094955444336, - 11.67197036743164 - ], - [ - 10.05659008026123, - 11.74390983581543 - ] - ] - ], - "type": "Polygon" - }, - "id": "39", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.799189567565918, - 11.232259750366211, - 11.141839981079102, - 11.72780990600586 - ], - "geometry": { - "coordinates": [ - [ - [ - 10.806260108947754, - 11.718830108642578 - ], - [ - 10.878219604492188, - 11.723259925842285 - ], - [ - 10.952119827270508, - 11.72780990600586 - ], - [ - 10.974069595336914, - 11.661860466003418 - ], - [ - 11.073969841003418, - 11.65785026550293 - ], - [ - 11.126910209655762, - 11.633870124816895 - ], - [ - 11.126890182495117, - 11.59589958190918 - ], - [ - 11.138870239257812, - 11.56991958618164 - ], - [ - 11.139849662780762, - 11.530960083007812 - ], - [ - 11.141839981079102, - 11.505979537963867 - ], - [ - 11.12285041809082, - 11.492989540100098 - ], - [ - 11.122790336608887, - 11.336130142211914 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.802140235900879, - 11.434080123901367 - ], - [ - 10.799189567565918, - 11.53499984741211 - ], - [ - 10.804929733276367, - 11.558989524841309 - ], - [ - 10.808690071105957, - 11.57466983795166 - ], - [ - 10.808199882507324, - 11.590950012207031 - ], - [ - 10.806090354919434, - 11.620909690856934 - ], - [ - 10.80321979522705, - 11.661589622497559 - ], - [ - 10.802240371704102, - 11.674869537353516 - ], - [ - 10.806260108947754, - 11.718830108642578 - ] - ] - ], - "type": "Polygon" - }, - "id": "40", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.7540388107299805, - 10.997920036315918, - 7.404403209686279, - 11.586389541625977 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.758334159851074, - 11.462329864501953 - ], - [ - 6.77780818939209, - 11.465909957885742 - ], - [ - 6.8914008140563965, - 11.479410171508789 - ], - [ - 6.9848952293396, - 11.490519523620605 - ], - [ - 7.123810768127441, - 11.530790328979492 - ], - [ - 7.315611839294434, - 11.586389541625977 - ], - [ - 7.375504970550537, - 11.471489906311035 - ], - [ - 7.398374080657959, - 11.329950332641602 - ], - [ - 7.404403209686279, - 11.29263973236084 - ], - [ - 7.38238000869751, - 11.18474006652832 - ], - [ - 7.359377861022949, - 11.12479019165039 - ], - [ - 7.327386856079102, - 11.071849822998047 - ], - [ - 7.275406837463379, - 10.997920036315918 - ], - [ - 6.82789421081543, - 11.116869926452637 - ], - [ - 6.879881858825684, - 11.211779594421387 - ], - [ - 6.81195592880249, - 11.22877025604248 - ], - [ - 6.83095121383667, - 11.262740135192871 - ], - [ - 6.771010875701904, - 11.26574993133545 - ], - [ - 6.7540388107299805, - 11.292719841003418 - ], - [ - 6.7860212326049805, - 11.325690269470215 - ], - [ - 6.778051853179932, - 11.380640029907227 - ], - [ - 6.758076190948486, - 11.392629623413086 - ], - [ - 6.758334159851074, - 11.462329864501953 - ] - ] - ], - "type": "Polygon" - }, - "id": "41", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.082836151123047, - 11.308409690856934, - 9.341614723205566, - 11.559189796447754 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.09585952758789, - 11.559189796447754 - ], - [ - 9.20775318145752, - 11.55325984954834 - ], - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.09585952758789, - 11.559189796447754 - ] - ] - ], - "type": "Polygon" - }, - "id": "42", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.335508346557617, - 11.211409568786621, - 9.963891983032227, - 11.546170234680176 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.341614723205566, - 11.546170234680176 - ], - [ - 9.500506401062012, - 11.542019844055176 - ], - [ - 9.918045997619629, - 11.531109809875488 - ], - [ - 9.963891983032227, - 11.268340110778809 - ], - [ - 9.778072357177734, - 11.265359878540039 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.341614723205566, - 11.546170234680176 - ] - ] - ], - "type": "Polygon" - }, - "id": "43", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 8.622117042541504, - 10.821869850158691, - 9.178548812866211, - 11.46030044555664 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.000834465026855, - 11.458020210266113 - ], - [ - 9.082836151123047, - 11.456330299377441 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 8.85079574584961, - 10.821869850158691 - ], - [ - 8.815848350524902, - 10.867839813232422 - ], - [ - 8.789886474609375, - 10.899809837341309 - ], - [ - 8.7659273147583, - 10.938779830932617 - ], - [ - 8.752955436706543, - 10.978750228881836 - ], - [ - 8.747973442077637, - 11.010720252990723 - ], - [ - 8.753978729248047, - 11.035699844360352 - ], - [ - 8.750991821289062, - 11.060669898986816 - ], - [ - 8.622117042541504, - 11.059690475463867 - ], - [ - 8.631120681762695, - 11.089659690856934 - ], - [ - 8.634133338928223, - 11.126629829406738 - ], - [ - 8.63216495513916, - 11.199569702148438 - ], - [ - 8.665151596069336, - 11.246520042419434 - ], - [ - 8.68313980102539, - 11.2575101852417 - ], - [ - 8.69713020324707, - 11.267499923706055 - ], - [ - 8.67520809173584, - 11.405380249023438 - ], - [ - 8.77213191986084, - 11.450329780578613 - ], - [ - 8.922977447509766, - 11.434320449829102 - ], - [ - 8.935976028442383, - 11.46030044555664 - ], - [ - 9.000834465026855, - 11.458020210266113 - ] - ] - ], - "type": "Polygon" - }, - "id": "44", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 6.167585849761963, - 10.97803020477295, - 6.6781768798828125, - 11.447600364685059 - ], - "geometry": { - "coordinates": [ - [ - [ - 6.481366157531738, - 11.439629554748535 - ], - [ - 6.558311939239502, - 11.44219970703125 - ], - [ - 6.61027717590332, - 11.444780349731445 - ], - [ - 6.6781768798828125, - 11.447600364685059 - ], - [ - 6.6491851806640625, - 11.399640083312988 - ], - [ - 6.647164821624756, - 11.344690322875977 - ], - [ - 6.639161109924316, - 11.315719604492188 - ], - [ - 6.522275924682617, - 11.318730354309082 - ], - [ - 6.520257949829102, - 11.269769668579102 - ], - [ - 6.5162482261657715, - 11.236800193786621 - ], - [ - 6.542212009429932, - 11.209819793701172 - ], - [ - 6.549192905426025, - 11.1808500289917 - ], - [ - 6.55515718460083, - 11.10791015625 - ], - [ - 6.534173011779785, - 11.096920013427734 - ], - [ - 6.537120819091797, - 10.97803020477295 - ], - [ - 6.220462799072266, - 11.057000160217285 - ], - [ - 6.220479965209961, - 11.099960327148438 - ], - [ - 6.212475776672363, - 11.122119903564453 - ], - [ - 6.1806111335754395, - 11.167719841003418 - ], - [ - 6.179293155670166, - 11.18159008026123 - ], - [ - 6.167585849761963, - 11.230850219726562 - ], - [ - 6.316442012786865, - 11.232830047607422 - ], - [ - 6.3594160079956055, - 11.27379035949707 - ], - [ - 6.356451034545898, - 11.349720001220703 - ], - [ - 6.335484027862549, - 11.38070011138916 - ], - [ - 6.335865020751953, - 11.39568042755127 - ], - [ - 6.33650016784668, - 11.420660018920898 - ], - [ - 6.481366157531738, - 11.439629554748535 - ] - ] - ], - "type": "Polygon" - }, - "id": "45", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 10.588159561157227, - 10.788629531860352, - 11.287420272827148, - 11.315879821777344 - ], - "geometry": { - "coordinates": [ - [ - [ - 11.098469734191895, - 11.303170204162598 - ], - [ - 11.122209548950195, - 11.315879821777344 - ], - [ - 11.120759963989258, - 11.265190124511719 - ], - [ - 11.119729995727539, - 11.199250221252441 - ], - [ - 11.123700141906738, - 11.127309799194336 - ], - [ - 11.14465045928955, - 11.05636978149414 - ], - [ - 11.181599617004395, - 11.025400161743164 - ], - [ - 11.221540451049805, - 10.978429794311523 - ], - [ - 11.256489753723145, - 10.922479629516602 - ], - [ - 11.275449752807617, - 10.888500213623047 - ], - [ - 11.287420272827148, - 10.84253978729248 - ], - [ - 11.286399841308594, - 10.790590286254883 - ], - [ - 11.013669967651367, - 10.788629531860352 - ], - [ - 10.963720321655273, - 10.799619674682617 - ], - [ - 10.88379955291748, - 10.80762004852295 - ], - [ - 10.781900405883789, - 10.812629699707031 - ], - [ - 10.708979606628418, - 10.819640159606934 - ], - [ - 10.694000244140625, - 10.833629608154297 - ], - [ - 10.649069786071777, - 10.890580177307129 - ], - [ - 10.616109848022461, - 10.925559997558594 - ], - [ - 10.588159561157227, - 10.978509902954102 - ], - [ - 10.592169761657715, - 10.994500160217285 - ], - [ - 10.691129684448242, - 11.140359878540039 - ], - [ - 10.687170028686523, - 11.2222900390625 - ], - [ - 10.73412036895752, - 11.228269577026367 - ], - [ - 10.8020601272583, - 11.232259750366211 - ], - [ - 10.818880081176758, - 11.235170364379883 - ], - [ - 10.840740203857422, - 11.238940238952637 - ], - [ - 10.8774995803833, - 11.246870040893555 - ], - [ - 10.901860237121582, - 11.252129554748535 - ], - [ - 10.919949531555176, - 11.254229545593262 - ], - [ - 10.963910102844238, - 11.265210151672363 - ], - [ - 11.014869689941406, - 11.274200439453125 - ], - [ - 11.06859016418457, - 11.2918701171875 - ], - [ - 11.078960418701172, - 11.295280456542969 - ], - [ - 11.098469734191895, - 11.303170204162598 - ] - ] - ], - "type": "Polygon" - }, - "id": "46", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.093674659729004, - 11.048029899597168, - 9.3948974609375, - 11.312379837036133 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.207670211791992, - 11.31017017364502 - ], - [ - 9.338521957397461, - 11.312379837036133 - ], - [ - 9.335508346557617, - 11.27241039276123 - ], - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.174186706542969, - 11.060310363769531 - ], - [ - 9.171592712402344, - 11.09158992767334 - ], - [ - 9.093674659729004, - 11.10359001159668 - ], - [ - 9.098838806152344, - 11.115389823913574 - ], - [ - 9.107674598693848, - 11.135560035705566 - ], - [ - 9.111679077148438, - 11.157540321350098 - ], - [ - 9.10374927520752, - 11.308409690856934 - ], - [ - 9.207670211791992, - 11.31017017364502 - ] - ] - ], - "type": "Polygon" - }, - "id": "47", - "properties": {}, - "type": "Feature" - }, - { - "bbox": [ - 9.095559120178223, - 10.828829765319824, - 9.78189754486084, - 11.285369873046875 - ], - "geometry": { - "coordinates": [ - [ - [ - 9.391454696655273, - 11.275400161743164 - ], - [ - 9.546306610107422, - 11.285369873046875 - ], - [ - 9.5482759475708, - 11.21343994140625 - ], - [ - 9.656153678894043, - 11.212479591369629 - ], - [ - 9.776052474975586, - 11.211409568786621 - ], - [ - 9.779011726379395, - 11.118490219116211 - ], - [ - 9.774969100952148, - 11.007590293884277 - ], - [ - 9.775935173034668, - 10.92866039276123 - ], - [ - 9.78189754486084, - 10.853730201721191 - ], - [ - 9.095559120178223, - 10.828829765319824 - ], - [ - 9.10042953491211, - 10.899089813232422 - ], - [ - 9.135557174682617, - 10.917750358581543 - ], - [ - 9.146570205688477, - 10.976699829101562 - ], - [ - 9.178548812866211, - 10.999670028686523 - ], - [ - 9.175572395324707, - 11.048629760742188 - ], - [ - 9.282283782958984, - 11.048029899597168 - ], - [ - 9.393360137939453, - 11.052599906921387 - ], - [ - 9.39454460144043, - 11.139530181884766 - ], - [ - 9.3948974609375, - 11.165470123291016 - ], - [ - 9.393250465393066, - 11.251399993896484 - ], - [ - 9.39303207397461, - 11.262740135192871 - ], - [ - 9.391454696655273, - 11.275400161743164 - ] - ] - ], - "type": "Polygon" - }, - "id": "48", - "properties": {}, - "type": "Feature" - } - ], - "type": "FeatureCollection" - }, - "hovertemplate": "cluster=2
locations=%{location}", - "locations": [ - 26, - 27, - 32, - 34, - 36, - 42, - 43, - 44, - 47, - 48 - ], - "name": "2", - "showlegend": true, - "showscale": false, - "type": "choropleth", - "z": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - } - ], - "layout": { - "geo": { - "center": {}, - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "fitbounds": "locations", - "visible": false - }, - "legend": { - "title": { - "text": "cluster" - }, - "tracegroupgap": 0 - }, - "margin": { - "t": 60 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - } - } - }, - "text/html": [ - "
" + "image/png": "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\n", + "text/plain": [ + "
" ] }, "metadata": {}, @@ -42992,25 +174,22 @@ } ], "source": [ - "# _trace[k-1][0] contains the cluster allocation for k clusters.\n", - "fig = px.choropleth(pd.concat([data,pd.Series(results._trace[2][0].astype(str), name='cluster', index=data.index)], axis=1),\n", - " geojson=data.geometry,\n", - " locations=data.index,\n", - " color=\"cluster\")\n", - "fig.update_geos(fitbounds=\"locations\", visible=False)\n", - "fig.show()" + "data[\"cl_regions\"] = results._trace[11][0]\n", + "data.plot(column=\"cl_regions\", categorical=True, legend=True, cmap='Paired').axis(\"off\")" ] }, { "cell_type": "markdown", + "id": "9bef8f61", "metadata": {}, "source": [ - "### With the cluster allocations, we can call the Regimes methods in spreg to get the full regression results." + "With the cluster allocations and selected number of clusters, we can call the Regimes methods in Spreg to get the full regression results and Chow tests on the stability of the coefficients accross the different clusters." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, + "id": "b13e7942", "metadata": {}, "outputs": [ { @@ -43024,182 +203,414 @@ "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 0_['HOVAL'] Number of Observations: 19\n", - "Mean dependent var : 33.0149 Number of Variables : 3\n", - "S.D. dependent var : 18.0570 Degrees of Freedom : 16\n", - "R-squared : 0.5949\n", - "Adjusted R-squared : 0.5442\n", - "Sum squared residual: 2377.791 F-statistic : 11.7460\n", - "Sigma-square : 148.612 Prob(F-statistic) : 0.0007259\n", - "S.E. of regression : 12.191 Log likelihood : -72.840\n", - "Sigma-square ML : 125.147 Akaike info criterion : 151.680\n", - "S.E of regression ML: 11.1869 Schwarz criterion : 154.513\n", + "Dependent Variable : 0_['HR90'] Number of Observations: 604\n", + "Mean dependent var : 2.4577 Number of Variables : 4\n", + "S.D. dependent var : 3.9266 Degrees of Freedom : 600\n", + "R-squared : 0.3305\n", + "Adjusted R-squared : 0.3271\n", + "Sum squared residual: 6224.952 F-statistic : 98.7116\n", + "Sigma-square : 10.375 Prob(F-statistic) : 6.109e-52\n", + "S.E. of regression : 3.221 Log likelihood : -1561.528\n", + "Sigma-square ML : 10.306 Akaike info criterion : 3131.057\n", + "S.E of regression ML: 3.2103 Schwarz criterion : 3148.671\n", "\n", "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 0_CONSTANT 58.9541294 13.3800487 4.4061222 0.0004416\n", - " 0_INC 0.4907925 0.7498945 0.6544820 0.5220989\n", - " 0_CRIME -0.7151327 0.1709048 -4.1843910 0.0007010\n", + " 0_CONSTANT 4.0851876 0.4756999 8.5877407 0.0000000\n", + " 0_RD90 3.1288181 0.2856649 10.9527571 0.0000000\n", + " 0_PS90 1.4553321 0.1760078 8.2685645 0.0000000\n", + " 0_UE90 0.0530250 0.0612926 0.8651115 0.3873233\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 9.907\n", + "MULTICOLLINEARITY CONDITION NUMBER 7.255\n", "\n", "TEST ON NORMALITY OF ERRORS\n", "TEST DF VALUE PROB\n", - "Jarque-Bera 2 1.054 0.5903\n", + "Jarque-Bera 2 20184.603 0.0000\n", "\n", "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", "RANDOM COEFFICIENTS\n", "TEST DF VALUE PROB\n", - "Breusch-Pagan test 2 3.788 0.1505\n", - "Koenker-Bassett test 2 5.554 0.0622\n", + "Breusch-Pagan test 3 69.424 0.0000\n", + "Koenker-Bassett test 3 4.695 0.1956\n", "----------\n", "\n", "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 1\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 1_['HOVAL'] Number of Observations: 10\n", - "Mean dependent var : 53.5350 Number of Variables : 3\n", - "S.D. dependent var : 20.7972 Degrees of Freedom : 7\n", - "R-squared : 0.0802\n", - "Adjusted R-squared : -0.1825\n", - "Sum squared residual: 3580.319 F-statistic : 0.3054\n", - "Sigma-square : 511.474 Prob(F-statistic) : 0.7462\n", - "S.E. of regression : 22.616 Log likelihood : -43.592\n", - "Sigma-square ML : 358.032 Akaike info criterion : 93.185\n", - "S.E of regression ML: 18.9217 Schwarz criterion : 94.093\n", + "Dependent Variable : 1_['HR90'] Number of Observations: 442\n", + "Mean dependent var : 4.2336 Number of Variables : 4\n", + "S.D. dependent var : 5.8415 Degrees of Freedom : 438\n", + "R-squared : 0.1285\n", + "Adjusted R-squared : 0.1226\n", + "Sum squared residual: 13113.889 F-statistic : 21.5360\n", + "Sigma-square : 29.940 Prob(F-statistic) : 4.99e-13\n", + "S.E. of regression : 5.472 Log likelihood : -1376.387\n", + "Sigma-square ML : 29.669 Akaike info criterion : 2760.773\n", + "S.E of regression ML: 5.4470 Schwarz criterion : 2777.139\n", "\n", "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 1_CONSTANT 12.8763423 93.0707480 0.1383500 0.8938596\n", - " 1_INC 1.5088923 2.7661286 0.5454889 0.6023577\n", - " 1_CRIME 0.4614679 1.7305497 0.2666597 0.7974158\n", + " 1_CONSTANT 2.9419808 0.8336035 3.5292327 0.0004609\n", + " 1_RD90 1.4503115 0.5061202 2.8655477 0.0043633\n", + " 1_PS90 0.7620325 0.2229427 3.4180638 0.0006897\n", + " 1_UE90 0.3611520 0.0977243 3.6956233 0.0002471\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 27.133\n", + "MULTICOLLINEARITY CONDITION NUMBER 6.511\n", "\n", "TEST ON NORMALITY OF ERRORS\n", "TEST DF VALUE PROB\n", - "Jarque-Bera 2 4.445 0.1083\n", + "Jarque-Bera 2 76308.673 0.0000\n", "\n", "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", "RANDOM COEFFICIENTS\n", "TEST DF VALUE PROB\n", - "Breusch-Pagan test 2 1.865 0.3935\n", - "Koenker-Bassett test 2 1.146 0.5637\n", + "Breusch-Pagan test 3 555.665 0.0000\n", + "Koenker-Bassett test 3 17.034 0.0007\n", "----------\n", "\n", "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 2\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 2_['HOVAL'] Number of Observations: 10\n", - "Mean dependent var : 42.0358 Number of Variables : 3\n", - "S.D. dependent var : 16.8610 Degrees of Freedom : 7\n", - "R-squared : 0.0849\n", - "Adjusted R-squared : -0.1766\n", - "Sum squared residual: 2341.457 F-statistic : 0.3246\n", - "Sigma-square : 334.494 Prob(F-statistic) : 0.7331\n", - "S.E. of regression : 18.289 Log likelihood : -41.469\n", - "Sigma-square ML : 234.146 Akaike info criterion : 88.938\n", - "S.E of regression ML: 15.3018 Schwarz criterion : 89.846\n", + "Dependent Variable : 2_['HR90'] Number of Observations: 157\n", + "Mean dependent var : 3.2521 Number of Variables : 4\n", + "S.D. dependent var : 3.4925 Degrees of Freedom : 153\n", + "R-squared : 0.3735\n", + "Adjusted R-squared : 0.3612\n", + "Sum squared residual: 1192.118 F-statistic : 30.4049\n", + "Sigma-square : 7.792 Prob(F-statistic) : 1.785e-15\n", + "S.E. of regression : 2.791 Log likelihood : -381.912\n", + "Sigma-square ML : 7.593 Akaike info criterion : 771.824\n", + "S.E of regression ML: 2.7556 Schwarz criterion : 784.049\n", "\n", "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 2_CONSTANT 11.1682754 53.4235094 0.2090517 0.8403613\n", - " 2_INC 1.5447243 2.2293290 0.6929100 0.5106934\n", - " 2_CRIME 0.1996688 0.6863689 0.2909059 0.7795537\n", + " 2_CONSTANT 1.6648327 1.6499048 1.0090477 0.3145449\n", + " 2_RD90 2.5911850 0.5446873 4.7571975 0.0000045\n", + " 2_PS90 1.7951113 0.2645028 6.7867381 0.0000000\n", + " 2_UE90 0.2831519 0.1896309 1.4931734 0.1374511\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 19.463\n", + "MULTICOLLINEARITY CONDITION NUMBER 17.037\n", "\n", "TEST ON NORMALITY OF ERRORS\n", "TEST DF VALUE PROB\n", - "Jarque-Bera 2 1.957 0.3760\n", + "Jarque-Bera 2 700.804 0.0000\n", "\n", "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", "RANDOM COEFFICIENTS\n", "TEST DF VALUE PROB\n", - "Breusch-Pagan test 2 0.228 0.8921\n", - "Koenker-Bassett test 2 0.261 0.8776\n", + "Breusch-Pagan test 3 128.095 0.0000\n", + "Koenker-Bassett test 3 23.069 0.0000\n", "----------\n", "\n", "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 3\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 3_['HOVAL'] Number of Observations: 10\n", - "Mean dependent var : 30.0383 Number of Variables : 3\n", - "S.D. dependent var : 6.4509 Degrees of Freedom : 7\n", - "R-squared : 0.8050\n", - "Adjusted R-squared : 0.7493\n", - "Sum squared residual: 73.037 F-statistic : 14.4476\n", - "Sigma-square : 10.434 Prob(F-statistic) : 0.003275\n", - "S.E. of regression : 3.230 Log likelihood : -24.131\n", - "Sigma-square ML : 7.304 Akaike info criterion : 54.263\n", - "S.E of regression ML: 2.7025 Schwarz criterion : 55.170\n", + "Dependent Variable : 3_['HR90'] Number of Observations: 416\n", + "Mean dependent var : 3.5350 Number of Variables : 4\n", + "S.D. dependent var : 3.5289 Degrees of Freedom : 412\n", + "R-squared : 0.2384\n", + "Adjusted R-squared : 0.2328\n", + "Sum squared residual: 3936.025 F-statistic : 42.9870\n", + "Sigma-square : 9.553 Prob(F-statistic) : 3.458e-24\n", + "S.E. of regression : 3.091 Log likelihood : -1057.705\n", + "Sigma-square ML : 9.462 Akaike info criterion : 2123.409\n", + "S.E of regression ML: 3.0760 Schwarz criterion : 2139.532\n", "\n", "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 3_CONSTANT -16.2929212 10.1167637 -1.6104875 0.1513267\n", - " 3_INC 2.3390074 0.4430624 5.2791824 0.0011491\n", - " 3_CRIME 0.4036596 0.1324784 3.0469845 0.0186623\n", + " 3_CONSTANT 3.6580644 0.7883611 4.6400874 0.0000047\n", + " 3_RD90 2.1705064 0.3732128 5.8157339 0.0000000\n", + " 3_PS90 1.6485127 0.2143249 7.6916535 0.0000000\n", + " 3_UE90 -0.0049898 0.0843801 -0.0591343 0.9528738\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 20.794\n", + "MULTICOLLINEARITY CONDITION NUMBER 11.124\n", "\n", "TEST ON NORMALITY OF ERRORS\n", "TEST DF VALUE PROB\n", - "Jarque-Bera 2 0.655 0.7207\n", + "Jarque-Bera 2 2163.820 0.0000\n", "\n", "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", "RANDOM COEFFICIENTS\n", "TEST DF VALUE PROB\n", - "Breusch-Pagan test 2 0.708 0.7020\n", - "Koenker-Bassett test 2 1.358 0.5070\n", + "Breusch-Pagan test 3 295.778 0.0000\n", + "Koenker-Bassett test 3 48.598 0.0000\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 4\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 4_['HR90'] Number of Observations: 105\n", + "Mean dependent var : 6.9902 Number of Variables : 4\n", + "S.D. dependent var : 7.7137 Degrees of Freedom : 101\n", + "R-squared : 0.5133\n", + "Adjusted R-squared : 0.4989\n", + "Sum squared residual: 3011.570 F-statistic : 35.5107\n", + "Sigma-square : 29.818 Prob(F-statistic) : 9.373e-16\n", + "S.E. of regression : 5.461 Log likelihood : -325.192\n", + "Sigma-square ML : 28.682 Akaike info criterion : 658.384\n", + "S.E of regression ML: 5.3555 Schwarz criterion : 669.000\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 4_CONSTANT 12.6762323 2.3973782 5.2875396 0.0000007\n", + " 4_RD90 7.2357749 0.8959392 8.0761894 0.0000000\n", + " 4_PS90 3.0087836 0.5687185 5.2904618 0.0000007\n", + " 4_UE90 -0.9087647 0.4285148 -2.1207310 0.0363931\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 10.336\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 1082.543 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 69.868 0.0000\n", + "Koenker-Bassett test 3 8.330 0.0397\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 5\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 5_['HR90'] Number of Observations: 212\n", + "Mean dependent var : 6.7045 Number of Variables : 4\n", + "S.D. dependent var : 7.5062 Degrees of Freedom : 208\n", + "R-squared : 0.6513\n", + "Adjusted R-squared : 0.6463\n", + "Sum squared residual: 4145.470 F-statistic : 129.5007\n", + "Sigma-square : 19.930 Prob(F-statistic) : 2.429e-47\n", + "S.E. of regression : 4.464 Log likelihood : -615.973\n", + "Sigma-square ML : 19.554 Akaike info criterion : 1239.945\n", + "S.E of regression ML: 4.4220 Schwarz criterion : 1253.372\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 5_CONSTANT 6.8749278 1.4815715 4.6402943 0.0000062\n", + " 5_RD90 5.0735729 0.4720012 10.7490683 0.0000000\n", + " 5_PS90 4.3257745 0.4290443 10.0823502 0.0000000\n", + " 5_UE90 -0.1901823 0.2136345 -0.8902227 0.3743748\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 10.840\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 23.086 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 68.023 0.0000\n", + "Koenker-Bassett test 3 50.360 0.0000\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 6\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 6_['HR90'] Number of Observations: 142\n", + "Mean dependent var : 6.9674 Number of Variables : 4\n", + "S.D. dependent var : 7.7639 Degrees of Freedom : 138\n", + "R-squared : 0.0816\n", + "Adjusted R-squared : 0.0616\n", + "Sum squared residual: 7805.895 F-statistic : 4.0858\n", + "Sigma-square : 56.564 Prob(F-statistic) : 0.008156\n", + "S.E. of regression : 7.521 Log likelihood : -485.973\n", + "Sigma-square ML : 54.971 Akaike info criterion : 979.945\n", + "S.E of regression ML: 7.4142 Schwarz criterion : 991.769\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 6_CONSTANT 8.9134518 2.2205952 4.0139922 0.0000975\n", + " 6_RD90 3.1669956 1.0249618 3.0898670 0.0024224\n", + " 6_PS90 0.9219418 0.7333370 1.2571872 0.2108094\n", + " 6_UE90 -0.2902235 0.3083686 -0.9411576 0.3482687\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 7.818\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 211.413 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 16.332 0.0010\n", + "Koenker-Bassett test 3 4.771 0.1893\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 7\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 7_['HR90'] Number of Observations: 494\n", + "Mean dependent var : 9.4357 Number of Variables : 4\n", + "S.D. dependent var : 6.1868 Degrees of Freedom : 490\n", + "R-squared : 0.3161\n", + "Adjusted R-squared : 0.3120\n", + "Sum squared residual: 12904.325 F-statistic : 75.5098\n", + "Sigma-square : 26.335 Prob(F-statistic) : 3.675e-40\n", + "S.E. of regression : 5.132 Log likelihood : -1506.863\n", + "Sigma-square ML : 26.122 Akaike info criterion : 3021.726\n", + "S.E of regression ML: 5.1110 Schwarz criterion : 3038.536\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 7_CONSTANT 10.2257744 0.7060239 14.4836089 0.0000000\n", + " 7_RD90 4.9173048 0.3601681 13.6528046 0.0000000\n", + " 7_PS90 2.7435413 0.3773269 7.2709932 0.0000000\n", + " 7_UE90 -0.5158999 0.1027098 -5.0228862 0.0000007\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 7.112\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 164.804 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 93.891 0.0000\n", + "Koenker-Bassett test 3 45.305 0.0000\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 8\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 8_['HR90'] Number of Observations: 322\n", + "Mean dependent var : 10.9368 Number of Variables : 4\n", + "S.D. dependent var : 7.1069 Degrees of Freedom : 318\n", + "R-squared : 0.1980\n", + "Adjusted R-squared : 0.1904\n", + "Sum squared residual: 13003.178 F-statistic : 26.1676\n", + "Sigma-square : 40.890 Prob(F-statistic) : 3.738e-15\n", + "S.E. of regression : 6.395 Log likelihood : -1052.340\n", + "Sigma-square ML : 40.383 Akaike info criterion : 2112.680\n", + "S.E of regression ML: 6.3547 Schwarz criterion : 2127.779\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 8_CONSTANT 8.9613419 1.1548606 7.7596741 0.0000000\n", + " 8_RD90 3.1036861 0.4676112 6.6373221 0.0000000\n", + " 8_PS90 2.0054035 0.4775095 4.1997143 0.0000347\n", + " 8_UE90 -0.1659300 0.1618652 -1.0251118 0.3060896\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 8.728\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 805.242 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 271.848 0.0000\n", + "Koenker-Bassett test 3 60.502 0.0000\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 9\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 9_['HR90'] Number of Observations: 191\n", + "Mean dependent var : 12.6163 Number of Variables : 4\n", + "S.D. dependent var : 6.4910 Degrees of Freedom : 187\n", + "R-squared : 0.2010\n", + "Adjusted R-squared : 0.1882\n", + "Sum squared residual: 6396.303 F-statistic : 15.6792\n", + "Sigma-square : 34.205 Prob(F-statistic) : 3.882e-09\n", + "S.E. of regression : 5.848 Log likelihood : -606.337\n", + "Sigma-square ML : 33.488 Akaike info criterion : 1220.674\n", + "S.E of regression ML: 5.7869 Schwarz criterion : 1233.683\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 9_CONSTANT 10.6523809 1.8667675 5.7063244 0.0000000\n", + " 9_RD90 2.8884391 0.5972275 4.8364133 0.0000028\n", + " 9_PS90 0.2205890 0.5966193 0.3697316 0.7120008\n", + " 9_UE90 -0.0296635 0.3154386 -0.0940388 0.9251790\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 10.444\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 16.443 0.0003\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 18.499 0.0003\n", + "Koenker-Bassett test 3 11.542 0.0091\n", "\n", "REGIMES DIAGNOSTICS - CHOW TEST\n", " VARIABLE DF VALUE PROB\n", - " CONSTANT 3 20.123 0.0002\n", - " CRIME 3 26.940 0.0000\n", - " INC 3 4.537 0.2090\n", - " Global test 9 36.811 0.0000\n", + " CONSTANT 9 102.431 0.0000\n", + " PS90 9 77.668 0.0000\n", + " RD90 9 78.587 0.0000\n", + " UE90 9 49.001 0.0000\n", + " Global test 36 498.898 0.0000\n", "================================ END OF REPORT =====================================\n" ] } ], "source": [ "reg = spreg.OLS_Regimes(y,x,\n", - " regimes=results.current_labels_, w=w, name_y=['HOVAL'], name_x=['INC','CRIME'], name_regimes='skater_reg')\n", + " regimes=results._trace[9][0], w=w, name_y=['HR90'], name_x=['RD90','PS90','UE90'], name_regimes='skater_reg')\n", "print(reg.summary)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Analysis", + "display_name": "Python [conda env:myenv] *", "language": "python", - "name": "analysis" + "name": "conda-env-myenv-py" }, "language_info": { "codemirror_mode": { @@ -43211,7 +622,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.4" + "version": "3.8.15" } }, "nbformat": 4, From f9a2d07ef0fe74c5be602f086025bcff2c389121 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Mon, 27 Mar 2023 18:12:50 -0500 Subject: [PATCH 03/28] Changing number of clusters in regimes regression in the example notebook. --- notebooks/skater_reg.ipynb | 238 +++++++++++++++++++++++++------------ 1 file changed, 162 insertions(+), 76 deletions(-) diff --git a/notebooks/skater_reg.ipynb b/notebooks/skater_reg.ipynb index 38f05ac6..bfbcf91c 100644 --- a/notebooks/skater_reg.ipynb +++ b/notebooks/skater_reg.ipynb @@ -88,8 +88,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1min 33s, sys: 31.3 s, total: 2min 4s\n", - "Wall time: 34.7 s\n" + "CPU times: user 1min 16s, sys: 31.6 s, total: 1min 48s\n", + "Wall time: 25.3 s\n" ] } ], @@ -183,7 +183,7 @@ "id": "9bef8f61", "metadata": {}, "source": [ - "With the cluster allocations and selected number of clusters, we can call the Regimes methods in Spreg to get the full regression results and Chow tests on the stability of the coefficients accross the different clusters." + "With the cluster allocations and selected number of clusters, we can call the Regimes methods in Spreg to get the full regression results and Chow tests on the stability of the coefficients accross the 12 different clusters." ] }, { @@ -242,46 +242,85 @@ "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 1_['HR90'] Number of Observations: 442\n", - "Mean dependent var : 4.2336 Number of Variables : 4\n", - "S.D. dependent var : 5.8415 Degrees of Freedom : 438\n", - "R-squared : 0.1285\n", - "Adjusted R-squared : 0.1226\n", - "Sum squared residual: 13113.889 F-statistic : 21.5360\n", - "Sigma-square : 29.940 Prob(F-statistic) : 4.99e-13\n", - "S.E. of regression : 5.472 Log likelihood : -1376.387\n", - "Sigma-square ML : 29.669 Akaike info criterion : 2760.773\n", - "S.E of regression ML: 5.4470 Schwarz criterion : 2777.139\n", + "Dependent Variable : 1_['HR90'] Number of Observations: 180\n", + "Mean dependent var : 2.6269 Number of Variables : 4\n", + "S.D. dependent var : 4.5592 Degrees of Freedom : 176\n", + "R-squared : 0.1473\n", + "Adjusted R-squared : 0.1328\n", + "Sum squared residual: 3172.661 F-statistic : 10.1339\n", + "Sigma-square : 18.026 Prob(F-statistic) : 3.424e-06\n", + "S.E. of regression : 4.246 Log likelihood : -513.652\n", + "Sigma-square ML : 17.626 Akaike info criterion : 1035.304\n", + "S.E of regression ML: 4.1983 Schwarz criterion : 1048.076\n", "\n", "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 1_CONSTANT 2.9419808 0.8336035 3.5292327 0.0004609\n", - " 1_RD90 1.4503115 0.5061202 2.8655477 0.0043633\n", - " 1_PS90 0.7620325 0.2229427 3.4180638 0.0006897\n", - " 1_UE90 0.3611520 0.0977243 3.6956233 0.0002471\n", + " 1_CONSTANT 1.6802968 1.0041720 1.6733157 0.0960416\n", + " 1_RD90 0.9214816 0.7386502 1.2475210 0.2138639\n", + " 1_PS90 0.5520464 0.3817853 1.4459601 0.1499668\n", + " 1_UE90 0.3793060 0.1012117 3.7476508 0.0002418\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", "REGRESSION DIAGNOSTICS\n", - "MULTICOLLINEARITY CONDITION NUMBER 6.511\n", + "MULTICOLLINEARITY CONDITION NUMBER 6.525\n", "\n", "TEST ON NORMALITY OF ERRORS\n", "TEST DF VALUE PROB\n", - "Jarque-Bera 2 76308.673 0.0000\n", + "Jarque-Bera 2 4249.029 0.0000\n", "\n", "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", "RANDOM COEFFICIENTS\n", "TEST DF VALUE PROB\n", - "Breusch-Pagan test 3 555.665 0.0000\n", - "Koenker-Bassett test 3 17.034 0.0007\n", + "Breusch-Pagan test 3 6.927 0.0743\n", + "Koenker-Bassett test 3 0.565 0.9044\n", "----------\n", "\n", "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 2\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 2_['HR90'] Number of Observations: 157\n", + "Dependent Variable : 2_['HR90'] Number of Observations: 105\n", + "Mean dependent var : 5.4586 Number of Variables : 4\n", + "S.D. dependent var : 3.9328 Degrees of Freedom : 101\n", + "R-squared : 0.6004\n", + "Adjusted R-squared : 0.5885\n", + "Sum squared residual: 642.756 F-statistic : 50.5868\n", + "Sigma-square : 6.364 Prob(F-statistic) : 4.794e-20\n", + "S.E. of regression : 2.523 Log likelihood : -244.108\n", + "Sigma-square ML : 6.121 Akaike info criterion : 496.217\n", + "S.E of regression ML: 2.4742 Schwarz criterion : 506.832\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 2_CONSTANT 2.9279569 1.6500241 1.7744934 0.0789946\n", + " 2_RD90 3.8978472 0.8119511 4.8005936 0.0000055\n", + " 2_PS90 2.5952604 0.2458875 10.5546660 0.0000000\n", + " 2_UE90 0.3236171 0.1945793 1.6631633 0.0993799\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 15.160\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 6.807 0.0333\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 15.329 0.0016\n", + "Koenker-Bassett test 3 14.809 0.0020\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 3\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 3_['HR90'] Number of Observations: 157\n", "Mean dependent var : 3.2521 Number of Variables : 4\n", "S.D. dependent var : 3.4925 Degrees of Freedom : 153\n", "R-squared : 0.3735\n", @@ -295,10 +334,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 2_CONSTANT 1.6648327 1.6499048 1.0090477 0.3145449\n", - " 2_RD90 2.5911850 0.5446873 4.7571975 0.0000045\n", - " 2_PS90 1.7951113 0.2645028 6.7867381 0.0000000\n", - " 2_UE90 0.2831519 0.1896309 1.4931734 0.1374511\n", + " 3_CONSTANT 1.6648327 1.6499048 1.0090477 0.3145449\n", + " 3_RD90 2.5911850 0.5446873 4.7571975 0.0000045\n", + " 3_PS90 1.7951113 0.2645028 6.7867381 0.0000000\n", + " 3_UE90 0.2831519 0.1896309 1.4931734 0.1374511\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -316,11 +355,50 @@ "Koenker-Bassett test 3 23.069 0.0000\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 3\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 4\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 3_['HR90'] Number of Observations: 416\n", + "Dependent Variable : 4_['HR90'] Number of Observations: 157\n", + "Mean dependent var : 5.2565 Number of Variables : 4\n", + "S.D. dependent var : 7.5670 Degrees of Freedom : 153\n", + "R-squared : 0.0718\n", + "Adjusted R-squared : 0.0536\n", + "Sum squared residual: 8291.273 F-statistic : 3.9445\n", + "Sigma-square : 54.191 Prob(F-statistic) : 0.009592\n", + "S.E. of regression : 7.361 Log likelihood : -534.160\n", + "Sigma-square ML : 52.811 Akaike info criterion : 1076.321\n", + "S.E of regression ML: 7.2671 Schwarz criterion : 1088.546\n", + "\n", + "------------------------------------------------------------------------------------\n", + " Variable Coefficient Std.Error t-Statistic Probability\n", + "------------------------------------------------------------------------------------\n", + " 4_CONSTANT 6.5333323 2.4673414 2.6479239 0.0089474\n", + " 4_RD90 2.7602351 1.0586310 2.6073627 0.0100275\n", + " 4_PS90 -0.6252142 0.6065058 -1.0308463 0.3042397\n", + " 4_UE90 -0.0983422 0.2825469 -0.3480561 0.7282764\n", + "------------------------------------------------------------------------------------\n", + "Regimes variable: skater_reg\n", + "\n", + "REGRESSION DIAGNOSTICS\n", + "MULTICOLLINEARITY CONDITION NUMBER 9.215\n", + "\n", + "TEST ON NORMALITY OF ERRORS\n", + "TEST DF VALUE PROB\n", + "Jarque-Bera 2 10522.321 0.0000\n", + "\n", + "DIAGNOSTICS FOR HETEROSKEDASTICITY\n", + "RANDOM COEFFICIENTS\n", + "TEST DF VALUE PROB\n", + "Breusch-Pagan test 3 397.444 0.0000\n", + "Koenker-Bassett test 3 19.450 0.0002\n", + "----------\n", + "\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 5\n", + "---------------------------------------------------------------\n", + "Data set : unknown\n", + "Weights matrix : unknown\n", + "Dependent Variable : 5_['HR90'] Number of Observations: 416\n", "Mean dependent var : 3.5350 Number of Variables : 4\n", "S.D. dependent var : 3.5289 Degrees of Freedom : 412\n", "R-squared : 0.2384\n", @@ -334,10 +412,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 3_CONSTANT 3.6580644 0.7883611 4.6400874 0.0000047\n", - " 3_RD90 2.1705064 0.3732128 5.8157339 0.0000000\n", - " 3_PS90 1.6485127 0.2143249 7.6916535 0.0000000\n", - " 3_UE90 -0.0049898 0.0843801 -0.0591343 0.9528738\n", + " 5_CONSTANT 3.6580644 0.7883611 4.6400874 0.0000047\n", + " 5_RD90 2.1705064 0.3732128 5.8157339 0.0000000\n", + " 5_PS90 1.6485127 0.2143249 7.6916535 0.0000000\n", + " 5_UE90 -0.0049898 0.0843801 -0.0591343 0.9528738\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -355,11 +433,11 @@ "Koenker-Bassett test 3 48.598 0.0000\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 4\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 6\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 4_['HR90'] Number of Observations: 105\n", + "Dependent Variable : 6_['HR90'] Number of Observations: 105\n", "Mean dependent var : 6.9902 Number of Variables : 4\n", "S.D. dependent var : 7.7137 Degrees of Freedom : 101\n", "R-squared : 0.5133\n", @@ -373,10 +451,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 4_CONSTANT 12.6762323 2.3973782 5.2875396 0.0000007\n", - " 4_RD90 7.2357749 0.8959392 8.0761894 0.0000000\n", - " 4_PS90 3.0087836 0.5687185 5.2904618 0.0000007\n", - " 4_UE90 -0.9087647 0.4285148 -2.1207310 0.0363931\n", + " 6_CONSTANT 12.6762323 2.3973782 5.2875396 0.0000007\n", + " 6_RD90 7.2357749 0.8959392 8.0761894 0.0000000\n", + " 6_PS90 3.0087836 0.5687185 5.2904618 0.0000007\n", + " 6_UE90 -0.9087647 0.4285148 -2.1207310 0.0363931\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -394,11 +472,11 @@ "Koenker-Bassett test 3 8.330 0.0397\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 5\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 7\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 5_['HR90'] Number of Observations: 212\n", + "Dependent Variable : 7_['HR90'] Number of Observations: 212\n", "Mean dependent var : 6.7045 Number of Variables : 4\n", "S.D. dependent var : 7.5062 Degrees of Freedom : 208\n", "R-squared : 0.6513\n", @@ -412,10 +490,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 5_CONSTANT 6.8749278 1.4815715 4.6402943 0.0000062\n", - " 5_RD90 5.0735729 0.4720012 10.7490683 0.0000000\n", - " 5_PS90 4.3257745 0.4290443 10.0823502 0.0000000\n", - " 5_UE90 -0.1901823 0.2136345 -0.8902227 0.3743748\n", + " 7_CONSTANT 6.8749278 1.4815715 4.6402943 0.0000062\n", + " 7_RD90 5.0735729 0.4720012 10.7490683 0.0000000\n", + " 7_PS90 4.3257745 0.4290443 10.0823502 0.0000000\n", + " 7_UE90 -0.1901823 0.2136345 -0.8902227 0.3743748\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -433,11 +511,11 @@ "Koenker-Bassett test 3 50.360 0.0000\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 6\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 8\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 6_['HR90'] Number of Observations: 142\n", + "Dependent Variable : 8_['HR90'] Number of Observations: 142\n", "Mean dependent var : 6.9674 Number of Variables : 4\n", "S.D. dependent var : 7.7639 Degrees of Freedom : 138\n", "R-squared : 0.0816\n", @@ -451,10 +529,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 6_CONSTANT 8.9134518 2.2205952 4.0139922 0.0000975\n", - " 6_RD90 3.1669956 1.0249618 3.0898670 0.0024224\n", - " 6_PS90 0.9219418 0.7333370 1.2571872 0.2108094\n", - " 6_UE90 -0.2902235 0.3083686 -0.9411576 0.3482687\n", + " 8_CONSTANT 8.9134518 2.2205952 4.0139922 0.0000975\n", + " 8_RD90 3.1669956 1.0249618 3.0898670 0.0024224\n", + " 8_PS90 0.9219418 0.7333370 1.2571872 0.2108094\n", + " 8_UE90 -0.2902235 0.3083686 -0.9411576 0.3482687\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -472,11 +550,11 @@ "Koenker-Bassett test 3 4.771 0.1893\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 7\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 9\n", "---------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 7_['HR90'] Number of Observations: 494\n", + "Dependent Variable : 9_['HR90'] Number of Observations: 494\n", "Mean dependent var : 9.4357 Number of Variables : 4\n", "S.D. dependent var : 6.1868 Degrees of Freedom : 490\n", "R-squared : 0.3161\n", @@ -490,10 +568,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 7_CONSTANT 10.2257744 0.7060239 14.4836089 0.0000000\n", - " 7_RD90 4.9173048 0.3601681 13.6528046 0.0000000\n", - " 7_PS90 2.7435413 0.3773269 7.2709932 0.0000000\n", - " 7_UE90 -0.5158999 0.1027098 -5.0228862 0.0000007\n", + " 9_CONSTANT 10.2257744 0.7060239 14.4836089 0.0000000\n", + " 9_RD90 4.9173048 0.3601681 13.6528046 0.0000000\n", + " 9_PS90 2.7435413 0.3773269 7.2709932 0.0000000\n", + " 9_UE90 -0.5158999 0.1027098 -5.0228862 0.0000007\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -511,11 +589,11 @@ "Koenker-Bassett test 3 45.305 0.0000\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 8\n", - "---------------------------------------------------------------\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 10\n", + "----------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 8_['HR90'] Number of Observations: 322\n", + "Dependent Variable : 10_['HR90'] Number of Observations: 322\n", "Mean dependent var : 10.9368 Number of Variables : 4\n", "S.D. dependent var : 7.1069 Degrees of Freedom : 318\n", "R-squared : 0.1980\n", @@ -529,10 +607,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 8_CONSTANT 8.9613419 1.1548606 7.7596741 0.0000000\n", - " 8_RD90 3.1036861 0.4676112 6.6373221 0.0000000\n", - " 8_PS90 2.0054035 0.4775095 4.1997143 0.0000347\n", - " 8_UE90 -0.1659300 0.1618652 -1.0251118 0.3060896\n", + " 10_CONSTANT 8.9613419 1.1548606 7.7596741 0.0000000\n", + " 10_RD90 3.1036861 0.4676112 6.6373221 0.0000000\n", + " 10_PS90 2.0054035 0.4775095 4.1997143 0.0000347\n", + " 10_UE90 -0.1659300 0.1618652 -1.0251118 0.3060896\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -550,11 +628,11 @@ "Koenker-Bassett test 3 60.502 0.0000\n", "----------\n", "\n", - "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 9\n", - "---------------------------------------------------------------\n", + "SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 11\n", + "----------------------------------------------------------------\n", "Data set : unknown\n", "Weights matrix : unknown\n", - "Dependent Variable : 9_['HR90'] Number of Observations: 191\n", + "Dependent Variable : 11_['HR90'] Number of Observations: 191\n", "Mean dependent var : 12.6163 Number of Variables : 4\n", "S.D. dependent var : 6.4910 Degrees of Freedom : 187\n", "R-squared : 0.2010\n", @@ -568,10 +646,10 @@ "------------------------------------------------------------------------------------\n", " Variable Coefficient Std.Error t-Statistic Probability\n", "------------------------------------------------------------------------------------\n", - " 9_CONSTANT 10.6523809 1.8667675 5.7063244 0.0000000\n", - " 9_RD90 2.8884391 0.5972275 4.8364133 0.0000028\n", - " 9_PS90 0.2205890 0.5966193 0.3697316 0.7120008\n", - " 9_UE90 -0.0296635 0.3154386 -0.0940388 0.9251790\n", + " 11_CONSTANT 10.6523809 1.8667675 5.7063244 0.0000000\n", + " 11_RD90 2.8884391 0.5972275 4.8364133 0.0000028\n", + " 11_PS90 0.2205890 0.5966193 0.3697316 0.7120008\n", + " 11_UE90 -0.0296635 0.3154386 -0.0940388 0.9251790\n", "------------------------------------------------------------------------------------\n", "Regimes variable: skater_reg\n", "\n", @@ -590,20 +668,28 @@ "\n", "REGIMES DIAGNOSTICS - CHOW TEST\n", " VARIABLE DF VALUE PROB\n", - " CONSTANT 9 102.431 0.0000\n", - " PS90 9 77.668 0.0000\n", - " RD90 9 78.587 0.0000\n", - " UE90 9 49.001 0.0000\n", - " Global test 36 498.898 0.0000\n", + " CONSTANT 11 110.297 0.0000\n", + " PS90 11 95.473 0.0000\n", + " RD90 11 75.733 0.0000\n", + " UE90 11 52.373 0.0000\n", + " Global test 44 532.110 0.0000\n", "================================ END OF REPORT =====================================\n" ] } ], "source": [ "reg = spreg.OLS_Regimes(y,x,\n", - " regimes=results._trace[9][0], w=w, name_y=['HR90'], name_x=['RD90','PS90','UE90'], name_regimes='skater_reg')\n", + " regimes=results._trace[11][0], w=w, name_y=['HR90'], name_x=['RD90','PS90','UE90'], name_regimes='skater_reg')\n", "print(reg.summary)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "887b4d0d", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 72320cf9eb0a8387ec675feceb2c499cecfa88bf Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 29 Mar 2023 20:52:57 -0500 Subject: [PATCH 04/28] Fixing a bug in the printing of results of Chow Test in ML_Lag_Regimes --- spreg/ml_lag_regimes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spreg/ml_lag_regimes.py b/spreg/ml_lag_regimes.py index ec9bfe5e..4e603d09 100644 --- a/spreg/ml_lag_regimes.py +++ b/spreg/ml_lag_regimes.py @@ -318,7 +318,7 @@ def __init__( set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) - self.name_x_r = name_x + [USER.set_name_yend_sp(name_y)] + self.name_x_r = USER.set_name_x(name_x, x_constant) + [USER.set_name_yend_sp(name_y)] self.method = method self.epsilon = epsilon self.name_regimes = USER.set_name_ds(name_regimes) From 6921d00152159ed6656a0b66d0bd51649186d1ae Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Thu, 30 Mar 2023 08:33:07 -0500 Subject: [PATCH 05/28] Fixing a bug in the printing of results of Chow Test in ML_Lag_Regimes (#112) --- spreg/ml_lag_regimes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spreg/ml_lag_regimes.py b/spreg/ml_lag_regimes.py index ec9bfe5e..4e603d09 100644 --- a/spreg/ml_lag_regimes.py +++ b/spreg/ml_lag_regimes.py @@ -318,7 +318,7 @@ def __init__( set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) - self.name_x_r = name_x + [USER.set_name_yend_sp(name_y)] + self.name_x_r = USER.set_name_x(name_x, x_constant) + [USER.set_name_yend_sp(name_y)] self.method = method self.epsilon = epsilon self.name_regimes = USER.set_name_ds(name_regimes) From 197be6237422ea0b3ef6a80a58e09a07e6ecbe63 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Mon, 3 Apr 2023 11:34:55 -0500 Subject: [PATCH 06/28] Fixing minor bugs in the way results were printed for Combo and GM_Error regimes models. --- spreg/error_sp_het_regimes.py | 2 +- spreg/summary_output.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/spreg/error_sp_het_regimes.py b/spreg/error_sp_het_regimes.py index a5e6aafc..9c5a4586 100644 --- a/spreg/error_sp_het_regimes.py +++ b/spreg/error_sp_het_regimes.py @@ -329,7 +329,7 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) - self.name_x_r = name_x + self.name_x_r = USER.set_name_x(name_x, x_constant) cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant) self.regimes_set = REGI._get_regimes_set(regimes) diff --git a/spreg/summary_output.py b/spreg/summary_output.py index 6be95ec1..0e3d2fbb 100755 --- a/spreg/summary_output.py +++ b/spreg/summary_output.py @@ -459,7 +459,7 @@ def GM_Error_Hom(reg, vm, w, regimes=False): # build coefficients table body beta_position = summary_coefs_allx(reg, reg.z_stat, lambd=True) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=False, nonspat_diag=False, spat_diag=False) @@ -501,7 +501,7 @@ def GM_Endog_Error_Hom(reg, vm, w, regimes=False): summary_coefs_allx(reg, reg.z_stat, lambd=True) summary_coefs_instruments(reg) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=True, nonspat_diag=False, spat_diag=False) @@ -543,7 +543,7 @@ def GM_Error_Het(reg, vm, w, regimes=False): # build coefficients table body beta_position = summary_coefs_allx(reg, reg.z_stat, lambd=True) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=False, nonspat_diag=False, spat_diag=False) @@ -585,7 +585,7 @@ def GM_Endog_Error_Het(reg, vm, w, regimes=False): summary_coefs_allx(reg, reg.z_stat, lambd=True) summary_coefs_instruments(reg) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=True, nonspat_diag=False, spat_diag=False) @@ -671,7 +671,7 @@ def GM_Combo_Hom(reg, vm, w, regimes=False): summary_coefs_allx(reg, reg.z_stat, lambd=True) summary_coefs_instruments(reg) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=True, nonspat_diag=False, spat_diag=False) @@ -715,7 +715,7 @@ def GM_Combo_Het(reg, vm, w, regimes=False): summary_coefs_allx(reg, reg.z_stat, lambd=True) summary_coefs_instruments(reg) if regimes: - summary_coefs_lambda(reg, reg.z_stat) + #summary_coefs_lambda(reg, reg.z_stat) summary_regimes(reg) summary_warning(reg) summary(reg=reg, vm=vm, instruments=True, nonspat_diag=False, spat_diag=False) @@ -1182,7 +1182,7 @@ def _get_var_indices(reg, zt_stat, lambd=False): try: kf = reg.kf if lambd: - kf += -len(zt_stat) - len(reg.betas) + kf += len(zt_stat) - len(reg.betas) krex = reg.kr - reg.kryd try: kfyd = reg.yend.shape[1] - reg.nr * reg.kryd From 01badd695d8d396ba27197aba8c3ed1a9e5151e4 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Mon, 3 Apr 2023 11:42:30 -0500 Subject: [PATCH 07/28] Adding TSLS_Regimes to the api. --- docs/api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api.rst b/docs/api.rst index 7ca22b87..792be6e8 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -47,6 +47,7 @@ Regimes models are variants of spatial regression models which allow for structu :toctree: generated/ spreg.OLS_Regimes + spreg.TSLS_Regimes spreg.ML_Lag_Regimes spreg.ML_Error_Regimes spreg.GM_Lag_Regimes From 79b67586377d0e02f475cc350d45d4643eea513e Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Sat, 8 Apr 2023 07:07:42 -0500 Subject: [PATCH 08/28] Fixing minor bug in the results report for GM_Endog_Error_Regimes methods. --- spreg/summary_output.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spreg/summary_output.py b/spreg/summary_output.py index 0e3d2fbb..989aaf52 100755 --- a/spreg/summary_output.py +++ b/spreg/summary_output.py @@ -1194,6 +1194,8 @@ def _get_var_indices(reg, zt_stat, lambd=False): for i in range(reg.nr): j = i * krex jyd = krex * reg.nr + i * reg.kryd + kf - kfyd + if len(zt_stat) == len(reg.betas) and lambd: + jyd += -1 name_reg = var_names[j + j_con : j + krex] + var_names[jyd : jyd + reg.kryd] # name_reg.sort() if reg.constant_regi == "many": @@ -1203,10 +1205,14 @@ def _get_var_indices(reg, zt_stat, lambd=False): if reg.constant_regi == "one": indices += [krex * reg.nr] if len(indices) < last_v: - name_reg = ( + if len(indices) - last_v == -1 and lambd: + name_reg = ['lambda'] + else: + name_reg = ( var_names[krex * reg.nr + 1 - j_con : krex * reg.nr + kf - kfyd] + var_names[reg.kr * reg.nr + kf - kfyd : reg.kr * reg.nr + kf] ) + # name_reg.sort() indices += [var_names.index(ind) for ind in name_reg] except: From a8e9e95cd415ee057e6d11ea094580f0fe246602 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Sat, 8 Apr 2023 07:10:35 -0500 Subject: [PATCH 09/28] Documenting fix. --- spreg/summary_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spreg/summary_output.py b/spreg/summary_output.py index 989aaf52..ae117a49 100755 --- a/spreg/summary_output.py +++ b/spreg/summary_output.py @@ -1195,7 +1195,7 @@ def _get_var_indices(reg, zt_stat, lambd=False): j = i * krex jyd = krex * reg.nr + i * reg.kryd + kf - kfyd if len(zt_stat) == len(reg.betas) and lambd: - jyd += -1 + jyd += -1 #discount lambda as fixed coefficient in this counter name_reg = var_names[j + j_con : j + krex] + var_names[jyd : jyd + reg.kryd] # name_reg.sort() if reg.constant_regi == "many": From 2be303ac543c38547038f0e05c0037e20712854e Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Mon, 10 Apr 2023 14:06:11 -0500 Subject: [PATCH 10/28] More Regimes results printing fixes. --- spreg/summary_output.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spreg/summary_output.py b/spreg/summary_output.py index ae117a49..627b3f73 100755 --- a/spreg/summary_output.py +++ b/spreg/summary_output.py @@ -1205,13 +1205,12 @@ def _get_var_indices(reg, zt_stat, lambd=False): if reg.constant_regi == "one": indices += [krex * reg.nr] if len(indices) < last_v: - if len(indices) - last_v == -1 and lambd: + if len(indices) - last_v == -1 and reg.kryd>0 and lambd: name_reg = ['lambda'] else: name_reg = ( var_names[krex * reg.nr + 1 - j_con : krex * reg.nr + kf - kfyd] - + var_names[reg.kr * reg.nr + kf - kfyd : reg.kr * reg.nr + kf] - ) + + var_names[reg.kr * reg.nr + kf - kfyd : reg.kr * reg.nr + kf]) # name_reg.sort() indices += [var_names.index(ind) for ind in name_reg] From 43e291262677d9291d95da0b79060dec59d15cd0 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Thu, 27 Apr 2023 11:58:56 -0500 Subject: [PATCH 11/28] Fixing API annotations. --- docs/api.rst | 15 ++++----------- spreg/sur_error.py | 4 ++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index 792be6e8..76f36332 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -76,17 +76,6 @@ Seemingly-unrelated regression models are a generalization of linear regression. spreg.SURlagIV spreg.ThreeSLS -Panel Models ------------- - -.. autosummary:: - :toctree: generated/ - - spreg.Panel_FE_Lag - spreg.Panel_FE_Error - spreg.Panel_RE_Lag - spreg.Panel_RE_Error - Spatial Panel Models -------------------- @@ -95,6 +84,10 @@ Spatial panel models allow for evaluating correlation in both spatial and time d .. autosummary:: :toctree: generated/ + spreg.Panel_FE_Lag + spreg.Panel_FE_Error + spreg.Panel_RE_Lag + spreg.Panel_RE_Error spreg.GM_KKP Diagnostics diff --git a/spreg/sur_error.py b/spreg/sur_error.py index 37f2d6d1..b88e1220 100644 --- a/spreg/sur_error.py +++ b/spreg/sur_error.py @@ -38,7 +38,7 @@ class BaseSURerrorGM: - """Base class for SUR Error estimation by Generalized Moment Estimation + """Base class for SUR Error estimation by Generalized Moments Parameters ---------- @@ -162,7 +162,7 @@ def _momentsGM_sur_Error(w, u): class SURerrorGM(BaseSURerrorGM, REGI.Regimes_Frame): """ - User class for SUR Error estimation by Maximum Likelihood + User class for SUR Error estimation by Generalized Moments Parameters ---------- From 1b78d18a89f32c2e9f094f8ee2e7951af2de02e7 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Thu, 27 Apr 2023 12:18:25 -0500 Subject: [PATCH 12/28] Fixing API annotations. --- spreg/sp_panels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spreg/sp_panels.py b/spreg/sp_panels.py index ab88ea94..68d170a2 100644 --- a/spreg/sp_panels.py +++ b/spreg/sp_panels.py @@ -25,6 +25,7 @@ class BaseGM_KKP(RegressionPropsY): ''' Base GMM method for a spatial random effects panel model based on Kapoor, Kelejian and Prucha (2007) :cite:`KKP2007`. + Parameters ---------- y : array @@ -120,6 +121,7 @@ class GM_KKP(BaseGM_KKP, REGI.Regimes_Frame): ''' GMM method for a spatial random effects panel model based on Kapoor, Kelejian and Prucha (2007) :cite:`KKP2007`. + Parameters ---------- y : array @@ -356,6 +358,7 @@ def _moments_kkp(ws, u, i, trace_w2=None): """ Compute G and g matrices for the KKP model. ... + Parameters ---------- ws : Sparse matrix From f4282739e78259446a2677879b9667bb15ca4832 Mon Sep 17 00:00:00 2001 From: eli knaap Date: Wed, 9 Aug 2023 15:22:48 -0700 Subject: [PATCH 13/28] add panel diagnostics --- docs/api.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index 76f36332..abd4e60c 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -123,3 +123,8 @@ Diagnostic tests are useful for identifying model fit, sufficiency, and specific spreg.surLMe spreg.surLMlag spreg.constant_check + spreg.panel_LMlag + spreg.panel_LMerror + spreg.panel_rLMlag + spreg.panel_rLMerror + spreg.panel_Hausman From bc552108507e3e7867d8f66ed0e95a37c4eca54d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 22:03:12 -0400 Subject: [PATCH 14/28] Bump actions/checkout from 3 to 4 (#117) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build_docs.yml | 2 +- .github/workflows/release_and_publish.yml | 2 +- .github/workflows/unittests.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 64d1b201..dda4d0b0 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -27,7 +27,7 @@ steps: - name: checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup micromamba uses: mamba-org/provision-with-micromamba@main diff --git a/.github/workflows/release_and_publish.yml b/.github/workflows/release_and_publish.yml index 319ad8ac..8d4da65f 100644 --- a/.github/workflows/release_and_publish.yml +++ b/.github/workflows/release_and_publish.yml @@ -21,7 +21,7 @@ runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up python uses: actions/setup-python@v4 diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 07f7f311..5e023225 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -37,7 +37,7 @@ steps: - name: checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup micromamba uses: mamba-org/provision-with-micromamba@main From 8a82e2a592a3637e65081cb772f0b7e4d23d7032 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 13 Sep 2023 16:12:19 -0300 Subject: [PATCH 15/28] Several changes This commit incorporates several developments into spreg. Main changes: - Refactoring of the output. The way the results from the models are printed to the users has been completely refactored. The new function is simpler and generic. It is based on pandas to create an 'output' attribute to the regression object that contains the most important information on the estimates from the model. - Addition of slx_lags to all cross-section models. An attribute slx_lags was added to all cross-section models to allow for the direct estimation of SLX models. - Creation of wrapper functions for the error models. Both error_sp and error_sp_regimes now have wrapper functions that allow for easy estimation of error models based on the kp98, hom or het estimators. The wrapper functions also allow specifications with extra endogenous variables or spatial lag of the dependent variable. - Several minor updates of fixes were also developed in this commit. Despite the major changes, this commit does not break any previous code. This update was developed in a private branch by Luc Anselin and Pedro Amaral. --- spreg/diagnostics_sp.py | 44 +- spreg/error_sp.py | 562 ++++++++++++++++-------- spreg/error_sp_het.py | 106 ++++- spreg/error_sp_het_regimes.py | 255 ++++++++--- spreg/error_sp_hom.py | 115 ++++- spreg/error_sp_hom_regimes.py | 253 ++++++++--- spreg/error_sp_regimes.py | 779 +++++++++++++++++++++++++++------- spreg/ml_error.py | 56 ++- spreg/ml_error_regimes.py | 102 +++-- spreg/ml_lag.py | 84 +++- spreg/ml_lag_regimes.py | 81 ++-- spreg/ols.py | 72 +++- spreg/ols_regimes.py | 313 +++++++++----- spreg/output.py | 476 +++++++++++++++++++++ spreg/regimes.py | 42 +- spreg/twosls.py | 60 ++- spreg/twosls_regimes.py | 183 ++++++-- spreg/twosls_sp.py | 63 ++- spreg/twosls_sp_regimes.py | 120 ++++-- spreg/user_output.py | 25 +- spreg/utils.py | 66 ++- 21 files changed, 3063 insertions(+), 794 deletions(-) mode change 100644 => 100755 spreg/ml_lag.py create mode 100644 spreg/output.py diff --git a/spreg/diagnostics_sp.py b/spreg/diagnostics_sp.py index a3aaeaac..bf0dbfe7 100644 --- a/spreg/diagnostics_sp.py +++ b/spreg/diagnostics_sp.py @@ -18,7 +18,6 @@ class LMtests: - """ Lagrange Multiplier tests. Implemented as presented in :cite:`Anselin1996a` @@ -142,7 +141,6 @@ def __init__(self, ols, w, tests=["all"]): class MoranRes: - """ Moran's I for spatial autocorrelation in residuals from OLS regression @@ -396,7 +394,6 @@ def __init__(self, iv, w, case="nosp"): class spDcache: - """ Helper class to compute reusable pieces in the spatial diagnostics module ... @@ -669,7 +666,7 @@ def get_vI(ols, w, ei, spDcache): B = spDcache.AB[1] trB = np.sum(B.diagonal()) * 4.0 vi = (w.n ** 2 / (w.s0 ** 2 * (w.n - ols.k) * (w.n - ols.k + 2.0))) * ( - w.s1 + 2.0 * trA2 - trB - ((2.0 * (spDcache.trA ** 2)) / (w.n - ols.k)) + w.s1 + 2.0 * trA2 - trB - ((2.0 * (spDcache.trA ** 2)) / (w.n - ols.k)) ) return vi @@ -716,9 +713,6 @@ def akTest(iv, w, spDcache): p : float P-value of the test - ToDo: - * Code in as Nancy - * Compare both """ mi = get_mI(iv, w, spDcache) # Phi2 @@ -731,6 +725,42 @@ def akTest(iv, w, spDcache): return (mi, ak[0][0], pval[0][0]) +def comfac_test(lambd, beta, gamma, vm): + """ + Computes the Spatial Common Factor Hypothesis test as shown in Anselin (1988, p. 226-229) + + Parameters + ---------- + + lambd : float + Spatial autoregressive coefficient (as in lambd*Wy) + beta : array + Coefficients of the exogenous (not spatially lagged) variables, without the constant (as in X*beta) + gamma : array + coefficients of the spatially lagged exogenous variables (as in WX*gamma) + vm : array + Variance-covariance matrix of the coefficients + Obs. Needs to match the order of theta' = [beta', gamma', lambda] + + Returns + ------- + W : float + Wald statistic + pvalue : float + P value for Wald statistic calculated as a Chi sq. distribution + with k-1 degrees of freedom + + """ + g = lambd * beta + gamma + G = np.vstack((lambd * np.eye(beta.shape[0]), np.eye(beta.shape[0]), beta.T)) + + GVGi = la.inv(np.dot(G.T, np.dot(vm, G))) + W = np.dot(g.T, np.dot(GVGi, g))[0][0] + df = G.shape[1] + pvalue = chisqprob(W, df) + return W, pvalue + + def _test(): import doctest diff --git a/spreg/error_sp.py b/spreg/error_sp.py index 5fe47e00..765fddc8 100644 --- a/spreg/error_sp.py +++ b/spreg/error_sp.py @@ -9,23 +9,16 @@ import numpy as np from numpy import linalg as la from . import ols as OLS -from libpysal.weights.spatial_lag import lag_spatial -from .utils import power_expansion, set_endog, iter_msg, sp_att -from .utils import ( - get_A1_hom, - get_A2_hom, - get_A1_het, - optim_moments, - get_spFilter, - get_lags, - _moments2eqs, -) -from .utils import spdot, RegressionPropsY, set_warn +from .utils import set_endog, sp_att, optim_moments, get_spFilter, get_lags, spdot, RegressionPropsY, set_warn from . import twosls as TSLS from . import user_output as USER -from . import summary_output as SUMMARY +import pandas as pd +from .output import output, _spat_pseudo_r2 +from .error_sp_het import GM_Error_Het, GM_Endog_Error_Het, GM_Combo_Het +from .error_sp_hom import GM_Error_Hom, GM_Endog_Error_Hom, GM_Combo_Hom -__all__ = ["GM_Error", "GM_Endog_Error", "GM_Combo"] + +__all__ = ["GMM_Error", "GM_Error", "GM_Endog_Error", "GM_Combo"] class BaseGM_Error(RegressionPropsY): @@ -138,6 +131,9 @@ class GM_Error(BaseGM_Error): independent (exogenous) variable, excluding the constant w : pysal W object Spatial weights object (always needed) + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. vm : boolean If True, include variance-covariance matrix in summary results @@ -149,9 +145,13 @@ class GM_Error(BaseGM_Error): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -287,7 +287,7 @@ class GM_Error(BaseGM_Error): """ def __init__( - self, y, x, w, vm=False, name_y=None, name_x=None, name_w=None, name_ds=None + self, y, x, w, slx_lags=0, vm=False, name_y=None, name_x=None, name_w=None, name_ds=None, latex=False ): n = USER.check_arrays(y, x) @@ -295,14 +295,24 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + + self.title = "GM SPATIALLY WEIGHTED LEAST SQUARES" + if slx_lags >0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" + BaseGM_Error.__init__(self, y=y, x=x_constant, w=w.sparse) - self.title = "SPATIALLY WEIGHTED LEAST SQUARES" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) self.name_x.append("lambda") self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Error(reg=self, w=w, vm=vm) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x) - 1) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class BaseGM_Endog_Error(RegressionPropsY): @@ -379,7 +389,7 @@ class BaseGM_Endog_Error(RegressionPropsY): >>> w.transform='r' >>> model = spreg.error_sp.BaseGM_Endog_Error(y, x, yend, q, w=w.sparse) >>> np.around(model.betas, decimals=4) - array([[82.573 ], + array([[82.5723], [ 0.581 ], [-1.4481], [ 0.3499]]) @@ -438,6 +448,9 @@ class GM_Endog_Error(BaseGM_Endog_Error): this should not contain any variables from x) w : pysal W object Spatial weights object (always needed) + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. vm : boolean If True, include variance-covariance matrix in summary results @@ -453,9 +466,13 @@ class GM_Endog_Error(BaseGM_Endog_Error): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -603,12 +620,12 @@ class GM_Endog_Error(BaseGM_Endog_Error): >>> print(model.name_z) ['CONSTANT', 'inc', 'hoval', 'lambda'] >>> np.around(model.betas, decimals=4) - array([[82.573 ], + array([[82.5723], [ 0.581 ], [-1.4481], [ 0.3499]]) >>> np.around(model.std_err, decimals=4) - array([16.1381, 1.3545, 0.7862]) + array([16.1382, 1.3545, 0.7862]) """ @@ -619,6 +636,7 @@ def __init__( yend, q, w, + slx_lags=0, vm=False, name_y=None, name_x=None, @@ -626,6 +644,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -633,8 +652,13 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + self.title = "GM SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES" + if slx_lags >0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" BaseGM_Endog_Error.__init__(self, y=y, x=x_constant, w=w.sparse, yend=yend, q=q) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -644,137 +668,14 @@ def __init__( self.name_q = USER.set_name_q(name_q, q) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Endog_Error(reg=self, w=w, vm=vm) - - -class BaseGM_Combo(BaseGM_Endog_Error): - - """ - GMM method for a spatial lag and error model, with endogenous variables - (note: no consistency checks, diagnostics or constant added); based on - Kelejian and Prucha (1998, 1999) :cite:`Kelejian1998` :cite:`Kelejian1999`. - - Parameters - ---------- - y : array - nx1 array for dependent variable - x : array - Two dimensional array with n rows and one column for each - independent (exogenous) variable, excluding the constant - yend : array - Two dimensional array with n rows and one column for each - endogenous variable - q : array - Two dimensional array with n rows and one column for each - external exogenous variable to use as instruments (note: - this should not contain any variables from x) - w : Sparse matrix - Spatial weights sparse matrix - w_lags : integer - Orders of W to include as instruments for the spatially - lagged dependent variable. For example, w_lags=1, then - instruments are WX; if w_lags=2, then WX, WWX; and so on. - lag_q : boolean - If True, then include spatial lags of the additional - instruments (q). - - Attributes - ---------- - betas : array - kx1 array of estimated coefficients - u : array - nx1 array of residuals - e_filtered : array - nx1 array of spatially filtered residuals - predy : array - nx1 array of predicted y values - n : integer - Number of observations - k : integer - Number of variables for which coefficients are estimated - (including the constant) - y : array - nx1 array for dependent variable - x : array - Two dimensional array with n rows and one column for each - independent (exogenous) variable, including the constant - yend : array - Two dimensional array with n rows and one column for each - endogenous variable - z : array - nxk array of variables (combination of x and yend) - mean_y : float - Mean of dependent variable - std_y : float - Standard deviation of dependent variable - vm : array - Variance covariance matrix (kxk) - sig2 : float - Sigma squared used in computations + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) - Examples - -------- - - >>> import numpy as np - >>> import libpysal - >>> import spreg - >>> db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') - >>> y = np.array(db.by_col("CRIME")) - >>> y = np.reshape(y, (49,1)) - >>> X = [] - >>> X.append(db.by_col("INC")) - >>> X = np.array(X).T - >>> w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) - >>> w.transform = 'r' - >>> w_lags = 1 - >>> yd2, q2 = spreg.set_endog(y, X, w, None, None, w_lags, True) - >>> X = np.hstack((np.ones(y.shape),X)) - - Example only with spatial lag - - >>> reg = spreg.error_sp.BaseGM_Combo(y, X, yend=yd2, q=q2, w=w.sparse) - - Print the betas - - >>> print(np.around(np.hstack((reg.betas[:-1],np.sqrt(reg.vm.diagonal()).reshape(3,1))),3)) - [[39.059 11.86 ] - [-1.404 0.391] - [ 0.467 0.2 ]] - - And lambda - - >>> print('Lamda: ', np.around(reg.betas[-1], 3)) - Lamda: [-0.048] - - Example with both spatial lag and other endogenous variables - - >>> X = [] - >>> X.append(db.by_col("INC")) - >>> X = np.array(X).T - >>> yd = [] - >>> yd.append(db.by_col("HOVAL")) - >>> yd = np.array(yd).T - >>> q = [] - >>> q.append(db.by_col("DISCBD")) - >>> q = np.array(q).T - >>> yd2, q2 = spreg.set_endog(y, X, w, yd, q, w_lags, True) - >>> X = np.hstack((np.ones(y.shape),X)) - >>> reg = spreg.error_sp.BaseGM_Combo(y, X, yd2, q2, w=w.sparse) - >>> betas = np.array([['CONSTANT'],['INC'],['HOVAL'],['W_CRIME']]) - >>> print(np.hstack((betas, np.around(np.hstack((reg.betas[:-1], np.sqrt(reg.vm.diagonal()).reshape(4,1))),4)))) - [['CONSTANT' '50.0944' '14.3593'] - ['INC' '-0.2552' '0.5667'] - ['HOVAL' '-0.6885' '0.3029'] - ['W_CRIME' '0.4375' '0.2314']] - - """ - - def __init__(self, y, x, yend=None, q=None, w=None, w_lags=1, lag_q=True): - - BaseGM_Endog_Error.__init__(self, y=y, x=x, w=w, yend=yend, q=q) - -class GM_Combo(BaseGM_Combo): +class GM_Combo(BaseGM_Endog_Error): """ GMM method for a spatial lag and error model with endogenous variables, @@ -801,9 +702,13 @@ class GM_Combo(BaseGM_Combo): Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then instruments are WX; if w_lags=2, then WX, WWX; and so on. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the General Nesting + Spatial Model (GNSM) type. lag_q : boolean If True, then include spatial lags of the additional - instruments (q). + instruments (q) vm : boolean If True, include variance-covariance matrix in summary results @@ -819,9 +724,13 @@ class GM_Combo(BaseGM_Combo): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1015,6 +924,7 @@ def __init__( q=None, w=None, w_lags=1, + slx_lags=0, lag_q=True, vm=False, name_y=None, @@ -1023,6 +933,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -1030,23 +941,23 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) - yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) - BaseGM_Combo.__init__( - self, - y=y, - x=x_constant, - w=w.sparse, - yend=yend2, - q=q2, - w_lags=w_lags, - lag_q=lag_q, - ) + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) + else: + yend2, q2, wx = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + + BaseGM_Endog_Error.__init__(self, y=y, x=x_constant, w=w.sparse, yend=yend2, q=q2) + self.rho = self.betas[-2] self.predy_e, self.e_pred, warn = sp_att( w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) set_warn(self, warn) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES" + self.title = "SPATIALLY WEIGHTED 2SLS - GM-COMBO MODEL" + if slx_lags > 0: + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (GNSM)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -1058,7 +969,294 @@ def __init__( self.name_q.extend(USER.set_name_q_sp(self.name_x, w_lags, self.name_q, lag_q)) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Combo(reg=self, w=w, vm=vm) + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * (len(self.name_yend) - 1) + ['rho', 'lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _spat_pseudo_r2(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + +class GMM_Error(GM_Error, GM_Endog_Error, GM_Combo, GM_Error_Het, GM_Endog_Error_Het, + GM_Combo_Het, GM_Error_Hom, GM_Endog_Error_Hom, GM_Combo_Hom): + + """ + Wrapper function to call any of the GMM methods for a spatial error model available in spreg + + Parameters + ---------- + y : array + nx1 array for dependent variable + x : array + Two dimensional array with n rows and one column for each + independent (exogenous) variable, excluding the constant + w : pysal W object + Spatial weights object (always needed) + yend : array + Two dimensional array with n rows and one column for each + endogenous variable (if any) + q : array + Two dimensional array with n rows and one column for each + external exogenous variable to use as instruments (if any) + (note: this should not contain any variables from x) + estimator : string + Choice of estimator to be used. Options are: 'het', which + is robust to heteroskedasticity, 'hom', which assumes + homoskedasticity, and 'kp98', which does not provide + inference on the spatial parameter for the error term. + add_wy : boolean + If True, then a spatial lag of the dependent variable is included. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM or GNSM type. + vm : boolean + If True, include variance-covariance matrix in summary + results + name_y : string + Name of dependent variable for use in output + name_x : list of strings + Names of independent variables for use in output + name_w : string + Name of weights matrix for use in output + name_yend : list of strings + Names of endogenous variables for use in output + name_q : list of strings + Names of instruments for use in output + name_ds : string + Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format + **kwargs : keywords + Additional arguments to pass on to the estimators. + See the specific functions for details on what can be used. + + Attributes + ---------- + output : dataframe + regression results pandas dataframe + summary : string + Summary of regression results and diagnostics (note: use in + conjunction with the print command) + betas : array + kx1 array of estimated coefficients + u : array + nx1 array of residuals + e_filtered : array + nx1 array of spatially filtered residuals + predy : array + nx1 array of predicted y values + n : integer + Number of observations + k : integer + Number of variables for which coefficients are estimated + (including the constant) + y : array + nx1 array for dependent variable + x : array + Two dimensional array with n rows and one column for each + independent (exogenous) variable, including the constant + mean_y : float + Mean of dependent variable + std_y : float + Standard deviation of dependent variable + pr2 : float + Pseudo R squared (squared correlation between y and ypred) + vm : array + Variance covariance matrix (kxk) + sig2 : float + Sigma squared used in computations + std_err : array + 1xk array of standard errors of the betas + z_stat : list of tuples + z statistic; each tuple contains the pair (statistic, + p-value), where each is a float + name_y : string + Name of dependent variable for use in output + name_x : list of strings + Names of independent variables for use in output + name_w : string + Name of weights matrix for use in output + name_ds : string + Name of dataset for use in output + title : string + Name of the regression method used + name_yend : list of strings (optional) + Names of endogenous variables for use in output + name_z : list of strings (optional) + Names of exogenous and endogenous variables for use in + output + name_q : list of strings (optional) + Names of external instruments + name_h : list of strings (optional) + Names of all instruments used in ouput + + + Examples + -------- + + We first need to import the needed modules, namely numpy to convert the + data we read into arrays that ``spreg`` understands and ``libpysal`` to + handle the weights and file management. + + >>> import numpy as np + >>> import libpysal + >>> from libpysal.examples import load_example + + Open data on NCOVR US County Homicides (3085 areas) using libpysal.io.open(). + This is the DBF associated with the NAT shapefile. Note that + libpysal.io.open() also reads data in CSV format; since the actual class + requires data to be passed in as numpy arrays, the user can read their + data in using any method. + + >>> nat = load_example('Natregimes') + >>> db = libpysal.io.open(nat.get_path("natregimes.dbf"),'r') + + Extract the HR90 column (homicide rates in 1990) from the DBF file and make it the + dependent variable for the regression. Note that PySAL requires this to be + an numpy array of shape (n, 1) as opposed to the also common shape of (n, ) + that other packages accept. + + >>> y_var = 'HR90' + >>> y = np.array([db.by_col(y_var)]).reshape(3085,1) + + Extract UE90 (unemployment rate) and PS90 (population structure) vectors from + the DBF to be used as independent variables in the regression. Other variables + can be inserted by adding their names to x_var, such as x_var = ['Var1','Var2','...] + Note that PySAL requires this to be an nxj numpy array, where j is the + number of independent variables (not including a constant). By default + this model adds a vector of ones to the independent variables passed in. + + >>> x_var = ['PS90','UE90'] + >>> x = np.array([db.by_col(name) for name in x_var]).T + + Since we want to run a spatial error model, we need to specify + the spatial weights matrix that includes the spatial configuration of the + observations. To do that, we can open an already existing gal file or + create a new one. In this case, we will create one from ``NAT.shp``. + + >>> w = libpysal.weights.Rook.from_shapefile(nat.get_path("natregimes.shp")) + + Unless there is a good reason not to do it, the weights have to be + row-standardized so every row of the matrix sums to one. Among other + things, this allows to interpret the spatial lag of a variable as the + average value of the neighboring observations. In PySAL, this can be + easily performed in the following way: + + >>> w.transform = 'r' + + The GMM_Error class can run error models and SARAR models, that is a spatial lag+error model. + In this example we will run a simple version of the latter, where we have the + spatial effects as well as exogenous variables. Since it is a spatial + model, we have to pass in the weights matrix. If we want to + have the names of the variables printed in the output summary, we will + have to pass them in as well, although this is optional. + + >>> from spreg import GMM_Error + >>> model = GMM_Error(y, x, w=w, add_wy=True, name_y=y_var, name_x=x_var, name_ds='NAT') + + Once we have run the model, we can explore a little bit the output. The + regression object we have created has many attributes so take your time to + discover them. + + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 CONSTANT 2.176007 1.115807 1.950165 0.051156 + 1 PS90 1.108054 0.207964 5.328096 0.0 + 2 UE90 0.664362 0.061294 10.83893 0.0 + 3 W_HR90 -0.066539 0.154395 -0.430964 0.666494 + 4 lambda 0.765087 0.04268 17.926245 0.0 + + This class also allows the user to run a spatial lag+error model with the + extra feature of including non-spatial endogenous regressors. This means + that, in addition to the spatial lag and error, we consider some of the + variables on the right-hand side of the equation as endogenous and we + instrument for this. In this case we consider RD90 (resource deprivation) + as an endogenous regressor. We use FP89 (families below poverty) + for this and hence put it in the instruments parameter, 'q'. + + >>> yd_var = ['RD90'] + >>> yd = np.array([db.by_col(name) for name in yd_var]).T + >>> q_var = ['FP89'] + >>> q = np.array([db.by_col(name) for name in q_var]).T + + And then we can run and explore the model analogously to the previous combo: + + >>> model = GMM_Error(y, x, yend=yd, q=q, w=w, add_wy=True, name_y=y_var, name_x=x_var, name_yend=yd_var, name_q=q_var, name_ds='NAT') + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 CONSTANT 5.44035 0.560476 9.706652 0.0 + 1 PS90 1.427042 0.1821 7.836572 0.0 + 2 UE90 -0.075224 0.050031 -1.503544 0.132699 + 3 RD90 3.316266 0.261269 12.692924 0.0 + 4 W_HR90 0.200314 0.057433 3.487777 0.000487 + 5 lambda 0.136933 0.070098 1.953457 0.050765 + + The class also allows for estimating a GNS model by adding spatial lags of the exogenous variables, using the argument slx_lags: + + >>> model = GMM_Error(y, x, w=w, add_wy=True, slx_lags=1, name_y=y_var, name_x=x_var, name_ds='NAT') + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 CONSTANT -0.554756 0.551765 -1.00542 0.314695 + 1 PS90 1.09369 0.225895 4.841583 0.000001 + 2 UE90 0.697393 0.082744 8.428291 0.0 + 3 W_PS90 -1.533378 0.396651 -3.865811 0.000111 + 4 W_UE90 -1.107944 0.33523 -3.305028 0.00095 + 5 W_HR90 1.529277 0.389354 3.927728 0.000086 + 6 lambda -0.917928 0.079569 -11.53625 0.0 + + + """ + + def __init__( + self, y, x, w, yend=None, q=None, estimator='het', add_wy=False, slx_lags=0, vm=False, name_y=None, name_x=None, name_w=None, name_yend=None, + name_q=None, name_ds=None, latex=False, **kwargs): + + if estimator == 'het': + if yend is None and not add_wy: + GM_Error_Het.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error_Het.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo_Het.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error not allowed. Using default arguments instead.') + GM_Error_Het.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex) + elif estimator == 'hom': + if yend is None and not add_wy: + GM_Error_Hom.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error_Hom.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo_Hom.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error not allowed. Using default arguments instead.') + GM_Error_Hom.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex) + elif estimator == 'kp98': + if yend is None and not add_wy: + GM_Error.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo.__init__(self, y=y, x=x, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error not allowed. Using default arguments instead.') + GM_Error.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error not allowed. Using default arguments instead.') + GM_Error_Het.__init__(self, y=y, x=x, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + name_w=name_w, name_ds=name_ds, latex=latex) def _momentsGM_Error(w, u): @@ -1103,16 +1301,30 @@ def _test(): if __name__ == "__main__": _test() - import libpysal + import numpy as np + import libpysal - dbf = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") - y = np.array([dbf.by_col("HOVAL")]).T - names_to_extract = ["INC", "CRIME"] - x = np.array([dbf.by_col(name) for name in names_to_extract]).T - w = libpysal.io.open(libpysal.examples.get_path("columbus.gal"), "r").read() - w.transform = "r" - model = GM_Error( - y, x, w, name_y="hoval", name_x=["income", "crime"], name_ds="columbus" - ) - print(model.summary) + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49,1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + #reg = GM_Error(y, X, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', vm=True) + #reg = GM_Endog_Error(y, X, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus',vm=True) + reg = GM_Combo(y, X, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], name_q=['discbd'], + name_ds='columbus', vm=True) + + print(reg.output) + print(reg.summary) \ No newline at end of file diff --git a/spreg/error_sp_het.py b/spreg/error_sp_het.py index f40a7ae9..50b838fb 100755 --- a/spreg/error_sp_het.py +++ b/spreg/error_sp_het.py @@ -12,12 +12,13 @@ import numpy.linalg as la from . import ols as OLS from . import user_output as USER -from . import summary_output as SUMMARY from . import twosls as TSLS from . import utils as UTILS -from .utils import RegressionPropsY, spdot, set_endog, sphstack, set_warn +from .utils import RegressionPropsY, spdot, set_endog, sphstack, set_warn, get_lags from scipy import sparse as SP from libpysal.weights.spatial_lag import lag_spatial +import pandas as pd +from .output import output, _summary_iteration, _spat_pseudo_r2 __all__ = ["GM_Error_Het", "GM_Endog_Error_Het", "GM_Combo_Het"] @@ -170,6 +171,9 @@ class GM_Error_Het(BaseGM_Error_Het): independent (exogenous) variable, excluding the constant w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional @@ -191,9 +195,13 @@ class GM_Error_Het(BaseGM_Error_Het): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -336,6 +344,7 @@ def __init__( y, x, w, + slx_lags=0, max_iter=1, epsilon=0.00001, step1c=False, @@ -344,6 +353,7 @@ def __init__( name_x=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) @@ -351,6 +361,12 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + self.title = "GM SPATIALLY WEIGHTED LEAST SQUARES (HET)" + if slx_lags >0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" BaseGM_Error_Het.__init__( self, y, @@ -360,13 +376,16 @@ def __init__( step1c=step1c, epsilon=epsilon, ) - self.title = "SPATIALLY WEIGHTED LEAST SQUARES (HET)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) self.name_x.append("lambda") self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Error_Het(reg=self, w=w, vm=vm) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x)-1) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class BaseGM_Endog_Error_Het(RegressionPropsY): @@ -582,6 +601,9 @@ class GM_Endog_Error_Het(BaseGM_Endog_Error_Het): this should not contain any variables from x) w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional @@ -611,9 +633,13 @@ class GM_Endog_Error_Het(BaseGM_Endog_Error_Het): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -788,6 +814,7 @@ def __init__( yend, q, w, + slx_lags=0, max_iter=1, epsilon=0.00001, step1c=False, @@ -799,6 +826,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -806,6 +834,12 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + self.title = "GM SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET)" + if slx_lags > 0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" BaseGM_Endog_Error_Het.__init__( self, y=y, @@ -818,7 +852,6 @@ def __init__( epsilon=epsilon, inv_method=inv_method, ) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -828,7 +861,12 @@ def __init__( self.name_q = USER.set_name_q(name_q, q) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Endog_Error_Het(reg=self, w=w, vm=vm) + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class BaseGM_Combo_Het(BaseGM_Endog_Error_Het): @@ -1026,6 +1064,10 @@ class GM_Combo_Het(BaseGM_Combo_Het): Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then instruments are WX; if w_lags=2, then WX, WWX; and so on. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the General Nesting + Spatial Model (GNSM) type. lag_q : boolean If True, then include spatial lags of the additional instruments (q). @@ -1058,9 +1100,13 @@ class GM_Combo_Het(BaseGM_Combo_Het): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1255,6 +1301,7 @@ def __init__( q=None, w=None, w_lags=1, + slx_lags=0, lag_q=True, max_iter=1, epsilon=0.00001, @@ -1267,6 +1314,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -1274,7 +1322,13 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) - yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) + + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) + else: + yend2, q2, wx = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + BaseGM_Combo_Het.__init__( self, y=y, @@ -1294,7 +1348,10 @@ def __init__( w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) UTILS.set_warn(self, warn) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET)" + self.title = "SPATIALLY WEIGHTED 2SLS- GM-COMBO MODEL (HET)" + if slx_lags > 0: + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (GNSM)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -1306,7 +1363,13 @@ def __init__( self.name_q.extend(USER.set_name_q_sp(self.name_x, w_lags, self.name_q, lag_q)) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Combo_Het(reg=self, w=w, vm=vm) + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * (len(self.name_yend)-1) + ['rho', 'lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _spat_pseudo_r2(self) + self.other_top += _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) # Functions @@ -1551,3 +1614,28 @@ def _test(): if __name__ == "__main__": _test() + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49,1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + # reg = GM_Error_Het(y, X, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', vm=True) + # reg = GM_Endog_Error_Het(y, X, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus',vm=True) + reg = GM_Combo_Het(y, X, yd, q, w=w, step1c=True, name_x=['inc'], name_y='hoval', name_yend=['crime'], name_q=['discbd'], name_ds='columbus', + vm=True) + print(reg.output) + print(reg.summary) \ No newline at end of file diff --git a/spreg/error_sp_het_regimes.py b/spreg/error_sp_het_regimes.py index 9c5a4586..2f812d74 100644 --- a/spreg/error_sp_het_regimes.py +++ b/spreg/error_sp_het_regimes.py @@ -6,7 +6,6 @@ import numpy as np import multiprocessing as mp from . import user_output as USER -from . import summary_output as SUMMARY from . import utils as UTILS from . import regimes as REGI from .ols import BaseOLS @@ -22,10 +21,12 @@ get_vc_het_tsls, get_Omega_GS2SLS, ) -from .utils import RegressionPropsY, spdot, set_endog, sphstack, set_warn, sp_att +from .utils import RegressionPropsY, spdot, set_endog, sphstack, set_warn, sp_att, get_lags from scipy import sparse as SP from libpysal.weights.spatial_lag import lag_spatial from platform import system +import pandas as pd +from .output import output, _summary_iteration, _spat_pseudo_r2 class GM_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -64,6 +65,9 @@ class GM_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep: boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from Arraiz et al. Note: epsilon provides an additional stop condition. @@ -90,9 +94,13 @@ class GM_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -304,6 +312,7 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, cores=False, vm=False, name_y=None, @@ -311,6 +320,7 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): n = USER.check_arrays(y, x) @@ -329,6 +339,12 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + + if slx_lags >0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.name_x_r = USER.set_name_x(name_x, x_constant) cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant) @@ -339,11 +355,12 @@ def __init__( if regime_err_sep == True: if set(cols2regi) == set([True]): - self._error_regimes_multi( + self._error_het_regimes_multi( y, x_constant, regimes, w, + slx_lags, cores, max_iter, epsilon, @@ -351,21 +368,23 @@ def __init__( cols2regi, vm, name_x, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) name_x = USER.set_name_x(name_x, x_constant) - self.x, self.name_x = REGI.Regimes_Frame.__init__( + self.x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) ols = BaseOLS(y=y, x=self.x) self.k = ols.x.shape[1] @@ -412,16 +431,25 @@ def __init__( self.vm = get_vm_het(moments_i[0], lambda3, self, w.sparse, vc3) self.betas = np.vstack((ols_s.betas, lambda3)) self.e_filtered = self.u - lambda3 * lag_spatial(w, self.u) - self.title = "SPATIALLY WEIGHTED LEAST SQUARES (HET) - REGIMES" + if slx_lags == 0: + self.title = "GM SPATIALLY WEIGHTED MODEL (HET) - REGIMES" + else: + self.title = "GM SPATIALLY WEIGHTED MODEL + SLX (SDEM-HET) - REGIMES" + self.name_x.append("lambda") self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} - - SUMMARY.GM_Error_Het(reg=self, w=w, vm=vm, regimes=True) - - def _error_regimes_multi( - self, y, x, regimes, w, cores, max_iter, epsilon, step1c, cols2regi, vm, name_x + self.output = pd.DataFrame(self.name_x, + columns=['var_names']) + self.output['var_type'] = ['x']*(len(self.name_x)-1)+['lambda'] + self.output['regime'] = x_rlist + ['_Global'] + self.output['equation'] = 0 + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + def _error_het_regimes_multi( + self, y, x, regimes, w, slx_lags, cores, max_iter, epsilon, step1c, cols2regi, vm, name_x, latex ): regi_ids = dict( @@ -459,6 +487,7 @@ def _error_regimes_multi( name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ), ) else: @@ -477,6 +506,7 @@ def _error_regimes_multi( name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ) ) @@ -501,6 +531,7 @@ def _error_regimes_multi( results = {} self.name_y, self.name_x = [], [] counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -530,11 +561,17 @@ def _error_regimes_multi( regi_ids[r], ] = results[r].e_filtered self.name_y += results[r].name_y + results[r].name_x = [str(r) + '_lambda' if value == 'lambda' else value for value in results[r].name_x] self.name_x += results[r].name_x + results[r].other_top = _summary_iteration(results[r]) + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x'] * (len(results[r].name_x)-1) + + ['lambda'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - SUMMARY.GM_Error_Het_multi(reg=self, multireg=self.multi, vm=vm, regimes=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Endog_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -581,6 +618,9 @@ class GM_Endog_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep : boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional stop condition. @@ -615,9 +655,13 @@ class GM_Endog_Error_Het_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -869,6 +913,7 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, inv_method="power_exp", cores=False, vm=False, @@ -881,6 +926,7 @@ def __init__( name_regimes=None, summ=True, add_lag=False, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -898,12 +944,16 @@ def __init__( set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + if slx_lags > 0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + if summ: name_yend = USER.set_name_yend(name_yend, yend) self.name_y = USER.set_name_y(name_y) name_q = USER.set_name_q(name_q, q) self.name_x_r = USER.set_name_x(name_x, x_constant) + name_yend - cols2regi = REGI.check_cols2regi( constant_regi, cols2regi, x_constant, yend=yend ) @@ -914,13 +964,14 @@ def __init__( if regime_err_sep == True: if set(cols2regi) == set([True]): - self._endog_error_regimes_multi( + self._endog_error_het_regimes_multi( y, x_constant, regimes, w, yend, q, + slx_lags, cores, max_iter, epsilon, @@ -932,10 +983,11 @@ def __init__( name_yend, name_q, add_lag, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) @@ -943,15 +995,16 @@ def __init__( q, name_q = REGI.Regimes_Frame.__init__( self, q, regimes, constant_regi=None, cols2regi="all", names=name_q ) - x, name_x = REGI.Regimes_Frame.__init__( + x, name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) - yend2, name_yend = REGI.Regimes_Frame.__init__( + yend2, name_yend, yend_rlist = REGI.Regimes_Frame.__init__( self, yend, regimes, @@ -959,6 +1012,7 @@ def __init__( cols2regi=cols2regi, yend=True, names=name_yend, + rlist=True, ) # 1a. S2SLS --> \tilde{\delta} @@ -1047,13 +1101,20 @@ def __init__( self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x']*len(self.name_x)+['yend']*len(self.name_yend)+['lambda'] + self.output['regime'] = x_rlist + yend_rlist + ['_Global'] + self.output['equation'] = 0 if summ: - self.title = ( - "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET) - REGIMES" - ) - SUMMARY.GM_Endog_Error_Het(reg=self, w=w, vm=vm, regimes=True) - - def _endog_error_regimes_multi( + self.other_top = _summary_iteration(self) + if slx_lags == 0: + self.title = ("GM SPATIALLY WEIGHTED 2SLS (HET) - REGIMES") + else: + self.title = ("GM SPATIALLY WEIGHTED 2SLS + SLX (SDEM-HET) - REGIMES") + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + def _endog_error_het_regimes_multi( self, y, x, @@ -1061,6 +1122,7 @@ def _endog_error_regimes_multi( w, yend, q, + slx_lags, cores, max_iter, epsilon, @@ -1072,6 +1134,7 @@ def _endog_error_regimes_multi( name_yend, name_q, add_lag, + latex, ): regi_ids = dict( @@ -1120,6 +1183,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ), ) else: @@ -1144,6 +1208,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ) ) @@ -1174,6 +1239,7 @@ def _endog_error_regimes_multi( self.name_h, ) = ([], [], [], [], [], []) counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -1215,17 +1281,19 @@ def _endog_error_regimes_multi( self.e_pred[ regi_ids[r], ] = results[r].e_pred + results[r].other_top = _spat_pseudo_r2(results[r]) + v_type = ['x'] * len(results[r].name_x) + ['yend'] * (len(results[r].name_yend)-1) + ['rho','lambda'] + else: + results[r].other_top = "" + v_type = ['x'] * len(results[r].name_x) + ['yend'] * len(results[r].name_yend) + ['lambda'] + results[r].other_top += _summary_iteration(results[r]) + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_z, + 'var_type': v_type, + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - if add_lag != False: - SUMMARY.GM_Combo_Het_multi( - reg=self, multireg=self.multi, vm=vm, regimes=True - ) - else: - SUMMARY.GM_Endog_Error_Het_multi( - reg=self, multireg=self.multi, vm=vm, regimes=True - ) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Combo_Het_Regimes(GM_Endog_Error_Het_Regimes): @@ -1274,6 +1342,9 @@ class GM_Combo_Het_Regimes(GM_Endog_Error_Het_Regimes): If True, the spatial parameter for spatial lag is also computed according to different regimes. If False (default), the spatial parameter is fixed across regimes. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the GNSM type. w_lags : integer Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then @@ -1315,9 +1386,13 @@ class GM_Combo_Het_Regimes(GM_Endog_Error_Het_Regimes): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1595,6 +1670,7 @@ def __init__( yend=None, q=None, w=None, + slx_lags=0, w_lags=1, lag_q=True, max_iter=1, @@ -1614,8 +1690,14 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): - + if regime_lag_sep and not regime_err_sep: + set_warn(self, "regime_err_sep set to True when regime_lag_sep=True.") + regime_err_sep = True + if regime_err_sep and not regime_lag_sep: + set_warn(self, "regime_err_sep set to False when regime_lag_sep=False.") + regime_err_sep = False n = USER.check_arrays(y, x) self.step1c = step1c y = USER.check_y(y, n) @@ -1623,16 +1705,27 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) - self.name_x_r = USER.set_name_x(name_x, x_constant) self.name_y = USER.set_name_y(name_y) name_yend = USER.set_name_yend(name_yend, yend) name_q = USER.set_name_q(name_q, q) - name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) - cols2regi = REGI.check_cols2regi( - constant_regi, cols2regi, x_constant, yend=yend, add_cons=False - ) + if regime_err_sep and any(col != True for col in cols2regi): + set_warn(self, "All coefficients must vary across regimes if regime_err_sep = True, so setting cols2regi = 'all'.") + cols2regi = "all" + + if slx_lags > 0: + yend2, q2, wx = set_endog(y, x_constant, w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + name_slx = USER.set_name_spatial_lags(name_x, slx_lags) + name_q.extend(USER.set_name_q_sp(name_slx[-len(name_x):], w_lags, name_q, lag_q, force_all=True)) + name_x += name_slx + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant[:, :-1], yend=yend2, add_cons=False) + else: + name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) + yend2, q2 = yend, q + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant, yend=yend2, add_cons=False) + self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, n, x_constant.shape[1]) @@ -1640,27 +1733,25 @@ def __init__( self.regime_lag_sep = regime_lag_sep if regime_lag_sep == True: - if regime_err_sep == False: - raise Exception( - "For spatial combo models, if spatial lag is set by regimes (regime_lag_sep=True), spatial error must also be set by regimes (regime_err_sep=True)." - ) - add_lag = [w_lags, lag_q] + if slx_lags == 0: + add_lag = [w_lags, lag_q] + else: + cols2regi += [True] + add_lag = False else: - cols2regi += [False] add_lag = False - if regime_err_sep == True: - raise Exception( - "For spatial combo models, if spatial error is set by regimes (regime_err_sep=True), all coefficients including lambda (regime_lag_sep=True) must be set by regimes." - ) - yend, q = set_endog(y, x_constant, w, yend, q, w_lags, lag_q) + cols2regi += [False] + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant, w, yend2, q2, w_lags, lag_q) + name_yend.append(USER.set_name_yend_sp(self.name_y)) GM_Endog_Error_Het_Regimes.__init__( self, y=y, x=x_constant, - yend=yend, - q=q, + yend=yend2, + q=q2, regimes=regimes, w=w, constant_regi=constant_regi, @@ -1681,17 +1772,24 @@ def __init__( name_regimes=name_regimes, summ=False, add_lag=add_lag, + latex=latex, ) if regime_err_sep != True: self.rho = self.betas[-2] self.predy_e, self.e_pred, warn = UTILS.sp_att( - w, self.y, self.predy, yend[:, -1].reshape(self.n, 1), self.rho + w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) UTILS.set_warn(self, warn) self.regime_lag_sep = regime_lag_sep - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET) - REGIMES" - SUMMARY.GM_Combo_Het(reg=self, w=w, vm=vm, regimes=True) + if slx_lags == 0: + self.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO MODEL (HET) - REGIMES" + else: + self.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO + SLX (GNSM-HET) - REGIMES" + self.output.iat[-2, self.output.columns.get_loc('var_type')] = 'rho' + self.other_top = _spat_pseudo_r2(self) + self.other_top += _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def _work_error( @@ -1708,6 +1806,7 @@ def _work_error( name_x, name_w, name_regimes, + slx_lags, ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -1717,7 +1816,10 @@ def _work_error( ) set_warn(model, warn) model.w = w_r - model.title = "SPATIALLY WEIGHTED LEAST SQUARES ESTIMATION (HET) - REGIME %s" % r + if slx_lags == 0: + model.title = "GM SPATIALLY WEIGHTED LS (HET) - REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED LS + SLX (SDEM-HET) - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] @@ -1746,6 +1848,7 @@ def _work_endog_error( name_w, name_regimes, add_lag, + slx_lags, ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -1777,12 +1880,22 @@ def _work_endog_error( w_r, model.y, model.predy, model.yend[:, -1].reshape(model.n, 1), model.rho ) set_warn(model, warn) - model.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HET) - REGIME %s" % r + + if slx_lags == 0: + if add_lag != False: + model.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO MODEL (HET)- REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS (HET) - REGIME %s" % r + else: + if add_lag != False: + model.title = "GM SPATIAL COMBO MODEL + SLX (GNSM-HET) - REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS + SLX (SDEM-HET) - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] model.name_yend = ["%s_%s" % (str(r), i) for i in name_yend] - model.name_z = model.name_x + model.name_yend + ["lambda"] + model.name_z = model.name_x + model.name_yend + [str(r)+"lambda"] model.name_q = ["%s_%s" % (str(r), i) for i in name_q] model.name_h = model.name_x + model.name_q model.name_w = name_w @@ -1801,3 +1914,33 @@ def _test(): if __name__ == "__main__": _test() + + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49,1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + r_var = 'NSA' + regimes = db.by_col(r_var) + + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + #reg = GM_Error_Het_Regimes(y, X, regimes, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', vm=True, + # regime_err_sep=True) + #reg = GM_Endog_Error_Het_Regimes(y, X, yd, q, regimes, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus',vm=True, regime_err_sep=True) + reg = GM_Combo_Het_Regimes(y, X, regimes, yd, q, w=w, step1c=True, name_x=['inc'], name_y='hoval', name_yend=['crime'], + name_q=['discbd'], name_ds='columbus', vm=True, regime_err_sep=False, regime_lag_sep=False) + print(reg.output) + print(reg.summary) \ No newline at end of file diff --git a/spreg/error_sp_hom.py b/spreg/error_sp_hom.py index 5a4d8042..6208b8af 100644 --- a/spreg/error_sp_hom.py +++ b/spreg/error_sp_hom.py @@ -10,14 +10,14 @@ import numpy as np from numpy import linalg as la from . import ols as OLS -from libpysal.weights.spatial_lag import lag_spatial -from .utils import power_expansion, set_endog, iter_msg, sp_att +from .utils import set_endog, iter_msg, sp_att from .utils import get_A1_hom, get_A2_hom, get_A1_het, optim_moments -from .utils import get_spFilter, get_lags, _moments2eqs +from .utils import get_spFilter, get_lags from .utils import spdot, RegressionPropsY, set_warn from . import twosls as TSLS from . import user_output as USER -from . import summary_output as SUMMARY +import pandas as pd +from .output import output, _spat_pseudo_r2, _summary_iteration __all__ = ["GM_Error_Hom", "GM_Endog_Error_Hom", "GM_Combo_Hom"] @@ -178,6 +178,9 @@ class GM_Error_Hom(BaseGM_Error_Hom): independent (exogenous) variable, excluding the constant w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional stop condition. @@ -201,10 +204,13 @@ class GM_Error_Hom(BaseGM_Error_Hom): Name of weights matrix for use in output name_ds : string Name of dataset for use in output - + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -341,6 +347,7 @@ def __init__( y, x, w, + slx_lags=0, max_iter=1, epsilon=0.00001, A1="hom_sc", @@ -349,6 +356,7 @@ def __init__( name_x=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) @@ -356,6 +364,12 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + self.title = "GM SPATIALLY WEIGHTED LEAST SQUARES (HOM)" + if slx_lags >0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" BaseGM_Error_Hom.__init__( self, y=y, @@ -365,13 +379,17 @@ def __init__( max_iter=max_iter, epsilon=epsilon, ) - self.title = "SPATIALLY WEIGHTED LEAST SQUARES (HOM)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) self.name_x.append("lambda") self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Error_Hom(reg=self, w=w, vm=vm) + self.A1 = A1 + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x) - 1) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class BaseGM_Endog_Error_Hom(RegressionPropsY): @@ -564,6 +582,9 @@ class GM_Endog_Error_Hom(BaseGM_Endog_Error_Hom): this should not contain any variables from x) w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional stop condition. @@ -591,9 +612,13 @@ class GM_Endog_Error_Hom(BaseGM_Endog_Error_Hom): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -769,6 +794,7 @@ def __init__( yend, q, w, + slx_lags=0, max_iter=1, epsilon=0.00001, A1="hom_sc", @@ -779,6 +805,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -786,6 +813,12 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + self.title = "GM SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM)" + if slx_lags > 0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" BaseGM_Endog_Error_Hom.__init__( self, y=y, @@ -797,7 +830,6 @@ def __init__( max_iter=max_iter, epsilon=epsilon, ) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -807,7 +839,13 @@ def __init__( self.name_q = USER.set_name_q(name_q, q) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Endog_Error_Hom(reg=self, w=w, vm=vm) + self.A1 = A1 + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class BaseGM_Combo_Hom(BaseGM_Endog_Error_Hom): @@ -1007,6 +1045,10 @@ class GM_Combo_Hom(BaseGM_Combo_Hom): Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then instruments are WX; if w_lags=2, then WX, WWX; and so on. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the General Nesting + Spatial Model (GNSM) type. lag_q : boolean If True, then include spatial lags of the additional instruments (q). @@ -1038,9 +1080,13 @@ class GM_Combo_Hom(BaseGM_Combo_Hom): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1232,6 +1278,7 @@ def __init__( q=None, w=None, w_lags=1, + slx_lags=0, lag_q=True, max_iter=1, epsilon=0.00001, @@ -1243,6 +1290,7 @@ def __init__( name_q=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -1250,7 +1298,11 @@ def __init__( USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) - yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q) + else: + yend2, q2, wx = set_endog(y, x_constant[:, 1:], w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) BaseGM_Combo_Hom.__init__( self, y=y, @@ -1269,7 +1321,10 @@ def __init__( w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) set_warn(self, warn) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM)" + self.title = "SPATIALLY WEIGHTED 2SLS- GM-COMBO MODEL (HOM)" + if slx_lags > 0: + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (GNSM)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x_constant) @@ -1281,8 +1336,14 @@ def __init__( self.name_q.extend(USER.set_name_q_sp(self.name_x, w_lags, self.name_q, lag_q)) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.name_w = USER.set_name_w(name_w, w) - SUMMARY.GM_Combo_Hom(reg=self, w=w, vm=vm) - + self.A1 = A1 + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * (len(self.name_yend) - 1) + ['rho', 'lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _spat_pseudo_r2(self) + self.other_top += _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) # Functions @@ -1514,5 +1575,31 @@ def _test(): if __name__ == "__main__": - _test() + + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49,1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + #reg = GM_Error_Hom(y, X, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', vm=True) + #reg = GM_Endog_Error_Hom(y, X, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus',vm=True) + reg = GM_Combo_Hom(y, X, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], name_q=['discbd'], + name_ds='columbus', vm=True) + + print(reg.output) + print(reg.summary) \ No newline at end of file diff --git a/spreg/error_sp_hom_regimes.py b/spreg/error_sp_hom_regimes.py index 9812584e..f8d7dfae 100644 --- a/spreg/error_sp_hom_regimes.py +++ b/spreg/error_sp_hom_regimes.py @@ -26,9 +26,9 @@ ) from . import regimes as REGI from . import user_output as USER -from . import summary_output as SUMMARY from platform import system - +import pandas as pd +from .output import output, _summary_iteration, _spat_pseudo_r2 class GM_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -67,6 +67,9 @@ class GM_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep: boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional @@ -97,9 +100,13 @@ class GM_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -317,12 +324,14 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, vm=False, name_y=None, name_x=None, name_w=None, name_ds=None, name_regimes=None, + latex=False, ): n = USER.check_arrays(y, x) @@ -341,6 +350,12 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + + if slx_lags >0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.name_x_r = USER.set_name_x(name_x, x_constant) cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant) @@ -351,11 +366,12 @@ def __init__( if regime_err_sep == True: if set(cols2regi) == set([True]): - self._error_regimes_multi( + self._error_hom_regimes_multi( y, x_constant, regimes, w, + slx_lags, cores, max_iter, epsilon, @@ -363,10 +379,11 @@ def __init__( cols2regi, vm, name_x, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) @@ -381,13 +398,14 @@ def __init__( wA2 = get_A2_hom(w.sparse) # 1a. OLS --> \tilde{\delta} - self.x, self.name_x = REGI.Regimes_Frame.__init__( + self.x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) ols = BaseOLS(y=y, x=self.x) self.k = ols.x.shape[1] @@ -425,16 +443,25 @@ def __init__( w.sparse, wA1, wA2, self, lambda2, moments[0] ) self.e_filtered = self.u - lambda2 * lag_spatial(w, self.u) - self.title = "SPATIALLY WEIGHTED LEAST SQUARES (HOM) - REGIMES" + if slx_lags == 0: + self.title = "GM SPATIALLY WEIGHTED MODEL (HOM) - REGIMES" + else: + self.title = "GM SPATIALLY WEIGHTED MODEL + SLX (SDEM-HOM) - REGIMES" self.name_x.append("lambda") self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} - SUMMARY.GM_Error_Hom(reg=self, w=w, vm=vm, regimes=True) - - def _error_regimes_multi( - self, y, x, regimes, w, cores, max_iter, epsilon, A1, cols2regi, vm, name_x - ): + self.A1 = A1 + self.output = pd.DataFrame(self.name_x, + columns=['var_names']) + self.output['var_type'] = ['x']*(len(self.name_x)-1)+['lambda'] + self.output['regime'] = x_rlist + ['_Global'] + self.output['equation'] = 0 + self.other_top = _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + def _error_hom_regimes_multi( + self, y, x, regimes, w, slx_lags, cores, max_iter, epsilon, A1, cols2regi, vm, name_x, latex): regi_ids = dict( (r, list(np.where(np.array(regimes) == r)[0])) for r in self.regimes_set @@ -471,6 +498,7 @@ def _error_regimes_multi( name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ), ) else: @@ -489,6 +517,7 @@ def _error_regimes_multi( name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ) ) @@ -513,6 +542,7 @@ def _error_regimes_multi( results = {} counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -543,10 +573,16 @@ def _error_regimes_multi( ] = results[r].e_filtered self.name_y += results[r].name_y self.name_x += results[r].name_x + results[r].A1 = A1 + results[r].other_top = _summary_iteration(results[r]) + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x'] * (len(results[r].name_x) - 1) + + ['lambda'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - SUMMARY.GM_Error_Hom_multi(reg=self, multireg=self.multi, vm=vm, regimes=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Endog_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -594,6 +630,9 @@ class GM_Endog_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep : boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. max_iter : int Maximum number of iterations of steps 2a and 2b from :cite:`Arraiz2010`. Note: epsilon provides an additional stop condition. @@ -624,9 +663,13 @@ class GM_Endog_Error_Hom_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -884,6 +927,7 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, max_iter=1, epsilon=0.00001, A1="het", @@ -898,6 +942,7 @@ def __init__( name_regimes=None, summ=True, add_lag=False, + latex=False, ): n = USER.check_arrays(y, x, yend, q) @@ -914,6 +959,10 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + if slx_lags > 0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) if summ: name_yend = USER.set_name_yend(name_yend, yend) @@ -931,13 +980,14 @@ def __init__( if regime_err_sep == True: if set(cols2regi) == set([True]): - self._endog_error_regimes_multi( + self._endog_error_hom_regimes_multi( y, x_constant, regimes, w, yend, q, + slx_lags, cores, max_iter, epsilon, @@ -948,10 +998,11 @@ def __init__( name_yend, name_q, add_lag, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) @@ -959,15 +1010,16 @@ def __init__( q, name_q = REGI.Regimes_Frame.__init__( self, q, regimes, constant_regi=None, cols2regi="all", names=name_q ) - x, name_x = REGI.Regimes_Frame.__init__( + x, name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) - yend2, name_yend = REGI.Regimes_Frame.__init__( + yend2, name_yend, yend_rlist = REGI.Regimes_Frame.__init__( self, yend, regimes, @@ -975,6 +1027,7 @@ def __init__( cols2regi=cols2regi, yend=True, names=name_yend, + rlist=True, ) if A1 == "hom": wA1 = get_A1_hom(w.sparse) @@ -1042,13 +1095,21 @@ def __init__( self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} + self.A1 = A1 + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + ['lambda'] + self.output['regime'] = x_rlist + yend_rlist + ['_Global'] + self.output['equation'] = 0 if summ: - self.title = ( - "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM) - REGIMES" - ) - SUMMARY.GM_Endog_Error_Hom(reg=self, w=w, vm=vm, regimes=True) - - def _endog_error_regimes_multi( + self.other_top = _summary_iteration(self) + if slx_lags == 0: + self.title = ("GM SPATIALLY WEIGHTED 2SLS (HOM) - REGIMES") + else: + self.title = ("GM SPATIALLY WEIGHTED 2SLS WITH SLX (SDEM-HOM) - REGIMES") + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + def _endog_error_hom_regimes_multi( self, y, x, @@ -1056,6 +1117,7 @@ def _endog_error_regimes_multi( w, yend, q, + slx_lags, cores, max_iter, epsilon, @@ -1066,6 +1128,7 @@ def _endog_error_regimes_multi( name_yend, name_q, add_lag, + latex, ): regi_ids = dict( @@ -1113,6 +1176,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ), ) else: @@ -1136,6 +1200,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ) ) @@ -1166,6 +1231,7 @@ def _endog_error_regimes_multi( self.name_h, ) = ([], [], [], [], [], []) counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -1207,17 +1273,20 @@ def _endog_error_regimes_multi( self.e_pred[ regi_ids[r], ] = results[r].e_pred + results[r].other_top = _spat_pseudo_r2(results[r]) + v_type = ['x'] * len(results[r].name_x) + ['yend'] * (len(results[r].name_yend)-1) + ['rho','lambda'] + else: + results[r].other_top = "" + v_type = ['x'] * len(results[r].name_x) + ['yend'] * len(results[r].name_yend) + ['lambda'] + results[r].A1 = A1 + results[r].other_top += _summary_iteration(results[r]) + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_z, + 'var_type': v_type, + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - if add_lag != False: - SUMMARY.GM_Combo_Hom_multi( - reg=self, multireg=self.multi, vm=vm, regimes=True - ) - else: - SUMMARY.GM_Endog_Error_Hom_multi( - reg=self, multireg=self.multi, vm=vm, regimes=True - ) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Combo_Hom_Regimes(GM_Endog_Error_Hom_Regimes): @@ -1267,6 +1336,9 @@ class GM_Combo_Hom_Regimes(GM_Endog_Error_Hom_Regimes): If True, the spatial parameter for spatial lag is also computed according to different regimes. If False (default), the spatial parameter is fixed across regimes. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the GNSM type. w_lags : integer Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then @@ -1307,9 +1379,13 @@ class GM_Combo_Hom_Regimes(GM_Endog_Error_Hom_Regimes): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1593,6 +1669,7 @@ def __init__( yend=None, q=None, w=None, + slx_lags=0, w_lags=1, lag_q=True, cores=False, @@ -1611,22 +1688,42 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): + if regime_lag_sep and not regime_err_sep: + set_warn(self, "regime_err_sep set to True when regime_lag_sep=True.") + regime_err_sep = True + if regime_err_sep and not regime_lag_sep: + set_warn(self, "regime_err_sep set to False when regime_lag_sep=False.") + regime_err_sep = False n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + self.name_y = USER.set_name_y(name_y) name_yend = USER.set_name_yend(name_yend, yend) name_q = USER.set_name_q(name_q, q) - name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) - cols2regi = REGI.check_cols2regi( - constant_regi, cols2regi, x_constant, yend=yend, add_cons=False - ) + if regime_err_sep and any(col != True for col in cols2regi): + set_warn(self, "All coefficients must vary across regimes if regime_err_sep = True, so setting cols2regi = 'all'.") + cols2regi = "all" + + if slx_lags > 0: + yend2, q2, wx = set_endog(y, x_constant, w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + name_slx = USER.set_name_spatial_lags(name_x, slx_lags) + name_q.extend(USER.set_name_q_sp(name_slx[-len(name_x):], w_lags, name_q, lag_q, force_all=True)) + name_x += name_slx + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant[:, :-1], yend=yend2, add_cons=False) + else: + name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) + yend2, q2 = yend, q + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant, yend=yend2, add_cons=False) + self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, n, x_constant.shape[1]) @@ -1634,27 +1731,26 @@ def __init__( self.regime_lag_sep = regime_lag_sep if regime_lag_sep == True: - if regime_err_sep == False: - raise Exception( - "For spatial combo models, if spatial lag is set by regimes (regime_lag_sep=True), spatial error must also be set by regimes (regime_err_sep=True)." - ) - add_lag = [w_lags, lag_q] + if slx_lags == 0: + add_lag = [w_lags, lag_q] + else: + add_lag = False + cols2regi += [True] else: - cols2regi += [False] add_lag = False - if regime_err_sep == True: - raise Exception( - "For spatial combo models, if spatial error is set by regimes (regime_err_sep=True), all coefficients including lambda (regime_lag_sep=True) must be set by regimes." - ) - yend, q = set_endog(y, x_constant, w, yend, q, w_lags, lag_q) + cols2regi += [False] + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant, w, yend2, q2, w_lags, lag_q) + + name_yend.append(USER.set_name_yend_sp(self.name_y)) GM_Endog_Error_Hom_Regimes.__init__( self, y=y, x=x_constant, - yend=yend, - q=q, + yend=yend2, + q=q2, regimes=regimes, w=w, vm=vm, @@ -1674,17 +1770,24 @@ def __init__( name_regimes=name_regimes, summ=False, add_lag=add_lag, + latex=latex, ) if regime_err_sep != True: self.rho = self.betas[-2] self.predy_e, self.e_pred, warn = sp_att( - w, self.y, self.predy, yend[:, -1].reshape(self.n, 1), self.rho + w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) set_warn(self, warn) self.regime_lag_sep = regime_lag_sep - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM) - REGIMES" - SUMMARY.GM_Combo_Hom(reg=self, w=w, vm=vm, regimes=True) + if slx_lags == 0: + self.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO MODEL (HOM) - REGIMES" + else: + self.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO WITH SLX (GNSM-HOM) - REGIMES" + self.output.iat[-2, self.output.columns.get_loc('var_type')] = 'rho' + self.other_top = _spat_pseudo_r2(self) + self.other_top += _summary_iteration(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def _work_error( @@ -1701,6 +1804,7 @@ def _work_error( name_x, name_w, name_regimes, + slx_lags, ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -1710,7 +1814,10 @@ def _work_error( ) set_warn(model, warn) model.w = w_r - model.title = "SPATIALLY WEIGHTED LEAST SQUARES ESTIMATION (HOM) - REGIME %s" % r + if slx_lags == 0: + model.title = "GM SPATIALLY WEIGHTED 2SLS (HOM) - REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS + SLX (SDEM-HOM) - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] @@ -1738,6 +1845,7 @@ def _work_endog_error( name_w, name_regimes, add_lag, + slx_lags, ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -1762,12 +1870,21 @@ def _work_endog_error( w_r, model.y, model.predy, model.yend[:, -1].reshape(model.n, 1), model.rho ) set_warn(model, warn) - model.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES (HOM) - REGIME %s" % r + if slx_lags == 0: + if add_lag != False: + model.title = "GM SPATIALLY WEIGHTED 2SLS-COMBO MODEL (HOM)- REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS (HOM) - REGIME %s" % r + else: + if add_lag != False: + model.title = "GM SPATIAL COMBO MODEL + SLX (GNSM-HOM) - REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS + SLX (SDEM-HOM) - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] model.name_yend = ["%s_%s" % (str(r), i) for i in name_yend] - model.name_z = model.name_x + model.name_yend + ["lambda"] + model.name_z = model.name_x + model.name_yend + [str(r)+"_lambda"] model.name_q = ["%s_%s" % (str(r), i) for i in name_q] model.name_h = model.name_x + model.name_q model.name_w = name_w @@ -1786,3 +1903,33 @@ def _test(): if __name__ == "__main__": _test() + + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'),'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49,1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + r_var = 'NSA' + regimes = db.by_col(r_var) + + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + #reg = GM_Error_Hom_Regimes(y, X, regimes, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', vm=True, + # regime_err_sep=True) + #reg = GM_Endog_Error_Hom_Regimes(y, X, yd, q, regimes, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus',vm=True, regime_err_sep=True) + reg = GM_Combo_Hom_Regimes(y, X, regimes, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + name_q=['discbd'], name_ds='columbus', vm=True, regime_err_sep=False, regime_lag_sep=False) + print(reg.output) + print(reg.summary) \ No newline at end of file diff --git a/spreg/error_sp_regimes.py b/spreg/error_sp_regimes.py index b1c1feea..8c62c7d8 100644 --- a/spreg/error_sp_regimes.py +++ b/spreg/error_sp_regimes.py @@ -8,7 +8,6 @@ import multiprocessing as mp from . import regimes as REGI from . import user_output as USER -from . import summary_output as SUMMARY from libpysal.weights.spatial_lag import lag_spatial from .ols import BaseOLS from .twosls import BaseTSLS @@ -17,6 +16,10 @@ from .utils import optim_moments, get_spFilter, get_lags from .utils import spdot, RegressionPropsY from .sputils import sphstack +import pandas as pd +from .output import output, _spat_pseudo_r2 +from .error_sp_het_regimes import GM_Error_Het_Regimes, GM_Endog_Error_Het_Regimes, GM_Combo_Het_Regimes +from .error_sp_hom_regimes import GM_Error_Hom_Regimes, GM_Endog_Error_Hom_Regimes, GM_Combo_Hom_Regimes class GM_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -55,6 +58,9 @@ class GM_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep: boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. vm : boolean If True, include variance-covariance matrix in summary results @@ -72,10 +78,13 @@ class GM_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output - + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -251,28 +260,15 @@ class GM_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): values in model.se_betas). Alternatively, we can have a summary of the output by typing: model.summary - >>> print(model.name_x) - ['0_CONSTANT', '0_PS90', '0_UE90', '1_CONSTANT', '1_PS90', '1_UE90', 'lambda'] - >>> np.around(model.betas, decimals=6) - array([[0.074807], - [0.786107], - [0.538849], - [5.103756], - [1.196009], - [0.600533], - [0.364103]]) - >>> np.around(model.std_err, decimals=6) - array([0.379864, 0.152316, 0.051942, 0.471285, 0.19867 , 0.057252]) - >>> np.around(model.z_stat, decimals=6) - array([[ 0.196932, 0.843881], - [ 5.161042, 0. ], - [10.37397 , 0. ], - [10.829455, 0. ], - [ 6.02007 , 0. ], - [10.489215, 0. ]]) - >>> np.around(model.sig2, decimals=6) - 28.172732 - + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 0.074811 0.379864 0.196942 0.843873 + 1 0_PS90 0.786105 0.152315 5.161043 0.0 + 2 0_UE90 0.538848 0.051942 10.373969 0.0 + 3 1_CONSTANT 5.103761 0.471284 10.82949 0.0 + 4 1_PS90 1.196009 0.19867 6.020074 0.0 + 5 1_UE90 0.600532 0.057252 10.489217 0.0 + 6 lambda 0.3641 None None None """ def __init__( @@ -289,17 +285,26 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, cores=False, name_ds=None, name_regimes=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) - x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) + x_constant, name_x, warn = USER.check_constant( + x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + + if slx_lags >0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.name_x_r = USER.set_name_x(name_x, x_constant) self.constant_regi = constant_regi @@ -319,22 +324,24 @@ def __init__( if regime_err_sep == True: if set(cols2regi) == set([True]): self._error_regimes_multi( - y, x_constant, regimes, w, cores, cols2regi, vm, name_x + y, x_constant, regimes, w, slx_lags, cores, cols2regi, vm, name_x, latex ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: - x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) + x_constant = sphstack( + np.ones((x_constant.shape[0], 1)), x_constant) name_x = USER.set_name_x(name_x, x_constant) - self.x, self.name_x = REGI.Regimes_Frame.__init__( + self.x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) ols = BaseOLS(y=y, x=self.x) self.k = ols.x.shape[1] @@ -354,14 +361,22 @@ def __init__( self.sig2 = ols2.sig2n self.e_filtered = self.u - lambda1 * lag_spatial(w, self.u) self.vm = self.sig2 * ols2.xtxi - self.title = "SPATIALLY WEIGHTED LEAST SQUARES - REGIMES" + if slx_lags == 0: + self.title = "GM SPATIALLY WEIGHTED MODEL - REGIMES" + else: + self.title = "GM SPATIALLY WEIGHTED MODEL + SLX (SDEM) - REGIMES" self.name_x.append("lambda") self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} - SUMMARY.GM_Error(reg=self, w=w, vm=vm, regimes=True) - - def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): + self.output = pd.DataFrame(self.name_x, + columns=['var_names']) + self.output['var_type'] = ['x']*(len(self.name_x)-1)+['lambda'] + self.output['regime'] = x_rlist + ['_Global'] + self.output['equation'] = 0 + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + def _error_regimes_multi(self, y, x, regimes, w, slx_lags, cores, cols2regi, vm, name_x, latex): regi_ids = dict( (r, list(np.where(np.array(regimes) == r)[0])) for r in self.regimes_set ) @@ -394,6 +409,7 @@ def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ), ) else: @@ -409,6 +425,7 @@ def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): name_x + ["lambda"], self.name_w, self.name_regimes, + slx_lags, ) ) @@ -432,6 +449,8 @@ def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): results = {} self.name_y, self.name_x = [], [] + self.output = pd.DataFrame( + columns=['var_names', 'var_type', 'regime', 'equation']) counter = 0 for r in self.regimes_set: """ @@ -446,11 +465,11 @@ def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): results[r] = results_p[r].get() self.vm[ - (counter * self.kr) : ((counter + 1) * self.kr), - (counter * self.kr) : ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), ] = results[r].vm self.betas[ - (counter * (self.kr + 1)) : ((counter + 1) * (self.kr + 1)), + (counter * (self.kr + 1)): ((counter + 1) * (self.kr + 1)), ] = results[r].betas self.u[ regi_ids[r], @@ -463,10 +482,14 @@ def _error_regimes_multi(self, y, x, regimes, w, cores, cols2regi, vm, name_x): ] = results[r].e_filtered self.name_y += results[r].name_y self.name_x += results[r].name_x + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x'] * (len(results[r].name_x) - 1) + + ['lambda'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - SUMMARY.GM_Error_multi(reg=self, multireg=self.multi, vm=vm, regimes=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Endog_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): @@ -513,6 +536,9 @@ class GM_Endog_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): If True, a separate regression is run for each regime. regime_lag_sep: boolean Always False, kept for consistency, ignored. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. vm : boolean If True, include variance-covariance matrix in summary results @@ -534,9 +560,13 @@ class GM_Endog_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -742,22 +772,17 @@ class GM_Endog_Error_Regimes(RegressionPropsY, REGI.Regimes_Frame): endogenous variables included. Alternatively, we can have a summary of the output by typing: model.summary - >>> print(model.name_z) - ['0_CONSTANT', '0_PS90', '0_UE90', '1_CONSTANT', '1_PS90', '1_UE90', '0_RD90', '1_RD90', 'lambda'] - >>> np.around(model.betas, decimals=5) - array([[ 3.59718], - [ 1.0652 ], - [ 0.15822], - [ 9.19754], - [ 1.88082], - [-0.24878], - [ 2.46161], - [ 3.57943], - [ 0.25564]]) - >>> np.around(model.std_err, decimals=6) - array([0.522633, 0.137555, 0.063054, 0.473654, 0.18335 , 0.072786, - 0.300711, 0.240413]) - + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 3.597178 0.522633 6.882796 0.0 + 1 0_PS90 1.065203 0.137555 7.743852 0.0 + 2 0_UE90 0.15822 0.063054 2.509282 0.012098 + 6 0_RD90 2.461609 0.300711 8.185967 0.0 + 3 1_CONSTANT 9.197542 0.473654 19.418268 0.0 + 4 1_PS90 1.880815 0.18335 10.258046 0.0 + 5 1_UE90 -0.248777 0.072786 -3.417919 0.000631 + 7 1_RD90 3.579429 0.240413 14.888666 0.0 + 8 lambda 0.255639 None None None """ def __init__( @@ -774,6 +799,7 @@ def __init__( cols2regi="all", regime_err_sep=False, regime_lag_sep=False, + slx_lags=0, name_y=None, name_x=None, name_yend=None, @@ -783,14 +809,22 @@ def __init__( name_regimes=None, summ=True, add_lag=False, + latex=False, ): n = USER.check_arrays(y, x, yend, q) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) - x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) + x_constant, name_x, warn = USER.check_constant( + x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + + if slx_lags > 0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.constant_regi = constant_regi self.cols2regi = cols2regi self.name_ds = USER.set_name_ds(name_ds) @@ -822,6 +856,7 @@ def __init__( w, yend, q, + slx_lags, cores, cols2regi, vm, @@ -829,26 +864,29 @@ def __init__( name_yend, name_q, add_lag, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: - x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) + x_constant = sphstack( + np.ones((x_constant.shape[0], 1)), x_constant) name_x = USER.set_name_x(name_x, x_constant) q, name_q = REGI.Regimes_Frame.__init__( self, q, regimes, constant_regi=None, cols2regi="all", names=name_q ) - x, name_x = REGI.Regimes_Frame.__init__( + x, name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True, ) - yend2, name_yend = REGI.Regimes_Frame.__init__( + yend2, name_yend, yend_rlist = REGI.Regimes_Frame.__init__( self, yend, regimes, @@ -856,6 +894,7 @@ def __init__( cols2regi=cols2regi, yend=True, names=name_yend, + rlist=True, ) tsls = BaseTSLS(y=y, x=x, yend=yend2, q=q) @@ -896,9 +935,19 @@ def __init__( self.kf += 1 self.chow = REGI.Chow(self) self._cache = {} + self.output = pd.DataFrame(self.name_z, + columns=['var_names']) + self.output['var_type'] = [ + 'x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + ['lambda'] + self.output['regime'] = x_rlist + yend_rlist + ['_Global'] + self.output['equation'] = 0 if summ: - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES - REGIMES" - SUMMARY.GM_Endog_Error(reg=self, w=w, vm=vm, regimes=True) + if slx_lags == 0: + self.title = ("GM SPATIALLY WEIGHTED 2SLS - REGIMES") + else: + self.title = ("GM SPATIALLY WEIGHTED 2SLS WITH SLX (SDEM) - REGIMES") + output(reg=self, vm=vm, robust=False, + other_end=False, latex=latex) def _endog_error_regimes_multi( self, @@ -908,6 +957,7 @@ def _endog_error_regimes_multi( w, yend, q, + slx_lags, cores, cols2regi, vm, @@ -915,6 +965,7 @@ def _endog_error_regimes_multi( name_yend, name_q, add_lag, + latex, ): regi_ids = dict( @@ -959,6 +1010,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ), ) else: @@ -979,6 +1031,7 @@ def _endog_error_regimes_multi( self.name_w, self.name_regimes, add_lag, + slx_lags, ) ) @@ -1009,6 +1062,8 @@ def _endog_error_regimes_multi( self.name_h, ) = ([], [], [], [], [], []) counter = 0 + self.output = pd.DataFrame( + columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -1022,11 +1077,11 @@ def _endog_error_regimes_multi( results[r] = results_p[r].get() self.vm[ - (counter * self.kr) : ((counter + 1) * self.kr), - (counter * self.kr) : ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), ] = results[r].vm self.betas[ - (counter * (self.kr + 1)) : ((counter + 1) * (self.kr + 1)), + (counter * (self.kr + 1)): ((counter + 1) * (self.kr + 1)), ] = results[r].betas self.u[ regi_ids[r], @@ -1050,15 +1105,20 @@ def _endog_error_regimes_multi( self.e_pred[ regi_ids[r], ] = results[r].e_pred + results[r].other_top = _spat_pseudo_r2(results[r]) + v_type = ['x'] * len(results[r].name_x) + ['yend'] * \ + (len(results[r].name_yend) - 1) + ['rho', 'lambda'] + else: + results[r].other_top = "" + v_type = ['x'] * len(results[r].name_x) + ['yend'] * \ + len(results[r].name_yend) + ['lambda'] + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_z, + 'var_type': v_type, + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - if add_lag != False: - SUMMARY.GM_Combo_multi(reg=self, multireg=self.multi, vm=vm, regimes=True) - else: - SUMMARY.GM_Endog_Error_multi( - reg=self, multireg=self.multi, vm=vm, regimes=True - ) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) class GM_Combo_Regimes(GM_Endog_Error_Regimes, REGI.Regimes_Frame): @@ -1107,6 +1167,9 @@ class GM_Combo_Regimes(GM_Endog_Error_Regimes, REGI.Regimes_Frame): If True, the spatial parameter for spatial lag is also computed according to different regimes. If False (default), the spatial parameter is fixed accross regimes. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the GNSM type. w_lags : integer Orders of W to include as instruments for the spatially lagged dependent variable. For example, w_lags=1, then @@ -1135,9 +1198,13 @@ class GM_Combo_Regimes(GM_Endog_Error_Regimes, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -1350,22 +1417,16 @@ class GM_Combo_Regimes(GM_Endog_Error_Regimes, REGI.Regimes_Frame): output by typing: model.summary Alternatively, we can check the betas: - >>> print(model.name_z) - ['0_CONSTANT', '0_PS90', '0_UE90', '1_CONSTANT', '1_PS90', '1_UE90', '_Global_W_HR90', 'lambda'] - >>> print(np.around(model.betas,4)) - [[ 1.4607] - [ 0.958 ] - [ 0.5658] - [ 9.113 ] - [ 1.1338] - [ 0.6517] - [-0.4583] - [ 0.6136]] - - And lambda: - - >>> print('lambda: ', np.around(model.betas[-1], 4)) - lambda: [0.6136] + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 1.460707 0.704174 2.074356 0.038046 + 1 0_PS90 0.95795 0.171485 5.586214 0.0 + 2 0_UE90 0.565805 0.053665 10.543203 0.0 + 3 1_CONSTANT 9.112998 1.525875 5.972311 0.0 + 4 1_PS90 1.13382 0.20552 5.51683 0.0 + 5 1_UE90 0.65169 0.061106 10.664938 0.0 + 6 _Global_W_HR90 -0.458326 0.145599 -3.147859 0.001645 + 7 lambda 0.613599 None None None This class also allows the user to run a spatial lag+error model with the extra feature of including non-spatial endogenous regressors. This means @@ -1383,24 +1444,18 @@ class GM_Combo_Regimes(GM_Endog_Error_Regimes, REGI.Regimes_Frame): And then we can run and explore the model analogously to the previous combo: >>> model = GM_Combo_Regimes(y, x, regimes, yd, q, w=w, name_y=y_var, name_x=x_var, name_yend=yd_var, name_q=q_var, name_regimes=r_var, name_ds='NAT') - >>> print(model.name_z) - ['0_CONSTANT', '0_PS90', '0_UE90', '1_CONSTANT', '1_PS90', '1_UE90', '0_RD90', '1_RD90', '_Global_W_HR90', 'lambda'] - >>> print(model.betas) - [[ 3.41963782] - [ 1.04065841] - [ 0.16634393] - [ 8.86544628] - [ 1.85120528] - [-0.24908469] - [ 2.43014046] - [ 3.61645481] - [ 0.03308671] - [ 0.18684992]] - >>> print(np.sqrt(model.vm.diagonal())) - [0.53067577 0.13271426 0.06058025 0.76406411 0.17969783 0.07167421 - 0.28943121 0.25308326 0.06126529] - >>> print('lambda: ', np.around(model.betas[-1], 4)) - lambda: [0.1868] + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 3.419638 0.530676 6.443931 0.0 + 1 0_PS90 1.040658 0.132714 7.841346 0.0 + 2 0_UE90 0.166344 0.06058 2.745844 0.006036 + 6 0_RD90 2.43014 0.289431 8.396263 0.0 + 3 1_CONSTANT 8.865446 0.764064 11.603014 0.0 + 4 1_PS90 1.851205 0.179698 10.301769 0.0 + 5 1_UE90 -0.249085 0.071674 -3.475235 0.00051 + 7 1_RD90 3.616455 0.253083 14.289586 0.0 + 8 _Global_W_HR90 0.033087 0.061265 0.540057 0.589158 + 9 lambda 0.18685 None None None """ def __init__( @@ -1411,6 +1466,7 @@ def __init__( yend=None, q=None, w=None, + slx_lags=0, w_lags=1, lag_q=True, cores=False, @@ -1426,22 +1482,41 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): - + if regime_lag_sep and not regime_err_sep: + set_warn(self, "regime_err_sep set to True when regime_lag_sep=True.") + regime_err_sep = True + if regime_err_sep and not regime_lag_sep: + set_warn(self, "regime_err_sep set to False when regime_lag_sep=False.") + regime_err_sep = False n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) - x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) + x_constant, name_x, warn = USER.check_constant( + x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) self.name_y = USER.set_name_y(name_y) name_yend = USER.set_name_yend(name_yend, yend) name_q = USER.set_name_q(name_q, q) - name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) - cols2regi = REGI.check_cols2regi( - constant_regi, cols2regi, x_constant, yend=yend, add_cons=False - ) + if regime_err_sep and any(col != True for col in cols2regi): + set_warn(self, "All coefficients must vary across regimes if regime_err_sep = True, so setting cols2regi = 'all'.") + cols2regi = "all" + + if slx_lags > 0: + yend2, q2, wx = set_endog(y, x_constant, w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + name_slx = USER.set_name_spatial_lags(name_x, slx_lags) + name_q.extend(USER.set_name_q_sp(name_slx[-len(name_x):], w_lags, name_q, lag_q, force_all=True)) + name_x += name_slx + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant[:, :-1], yend=yend2, add_cons=False) + else: + name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) + yend2, q2 = yend, q + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant, yend=yend2, add_cons=False) + self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, n, x_constant.shape[1]) @@ -1449,27 +1524,27 @@ def __init__( self.regime_lag_sep = regime_lag_sep if regime_lag_sep == True: - if regime_err_sep == False: - raise Exception( - "For spatial combo models, if spatial lag is set by regimes (regime_lag_sep=True), spatial error must also be set by regimes (regime_err_sep=True)." - ) - add_lag = [w_lags, lag_q] + if slx_lags == 0: + add_lag = [w_lags, lag_q] + else: + add_lag = False + cols2regi += [True] + else: - if regime_err_sep == True: - raise Exception( - "For spatial combo models, if spatial error is set by regimes (regime_err_sep=True), all coefficients including lambda (regime_lag_sep=True) must be set by regimes." - ) - cols2regi += [False] add_lag = False - yend, q = set_endog(y, x_constant, w, yend, q, w_lags, lag_q) + cols2regi += [False] + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant, w, yend2, q2, w_lags, lag_q) + name_yend.append(USER.set_name_yend_sp(self.name_y)) + print(cols2regi, x_constant.shape[1], yend2.shape[1], name_x, name_yend, name_q) GM_Endog_Error_Regimes.__init__( self, y=y, x=x_constant, - yend=yend, - q=q, + yend=yend2, + q=q2, regimes=regimes, w=w, vm=vm, @@ -1486,17 +1561,399 @@ def __init__( name_regimes=name_regimes, summ=False, add_lag=add_lag, + latex=latex, ) if regime_err_sep != True: self.rho = self.betas[-2] self.predy_e, self.e_pred, warn = sp_att( - w, self.y, self.predy, yend[:, -1].reshape(self.n, 1), self.rho + w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) set_warn(self, warn) - self.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES - REGIMES" - SUMMARY.GM_Combo(reg=self, w=w, vm=vm, regimes=True) + if slx_lags == 0: + self.title = "SPATIALLY WEIGHTED 2SLS - GM-COMBO MODEL - REGIMES" + else: + self.title = "SPATIALLY WEIGHTED 2SLS - GM-COMBO WITH SLX (GNSM) - REGIMES" + self.output.iat[-2, + self.output.columns.get_loc('var_type')] = 'rho' + self.other_top = _spat_pseudo_r2(self) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) + + +class GMM_Error_Regimes(GM_Error_Regimes, GM_Combo_Regimes, GM_Endog_Error_Regimes, + GM_Error_Het_Regimes, GM_Combo_Het_Regimes, GM_Endog_Error_Het_Regimes, + GM_Error_Hom_Regimes, GM_Combo_Hom_Regimes, GM_Endog_Error_Hom_Regimes + ): + + """ + Wrapper function to call any of the GM methods for a spatial error regimes model available in spreg + + Parameters + ---------- + y : array + nx1 array for dependent variable + x : array + Two dimensional array with n rows and one column for each + independent (exogenous) variable, excluding the constant + regimes : list + List of n values with the mapping of each + observation to a regime. Assumed to be aligned with 'x'. + w : pysal W object + Spatial weights object (always needed) + yend : array + Two dimensional array with n rows and one column for each + endogenous variable (if any) + q : array + Two dimensional array with n rows and one column for each + external exogenous variable to use as instruments (if any) + (note: this should not contain any variables from x) + estimator : string + Choice of estimator to be used. Options are: 'het', which + is robust to heteroskedasticity, 'hom', which assumes + homoskedasticity, and 'kp98', which does not provide + inference on the spatial parameter for the error term. + constant_regi: string, optional + Switcher controlling the constant term setup. It may take + the following values: + + * 'one': a vector of ones is appended to x and held constant across regimes. + + * 'many': a vector of ones is appended to x and considered different per regime (default). + cols2regi : list, 'all' + Argument indicating whether each + column of x should be considered as different per regime + or held constant across regimes (False). + If a list, k booleans indicating for each variable the + option (True if one per regime, False to be held constant). + If 'all' (default), all the variables vary by regime. + regime_err_sep: boolean + If True, a separate regression is run for each regime. + regime_lag_sep: boolean + Always False, kept for consistency, ignored. + add_wy : boolean + If True, then a spatial lag of the dependent variable is included. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM or GNSM type. + vm : boolean + If True, include variance-covariance matrix in summary + results + name_y : string + Name of dependent variable for use in output + name_x : list of strings + Names of independent variables for use in output + name_w : string + Name of weights matrix for use in output + name_regimes : string + Name of regime variable for use in the output + name_yend : list of strings + Names of endogenous variables for use in output + name_q : list of strings + Names of instruments for use in output + name_ds : string + Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format + **kwargs : keywords + Additional arguments to pass on to the estimators. + See the specific functions for details on what can be used. + + Attributes + ---------- + output : dataframe + regression results pandas dataframe + summary : string + Summary of regression results and diagnostics (note: use in + conjunction with the print command) + betas : array + kx1 array of estimated coefficients + u : array + nx1 array of residuals + e_filtered : array + nx1 array of spatially filtered residuals + predy : array + nx1 array of predicted y values + n : integer + Number of observations + k : integer + Number of variables for which coefficients are estimated + (including the constant) + y : array + nx1 array for dependent variable + x : array + Two dimensional array with n rows and one column for each + independent (exogenous) variable, including the constant + mean_y : float + Mean of dependent variable + std_y : float + Standard deviation of dependent variable + pr2 : float + Pseudo R squared (squared correlation between y and ypred) + vm : array + Variance covariance matrix (kxk) + sig2 : float + Sigma squared used in computations + std_err : array + 1xk array of standard errors of the betas + z_stat : list of tuples + z statistic; each tuple contains the pair (statistic, + p-value), where each is a float + name_y : string + Name of dependent variable for use in output + name_x : list of strings + Names of independent variables for use in output + name_w : string + Name of weights matrix for use in output + name_ds : string + Name of dataset for use in output + name_regimes : string + Name of regime variable for use in the output + title : string + Name of the regression method used + Only available in dictionary 'multi' when multiple regressions + (see 'multi' below for details) + regimes : list + List of n values with the mapping of each + observation to a regime. Assumed to be aligned with 'x'. + constant_regi: string + Ignored if regimes=False. Constant option for regimes. + Switcher controlling the constant term setup. It may take + the following values: + * 'one': a vector of ones is appended to x and held constant across regimes + + * 'many': a vector of ones is appended to x and considered different per regime + cols2regi : list, 'all' + Ignored if regimes=False. Argument indicating whether each + column of x should be considered as different per regime + or held constant across regimes (False). + If a list, k booleans indicating for each variable the + option (True if one per regime, False to be held constant). + If 'all', all the variables vary by regime. + regime_err_sep: boolean + If True, a separate regression is run for each regime. + kr : int + Number of variables/columns to be "regimized" or subject + to change by regime. These will result in one parameter + estimate by regime for each variable (i.e. nr parameters per + variable) + kf : int + Number of variables/columns to be considered fixed or + global across regimes and hence only obtain one parameter + estimate + nr : int + Number of different regimes in the 'regimes' list + name_yend : list of strings (optional) + Names of endogenous variables for use in output + name_z : list of strings (optional) + Names of exogenous and endogenous variables for use in + output + name_q : list of strings (optional) + Names of external instruments + name_h : list of strings (optional) + Names of all instruments used in ouput + multi : dictionary + Only available when multiple regressions are estimated, + i.e. when regime_err_sep=True and no variable is fixed + across regimes. + Contains all attributes of each individual regression + + Examples + -------- + + We first need to import the needed modules, namely numpy to convert the + data we read into arrays that ``spreg`` understands and ``libpysal`` to + handle the weights and file management. + + >>> import numpy as np + >>> import libpysal + >>> from libpysal.examples import load_example + + Open data on NCOVR US County Homicides (3085 areas) using libpysal.io.open(). + This is the DBF associated with the NAT shapefile. Note that + libpysal.io.open() also reads data in CSV format; since the actual class + requires data to be passed in as numpy arrays, the user can read their + data in using any method. + + >>> nat = load_example('Natregimes') + >>> db = libpysal.io.open(nat.get_path("natregimes.dbf"),'r') + + Extract the HR90 column (homicide rates in 1990) from the DBF file and make it the + dependent variable for the regression. Note that PySAL requires this to be + an numpy array of shape (n, 1) as opposed to the also common shape of (n, ) + that other packages accept. + + >>> y_var = 'HR90' + >>> y = np.array([db.by_col(y_var)]).reshape(3085,1) + + Extract UE90 (unemployment rate) and PS90 (population structure) vectors from + the DBF to be used as independent variables in the regression. Other variables + can be inserted by adding their names to x_var, such as x_var = ['Var1','Var2','...] + Note that PySAL requires this to be an nxj numpy array, where j is the + number of independent variables (not including a constant). By default + this model adds a vector of ones to the independent variables passed in. + + >>> x_var = ['PS90','UE90'] + >>> x = np.array([db.by_col(name) for name in x_var]).T + + The different regimes in this data are given according to the North and + South dummy (SOUTH). + + >>> r_var = 'SOUTH' + >>> regimes = db.by_col(r_var) + + Since we want to run a spatial error model, we need to specify + the spatial weights matrix that includes the spatial configuration of the + observations. To do that, we can open an already existing gal file or + create a new one. In this case, we will create one from ``NAT.shp``. + + >>> w = libpysal.weights.Rook.from_shapefile(nat.get_path("natregimes.shp")) + + Unless there is a good reason not to do it, the weights have to be + row-standardized so every row of the matrix sums to one. Among other + things, this allows to interpret the spatial lag of a variable as the + average value of the neighboring observations. In PySAL, this can be + easily performed in the following way: + + >>> w.transform = 'r' + + The GMM_Error_Regimes class can run error models and SARAR models, that is a spatial lag+error model. + In this example we will run a simple version of the latter, where we have the + spatial effects as well as exogenous variables. Since it is a spatial + model, we have to pass in the weights matrix. If we want to + have the names of the variables printed in the output summary, we will + have to pass them in as well, although this is optional. + + >>> from spreg import GMM_Error_Regimes + >>> model = GMM_Error_Regimes(y, x, regimes, w=w, add_wy=True, name_y=y_var, name_x=x_var, name_regimes=r_var, name_ds='NAT') + + Once we have run the model, we can explore a little bit the output. The + regression object we have created has many attributes so take your time to + discover them. + + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 1.461317 0.848361 1.722517 0.084976 + 1 0_PS90 0.958711 0.239834 3.997388 0.000064 + 2 0_UE90 0.565825 0.063726 8.879088 0.0 + 3 1_CONSTANT 9.115738 1.976874 4.611189 0.000004 + 4 1_PS90 1.132419 0.334107 3.389387 0.0007 + 5 1_UE90 0.651804 0.105518 6.177197 0.0 + 6 _Global_W_HR90 -0.458677 0.180997 -2.534173 0.011271 + 7 lambda 0.734354 0.035255 20.829823 0.0 + + This class also allows the user to run a spatial lag+error model with the + extra feature of including non-spatial endogenous regressors. This means + that, in addition to the spatial lag and error, we consider some of the + variables on the right-hand side of the equation as endogenous and we + instrument for this. In this case we consider RD90 (resource deprivation) + as an endogenous regressor. We use FP89 (families below poverty) + for this and hence put it in the instruments parameter, 'q'. + + >>> yd_var = ['RD90'] + >>> yd = np.array([db.by_col(name) for name in yd_var]).T + >>> q_var = ['FP89'] + >>> q = np.array([db.by_col(name) for name in q_var]).T + + And then we can run and explore the model analogously to the previous combo: + + >>> model = GMM_Error_Regimes(y, x, regimes, yend=yd, q=q, w=w, add_wy=True, name_y=y_var, name_x=x_var, name_yend=yd_var, name_q=q_var, name_regimes=r_var, name_ds='NAT') + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 1.461317 0.848361 1.722517 0.084976 + 1 0_PS90 0.958711 0.239834 3.997388 0.000064 + 2 0_UE90 0.565825 0.063726 8.879088 0.0 + 3 1_CONSTANT 9.115738 1.976874 4.611189 0.000004 + 4 1_PS90 1.132419 0.334107 3.389387 0.0007 + 5 1_UE90 0.651804 0.105518 6.177197 0.0 + 6 _Global_W_HR90 -0.458677 0.180997 -2.534173 0.011271 + 7 lambda 0.734354 0.035255 20.829823 0.0 + + The class also allows for estimating a GNS model by adding spatial lags of the exogenous variables, using the argument slx_lags: + + >>> model = GMM_Error_Regimes(y, x, regimes, w=w, add_wy=True, slx_lags=1, name_y=y_var, name_x=x_var, name_regimes=r_var, name_ds='NAT') + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 0.192699 0.256922 0.75003 0.453237 + 1 0_PS90 1.098019 0.232054 4.731743 0.000002 + 2 0_UE90 0.606622 0.07762 7.815325 0.0 + 3 0_W_PS90 -1.068778 0.203911 -5.241381 0.0 + 4 0_W_UE90 -0.657932 0.176073 -3.73671 0.000186 + 5 1_CONSTANT -0.104299 1.790953 -0.058237 0.95356 + 6 1_PS90 1.219796 0.316425 3.854936 0.000116 + 7 1_UE90 0.678922 0.120491 5.634647 0.0 + 8 1_W_PS90 -1.308599 0.536231 -2.440366 0.014672 + 9 1_W_UE90 -0.708492 0.167057 -4.24102 0.000022 + 10 _Global_W_HR90 1.033956 0.269252 3.840111 0.000123 + 11 lambda -0.384968 0.192256 -2.002366 0.045245 + + + """ + + def __init__( + self, y, x, regimes, w, yend=None, q=None, estimator='het', constant_regi="many", cols2regi="all", regime_err_sep=False, + regime_lag_sep=False, add_wy=False, slx_lags=0, vm=False, name_y=None, name_x=None, name_w=None, name_regimes=None, name_yend=None, + name_q=None, name_ds=None, latex=False, **kwargs): + + if estimator == 'het': + if yend is None and not add_wy: + GM_Error_Het_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error_Het_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo_Het_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, regime_lag_sep=regime_lag_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error_Regimes not allowed. Using default arguments instead.') + GM_Error_Het_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex) + elif estimator == 'hom': + if yend is None and not add_wy: + GM_Error_Hom_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error_Hom_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo_Hom_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, regime_lag_sep=regime_lag_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error_Regimes not allowed. Using default arguments instead.') + GM_Error_Hom_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex) + elif estimator == 'kp98': + if yend is None and not add_wy: + GM_Error_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif yend is not None and not add_wy: + GM_Endog_Error_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + elif add_wy: + GM_Combo_Regimes.__init__(self, y=y, x=x, regimes=regimes, yend=yend, q=q, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, regime_lag_sep=regime_lag_sep, + name_yend=name_yend, name_q=name_q, name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex, **kwargs) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error_Regimes not allowed. Using default arguments instead.') + GM_Error_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex) + else: + set_warn(self, 'Combination of arguments passed to GMM_Error_Regimes not allowed. Using default arguments instead.') + GM_Error_Het_Regimes.__init__(self, y=y, x=x, regimes=regimes, w=w, slx_lags=slx_lags, vm=vm, name_y=name_y, name_x=name_x, + constant_regi=constant_regi, cols2regi=cols2regi, regime_err_sep=regime_err_sep, + name_w=name_w, name_regimes=name_regimes, name_ds=name_ds, latex=latex) def _work_error(y, x, regi_ids, r, w, name_ds, name_y, name_x, name_w, name_regimes): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) @@ -1505,7 +1962,7 @@ def _work_error(y, x, regi_ids, r, w, name_ds, name_y, name_x, name_w, name_regi model = BaseGM_Error(y_r, x_r, w_r.sparse) set_warn(model, warn) model.w = w_r - model.title = "SPATIALLY WEIGHTED LEAST SQUARES ESTIMATION - REGIME %s" % r + model.title = "GM SPATIALLY WEIGHTED LEAST SQUARES ESTIMATION - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] @@ -1530,6 +1987,7 @@ def _work_endog_error( name_w, name_regimes, add_lag, + slx_lags, ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -1548,16 +2006,26 @@ def _work_endog_error( if add_lag != False: model.rho = model.betas[-2] model.predy_e, model.e_pred, warn = sp_att( - w_r, model.y, model.predy, model.yend[:, -1].reshape(model.n, 1), model.rho + w_r, model.y, model.predy, model.yend[:, - + 1].reshape(model.n, 1), model.rho ) set_warn(model, warn) model.w = w_r - model.title = "SPATIALLY WEIGHTED TWO STAGE LEAST SQUARES - REGIME %s" % r + if slx_lags == 0: + if add_lag != False: + model.title = "SPATIALLY WEIGHTED 2SLS - GM-COMBO MODEL - REGIME %s" % r + else: + model.title = "SPATIALLY WEIGHTED 2SLS (GM) - REGIME %s" % r + else: + if add_lag != False: + model.title = "GM SPATIAL COMBO MODEL + SLX (GNSM) - REGIME %s" % r + else: + model.title = "GM SPATIALLY WEIGHTED 2SLS + SLX (SDEM) - REGIME %s" % r model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] model.name_yend = ["%s_%s" % (str(r), i) for i in name_yend] - model.name_z = model.name_x + model.name_yend + ["lambda"] + model.name_z = model.name_x + model.name_yend + [str(r)+"_lambda"] model.name_q = ["%s_%s" % (str(r), i) for i in name_q] model.name_h = model.name_x + model.name_q model.name_w = name_w @@ -1575,31 +2043,34 @@ def _test(): if __name__ == "__main__": - _test() - import libpysal import numpy as np + import libpysal - dbf = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") - y = np.array([dbf.by_col("CRIME")]).T - names_to_extract = ["INC"] - x = np.array([dbf.by_col(name) for name in names_to_extract]).T - yd_var = ["HOVAL"] - yend = np.array([dbf.by_col(name) for name in yd_var]).T - q_var = ["DISCBD"] - q = np.array([dbf.by_col(name) for name in q_var]).T - regimes = regimes = dbf.by_col("NSA") - w = libpysal.io.open(libpysal.examples.get_path("columbus.gal"), "r").read() - w.transform = "r" - model = GM_Error_Regimes( - y, - x, - regimes=regimes, - w=w, - name_y="crime", - name_x=["income"], - name_regimes="nsa", - name_ds="columbus", - regime_err_sep=True, - ) - print(model.summary) + db = libpysal.io.open(libpysal.examples.get_path('columbus.dbf'), 'r') + y = np.array(db.by_col("HOVAL")) + y = np.reshape(y, (49, 1)) + X = [] + X.append(db.by_col("INC")) + X = np.array(X).T + yd = [] + yd.append(db.by_col("CRIME")) + yd = np.array(yd).T + q = [] + q.append(db.by_col("DISCBD")) + q = np.array(q).T + + r_var = 'NSA' + regimes = db.by_col(r_var) + + w = libpysal.weights.Rook.from_shapefile( + libpysal.examples.get_path("columbus.shp")) + w.transform = 'r' + # reg = GM_Error_Regimes(y, X, regimes, w=w, name_x=['inc'], name_y='hoval', name_ds='columbus', + # regime_err_sep=True) + # reg = GM_Endog_Error_Regimes(y, X, yd, q, regimes, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + # name_q=['discbd'], name_ds='columbus', regime_err_sep=True) + reg = GM_Combo_Regimes(y, X, regimes, yd, q, w=w, name_x=['inc'], name_y='hoval', name_yend=['crime'], + name_q=['discbd'], name_ds='columbus', regime_err_sep=True, regime_lag_sep=True) + print(reg.output) + print(reg.summary) diff --git a/spreg/ml_error.py b/spreg/ml_error.py index 2d505324..bb338677 100644 --- a/spreg/ml_error.py +++ b/spreg/ml_error.py @@ -10,12 +10,13 @@ import numpy.linalg as la from scipy import sparse as sp from scipy.sparse.linalg import splu as SuperLU -from .utils import RegressionPropsY, RegressionPropsVM, set_warn +from .utils import RegressionPropsY, RegressionPropsVM, set_warn, get_lags from . import diagnostics as DIAG from . import user_output as USER -from . import summary_output as SUMMARY from . import regimes as REGI from .w_utils import symmetrize +import pandas as pd +from .output import output, _nonspat_top try: from scipy.optimize import minimize_scalar @@ -310,6 +311,9 @@ class ML_Error(BaseML_Error): independent (exogenous) variable, excluding the constant w : Sparse matrix Spatial weights sparse matrix + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. method : string if 'full', brute force calculation (full matrix expressions) if 'ord', Ord eigenvalue method @@ -327,9 +331,13 @@ class ML_Error(BaseML_Error): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe betas : array (k+1)x1 array of estimated coefficients (rho first) lam : float @@ -463,6 +471,7 @@ def __init__( y, x, w, + slx_lags=0, method="full", epsilon=0.0000001, vm=False, @@ -470,17 +479,26 @@ def __init__( name_x=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) x_constant, name_x, warn = USER.check_constant(x, name_x) set_warn(self, warn) + + self.title = "ML SPATIAL ERROR" + if slx_lags >0: + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title += " WITH SLX (SDEM)" + self.title += " (METHOD = " + method + ")" + method = method.upper() BaseML_Error.__init__( self, y=y, x=x_constant, w=w, method=method, epsilon=epsilon ) - self.title = "MAXIMUM LIKELIHOOD SPATIAL ERROR" + " (METHOD = " + method + ")" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x) @@ -488,7 +506,11 @@ def __init__( self.name_w = USER.set_name_w(name_w, w) self.aic = DIAG.akaike(reg=self) self.schwarz = DIAG.schwarz(reg=self) - SUMMARY.ML_Error(reg=self, w=w, vm=vm, spat_diag=False) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x) - 1) + ['lambda'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _nonspat_top(self, ml=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def err_c_loglik(lam, n, y, ylag, x, xlag, W): @@ -565,3 +587,29 @@ def _test(): np.set_printoptions(suppress=True) doctest.testmod() np.set_printoptions(suppress=start_suppress) + +if __name__ == "__main__": + _test() + + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + y_var = "CRIME" + y = np.array([db.by_col(y_var)]).reshape(49, 1) + x_var = ["INC"] + x = np.array([db.by_col(name) for name in x_var]).T + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = "r" + model = ML_Error( + y, + x, + w=w, + vm=False, + name_y=y_var, + name_x=x_var, + name_ds="columbus", + name_w="columbus.gal", + ) + print(model.output) + print(model.summary) diff --git a/spreg/ml_error_regimes.py b/spreg/ml_error_regimes.py index 03384495..721fd115 100644 --- a/spreg/ml_error_regimes.py +++ b/spreg/ml_error_regimes.py @@ -9,12 +9,13 @@ import multiprocessing as mp from . import regimes as REGI from . import user_output as USER -from . import summary_output as SUMMARY from . import diagnostics as DIAG -from .utils import set_warn +from .utils import set_warn, get_lags from .sputils import sphstack from .ml_error import BaseML_Error from platform import system +import pandas as pd +from .output import output, _nonspat_top __all__ = ["ML_Error_Regimes"] @@ -51,6 +52,9 @@ class ML_Error_Regimes(BaseML_Error, REGI.Regimes_Frame): If 'all' (default), all the variables vary by regime. w : Sparse matrix Spatial weights sparse matrix + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SDEM type. method : string if 'full', brute force calculation (full matrix expressions) if 'ord', Ord eigenvalue computation @@ -78,9 +82,13 @@ class ML_Error_Regimes(BaseML_Error, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regimes variable for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -276,6 +284,7 @@ def __init__( x, regimes, w=None, + slx_lags=0, constant_regi="many", cols2regi="all", method="full", @@ -289,14 +298,13 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) self.constant_regi = constant_regi - self.cols2regi = cols2regi - self.regime_err_sep = regime_err_sep self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_w = USER.set_name_w(name_w, w) @@ -307,9 +315,16 @@ def __init__( x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + + if slx_lags >0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.name_x_r = USER.set_name_x(name_x, x_constant) - cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x) + cols2regi = REGI.check_cols2regi(constant_regi, cols2regi, x_constant) + self.cols2regi = cols2regi self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, self.n, x.shape[1]) @@ -322,16 +337,18 @@ def __init__( x_constant, regimes, w, + slx_lags, cores, method, epsilon, cols2regi, vm, name_x, + latex, ) else: raise Exception( - "All coefficients must vary accross regimes if regime_err_sep = True." + "All coefficients must vary across regimes if regime_err_sep = True." ) else: x_constant = sphstack(np.ones((x_constant.shape[0], 1)), x_constant) @@ -340,15 +357,15 @@ def __init__( regimes_att["x"] = x_constant regimes_att["regimes"] = regimes regimes_att["cols2regi"] = cols2regi - x, name_x = REGI.Regimes_Frame.__init__( + x, name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi=None, cols2regi=cols2regi, names=name_x, + rlist=True ) - BaseML_Error.__init__( self, y=y, @@ -359,22 +376,26 @@ def __init__( regimes_att=regimes_att, ) - self.title = ( - "MAXIMUM LIKELIHOOD SPATIAL ERROR - REGIMES" - + " (METHOD = " - + method - + ")" - ) + self.title = "ML SPATIAL ERROR" + if slx_lags >0: + self.title += " WITH SLX (SDEM)" + self.title += " - REGIMES (METHOD = " + method + ")" + self.name_x = USER.set_name_x(name_x, x, constant=True) self.name_x.append("lambda") self.kf += 1 # Adding a fixed k to account for lambda. self.chow = REGI.Chow(self) self.aic = DIAG.akaike(reg=self) self.schwarz = DIAG.schwarz(reg=self) - SUMMARY.ML_Error(reg=self, w=w, vm=vm, spat_diag=False, regimes=True) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x) - 1) + ['lambda'] + self.output['regime'] = x_rlist + ['_Global'] + self.output['equation'] = 0 + self.other_top = _nonspat_top(self, ml=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def _error_regimes_multi( - self, y, x, regimes, w, cores, method, epsilon, cols2regi, vm, name_x + self, y, x, regimes, w, slx_lags, cores, method, epsilon, cols2regi, vm, name_x, latex ): regi_ids = dict( @@ -404,6 +425,7 @@ def _error_regimes_multi( regi_ids, r, w, + slx_lags, method, epsilon, self.name_ds, @@ -421,6 +443,7 @@ def _error_regimes_multi( regi_ids, r, w, + slx_lags, method, epsilon, self.name_ds, @@ -452,6 +475,7 @@ def _error_regimes_multi( results = {} counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -482,16 +506,18 @@ def _error_regimes_multi( ] = results[r].e_filtered self.name_y += results[r].name_y self.name_x += results[r].name_x + results[r].other_top = _nonspat_top(results[r], ml=True) + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x'] * (len(results[r].name_x) - 1) + ['lambda'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.chow = REGI.Chow(self) self.multi = results - SUMMARY.ML_Error_multi( - reg=self, multireg=self.multi, vm=vm, spat_diag=False, regimes=True, w=w - ) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def _work_error( - y, x, regi_ids, r, w, method, epsilon, name_ds, name_y, name_x, name_w, name_regimes + y, x, regi_ids, r, w, slx_lags, method, epsilon, name_ds, name_y, name_x, name_w, name_regimes ): w_r, warn = REGI.w_regime(w, regi_ids[r], r, transform=True) y_r = y[regi_ids[r]] @@ -499,13 +525,10 @@ def _work_error( model = BaseML_Error(y=y_r, x=x_r, w=w_r, method=method, epsilon=epsilon) set_warn(model, warn) model.w = w_r - model.title = ( - "MAXIMUM LIKELIHOOD SPATIAL ERROR - REGIME " - + str(r) - + " (METHOD = " - + method - + ")" - ) + model.title = "ML SPATIAL ERROR" + if slx_lags >0: + model.title += " WITH SLX (SDEM)" + model.title += " - REGIME " + str(r) + " (METHOD = " + method + ")" model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] @@ -528,30 +551,23 @@ def _test(): if __name__ == "__main__": _test() import numpy as np - import libpysal + import libpysal as ps - db = libpysal.io.open(libpysal.examples.get_path("baltim.dbf"), "r") + db = ps.io.open(ps.examples.get_path("baltim.dbf"), "r") ds_name = "baltim.dbf" y_name = "PRICE" y = np.array(db.by_col(y_name)).T y.shape = (len(y), 1) x_names = ["NROOM", "NBATH", "PATIO", "FIREPL", "AC", "GAR", "AGE", "LOTSZ", "SQFT"] x = np.array([db.by_col(var) for var in x_names]).T - ww = ps.open(ps.examples.get_path("baltim_q.gal")) + ww = ps.io.open(ps.examples.get_path("baltim_q.gal")) w = ww.read() ww.close() w_name = "baltim_q.gal" w.transform = "r" + regimes = db.by_col("CITCOU") - regimes = [] - y_coord = np.array(db.by_col("Y")) - for i in y_coord: - if i > 544.5: - regimes.append("North") - else: - regimes.append("South") - - mlerror = ML_Error_Regimes( + model = ML_Error_Regimes( y, x, regimes, @@ -561,7 +577,9 @@ def _test(): name_x=x_names, name_w=w_name, name_ds=ds_name, - regime_err_sep=False, - name_regimes="North", + regime_err_sep=True, + constant_regi="many", + name_regimes="CITCOU", ) - print(mlerror.summary) + print(model.output) + print(model.summary) diff --git a/spreg/ml_lag.py b/spreg/ml_lag.py old mode 100644 new mode 100755 index 7d7e2e9f..c3ec794c --- a/spreg/ml_lag.py +++ b/spreg/ml_lag.py @@ -10,11 +10,12 @@ import numpy.linalg as la from scipy import sparse as sp from scipy.sparse.linalg import splu as SuperLU -from .utils import RegressionPropsY, RegressionPropsVM, inverse_prod, set_warn +from .utils import RegressionPropsY, RegressionPropsVM, inverse_prod, set_warn, get_lags from .sputils import spdot, spfill_diagonal, spinv, spbroadcast from . import diagnostics as DIAG from . import user_output as USER -from . import summary_output as SUMMARY +import pandas as pd +from .output import output, _nonspat_top, _spat_pseudo_r2 from .w_utils import symmetrize from libpysal import weights @@ -43,6 +44,9 @@ class BaseML_Lag(RegressionPropsY, RegressionPropsVM): independent (exogenous) variable, excluding the constant w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. method : string if 'full', brute force calculation (full matrix expressions) if 'ord', Ord eigenvalue method @@ -179,25 +183,29 @@ class BaseML_Lag(RegressionPropsY, RegressionPropsVM): """ - def __init__(self, y, x, w, method="full", epsilon=0.0000001): + def __init__(self, y, x, w, slx_lags=0, method="full", epsilon=0.0000001): # set up main regression variables and spatial filters self.y = y self.x = x - self.n, self.k = self.x.shape self.method = method self.epsilon = epsilon # W = w.full()[0] # Wsp = w.sparse ylag = weights.lag_spatial(w, y) # b0, b1, e0 and e1 + + if slx_lags>0: + self.x = np.hstack((self.x, get_lags(w, self.x[:, 1:], slx_lags))) + + self.n, self.k = self.x.shape xtx = spdot(self.x.T, self.x) xtxi = la.inv(xtx) xty = spdot(self.x.T, self.y) xtyl = spdot(self.x.T, ylag) b0 = spdot(xtxi, xty) b1 = spdot(xtxi, xtyl) - e0 = self.y - spdot(x, b0) - e1 = ylag - spdot(x, b1) + e0 = self.y - spdot(self.x, b0) + e1 = ylag - spdot(self.x, b1) methodML = method.upper() # call minimizer using concentrated log-likelihood to get rho if methodML in ["FULL", "LU", "ORD"]: @@ -209,19 +217,19 @@ def __init__(self, y, x, w, method="full", epsilon=0.0000001): bounds=(-1.0, 1.0), args=(self.n, e0, e1, W), method="bounded", - tol=epsilon, + options={'xatol': epsilon}, ) elif methodML == "LU": I = sp.identity(w.n) Wsp = w.sparse # moved here - W = Wsp + W = Wsp#.tocsc() res = minimize_scalar( lag_c_loglik_sp, 0.0, bounds=(-1.0, 1.0), args=(self.n, e0, e1, I, Wsp), method="bounded", - tol=epsilon, + options={'xatol': epsilon}, ) elif methodML == "ORD": # check on symmetry structure @@ -239,7 +247,7 @@ def __init__(self, y, x, w, method="full", epsilon=0.0000001): bounds=(-1.0, 1.0), args=(self.n, e0, e1, evals), method="bounded", - tol=epsilon, + options={'xatol': epsilon}, ) else: # program will crash, need to catch @@ -261,7 +269,7 @@ def __init__(self, y, x, w, method="full", epsilon=0.0000001): self.u = e0 - self.rho * e1 self.predy = self.y - self.u - xb = spdot(x, b) + xb = spdot(self.x, b) self.predy_e = inverse_prod( w.sparse, xb, self.rho, inv_method="power_exp", threshold=epsilon @@ -289,7 +297,7 @@ def __init__(self, y, x, w, method="full", epsilon=0.0000001): wpredy = weights.lag_spatial(w, self.predy_e) wpyTwpy = spdot(wpredy.T, wpredy) - xTwpy = spdot(x.T, wpredy) + xTwpy = spdot(self.x.T, wpredy) # order of variables is beta, rho, sigma2 @@ -321,6 +329,9 @@ class ML_Lag(BaseML_Lag): independent (exogenous) variable, excluding the constant w : pysal W object Spatial weights object + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. method : string if 'full', brute force calculation (full matrix expressions) if 'ord', Ord eigenvalue method @@ -337,9 +348,13 @@ class ML_Lag(BaseML_Lag): Name of weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe betas : array (k+1)x1 array of estimated coefficients (rho first) rho : float @@ -567,6 +582,7 @@ def __init__( y, x, w, + slx_lags=0, method="full", epsilon=0.0000001, vm=False, @@ -574,6 +590,7 @@ def __init__( name_x=None, name_w=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) @@ -582,11 +599,16 @@ def __init__( set_warn(self, warn) method = method.upper() BaseML_Lag.__init__( - self, y=y, x=x_constant, w=w, method=method, epsilon=epsilon + self, y=y, x=x_constant, w=w, slx_lags=slx_lags, method=method, epsilon=epsilon ) # increase by 1 to have correct aic and sc, include rho in count self.k += 1 - self.title = "MAXIMUM LIKELIHOOD SPATIAL LAG" + " (METHOD = " + method + ")" + + if slx_lags>0: + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.title = "MAXIMUM LIKELIHOOD SPATIAL LAG WITH SLX - SPATIAL DURBIN MODEL" + " (METHOD = " + method + ")" + else: + self.title = "MAXIMUM LIKELIHOOD SPATIAL LAG" + " (METHOD = " + method + ")" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) self.name_x = USER.set_name_x(name_x, x) @@ -595,8 +617,12 @@ def __init__( self.name_w = USER.set_name_w(name_w, w) self.aic = DIAG.akaike(reg=self) self.schwarz = DIAG.schwarz(reg=self) - SUMMARY.ML_Lag(reg=self, w=w, vm=vm, spat_diag=False) - + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x)-1) + ['rho'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _spat_pseudo_r2(self) + self.other_top += _nonspat_top(self, ml=True) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def lag_c_loglik(rho, n, e0, e1, W): # concentrated log-lik for lag model, no constants, brute force @@ -647,3 +673,29 @@ def _test(): np.set_printoptions(suppress=True) doctest.testmod() np.set_printoptions(suppress=start_suppress) + +if __name__ == "__main__": + _test() + + import numpy as np + import libpysal + + db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + y_var = "CRIME" + y = np.array([db.by_col(y_var)]).reshape(49, 1) + x_var = ["INC"] + x = np.array([db.by_col(name) for name in x_var]).T + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w.transform = "r" + model = ML_Lag( + y, + x, + w=w, + vm=False, + name_y=y_var, + name_x=x_var, + name_ds="columbus", + name_w="columbus.gal", + ) + print(model.output) + print(model.summary) diff --git a/spreg/ml_lag_regimes.py b/spreg/ml_lag_regimes.py index 4e603d09..a05c00b2 100644 --- a/spreg/ml_lag_regimes.py +++ b/spreg/ml_lag_regimes.py @@ -7,12 +7,14 @@ import numpy as np from . import regimes as REGI from . import user_output as USER -from . import summary_output as SUMMARY from . import diagnostics as DIAG import multiprocessing as mp from .ml_lag import BaseML_Lag -from .utils import set_warn +from .utils import set_warn, get_lags from platform import system +import pandas as pd +from .output import output, _nonspat_top, _spat_pseudo_r2 + __all__ = ["ML_Lag_Regimes"] @@ -55,6 +57,9 @@ class ML_Lag_Regimes(BaseML_Lag, REGI.Regimes_Frame): if 'LU', LU sparse matrix decomposition epsilon : float tolerance criterion in mimimize_scalar function and inverse_product + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. regime_lag_sep: boolean If True, the spatial parameter for spatial lag is also computed according to different regimes. If False (default), @@ -76,9 +81,13 @@ class ML_Lag_Regimes(BaseML_Lag, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regimes variable for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -297,8 +306,8 @@ def __init__( cols2regi="all", method="full", epsilon=0.0000001, + slx_lags=0, regime_lag_sep=False, - regime_err_sep=False, cores=False, vm=False, name_y=None, @@ -306,6 +315,7 @@ def __init__( name_w=None, name_ds=None, name_regimes=None, + latex=False, ): n = USER.check_arrays(y, x) @@ -318,6 +328,11 @@ def __init__( set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + if slx_lags >0: + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + self.name_x_r = USER.set_name_x(name_x, x_constant) + [USER.set_name_yend_sp(name_y)] self.method = method self.epsilon = epsilon @@ -364,6 +379,7 @@ def __init__( w_i, w, regi_ids, + slx_lags=slx_lags, cores=cores, cols2regi=cols2regi, method=method, @@ -374,17 +390,19 @@ def __init__( name_regimes=self.name_regimes, name_w=name_w, name_ds=name_ds, + latex=latex, ) else: # if regime_lag_sep == True: # w = REGI.w_regimes_union(w, w_i, self.regimes_set) - x, self.name_x = REGI.Regimes_Frame.__init__( + x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi, cols2regi=cols2regi[:-1], names=name_x, + rlist=True ) self.name_x.append("_Global_" + USER.set_name_yend_sp(name_y)) BaseML_Lag.__init__(self, y=y, x=x, w=w, method=method, epsilon=epsilon) @@ -395,13 +413,17 @@ def __init__( self.aic = DIAG.akaike(reg=self) self.schwarz = DIAG.schwarz(reg=self) self.regime_lag_sep = regime_lag_sep - self.title = ( - "MAXIMUM LIKELIHOOD SPATIAL LAG - REGIMES" - + " (METHOD = " - + method - + ")" - ) - SUMMARY.ML_Lag(reg=self, w=w, vm=vm, spat_diag=False, regimes=True) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * (len(self.name_x) - 1) + ['rho'] + self.output['regime'] = x_rlist+['_Global'] + self.output['equation'] = 0 + self.other_top = _spat_pseudo_r2(self) + self.other_top += _nonspat_top(self, ml=True) + if slx_lags == 0: + self.title = ("MAXIMUM LIKELIHOOD SPATIAL LAG - REGIMES"+ " (METHOD = "+ method+ ")") + else: + self.title = ("MAXIMUM LIKELIHOOD SPATIAL DURBIN - REGIMES"+ " (METHOD = "+ method+ ")") + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def ML_Lag_Regimes_Multi( self, @@ -410,6 +432,7 @@ def ML_Lag_Regimes_Multi( w_i, w, regi_ids, + slx_lags, cores, cols2regi, method, @@ -420,8 +443,9 @@ def ML_Lag_Regimes_Multi( name_regimes, name_w, name_ds, + latex, ): - # pool = mp.Pool(cores) + #pool = mp.Pool(cores) results_p = {} """ for r in self.regimes_set: @@ -445,6 +469,7 @@ def ML_Lag_Regimes_Multi( regi_ids, r, w_i[r], + slx_lags, method, epsilon, name_ds, @@ -462,6 +487,7 @@ def ML_Lag_Regimes_Multi( regi_ids, r, w_i[r], + slx_lags, method, epsilon, name_ds, @@ -496,6 +522,7 @@ def ML_Lag_Regimes_Multi( results = {} self.name_y, self.name_x = [], [] counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -528,12 +555,16 @@ def ML_Lag_Regimes_Multi( ] = results[r].e_pred self.name_y += results[r].name_y self.name_x += results[r].name_x + results[r].other_top = _spat_pseudo_r2(results[r]) + results[r].other_top += _nonspat_top(results[r], ml=True) + results[r].other_mid = "" + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x'] * (len(results[r].name_x) - 1) + ['rho'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.multi = results self.chow = REGI.Chow(self) - SUMMARY.ML_Lag_multi( - reg=self, multireg=self.multi, vm=vm, spat_diag=False, regimes=True, w=w - ) + output(reg=self, vm=vm, robust=False, other_end=False, latex=latex) def _work( @@ -542,6 +573,7 @@ def _work( regi_ids, r, w_r, + slx_lags, method, epsilon, name_ds, @@ -553,13 +585,10 @@ def _work( y_r = y[regi_ids[r]] x_r = x[regi_ids[r]] model = BaseML_Lag(y_r, x_r, w_r, method=method, epsilon=epsilon) - model.title = ( - "MAXIMUM LIKELIHOOD SPATIAL LAG - REGIME " - + str(r) - + " (METHOD = " - + method - + ")" - ) + if slx_lags == 0: + model.title = ("MAXIMUM LIKELIHOOD SPATIAL LAG - REGIME "+ str(r)+ " (METHOD = "+ method+ ")") + else: + model.title = ("MAXIMUM LIKELIHOOD SPATIAL DURBIN - REGIME "+ str(r)+ " (METHOD = "+ method+ ")") model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) model.name_x = ["%s_%s" % (str(r), i) for i in name_x] @@ -583,16 +612,16 @@ def _test(): if __name__ == "__main__": _test() import numpy as np - import libpysal + import libpysal as ps - db = libpysal.io.open(libpysal.examples.get_path("baltim.dbf"), "r") + db = ps.io.open(ps.examples.get_path("baltim.dbf"), "r") ds_name = "baltim.dbf" y_name = "PRICE" y = np.array(db.by_col(y_name)).T y.shape = (len(y), 1) x_names = ["NROOM", "NBATH", "PATIO", "FIREPL", "AC", "GAR", "AGE", "LOTSZ", "SQFT"] x = np.array([db.by_col(var) for var in x_names]).T - ww = ps.open(ps.examples.get_path("baltim_q.gal")) + ww = ps.io.open(ps.examples.get_path("baltim_q.gal")) w = ww.read() ww.close() w_name = "baltim_q.gal" @@ -610,7 +639,9 @@ def _test(): name_w=w_name, name_ds=ds_name, regime_lag_sep=True, + regime_err_sep=False, constant_regi="many", name_regimes="CITCOU", ) + print(mllag.output) print(mllag.summary) diff --git a/spreg/ols.py b/spreg/ols.py index eb739230..f22bac19 100644 --- a/spreg/ols.py +++ b/spreg/ols.py @@ -1,13 +1,13 @@ """Ordinary Least Squares regression classes.""" -__author__ = "Luc Anselin luc.anselin@asu.edu, David C. Folch david.folch@asu.edu" +__author__ = "Luc Anselin lanselin@gmail.com, Pedro Amaral pedrovma@gmail.com, David C. Folch david.folch@asu.edu" import numpy as np -import copy as COPY import numpy.linalg as la from . import user_output as USER -from . import summary_output as SUMMARY +from .output import output, _spat_diag_out, _nonspat_mid, _nonspat_top from . import robust as ROBUST -from .utils import spdot, sphstack, RegressionPropsY, RegressionPropsVM, set_warn +from .utils import spdot, RegressionPropsY, RegressionPropsVM, set_warn, get_lags +import pandas as pd __all__ = ["OLS"] @@ -144,6 +144,9 @@ class OLS(BaseOLS): gwk : pysal W object Kernel spatial weights needed for HAC estimation. Note: matrix must have ones along the main diagonal. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SLX type. sig2n_k : boolean If True, then use n-k to estimate sigma^2. If False, use n. nonspat_diag : boolean @@ -171,10 +174,13 @@ class OLS(BaseOLS): Name of kernel weights matrix for use in output name_ds : string Name of dataset for use in output - + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -349,8 +355,9 @@ class OLS(BaseOLS): ready to be printed: >>> print(ols.summary) - REGRESSION - ---------- + REGRESSION RESULTS + ------------------ + SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ----------------------------------------- Data set : columbus @@ -360,7 +367,7 @@ class OLS(BaseOLS): S.D. dependent var : 18.4661 Degrees of Freedom : 46 R-squared : 0.3495 Adjusted R-squared : 0.3212 - Sum squared residual: 10647.015 F-statistic : 12.3582 + Sum squared residual: 10647 F-statistic : 12.3582 Sigma-square : 231.457 Prob(F-statistic) : 5.064e-05 S.E. of regression : 15.214 Log likelihood : -201.368 Sigma-square ML : 217.286 Akaike info criterion : 408.735 @@ -426,6 +433,7 @@ def __init__( w=None, robust=None, gwk=None, + slx_lags = 0, sig2n_k=True, nonspat_diag=True, spat_diag=False, @@ -437,34 +445,57 @@ def __init__( name_w=None, name_gwk=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) - USER.check_weights(w, y) USER.check_robust(robust, gwk) + if robust == "hac" and spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. Hence, spatial diagnostics have been disabled for this model.", + ) + spat_diag = False + if robust in ["hac", "white"] and white_test: + set_warn( + self, + "White test not available when standard errors are estimated by HAC or White correction.", + ) + white_test = False USER.check_spat_diag(spat_diag, w) x_constant, name_x, warn = USER.check_constant(x, name_x) + self.name_x = USER.set_name_x(name_x, x_constant) + if slx_lags >0: + USER.check_weights(w, y, w_required=True) + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + self.name_x += USER.set_name_spatial_lags(self.name_x[1:], slx_lags) + else: + USER.check_weights(w, y, w_required=False) set_warn(self, warn) BaseOLS.__init__( self, y=y, x=x_constant, robust=robust, gwk=gwk, sig2n_k=sig2n_k ) - self.title = "ORDINARY LEAST SQUARES" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) - self.name_x = USER.set_name_x(name_x, x_constant) + self.title = "ORDINARY LEAST SQUARES" + if slx_lags > 0: + self.title += " WITH SPATIALLY LAGGED X (SLX)" self.robust = USER.set_robust(robust) self.name_w = USER.set_name_w(name_w, w) self.name_gwk = USER.set_name_w(name_gwk, gwk) - SUMMARY.OLS( - reg=self, - vm=vm, - w=w, - nonspat_diag=nonspat_diag, - spat_diag=spat_diag, - moran=moran, - white_test=white_test, - ) + self.output = pd.DataFrame(self.name_x, columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top, self.other_mid, other_end = ("", "", "") # strings where function-specific diag. are stored + if nonspat_diag: + self.other_mid += _nonspat_mid(self, white_test=white_test) + self.other_top += _nonspat_top(self) + if spat_diag: + other_end += _spat_diag_out(self, w, 'ols', moran=moran) + output(reg=self, vm=vm, robust=robust, other_end=other_end, latex=latex) + def _test(): @@ -505,4 +536,5 @@ def _test(): sig2n_k=True, moran=True, ) + print(ols.output) print(ols.summary) diff --git a/spreg/ols_regimes.py b/spreg/ols_regimes.py index bf06f1f2..20b2acea 100755 --- a/spreg/ols_regimes.py +++ b/spreg/ols_regimes.py @@ -2,23 +2,20 @@ Ordinary Least Squares regression with regimes. """ -__author__ = "Luc Anselin luc.anselin@asu.edu, Pedro V. Amaral pedro.amaral@asu.edu, Daniel Arribas-Bel darribas@asu.edu" +__author__ = "Luc Anselin, Pedro V. Amaral, Daniel Arribas-Bel" +import numpy as np +import multiprocessing as mp +import pandas as pd from . import regimes as REGI from . import user_output as USER +from .utils import set_warn, RegressionProps_basic, spdot, RegressionPropsY, get_lags from .ols import BaseOLS -from .utils import set_warn, spbroadcast, RegressionProps_basic, RegressionPropsY, spdot from .robust import hac_multi -from . import summary_output as SUMMARY -import numpy as np -import multiprocessing as mp -from platform import system -import scipy.sparse as SP -import copy as COPY +from .output import output, _spat_diag_out, _nonspat_mid, _nonspat_top class OLS_Regimes(BaseOLS, REGI.Regimes_Frame, RegressionPropsY): - """ Ordinary least squares with results and diagnostics. @@ -43,6 +40,10 @@ class OLS_Regimes(BaseOLS, REGI.Regimes_Frame, RegressionPropsY): gwk : pysal W object Kernel spatial weights needed for HAC estimation. Note: matrix must have ones along the main diagonal. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SLX type. + Note: WX is computed using the complete weights matrix sig2n_k : boolean If True, then use n-k to estimate sigma^2. If False, use n. nonspat_diag : boolean @@ -92,10 +93,13 @@ class OLS_Regimes(BaseOLS, REGI.Regimes_Frame, RegressionPropsY): Name of dataset for use in output name_regimes : string Name of regime variable for use in the output - + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -307,7 +311,7 @@ class OLS_Regimes(BaseOLS, REGI.Regimes_Frame, RegressionPropsY): >>> y_var = 'HR90' >>> y = db.by_col(y_var) - >>> y = np.array(y).reshape(len(y), 1) + >>> y = np.array(y) Extract UE90 (unemployment rate) and PS90 (population structure) vectors from the DBF to be used as independent variables in the regression. Other variables @@ -327,58 +331,122 @@ class OLS_Regimes(BaseOLS, REGI.Regimes_Frame, RegressionPropsY): We can now run the regression and then have a summary of the output by typing: olsr.summary - Alternatively, we can just check the betas and standard errors of the - parameters: >>> olsr = OLS_Regimes(y, x, regimes, nonspat_diag=False, name_y=y_var, name_x=['PS90','UE90'], name_regimes=r_var, name_ds='NAT') - >>> olsr.betas - array([[0.39642899], - [0.65583299], - [0.48703937], - [5.59835 ], - [1.16210453], - [0.53163886]]) - >>> np.sqrt(olsr.vm.diagonal()) - array([0.24816345, 0.09662678, 0.03628629, 0.46894564, 0.21667395, - 0.05945651]) - >>> olsr.cols2regi - 'all' + >>> print(olsr.summary) + REGRESSION RESULTS + ------------------ + + SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 0 + --------------------------------------------------------------- + Data set : NAT + Weights matrix : None + Dependent Variable : 0_HR90 Number of Observations: 1673 + Mean dependent var : 3.3416 Number of Variables : 3 + S.D. dependent var : 4.6795 Degrees of Freedom : 1670 + R-squared : 0.1271 + Adjusted R-squared : 0.1260 + + ------------------------------------------------------------------------------------ + Variable Coefficient Std.Error t-Statistic Probability + ------------------------------------------------------------------------------------ + 0_CONSTANT 0.3964290 0.2481634 1.5974512 0.1103544 + 0_PS90 0.6558330 0.0966268 6.7872800 0.0000000 + 0_UE90 0.4870394 0.0362863 13.4221336 0.0000000 + ------------------------------------------------------------------------------------ + Regimes variable: SOUTH + + SUMMARY OF OUTPUT: ORDINARY LEAST SQUARES ESTIMATION - REGIME 1 + --------------------------------------------------------------- + Data set : NAT + Weights matrix : None + Dependent Variable : 1_HR90 Number of Observations: 1412 + Mean dependent var : 9.5493 Number of Variables : 3 + S.D. dependent var : 7.0389 Degrees of Freedom : 1409 + R-squared : 0.0661 + Adjusted R-squared : 0.0647 + + ------------------------------------------------------------------------------------ + Variable Coefficient Std.Error t-Statistic Probability + ------------------------------------------------------------------------------------ + 1_CONSTANT 5.5983500 0.4689456 11.9381640 0.0000000 + 1_PS90 1.1621045 0.2166740 5.3633790 0.0000001 + 1_UE90 0.5316389 0.0594565 8.9416422 0.0000000 + ------------------------------------------------------------------------------------ + Regimes variable: SOUTH + ------------------------------------------------------------------------------------ + GLOBAL DIAGNOSTICS + + REGIMES DIAGNOSTICS - CHOW TEST + VARIABLE DF VALUE PROB + CONSTANT 1 96.129 0.0000 + PS90 1 4.554 0.0328 + UE90 1 0.410 0.5220 + Global test 3 680.960 0.0000 + ================================ END OF REPORT ===================================== """ def __init__( - self, - y, - x, - regimes, - w=None, - robust=None, - gwk=None, - sig2n_k=True, - nonspat_diag=True, - spat_diag=False, - moran=False, - white_test=False, - vm=False, - constant_regi="many", - cols2regi="all", - regime_err_sep=True, - cores=False, - name_y=None, - name_x=None, - name_regimes=None, - name_w=None, - name_gwk=None, - name_ds=None, + self, + y, + x, + regimes, + w=None, + robust=None, + gwk=None, + slx_lags=0, + sig2n_k=True, + nonspat_diag=True, + spat_diag=False, + moran=False, + white_test=False, + vm=False, + constant_regi="many", + cols2regi="all", + regime_err_sep=True, + cores=False, + name_y=None, + name_x=None, + name_regimes=None, + name_w=None, + name_gwk=None, + name_ds=None, + latex=False ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) - USER.check_weights(w, y) USER.check_robust(robust, gwk) + if robust == "hac": + if regime_err_sep: + set_warn( + self, + "Error by regimes is not available for HAC estimation. The error by regimes has been disabled for this model.", + ) + regime_err_sep = False + if spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. The spatial diagnostics have been disabled for this model.", + ) + spat_diag = False + if robust in ["hac", "white"] and white_test: + set_warn( + self, + "White test not available when standard errors are estimated by HAC or White correction.", + ) + white_test = False USER.check_spat_diag(spat_diag, w) x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) - set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + if slx_lags > 0: + USER.check_weights(w, y, w_required=True) + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + else: + USER.check_weights(w, y, w_required=False) + set_warn(self, warn) self.name_x_r = USER.set_name_x(name_x, x_constant) self.constant_regi = constant_regi self.cols2regi = cols2regi @@ -394,17 +462,11 @@ def __init__( self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, self.n, x_constant.shape[1]) - if regime_err_sep == True and robust == "hac": - set_warn( - self, - "Error by regimes is incompatible with HAC estimation. Hence, error by regimes has been disabled for this model.", - ) - regime_err_sep = False self.regime_err_sep = regime_err_sep if ( - regime_err_sep == True - and set(cols2regi) == set([True]) - and constant_regi == "many" + regime_err_sep == True + and set(cols2regi) == set([True]) + and constant_regi == "many" ): self.y = y regi_ids = dict( @@ -416,6 +478,7 @@ def __init__( regi_ids, cores, gwk, + slx_lags, sig2n_k, robust, nonspat_diag, @@ -424,11 +487,19 @@ def __init__( name_x, moran, white_test, + latex ) else: - x, self.name_x = REGI.Regimes_Frame.__init__( - self, x_constant, regimes, constant_regi, cols2regi, name_x + x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( + self, x_constant, regimes, constant_regi, cols2regi, name_x, rlist=True ) + + self.output = pd.DataFrame(self.name_x, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + self.output['regime'] = x_rlist + self.output['equation'] = 0 + BaseOLS.__init__(self, y=y, x=x, robust=robust, gwk=gwk, sig2n_k=sig2n_k) if regime_err_sep == True and robust == None: y2, x2 = REGI._get_weighted_var( @@ -439,41 +510,45 @@ def __init__( self.title = ( "ORDINARY LEAST SQUARES - REGIMES (Group-wise heteroskedasticity)" ) + if slx_lags > 0: + self.title = "ORDINARY LEAST SQUARES WITH SLX - REGIMES (Group-wise heteroskedasticity)" nonspat_diag = None set_warn( self, "Residuals treated as homoskedastic for the purpose of diagnostics.", ) else: - self.title = "ORDINARY LEAST SQUARES - REGIMES" + if slx_lags == 0: + self.title = "ORDINARY LEAST SQUARES - REGIMES" + else: + self.title = "ORDINARY LEAST SQUARES WITH SLX - REGIMES" self.robust = USER.set_robust(robust) self.chow = REGI.Chow(self) - SUMMARY.OLS( - reg=self, - vm=vm, - w=w, - nonspat_diag=nonspat_diag, - spat_diag=spat_diag, - moran=moran, - white_test=white_test, - regimes=True, - ) + self.other_top, self.other_mid, other_end = ("", "", "") # strings where function-specific diag. are stored + if nonspat_diag: + self.other_mid += _nonspat_mid(self, white_test=white_test) + self.other_top += _nonspat_top(self) + if spat_diag: + other_end += _spat_diag_out(self, w, 'ols', moran=moran) + output(reg=self, vm=vm, robust=robust, other_end=other_end, latex=latex) def _ols_regimes_multi( - self, - x, - w, - regi_ids, - cores, - gwk, - sig2n_k, - robust, - nonspat_diag, - spat_diag, - vm, - name_x, - moran, - white_test, + self, + x, + w, + regi_ids, + cores, + gwk, + slx_lags, + sig2n_k, + robust, + nonspat_diag, + spat_diag, + vm, + name_x, + moran, + white_test, + latex ): results_p = {} """ @@ -506,6 +581,7 @@ def _ols_regimes_multi( name_x, self.name_w, self.name_regimes, + slx_lags ), ) else: @@ -523,6 +599,7 @@ def _ols_regimes_multi( name_x, self.name_w, self.name_regimes, + slx_lags ) ) self.kryd = 0 @@ -545,6 +622,7 @@ def _ols_regimes_multi( results = {} self.name_y, self.name_x = [], [] counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -558,11 +636,11 @@ def _ols_regimes_multi( results[r] = results_p[r].get() self.vm[ - (counter * self.kr) : ((counter + 1) * self.kr), - (counter * self.kr) : ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), ] = results[r].vm self.betas[ - (counter * self.kr) : ((counter + 1) * self.kr), + (counter * self.kr): ((counter + 1) * self.kr), ] = results[r].betas self.u[ regi_ids[r], @@ -572,25 +650,24 @@ def _ols_regimes_multi( ] = results[r].predy self.name_y += results[r].name_y self.name_x += results[r].name_x + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x, + 'var_type': ['x']*len(results[r].name_x), + 'regime': r, 'equation': r})], ignore_index=True) + results[r].other_top, results[r].other_mid = ("", "") + if nonspat_diag: + results[r].other_mid += _nonspat_mid(results[r], white_test=white_test) + results[r].other_top += _nonspat_top(results[r]) counter += 1 self.multi = results self.hac_var = x_constant[:, 1:] if robust == "hac": hac_multi(self, gwk) self.chow = REGI.Chow(self) + other_end = "" if spat_diag: self._get_spat_diag_props(x_constant, sig2n_k) - SUMMARY.OLS_multi( - reg=self, - multireg=self.multi, - vm=vm, - nonspat_diag=nonspat_diag, - spat_diag=spat_diag, - moran=moran, - white_test=white_test, - regimes=True, - w=w, - ) + other_end += _spat_diag_out(self, w, 'ols', moran=moran) + output(reg=self, vm=vm, robust=robust, other_end=other_end, latex=latex) def _get_spat_diag_props(self, x, sig2n_k): self.k = self.kr @@ -603,7 +680,7 @@ def _get_spat_diag_props(self, x, sig2n_k): def _work( - y, x, w, regi_ids, r, robust, sig2n_k, name_ds, name_y, name_x, name_w, name_regimes + y, x, w, regi_ids, r, robust, sig2n_k, name_ds, name_y, name_x, name_w, name_regimes, slx_lags ): y_r = y[regi_ids[r]] x_r = x[regi_ids[r]] @@ -612,7 +689,10 @@ def _work( if robust == "hac": robust = None model = BaseOLS(y_r, x_r, robust=robust, sig2n_k=sig2n_k) - model.title = "ORDINARY LEAST SQUARES ESTIMATION - REGIME %s" % r + if slx_lags == 0: + model.title = "ORDINARY LEAST SQUARES ESTIMATION - REGIME %s" % r + else: + model.title = "ORDINARY LEAST SQUARES ESTIMATION WITH SLX - REGIME %s" % r model.robust = USER.set_robust(robust) model.name_ds = name_ds model.name_y = "%s_%s" % (str(r), name_y) @@ -639,32 +719,35 @@ def _test(): _test() import numpy as np import libpysal + import pysal db = libpysal.io.open(libpysal.examples.get_path("NAT.dbf"), "r") - y_var = "CRIME" - y = np.array([db.by_col(y_var)]).reshape(49, 1) - x_var = ["INC", "HOVAL"] + y_var = "HR90" + y = np.array(db.by_col(y_var)).reshape(-1,1) + x_var = ['PS90','UE90'] x = np.array([db.by_col(name) for name in x_var]).T - r_var = "NSA" + r_var = "SOUTH" regimes = db.by_col(r_var) - w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("NAT.shp")) w.transform = "r" + #olsr = pysal.model.spreg.OLS_Regimes( olsr = OLS_Regimes( - y, + y, x, regimes, w=w, constant_regi="many", - nonspat_diag=False, - spat_diag=False, + nonspat_diag=True, + spat_diag=True, name_y=y_var, - name_x=["INC", "HOVAL"], - name_ds="columbus", + name_x=x_var, + name_ds="NAT", name_regimes=r_var, - name_w="columbus.gal", regime_err_sep=True, cols2regi=[True, True], - sig2n_k=True, - robust="white", + sig2n_k=False, + white_test=True, + #robust="white" ) + print(olsr.output) print(olsr.summary) diff --git a/spreg/output.py b/spreg/output.py new file mode 100644 index 00000000..c871c842 --- /dev/null +++ b/spreg/output.py @@ -0,0 +1,476 @@ +"""Internal helper files for user output.""" + +__author__ = "Luc Anselin, Pedro V. Amaral" + +import textwrap as TW +import numpy as np +import pandas as pd +from . import diagnostics as diagnostics +from . import diagnostics_tsls as diagnostics_tsls +from . import diagnostics_sp as diagnostics_sp + +__all__ = [] + +############################################################################### +############### Primary functions for running summary diagnostics ############# +############################################################################### + +def output(reg, vm, other_end=False, robust=False, latex=False): + strSummary = output_start(reg) + for eq in reg.output['equation'].unique(): + try: + reg.multi[eq].__summary = {} + strSummary, reg.multi[eq] = out_part_top(strSummary, reg, eq) + except: + eq = None + strSummary, reg = out_part_top(strSummary, reg, eq) + strSummary, reg = out_part_middle(strSummary, reg, robust, m=eq) + strSummary, reg = out_part_end(strSummary, reg, vm, other_end, m=eq) + reg.summary = strSummary + reg.output.sort_values(by=['equation', 'regime'], inplace=True) + reg.output.drop(['var_type', 'regime', 'equation'], axis=1, inplace=True) + +def output_start(reg): + reg.__summary = {} + strSummary = "REGRESSION RESULTS\n" + strSummary += "------------------\n" + reg.output = reg.output.assign(coefficients=[None] * len(reg.output), std_err=[None] * len(reg.output), + zt_stat=[None] * len(reg.output), prob=[None] * len(reg.output)) + return strSummary + +def out_part_top(strSummary, reg, m): + # Top part of summary output. + # m = None for single models, m = 1,2,3... for multiple equation models + if m == None: + _reg = reg # _reg = local object with regression results + else: + _reg = reg.multi[m] # _reg = local object with equation specific regression results + title = "\nSUMMARY OF OUTPUT: " + _reg.title + "\n" + strSummary += title + strSummary += "-" * (len(title) - 2) + "\n" + strSummary += "%-20s:%12s\n" % ("Data set", _reg.name_ds) + try: + strSummary += "%-20s:%12s\n" % ("Weights matrix", _reg.name_w) + except: + pass + + strSummary += "%-20s:%12s %-22s:%12d\n" % ( + "Dependent Variable", + _reg.name_y, + "Number of Observations", + _reg.n, + ) + + strSummary += "%-20s:%12.4f %-22s:%12d\n" % ( + "Mean dependent var", + _reg.mean_y, + "Number of Variables", + _reg.k, + ) + strSummary += "%-20s:%12.4f %-22s:%12d\n" % ( + "S.D. dependent var", + _reg.std_y, + "Degrees of Freedom", + _reg.n - _reg.k, + ) + + _reg.std_err = diagnostics.se_betas(_reg) + if 'OLS' in reg.__class__.__name__: + _reg.t_stat = diagnostics.t_stat(_reg) + _reg.r2 = diagnostics.r2(_reg) + _reg.ar2 = diagnostics.ar2(_reg) + strSummary += "%-20s:%12.4f\n%-20s:%12.4f\n" % ( + "R-squared", + _reg.r2, + "Adjusted R-squared", + _reg.ar2, + ) + _reg.__summary["summary_zt"] = "t" + + else: + _reg.z_stat = diagnostics.t_stat(_reg, z_stat=True) + _reg.pr2 = diagnostics_tsls.pr2_aspatial(_reg) + strSummary += "%-20s:%12.4f\n" % ("Pseudo R-squared", _reg.pr2) + _reg.__summary["summary_zt"] = "z" + + try: # Adding additional top part if there is one + strSummary += _reg.other_top + except: + pass + + return (strSummary, _reg) + +def out_part_middle(strSummary, reg, robust, m=None): + # Middle part of summary output. + # m = None for single models, m = 1,2,3... for multiple equation models + if m==None: + _reg = reg #_reg = local object with regression results + m = reg.output['equation'].unique()[0] + else: + _reg = reg.multi[m] #_reg = local object with equation specific regression results + coefs = pd.DataFrame(_reg.betas, columns=['coefficients']) + coefs['std_err'] = pd.DataFrame(_reg.std_err) + try: + coefs = pd.concat([coefs, pd.DataFrame(_reg.z_stat, columns=['zt_stat', 'prob'])], axis=1) + except AttributeError: + coefs = pd.concat([coefs, pd.DataFrame(_reg.t_stat, columns=['zt_stat', 'prob'])], axis=1) + coefs.index = reg.output[reg.output['equation'] == m].index + reg.output.update(coefs) + strSummary += "\n" + if robust: + if robust == "white": + strSummary += "White Standard Errors\n" + elif robust == "hac": + strSummary += "HAC Standard Errors; Kernel Weights: " + _reg.name_gwk + "\n" + elif robust == "ogmm": + strSummary += "Optimal GMM used to estimate the coefficients and the variance-covariance matrix\n" + strSummary += "------------------------------------------------------------------------------------\n" + strSummary += ( + " Variable Coefficient Std.Error %1s-Statistic Probability\n" + % (_reg.__summary["summary_zt"]) + ) + strSummary += "------------------------------------------------------------------------------------\n" + m_output = reg.output[reg.output['equation'] == m] + for row in m_output.iloc[np.lexsort((m_output.index, m_output['regime']))].itertuples(): + try: + strSummary += "%20s %12.5f %12.5f %12.5f %12.5f\n" % ( + row.var_names, + row.coefficients, + row.std_err, + row.zt_stat, + row.prob + ) + except TypeError: # special case for models that do not have inference on the lambda term + strSummary += "%20s %12.5f \n" % ( + row.var_names, + row.coefficients + ) + strSummary += "------------------------------------------------------------------------------------\n" + + try: # Adding info on instruments if they are present + name_q = _reg.name_q + name_yend = _reg.name_yend + insts = "Instruments: " + for name in sorted(name_q): + insts += name + ", " + text_wrapper = TW.TextWrapper(width=76, subsequent_indent=" ") + insts = text_wrapper.fill(insts[:-2]) + insts += "\n" + inst2 = "Instrumented: " + for name in sorted(name_yend): + inst2 += name + ", " + text_wrapper = TW.TextWrapper(width=76, subsequent_indent=" ") + inst2 = text_wrapper.fill(inst2[:-2]) + inst2 += "\n" + inst2 += insts + strSummary += inst2 + except: + pass + + try: # Adding info on regimes if they are present + strSummary += ("Regimes variable: %s\n" % _reg.name_regimes) + strSummary += _summary_chow(_reg) # If local regimes present, compute Chow test. + except: + pass + + try: # Adding local warning if there is one + if _reg.warning: + strSummary += _reg.warning + except: + pass + + try: # Adding other middle part if there are any + strSummary += _reg.other_mid + except: + pass + + return (strSummary, reg) + +def out_part_end(strSummary, reg, vm, other_end, m=None): + if m is not None: + strSummary += "------------------------------------------------------------------------------------\n" + try: # Adding global warning if there is one + strSummary += reg.warning + except: + pass + strSummary += "\nGLOBAL DIAGNOSTICS\n" + try: # Adding global Chow test if there is one + strSummary += _summary_chow(reg) + except: + pass + if other_end: + strSummary += other_end + if vm: + strSummary += _summary_vm(reg) + strSummary += "================================ END OF REPORT =====================================" + return (strSummary, reg) + +def _summary_chow(reg): + sum_text = "\nREGIMES DIAGNOSTICS - CHOW TEST" + name_x_r = reg.name_x_r + joint, regi = reg.chow.joint, reg.chow.regi + sum_text += "\n VARIABLE DF VALUE PROB\n" + if reg.cols2regi == "all": + names_chow = name_x_r[1:] + else: + names_chow = [name_x_r[1:][i] for i in np.where(reg.cols2regi)[0]] + if reg.constant_regi == "many": + names_chow = ["CONSTANT"] + names_chow + + if 'lambda' in reg.output.var_type.values: + if reg.output.var_type.value_counts()['lambda'] > 1: + names_chow += ["lambda"] + + reg.output_chow = pd.DataFrame() + reg.output_chow['var_names'] = names_chow + reg.output_chow['df'] = reg.nr - 1 + reg.output_chow = pd.concat([reg.output_chow, pd.DataFrame(regi, columns=['value', 'prob'])], axis=1) + reg.output_chow = pd.concat([reg.output_chow, pd.DataFrame([{'var_names': 'Global test', + 'df': reg.kr * (reg.nr - 1), + 'value': joint[0], 'prob': joint[1]}])], ignore_index=True) + for row in reg.output_chow.itertuples(): + sum_text += "%25s %2d %12.3f %9.4f\n" % ( + row.var_names, + row.df, + row.value, + row.prob + ) + + return sum_text + + +def _spat_diag_out(reg, w, type, moran=False): + strSummary = "\nDIAGNOSTICS FOR SPATIAL DEPENDENCE\n" + if not moran: + strSummary += ( + "TEST DF VALUE PROB\n" + ) + else: + strSummary += ( + "TEST MI/DF VALUE PROB\n" + ) + + cache = diagnostics_sp.spDcache(reg, w) + if type == "yend": + mi, ak, ak_p = diagnostics_sp.akTest(reg, w, cache) + reg.ak_test = ak, ak_p + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Anselin-Kelejian Test", + 1, + reg.ak_test[0], + reg.ak_test[1], + ) + elif type == "ols": + lm_tests = diagnostics_sp.LMtests(reg, w) + reg.lm_error = lm_tests.lme + reg.lm_lag = lm_tests.lml + reg.rlm_error = lm_tests.rlme + reg.rlm_lag = lm_tests.rlml + reg.lm_sarma = lm_tests.sarma + if moran: + moran_res = diagnostics_sp.MoranRes(reg, w, z=True) + reg.moran_res = moran_res.I, moran_res.zI, moran_res.p_norm + strSummary += "%-27s %8.4f %9.3f %9.4f\n" % ( + "Moran's I (error)", + reg.moran_res[0], + reg.moran_res[1], + reg.moran_res[2], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Lagrange Multiplier (lag)", + 1, + reg.lm_lag[0], + reg.lm_lag[1], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Robust LM (lag)", + 1, + reg.rlm_lag[0], + reg.rlm_lag[1], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Lagrange Multiplier (error)", + 1, + reg.lm_error[0], + reg.lm_error[1], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Robust LM (error)", + 1, + reg.rlm_error[0], + reg.rlm_error[1], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n\n" % ( + "Lagrange Multiplier (SARMA)", + 2, + reg.lm_sarma[0], + reg.lm_sarma[1], + ) + return strSummary + +def _nonspat_top(reg, ml=False): + if not ml: + reg.sig2ML = reg.sig2n + reg.f_stat = diagnostics.f_stat(reg) + reg.logll = diagnostics.log_likelihood(reg) + reg.aic = diagnostics.akaike(reg) + reg.schwarz = diagnostics.schwarz(reg) + + strSummary = "%-20s:%12.6g %-22s:%12.4f\n" % ( + "Sum squared residual", reg.utu, "F-statistic", reg.f_stat[0],) + strSummary += "%-20s:%12.3f %-22s:%12.4g\n" % ( + "Sigma-square", + reg.sig2, + "Prob(F-statistic)", + reg.f_stat[1], + ) + strSummary += "%-20s:%12.3f %-22s:%12.3f\n" % ( + "S.E. of regression", + np.sqrt(reg.sig2), + "Log likelihood", + reg.logll, + ) + strSummary += "%-20s:%12.3f %-22s:%12.3f\n" % ( + "Sigma-square ML", + reg.sig2ML, + "Akaike info criterion", + reg.aic, + ) + strSummary += "%-20s:%12.4f %-22s:%12.3f\n" % ( + "S.E of regression ML", + np.sqrt(reg.sig2ML), + "Schwarz criterion", + reg.schwarz, + ) + else: + strSummary = "%-20s:%12.4f\n" % ( + "Log likelihood", + reg.logll, + ) + strSummary += "%-20s:%12.4f %-22s:%12.3f\n" % ( + "Sigma-square ML", + reg.sig2, + "Akaike info criterion", + reg.aic, + ) + strSummary += "%-20s:%12.4f %-22s:%12.3f\n" % ( + "S.E of regression", + np.sqrt(reg.sig2), + "Schwarz criterion", + reg.schwarz, + ) + + return strSummary + +def _nonspat_mid(reg, white_test=False): + # compute diagnostics + reg.mulColli = diagnostics.condition_index(reg) + reg.jarque_bera = diagnostics.jarque_bera(reg) + reg.breusch_pagan = diagnostics.breusch_pagan(reg) + reg.koenker_bassett = diagnostics.koenker_bassett(reg) + + if white_test: + reg.white = diagnostics.white(reg) + + strSummary = "\nREGRESSION DIAGNOSTICS\n" + if reg.mulColli: + strSummary += "MULTICOLLINEARITY CONDITION NUMBER %16.3f\n\n" % (reg.mulColli) + strSummary += "TEST ON NORMALITY OF ERRORS\n" + strSummary += "TEST DF VALUE PROB\n" + strSummary += "%-27s %2d %14.3f %9.4f\n\n" % ( + "Jarque-Bera", + reg.jarque_bera["df"], + reg.jarque_bera["jb"], + reg.jarque_bera["pvalue"], + ) + strSummary += "DIAGNOSTICS FOR HETEROSKEDASTICITY\n" + strSummary += "RANDOM COEFFICIENTS\n" + strSummary += "TEST DF VALUE PROB\n" + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Breusch-Pagan test", + reg.breusch_pagan["df"], + reg.breusch_pagan["bp"], + reg.breusch_pagan["pvalue"], + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "Koenker-Bassett test", + reg.koenker_bassett["df"], + reg.koenker_bassett["kb"], + reg.koenker_bassett["pvalue"], + ) + try: + if reg.white: + strSummary += "\nSPECIFICATION ROBUST TEST\n" + if len(reg.white) > 3: + strSummary += reg.white + "\n" + else: + strSummary += ( + "TEST DF VALUE PROB\n" + ) + strSummary += "%-27s %2d %12.3f %9.4f\n" % ( + "White", + reg.white["df"], + reg.white["wh"], + reg.white["pvalue"], + ) + except: + pass + return strSummary + +def _spat_pseudo_r2(reg): + if np.abs(reg.rho) < 1: + reg.pr2_e = diagnostics_tsls.pr2_spatial(reg) + strSummary = "%-20s: %5.4f\n" % ("Spatial Pseudo R-squared", reg.pr2_e) + else: + strSummary = "Spatial Pseudo R-squared: omitted due to rho outside the boundary (-1, 1).\n" + return strSummary + +def _summary_vm(reg): + strVM = "\n" + strVM += "COEFFICIENTS VARIANCE MATRIX\n" + strVM += "----------------------------\n" + try: + for name in reg.name_z: + strVM += "%12s" % (name) + except: + for name in reg.name_x: + strVM += "%12s" % (name) + strVM += "\n" + nrow = reg.vm.shape[0] + ncol = reg.vm.shape[1] + for i in range(nrow): + for j in range(ncol): + strVM += "%12.6f" % (reg.vm[i][j]) + strVM += "\n" + return strVM + +def _summary_iteration(reg): + """Reports the number of iterations computed and the type of estimator used for hom and het models.""" + try: + niter = reg.niter + except: + niter = reg.iteration + + txt = "%-20s:%12s\n" % ("N. of iterations", niter) + + try: + if reg.step1c: + step1c = "Yes" + else: + step1c = "No" + txt = txt[:-1] + " %-22s:%12s\n" % ( + "Step1c computed", + step1c, + ) + except: + pass + + try: + txt = txt[:-1] + " %-22s:%12s" % ( + "A1 type: ", + reg.A1, + ) + except: + pass + + return txt diff --git a/spreg/regimes.py b/spreg/regimes.py index fad91d71..d0c4db06 100755 --- a/spreg/regimes.py +++ b/spreg/regimes.py @@ -3,8 +3,6 @@ import scipy.sparse as SP import itertools as iter from scipy.stats import f, chi2 - -chisqprob = chi2.sf import itertools as iter import numpy.linalg as la from .utils import spbroadcast, set_warn @@ -186,6 +184,10 @@ class Regimes_Frame: If 'all' (default), all the variables vary by regime. names : None, list of strings Names of independent variables for use in output + yend : boolean + If True, the last columns of cols2regi are considered for endogenous variables + rlist : boolean + If True, returns a list with the regimes indicators for each variable Returns ------- @@ -212,7 +214,7 @@ class Regimes_Frame: """ - def __init__(self, x, regimes, constant_regi, cols2regi, names=None, yend=False): + def __init__(self, x, regimes, constant_regi, cols2regi, names=None, yend=False, rlist=False): if cols2regi == "all": cols2regi = [True] * x.shape[1] else: @@ -228,8 +230,8 @@ def __init__(self, x, regimes, constant_regi, cols2regi, names=None, yend=False) cols2regi.insert(0, True) else: raise Exception( - "Invalid argument (%s) passed for 'constant_regi'. Please secify a valid term." - % str(constant) + "Invalid argument (%s) passed for 'constant_regi'. Please specify a valid term." + % str(constant_regi) ) try: x = regimeX_setup( @@ -252,12 +254,18 @@ def __init__(self, x, regimes, constant_regi, cols2regi, names=None, yend=False) self.kryd = 0 self.nr = len(set(regimes)) - if names: - names = set_name_x_regimes( - names, regimes, constant_regi, cols2regi, self.regimes_set - ) - - return (x, names) + if rlist: + if names: + names, r_list = set_name_x_regimes( + names, regimes, constant_regi, cols2regi, self.regimes_set, rlist + ) + return (x, names, r_list) + else: + if names: + names = set_name_x_regimes( + names, regimes, constant_regi, cols2regi, self.regimes_set + ) + return (x, names) def wald_test(betas, r, q, vm): @@ -290,7 +298,7 @@ def wald_test(betas, r, q, vm): rvri = la.inv(np.dot(r, np.dot(vm, r.T))) w = np.dot(rbq.T, np.dot(rvri, rbq))[0][0] df = r.shape[0] - pvalue = chisqprob(w, df) + pvalue = chi2.sf(w, df) return w, pvalue @@ -425,7 +433,7 @@ def regimeX_setup(x, regimes, cols2regi, regimes_set, constant=False): return xsp -def set_name_x_regimes(name_x, regimes, constant_regi, cols2regi, regimes_set): +def set_name_x_regimes(name_x, regimes, constant_regi, cols2regi, regimes_set, rlist=False): """ Generate the set of variable names in a regimes setup, according to the order of the betas @@ -475,11 +483,17 @@ def set_name_x_regimes(name_x, regimes, constant_regi, cols2regi, regimes_set): vars_regi = nxa[np.where(c2ra == True)] vars_glob = nxa[np.where(c2ra == False)] name_x_regi = [] + r_list = [] for r in regimes_set: rl = ["%s_%s" % (str(r), i) for i in vars_regi] name_x_regi.extend(rl) + r_list.extend([str(r)] * len(rl)) name_x_regi.extend(["_Global_%s" % i for i in vars_glob]) - return name_x_regi + r_list.extend(["_Global"] * len(vars_glob)) + if rlist: + return (name_x_regi, r_list) + else: + return name_x_regi def w_regime(w, regi_ids, regi_i, transform=True, min_n=None): diff --git a/spreg/twosls.py b/spreg/twosls.py index 6a6bd68f..0fe355b1 100644 --- a/spreg/twosls.py +++ b/spreg/twosls.py @@ -1,11 +1,12 @@ import numpy as np import numpy.linalg as la -from . import summary_output as SUMMARY from . import robust as ROBUST from . import user_output as USER -from .utils import spdot, sphstack, RegressionPropsY, RegressionPropsVM, set_warn +from .utils import spdot, sphstack, RegressionPropsY, RegressionPropsVM, set_warn, get_lags +import pandas as pd +from .output import output, _spat_diag_out -__author__ = "Luc Anselin luc.anselin@asu.edu, David C. Folch david.folch@asu.edu, Jing Yao jingyao@asu.edu" +__author__ = "Luc Anselin lanselin@gmail.com, Pedro Amaral pedrovma@gmail.com, David C. Folch david.folch@asu.edu, Jing Yao jingyao@asu.edu" __all__ = ["TSLS"] @@ -123,10 +124,8 @@ class BaseTSLS(RegressionPropsY, RegressionPropsVM): >>> q.append(db.by_col("DISCBD")) >>> q = np.array(q).T >>> reg = spreg.twosls.BaseTSLS(y, X, yd, q=q) - >>> print(reg.betas) - [[88.46579584] - [ 0.5200379 ] - [-1.58216593]] + >>> print(reg.betas.T) + [[88.46579584 0.5200379 -1.58216593]] >>> reg = spreg.twosls.BaseTSLS(y, X, yd, q=q, robust="white") """ @@ -248,6 +247,9 @@ class TSLS(BaseTSLS): gwk : pysal W object Kernel spatial weights needed for HAC estimation. Note: matrix must have ones along the main diagonal. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SLX type. sig2n_k : boolean If True, then use n-k to estimate sigma^2. If False, use n. spat_diag : boolean @@ -269,10 +271,13 @@ class TSLS(BaseTSLS): Name of kernel weights matrix for use in output name_ds : string Name of dataset for use in output - + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -423,11 +428,8 @@ class TSLS(BaseTSLS): >>> from spreg import TSLS >>> reg = TSLS(y, X, yd, q, name_x=['inc'], name_y='crime', name_yend=['hoval'], name_q=['discbd'], name_ds='columbus') - >>> print(reg.betas) - [[88.46579584] - [ 0.5200379 ] - [-1.58216593]] - + >>> print(reg.betas.T) + [[88.46579584 0.5200379 -1.58216593]] """ def __init__( @@ -439,6 +441,7 @@ def __init__( w=None, robust=None, gwk=None, + slx_lags=0, sig2n_k=False, spat_diag=False, vm=False, @@ -449,14 +452,28 @@ def __init__( name_w=None, name_gwk=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x, yend, q) y = USER.check_y(y, n) - USER.check_weights(w, y) USER.check_robust(robust, gwk) + if robust == "hac" and spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. The spatial diagnostics have been disabled for this model.", + ) + spat_diag = False USER.check_spat_diag(spat_diag, w) x_constant, name_x, warn = USER.check_constant(x, name_x) + self.name_x = USER.set_name_x(name_x, x_constant) + if slx_lags>0: + USER.check_weights(w, y, w_required=True) + lag_x = get_lags(w, x_constant[:, 1:], slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + self.name_x += USER.set_name_spatial_lags(self.name_x[1:], slx_lags) + else: + USER.check_weights(w, y, w_required=False) set_warn(self, warn) BaseTSLS.__init__( self, @@ -469,9 +486,10 @@ def __init__( sig2n_k=sig2n_k, ) self.title = "TWO STAGE LEAST SQUARES" + if slx_lags > 0: + self.title += " WITH SPATIALLY LAGGED X (2SLS-SLX)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) - self.name_x = USER.set_name_x(name_x, x_constant) self.name_yend = USER.set_name_yend(name_yend, yend) self.name_z = self.name_x + self.name_yend self.name_q = USER.set_name_q(name_q, q) @@ -479,8 +497,15 @@ def __init__( self.robust = USER.set_robust(robust) self.name_w = USER.set_name_w(name_w, w) self.name_gwk = USER.set_name_w(name_gwk, gwk) - SUMMARY.TSLS(reg=self, vm=vm, w=w, spat_diag=spat_diag) - + self.output = pd.DataFrame(self.name_x + self.name_yend, + columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * len(self.name_yend) + self.output['regime'], self.output['equation'] = (0, 0) + if spat_diag: + diag_out = _spat_diag_out(self, w, 'yend') + else: + diag_out = None + output(reg=self, vm=vm, robust=robust, other_end=diag_out, latex=latex) def _test(): import doctest @@ -521,4 +546,5 @@ def _test(): name_ds="columbus", name_w="columbus.gal", ) + print(tsls.output) print(tsls.summary) diff --git a/spreg/twosls_regimes.py b/spreg/twosls_regimes.py index 8c4ddfcb..50a36853 100644 --- a/spreg/twosls_regimes.py +++ b/spreg/twosls_regimes.py @@ -1,19 +1,18 @@ import numpy as np +import multiprocessing as mp +import pandas as pd from . import regimes as REGI from . import user_output as USER -import multiprocessing as mp -import scipy.sparse as SP -from .utils import sphstack, set_warn, RegressionProps_basic, spdot, sphstack +from .utils import set_warn, RegressionProps_basic, spdot, sphstack, get_lags from .twosls import BaseTSLS from .robust import hac_multi -from . import summary_output as SUMMARY -from platform import system +from .output import output, _spat_diag_out """ Two-stage Least Squares estimation with regimes. """ -__author__ = "Luc Anselin luc.anselin@asu.edu, Pedro V. Amaral pedro.amaral@asu.edu, David C. Folch david.folch@asu.edu" +__author__ = "Luc Anselin, Pedro V. Amaral, David C. Folch" class TSLS_Regimes(BaseTSLS, REGI.Regimes_Frame): @@ -65,6 +64,10 @@ class TSLS_Regimes(BaseTSLS, REGI.Regimes_Frame): gwk : pysal W object Kernel spatial weights needed for HAC estimation. Note: matrix must have ones along the main diagonal. + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the SLX type. + Note: WX is computed using the complete weights matrix sig2n_k : boolean If True, then use n-k to estimate sigma^2. If False, use n. vm : boolean @@ -89,9 +92,16 @@ class TSLS_Regimes(BaseTSLS, REGI.Regimes_Frame): Name of kernel weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe + summary : string + Summary of regression results and diagnostics (note: use in + conjunction with the print command) betas : array kx1 array of estimated coefficients u : array @@ -269,6 +279,62 @@ class TSLS_Regimes(BaseTSLS, REGI.Regimes_Frame): array([0.38389901, 0.09963973, 0.04672091, 0.22725012, 0.49181223, 0.19630774, 0.07784587, 0.25529011]) + >>> print(tslsr.summary) + REGRESSION RESULTS + ------------------ + + SUMMARY OF OUTPUT: TWO STAGE LEAST SQUARES ESTIMATION - REGIME 0 + ---------------------------------------------------------------- + Data set : NAT + Weights matrix : NAT.shp + Dependent Variable : 0_HR90 Number of Observations: 1673 + Mean dependent var : 3.3416 Number of Variables : 4 + S.D. dependent var : 4.6795 Degrees of Freedom : 1669 + Pseudo R-squared : 0.2092 + + ------------------------------------------------------------------------------------ + Variable Coefficient Std.Error z-Statistic Probability + ------------------------------------------------------------------------------------ + 0_CONSTANT 3.6697356 0.3838990 9.5591172 0.0000000 + 0_PS90 1.0695047 0.0996397 10.7337170 0.0000000 + 0_UE90 0.1468095 0.0467209 3.1422643 0.0016765 + 0_RD90 2.4586420 0.2272501 10.8191009 0.0000000 + ------------------------------------------------------------------------------------ + Instrumented: 0_RD90 + Instruments: 0_FP89 + Regimes variable: SOUTH + + SUMMARY OF OUTPUT: TWO STAGE LEAST SQUARES ESTIMATION - REGIME 1 + ---------------------------------------------------------------- + Data set : NAT + Weights matrix : NAT.shp + Dependent Variable : 1_HR90 Number of Observations: 1412 + Mean dependent var : 9.5493 Number of Variables : 4 + S.D. dependent var : 7.0389 Degrees of Freedom : 1408 + Pseudo R-squared : 0.2987 + + ------------------------------------------------------------------------------------ + Variable Coefficient Std.Error z-Statistic Probability + ------------------------------------------------------------------------------------ + 1_CONSTANT 9.5587324 0.4918122 19.4357356 0.0000000 + 1_PS90 1.9466635 0.1963077 9.9163867 0.0000000 + 1_UE90 -0.3081021 0.0778459 -3.9578483 0.0000756 + 1_RD90 3.6871812 0.2552901 14.4431026 0.0000000 + ------------------------------------------------------------------------------------ + Instrumented: 1_RD90 + Instruments: 1_FP89 + Regimes variable: SOUTH + ------------------------------------------------------------------------------------ + GLOBAL DIAGNOSTICS + + REGIMES DIAGNOSTICS - CHOW TEST + VARIABLE DF VALUE PROB + CONSTANT 1 89.093 0.0000 + PS90 1 15.876 0.0001 + UE90 1 25.106 0.0000 + RD90 1 12.920 0.0003 + Global test 4 201.237 0.0000 + ================================ END OF REPORT ===================================== """ def __init__( @@ -281,6 +347,7 @@ def __init__( w=None, robust=None, gwk=None, + slx_lags=0, sig2n_k=True, spat_diag=False, vm=False, @@ -297,16 +364,36 @@ def __init__( name_gwk=None, name_ds=None, summ=True, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) - USER.check_weights(w, y) USER.check_robust(robust, gwk) + if robust == "hac": + if regime_err_sep: + set_warn( + self, + "Error by regimes is not available for HAC estimation. The error by regimes has been disabled for this model.", + ) + regime_err_sep = False + if spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. The spatial diagnostics have been disabled for this model.", + ) + spat_diag = False USER.check_spat_diag(spat_diag, w) x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) name_x = USER.set_name_x(name_x, x_constant, constant=True) + if slx_lags > 0: + USER.check_weights(w, y, w_required=True) + lag_x = get_lags(w, x_constant, slx_lags) + x_constant = np.hstack((x_constant, lag_x)) + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + else: + USER.check_weights(w, y, w_required=False) self.constant_regi = constant_regi self.cols2regi = cols2regi self.name_ds = USER.set_name_ds(name_ds) @@ -324,12 +411,6 @@ def __init__( self.regimes_set = REGI._get_regimes_set(regimes) self.regimes = regimes USER.check_regimes(self.regimes_set, self.n, x_constant.shape[1]) - if regime_err_sep == True and robust == "hac": - set_warn( - self, - "Error by regimes is incompatible with HAC estimation for 2SLS models. Hence, the error by regimes has been disabled for this model.", - ) - regime_err_sep = False self.regime_err_sep = regime_err_sep if ( regime_err_sep == True @@ -348,6 +429,7 @@ def __init__( regi_ids, cores, gwk, + slx_lags, sig2n_k, robust, spat_diag, @@ -355,20 +437,23 @@ def __init__( name_x, name_yend, name_q, + summ, + latex ) else: q, self.name_q = REGI.Regimes_Frame.__init__( self, q, regimes, constant_regi=None, cols2regi="all", names=name_q ) - x, self.name_x = REGI.Regimes_Frame.__init__( + x, self.name_x, x_rlist = REGI.Regimes_Frame.__init__( self, x_constant, regimes, constant_regi, cols2regi=cols2regi, names=name_x, + rlist=True ) - yend, self.name_yend = REGI.Regimes_Frame.__init__( + yend, self.name_yend, yend_rlist = REGI.Regimes_Frame.__init__( self, yend, regimes, @@ -376,13 +461,23 @@ def __init__( cols2regi=cols2regi, yend=True, names=name_yend, + rlist=True ) - if regime_err_sep == True and robust == None: - robust = "white" + self.output = pd.DataFrame(self.name_x+self.name_yend, + columns=['var_names']) + self.output['var_type'] = ['x']*len(self.name_x)+['yend']*len(self.name_yend) + self.output['regime'] = x_rlist+yend_rlist + self.output['equation'] = 0 + BaseTSLS.__init__( self, y=y, x=x, yend=yend, q=q, robust=robust, gwk=gwk, sig2n_k=sig2n_k ) - self.title = "TWO STAGE LEAST SQUARES - REGIMES" + + if slx_lags == 0: + self.title = "TWO STAGE LEAST SQUARES - REGIMES" + else: + self.title = "TWO STAGE LEAST SQUARES WITH SPATIALLY LAGGED X (2SLS-SLX) - REGIMES" + if robust == "ogmm": _optimal_weight(self, sig2n_k) self.name_z = self.name_x + self.name_yend @@ -390,7 +485,12 @@ def __init__( self.chow = REGI.Chow(self) self.robust = USER.set_robust(robust) if summ: - SUMMARY.TSLS(reg=self, vm=vm, w=w, spat_diag=spat_diag, regimes=True) + if spat_diag: + diag_out = _spat_diag_out(self, w, 'yend') + else: + diag_out = None + output(reg=self, vm=vm, robust=robust, other_end=diag_out, latex=latex) + def _tsls_regimes_multi( self, @@ -401,6 +501,7 @@ def _tsls_regimes_multi( regi_ids, cores, gwk, + slx_lags, sig2n_k, robust, spat_diag, @@ -408,6 +509,8 @@ def _tsls_regimes_multi( name_x, name_yend, name_q, + summ, + latex ): results_p = {} """ @@ -421,7 +524,7 @@ def _tsls_regimes_multi( is_win = False """ x_constant, name_x = REGI.check_const_regi(self, x, name_x, regi_ids) - self.name_x_r = name_x + self.name_x_r = name_x + name_yend for r in self.regimes_set: if cores: pool = mp.Pool(None) @@ -444,6 +547,7 @@ def _tsls_regimes_multi( name_q, self.name_w, self.name_regimes, + slx_lags ), ) else: @@ -465,6 +569,7 @@ def _tsls_regimes_multi( name_q, self.name_w, self.name_regimes, + slx_lags ) ) @@ -495,6 +600,7 @@ def _tsls_regimes_multi( self.name_h, ) = ([], [], [], [], [], []) counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -526,8 +632,13 @@ def _tsls_regimes_multi( self.name_q += results[r].name_q self.name_z += results[r].name_z self.name_h += results[r].name_h + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x+results[r].name_yend, + 'var_type': ['x']*len(results[r].name_x)+['yend']*len(results[r].name_yend), + 'regime': r, 'equation': r})], ignore_index=True) + counter += 1 self.multi = results + self.hac_var = sphstack(x_constant[:, 1:], q) if robust == "hac": hac_multi(self, gwk) @@ -539,9 +650,12 @@ def _tsls_regimes_multi( self.chow = REGI.Chow(self) if spat_diag: self._get_spat_diag_props(results, regi_ids, x_constant, yend, q) - SUMMARY.TSLS_multi( - reg=self, multireg=self.multi, vm=vm, spat_diag=spat_diag, regimes=True, w=w - ) + diag_out = _spat_diag_out(self, w, 'yend') + else: + diag_out = None + if summ: + self.output.sort_values(by='regime', inplace=True) + output(reg=self, vm=vm, robust=robust, other_end=diag_out, latex=latex) def _get_spat_diag_props(self, results, regi_ids, x, yend, q): self._cache = {} @@ -578,6 +692,7 @@ def _work( name_q, name_w, name_regimes, + slx_lags, ): y_r = y[regi_ids[r]] x_r = x[regi_ids[r]] @@ -588,7 +703,10 @@ def _work( else: robust2 = robust model = BaseTSLS(y_r, x_r, yend_r, q_r, robust=robust2, sig2n_k=sig2n_k) - model.title = "TWO STAGE LEAST SQUARES ESTIMATION - REGIME %s" % r + if slx_lags == 0: + model.title = "TWO STAGE LEAST SQUARES ESTIMATION - REGIME %s" % r + else: + model.title = "TWO STAGE LEAST SQUARES ESTIMATION WITH SLX - REGIME %s" % r if robust == "ogmm": _optimal_weight(model, sig2n_k, warn=False) model.robust = USER.set_robust(robust) @@ -628,7 +746,7 @@ def _optimal_weight(reg, sig2n_k, warn=True): else: vm = fac2 * reg.n RegressionProps_basic(reg, betas=betas, vm=vm, sig2=False) - reg.title += " (Optimal-Weighted GMM)" + #reg.title += " (Optimal-Weighted GMM)" if warn: set_warn( reg, "Residuals treated as homoskedastic for the purpose of diagnostics." @@ -663,20 +781,31 @@ def _test(): q = np.array([db.by_col(name) for name in q_var]).T r_var = "SOUTH" regimes = db.by_col(r_var) + w = libpysal.weights.Rook.from_shapefile(nat.get_path("natregimes.shp")) + w.transform = "r" tslsr = TSLS_Regimes( y, x, yd, q, regimes, + w = w, constant_regi="many", - spat_diag=False, + spat_diag=True, name_y=y_var, name_x=x_var, name_yend=yd_var, name_q=q_var, name_regimes=r_var, - cols2regi=[False, True, True, True], + #cols2regi=[False, True, True, False], sig2n_k=False, + regime_err_sep = True, + #robust = 'hac', + vm = False ) + print(tslsr.output) print(tslsr.summary) + + + + diff --git a/spreg/twosls_sp.py b/spreg/twosls_sp.py index 47803d69..e5ff8552 100755 --- a/spreg/twosls_sp.py +++ b/spreg/twosls_sp.py @@ -7,8 +7,9 @@ import numpy as np from . import twosls as TSLS from . import user_output as USER -from . import summary_output as SUMMARY from .utils import set_endog, sp_att, set_warn +import pandas as pd +from .output import output, _spat_diag_out, _spat_pseudo_r2 __all__ = ["GM_Lag"] @@ -44,6 +45,9 @@ class BaseGM_Lag(TSLS.BaseTSLS): lag_q : boolean If True, then include spatial lags of the additional instruments (q). + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. robust : string If 'white', then a White consistent estimator of the variance-covariance matrix is given. If 'hac', then a @@ -172,15 +176,19 @@ def __init__( q=None, w=None, w_lags=1, + slx_lags=0, lag_q=True, robust=None, gwk=None, sig2n_k=False, ): - yend2, q2 = set_endog( - y, x[:, 1:], w, yend, q, w_lags, lag_q - ) # assumes constant in first column + if slx_lags > 0: + yend2, q2, wx = set_endog(y, x[:, 1:], w, yend, q, w_lags, lag_q, slx_lags) + x = np.hstack((x, wx)) + else: + yend2, q2 = set_endog(y, x[:, 1:], w, yend, q, w_lags, lag_q) + TSLS.BaseTSLS.__init__( self, y=y, x=x, yend=yend2, q=q2, robust=robust, gwk=gwk, sig2n_k=sig2n_k ) @@ -216,6 +224,9 @@ class GM_Lag(BaseGM_Lag): lag_q : boolean If True, then include spatial lags of the additional instruments (q). + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. robust : string If 'white', then a White consistent estimator of the variance-covariance matrix is given. If 'hac', then a @@ -245,9 +256,13 @@ class GM_Lag(BaseGM_Lag): Name of kernel weights matrix for use in output name_ds : string Name of dataset for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -478,6 +493,7 @@ def __init__( w=None, w_lags=1, lag_q=True, + slx_lags=0, robust=None, gwk=None, sig2n_k=False, @@ -490,13 +506,24 @@ def __init__( name_w=None, name_gwk=None, name_ds=None, + latex=False, ): n = USER.check_arrays(x, yend, q) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) USER.check_robust(robust, gwk) + if robust == "hac" and spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. The spatial diagnostics have been disabled for this model.", + ) + spat_diag = False x_constant, name_x, warn = USER.check_constant(x, name_x) + + if slx_lags > 0: + name_x += USER.set_name_spatial_lags(name_x, slx_lags) + set_warn(self, warn) BaseGM_Lag.__init__( self, @@ -506,6 +533,7 @@ def __init__( yend=yend, q=q, w_lags=w_lags, + slx_lags=slx_lags, robust=robust, gwk=gwk, lag_q=lag_q, @@ -517,20 +545,38 @@ def __init__( ) set_warn(self, warn) self.title = "SPATIAL TWO STAGE LEAST SQUARES" + if slx_lags > 0: + self.title += " WITH SLX (SPATIAL DURBIN MODEL)" self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) - self.name_x = USER.set_name_x(name_x, x_constant) + self.name_x = USER.set_name_x(name_x, x_constant) # name_x contains SLX terms for slx_lags > 0 self.name_yend = USER.set_name_yend(name_yend, yend) self.name_yend.append(USER.set_name_yend_sp(self.name_y)) self.name_z = self.name_x + self.name_yend self.name_q = USER.set_name_q(name_q, q) - self.name_q.extend(USER.set_name_q_sp(self.name_x, w_lags, self.name_q, lag_q)) + if slx_lags > 0: # need to remove all but last SLX variables from name_x + self.name_x0 = [] + self.name_x0.append(self.name_x[0]) # constant +# print(f"x0 first {self.name_x0}") + kx = int((self.k -self.kstar -1)/(slx_lags +1) ) # number of original exogenous vars + self.name_x0.extend(self.name_x[-kx:]) +# print(f"in here {self.name_x0}") + self.name_q.extend(USER.set_name_q_sp(self.name_x0, w_lags, self.name_q, lag_q)) + else: + self.name_q.extend(USER.set_name_q_sp(self.name_x, w_lags, self.name_q, lag_q)) self.name_h = USER.set_name_h(self.name_x, self.name_q) self.robust = USER.set_robust(robust) self.name_w = USER.set_name_w(name_w, w) self.name_gwk = USER.set_name_w(name_gwk, gwk) - SUMMARY.GM_Lag(reg=self, w=w, vm=vm, spat_diag=spat_diag) - + self.output = pd.DataFrame(self.name_x + self.name_yend, columns=['var_names']) + self.output['var_type'] = ['x'] * len(self.name_x) + ['yend'] * (len(self.name_yend)-1) + ['rho'] + self.output['regime'], self.output['equation'] = (0, 0) + self.other_top = _spat_pseudo_r2(self) + if spat_diag: + diag_out = _spat_diag_out(self, w, 'yend') + else: + diag_out = None + output(reg=self, vm=vm, robust=robust, other_end=diag_out, latex=latex) def _test(): import doctest @@ -572,4 +618,5 @@ def _test(): name_ds="columbus", name_w="columbus.gal", ) + print(model.output) print(model.summary) diff --git a/spreg/twosls_sp_regimes.py b/spreg/twosls_sp_regimes.py index cfc0bda7..db0b23c3 100644 --- a/spreg/twosls_sp_regimes.py +++ b/spreg/twosls_sp_regimes.py @@ -7,12 +7,13 @@ import numpy as np from . import regimes as REGI from . import user_output as USER -from . import summary_output as SUMMARY import multiprocessing as mp from .twosls_regimes import TSLS_Regimes, _optimal_weight from .twosls import BaseTSLS from .utils import set_endog, set_endog_sparse, sp_att, set_warn, sphstack, spdot from .robust import hac_multi +import pandas as pd +from .output import output, _spat_diag_out, _spat_pseudo_r2 class GM_Lag_Regimes(TSLS_Regimes, REGI.Regimes_Frame): @@ -62,6 +63,9 @@ class GM_Lag_Regimes(TSLS_Regimes, REGI.Regimes_Frame): lag_q : boolean If True, then include spatial lags of the additional instruments (q). + slx_lags : integer + Number of spatial lags of X to include in the model specification. + If slx_lags>0, the specification becomes of the Spatial Durbin type. regime_lag_sep: boolean If True (default), the spatial parameter for spatial lag is also computed according to different regimes. If False, @@ -107,9 +111,13 @@ class GM_Lag_Regimes(TSLS_Regimes, REGI.Regimes_Frame): Name of dataset for use in output name_regimes : string Name of regimes variable for use in output + latex : boolean + Specifies if summary is to be printed in latex format Attributes ---------- + output : dataframe + regression results pandas dataframe summary : string Summary of regression results and diagnostics (note: use in conjunction with the print command) @@ -378,15 +386,16 @@ class GM_Lag_Regimes(TSLS_Regimes, REGI.Regimes_Frame): models, the argument regime_lag_sep must be set to True: >>> model=GM_Lag_Regimes(y, x, regimes, w=w, regime_lag_sep=True, name_y=y_var, name_x=x_var, name_regimes=r_var, name_ds='NAT', name_w='NAT.shp') - >>> print(np.hstack((np.array(model.name_z).reshape(8,1),model.betas,np.sqrt(model.vm.diagonal().reshape(8,1))))) - [['0_CONSTANT' '1.3658476998618099' '0.3985472089832652'] - ['0_PS90' '0.8087573074246643' '0.11324884794883601'] - ['0_UE90' '0.5694681319188577' '0.04625087717092595'] - ['0_W_HR90' '-0.43424389464634316' '0.13350159258670305'] - ['1_CONSTANT' '7.90731073341874' '1.6360187416950998'] - ['1_PS90' '1.2746570332609135' '0.2470987049452741'] - ['1_UE90' '0.6016769336173784' '0.07993322102145078'] - ['1_W_HR90' '-0.2960338343846942' '0.19934459782427025']] + >>> print(model.output) + var_names coefficients std_err zt_stat prob + 0 0_CONSTANT 1.365848 0.398547 3.427066 0.00061 + 1 0_PS90 0.808757 0.113249 7.141418 0.0 + 2 0_UE90 0.569468 0.046251 12.312591 0.0 + 3 0_W_HR90 -0.434244 0.133502 -3.252724 0.001143 + 4 1_CONSTANT 7.907311 1.636019 4.833264 0.000001 + 5 1_PS90 1.274657 0.247099 5.158493 0.0 + 6 1_UE90 0.601677 0.079933 7.527245 0.0 + 7 1_W_HR90 -0.296034 0.199345 -1.485036 0.137534 Alternatively, we can type: 'model.summary' to see the organized results output. The class is flexible enough to accomodate a spatial lag model that, @@ -432,6 +441,7 @@ def __init__( q=None, w=None, w_lags=1, + slx_lags=0, lag_q=True, robust=None, gwk=None, @@ -439,7 +449,7 @@ def __init__( spat_diag=False, constant_regi="many", cols2regi="all", - regime_lag_sep=False, + regime_lag_sep=True, regime_err_sep=True, cores=False, vm=False, @@ -451,12 +461,32 @@ def __init__( name_w=None, name_gwk=None, name_ds=None, + latex=False, ): n = USER.check_arrays(y, x) y = USER.check_y(y, n) USER.check_weights(w, y, w_required=True) USER.check_robust(robust, gwk) + if regime_lag_sep and not regime_err_sep: + set_warn(self, "regime_err_sep set to True when regime_lag_sep=True.") + regime_err_sep = True + if regime_err_sep and not regime_lag_sep: + set_warn(self, "Groupwise heteroskedasticity is not currently available for this method,\n so regime_err_sep has been set to False.") + regime_err_sep = False + if robust == "hac": + if regime_err_sep: + set_warn( + self, + "Error by regimes is not available for HAC estimation. The error by regimes has been disabled for this model.", + ) + regime_err_sep = False + if spat_diag: + set_warn( + self, + "Spatial diagnostics are not available for HAC estimation. The spatial diagnostics have been disabled for this model.", + ) + spat_diag = False USER.check_spat_diag(spat_diag, w) x_constant, name_x, warn = USER.check_constant(x, name_x, just_rem=True) set_warn(self, warn) @@ -464,12 +494,20 @@ def __init__( name_y = USER.set_name_y(name_y) name_yend = USER.set_name_yend(name_yend, yend) name_q = USER.set_name_q(name_q, q) - name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) self.name_regimes = USER.set_name_ds(name_regimes) self.constant_regi = constant_regi - self.n = n + if slx_lags > 0: + yend2, q2, wx = set_endog(y, x_constant, w, yend, q, w_lags, lag_q, slx_lags) + x_constant = np.hstack((x_constant, wx)) + name_slx = USER.set_name_spatial_lags(name_x, slx_lags) + name_q.extend(USER.set_name_q_sp(name_slx[-len(name_x):], w_lags, name_q, lag_q, force_all=True)) + name_x += name_slx + else: + name_q.extend(USER.set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=True)) + yend2, q2 = yend, q + self.n = x_constant.shape[0] cols2regi = REGI.check_cols2regi( - constant_regi, cols2regi, x_constant, yend=yend, add_cons=False + constant_regi, cols2regi, x_constant, yend=yend2, add_cons=False ) self.cols2regi = cols2regi self.regimes_set = REGI._get_regimes_set(regimes) @@ -485,8 +523,6 @@ def __init__( self.regime_err_sep = regime_err_sep self.regime_lag_sep = regime_lag_sep if regime_lag_sep == True: - if not regime_err_sep: - raise Exception("regime_err_sep must be True when regime_lag_sep=True.") cols2regi += [True] w_i, regi_ids, warn = REGI.w_regimes( w, @@ -513,9 +549,10 @@ def __init__( w_i, w, regi_ids, - yend=yend, - q=q, + yend=yend2, + q=q2, w_lags=w_lags, + slx_lags=slx_lags, lag_q=lag_q, cores=cores, robust=robust, @@ -532,11 +569,13 @@ def __init__( name_w=name_w, name_gwk=name_gwk, name_ds=name_ds, + latex=latex, ) else: if regime_lag_sep == True: w = REGI.w_regimes_union(w, w_i, self.regimes_set) - yend2, q2 = set_endog(y, x_constant, w, yend, q, w_lags, lag_q) + if slx_lags == 0: + yend2, q2 = set_endog(y, x_constant, w, yend2, q2, w_lags, lag_q) name_yend.append(USER.set_name_yend_sp(name_y)) TSLS_Regimes.__init__( self, @@ -564,17 +603,26 @@ def __init__( name_ds=name_ds, summ=False, ) - if regime_lag_sep: + + if regime_lag_sep: # not currently available. self.sp_att_reg(w_i, regi_ids, yend2[:, -1].reshape(self.n, 1)) else: self.rho = self.betas[-1] + self.output.iat[-1, self.output.columns.get_loc('var_type')] = 'rho' self.predy_e, self.e_pred, warn = sp_att( w, self.y, self.predy, yend2[:, -1].reshape(self.n, 1), self.rho ) set_warn(self, warn) self.regime_lag_sep = regime_lag_sep self.title = "SPATIAL " + self.title - SUMMARY.GM_Lag(reg=self, w=w, vm=vm, spat_diag=spat_diag, regimes=True) + if slx_lags > 0: + self.title = " SPATIAL 2SLS WITH SLX (SPATIAL DURBIN MODEL) - REGIMES" + self.other_top = _spat_pseudo_r2(self) + if spat_diag: + diag_out = _spat_diag_out(self, w, 'yend') + else: + diag_out = None + output(reg=self, vm=vm, robust=robust, other_end=diag_out, latex=latex) def GM_Lag_Regimes_Multi( self, @@ -587,6 +635,7 @@ def GM_Lag_Regimes_Multi( yend=None, q=None, w_lags=1, + slx_lags=0, lag_q=True, robust=None, gwk=None, @@ -602,6 +651,7 @@ def GM_Lag_Regimes_Multi( name_w=None, name_gwk=None, name_ds=None, + latex=False, ): # pool = mp.Pool(cores) self.name_ds = USER.set_name_ds(name_ds) @@ -636,6 +686,7 @@ def GM_Lag_Regimes_Multi( q, w_r, w_lags, + slx_lags, lag_q, robust, sig2n_k, @@ -659,6 +710,7 @@ def GM_Lag_Regimes_Multi( q, w_r, w_lags, + slx_lags, lag_q, robust, sig2n_k, @@ -702,6 +754,7 @@ def GM_Lag_Regimes_Multi( self.name_h, ) = ([], [], [], [], [], []) counter = 0 + self.output = pd.DataFrame(columns=['var_names', 'var_type', 'regime', 'equation']) for r in self.regimes_set: """ if is_win: @@ -752,6 +805,14 @@ def GM_Lag_Regimes_Multi( self.hac_var[ regi_ids[r], ] = results[r].h + results[r].other_top = _spat_pseudo_r2(results[r]) + results[r].other_mid = "" + if spat_diag: + results[r].other_mid += _spat_diag_out(results[r], results[r].w, 'yend') + self.output = pd.concat([self.output, pd.DataFrame({'var_names': results[r].name_x + results[r].name_yend, + 'var_type': ['x'] * len(results[r].name_x) + [ + 'yend'] * (len(results[r].name_yend)-1) + ['rho'], + 'regime': r, 'equation': r})], ignore_index=True) counter += 1 self.multi = results if robust == "hac": @@ -763,11 +824,9 @@ def GM_Lag_Regimes_Multi( ) self.chow = REGI.Chow(self) if spat_diag: - pass # self._get_spat_diag_props(y, x, w, yend, q, w_lags, lag_q) - SUMMARY.GM_Lag_multi( - reg=self, multireg=self.multi, vm=vm, spat_diag=spat_diag, regimes=True, w=w - ) + pass + output(reg=self, vm=vm, robust=robust, other_end=False, latex=latex) def sp_att_reg(self, w_i, regi_ids, wy): predy_e_r, e_pred_r = {}, {} @@ -823,6 +882,7 @@ def _work( q, w_r, w_lags, + slx_lags, lag_q, robust, sig2n_k, @@ -844,14 +904,18 @@ def _work( q_r = q[regi_ids[r]] else: q_r = q - yend_r, q_r = set_endog_sparse(y_r, x_r[:, 1:], w_r, yend_r, q_r, w_lags, lag_q) + if slx_lags == 0: + yend_r, q_r = set_endog_sparse(y_r, x_r[:, 1:], w_r, yend_r, q_r, w_lags, lag_q) + title = "SPATIAL TWO STAGE LEAST SQUARES ESTIMATION - REGIME %s" % r + else: + title = "SPATIAL 2SLS WITH SLX (SPATIAL DURBIN MODEL) - REGIME %s" % r # x_constant = USER.check_constant(x_r) if robust == "hac" or robust == "ogmm": robust2 = None else: robust2 = robust model = BaseTSLS(y_r, x_r, yend_r, q_r, robust=robust2, sig2n_k=sig2n_k) - model.title = "SPATIAL TWO STAGE LEAST SQUARES ESTIMATION - REGIME %s" % r + model.title = title if robust == "ogmm": _optimal_weight(model, sig2n_k, warn=False) model.rho = model.betas[-1] @@ -917,6 +981,8 @@ def _test(): name_ds="columbus", name_w="columbus.gal", regime_err_sep=True, + regime_lag_sep = True, robust="white", ) + print(model.output) print(model.summary) diff --git a/spreg/user_output.py b/spreg/user_output.py index ffdb2324..cf7f9e68 100755 --- a/spreg/user_output.py +++ b/spreg/user_output.py @@ -1,7 +1,8 @@ """Internal helper files for user output.""" __author__ = ( - "Luc Anselin luc.anselin@asu.edu, " + "Luc Anselin lanselin@gmail.com, " + "Pedro Amaral pedrovma@gmail.com" "David C. Folch david.folch@asu.edu, " "Levi John Wolf levi.john.wolf@gmail.com, " "Jing Yao jingyao@asu.edu" @@ -147,6 +148,23 @@ def set_name_yend_sp(name_y): """ return "W_" + name_y +def set_name_spatial_lags(names, w_lags): + """Set the spatial lag names for multiple variables and lag orders" + + Parameters + ---------- + names : string + Original variables' names. + + Returns + ------- + lag_names : string + + """ + lag_names = ["W_" + s for s in names] + for i in range(w_lags-1): + lag_names += ["W" + str(i+2) + "_" + s for s in names] + return lag_names def set_name_q_sp(name_x, w_lags, name_q, lag_q, force_all=False): """Set the spatial instrument names in regression; return generic name if user @@ -544,8 +562,9 @@ def check_robust(robust, wk): # NOTE: we are not checking for the case of exactly 1.0 ### raise Exception("Off-diagonal entries must be less than 1.") elif robust.lower() == "white" or robust.lower() == "ogmm": - if wk: - raise Exception("White requires that wk be set to None") + # if wk: + # raise Exception("White requires that wk be set to None") + pass # these options are not affected by wk else: raise Exception( "invalid value passed to robust, see docs for valid options" diff --git a/spreg/utils.py b/spreg/utils.py index ff4f6d2c..c369c74d 100755 --- a/spreg/utils.py +++ b/spreg/utils.py @@ -479,7 +479,7 @@ def get_lags(w, x, w_lags): Returns -------- rs : array - nxk*(w_lags+1) array with original and spatially lagged variables + nxk*(w_lags) array with spatially lagged variables """ lag = lag_spatial(w, x) @@ -489,6 +489,43 @@ def get_lags(w, x, w_lags): spat_lags = sphstack(spat_lags, lag) return spat_lags +def get_lags_split(w, x, max_lags, split_at): + """ + Calculates a given order of spatial lags and all the smaller orders, + separated into two groups (up to split_at and above) + + Parameters + ---------- + w : weight + PySAL weights instance + x : array + nxk arrays with the variables to be lagged + max_lags : integer + Maximum order of spatial lag + split_at: integer + Separates the resulting lags into two groups: up to split_at and above + + Returns + -------- + rs_l,rs_h: tuple of arrays + rs_l: nxk*(split_at) array with spatially lagged variables up to split_at + rs_h: nxk*(w_lags-split_at) array with spatially lagged variables above split_at + + """ + rs_l = lag = lag_spatial(w, x) + rs_h = None + if 0 < split_at < max_lags: + for _ in range(split_at-1): + lag = lag_spatial(w, lag) + rs_l = sphstack(rs_l, lag) + + for i in range(max_lags - split_at): + lag = lag_spatial(w, lag) + rs_h = sphstack(rs_h, lag) if i > 0 else lag + else: + raise ValueError("max_lags must be greater than split_at and split_at must be greater than 0") + + return rs_l, rs_h def inverse_prod( w, @@ -571,9 +608,11 @@ def inverse_prod( except: matrix = la.inv(np.eye(w.shape[0]) - (scalar * w)) if post_multiply: - inv_prod = spdot(data.T, matrix) +# inv_prod = spdot(data.T, matrix) + inv_prod = np.matmul(data.T,matrix) # inverse matrix is dense, wrong type in spdot else: - inv_prod = spdot(matrix, data) +# inv_prod = spdot(matrix, data) + inv_prod = np.matmul(matrix,data) else: raise Exception("Invalid method selected for inversion.") return inv_prod @@ -623,24 +662,35 @@ def power_expansion( return running_total -def set_endog(y, x, w, yend, q, w_lags, lag_q): +def set_endog(y, x, w, yend, q, w_lags, lag_q, slx_lags=0): # Create spatial lag of y yl = lag_spatial(w, y) # spatial and non-spatial instruments if issubclass(type(yend), np.ndarray): + if slx_lags > 0: + lag_x, lag_xq = get_lags_split(w, x, slx_lags+1, slx_lags) + else: + lag_xq = x if lag_q: - lag_vars = sphstack(x, q) + lag_vars = sphstack(lag_xq, q) else: - lag_vars = x + lag_vars = lag_xq spatial_inst = get_lags(w, lag_vars, w_lags) q = sphstack(q, spatial_inst) yend = sphstack(yend, yl) elif yend == None: # spatial instruments only - q = get_lags(w, x, w_lags) + if slx_lags > 0: + lag_x, lag_xq = get_lags_split(w, x, slx_lags+w_lags, slx_lags) + else: + lag_xq = get_lags(w, x, w_lags) + q = lag_xq yend = yl else: raise Exception("invalid value passed to yend") - return yend, q + if slx_lags == 0: + return yend, q + else: + return yend, q, lag_x lag = lag_spatial(w, x) spat_lags = lag From 0fb086f325f1197100c2bb6a88436712e10bad04 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 13 Sep 2023 17:13:00 -0300 Subject: [PATCH 16/28] Fixing non-SUR test failures --- spreg/ml_error.py | 2 +- spreg/tests/test_error_sp.py | 431 ++++++-------- spreg/tests/test_error_sp_sparse.py | 438 ++++++--------- spreg/tests/test_twosls_sp_regimes.py | 774 ++++++++++---------------- 4 files changed, 627 insertions(+), 1018 deletions(-) diff --git a/spreg/ml_error.py b/spreg/ml_error.py index bb338677..b6913d25 100644 --- a/spreg/ml_error.py +++ b/spreg/ml_error.py @@ -501,7 +501,7 @@ def __init__( ) self.name_ds = USER.set_name_ds(name_ds) self.name_y = USER.set_name_y(name_y) - self.name_x = USER.set_name_x(name_x, x) + self.name_x = USER.set_name_x(name_x, x_constant) self.name_x.append("lambda") self.name_w = USER.set_name_w(name_w, w) self.aic = DIAG.akaike(reg=self) diff --git a/spreg/tests/test_error_sp.py b/spreg/tests/test_error_sp.py index 610d25bf..c87999af 100644 --- a/spreg/tests/test_error_sp.py +++ b/spreg/tests/test_error_sp.py @@ -6,129 +6,104 @@ from spreg import utils from libpysal.common import RTOL - class TestBaseGMError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T - self.X = np.hstack((np.ones(self.y.shape), self.X)) - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.X = np.hstack((np.ones(self.y.shape),self.X)) + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.BaseGM_Error(self.y, self.X, self.w.sparse) - betas = np.array([[47.94371455], [0.70598088], [-0.55571746], [0.37230161]]) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([27.4739775]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 47.94371455], [ 0.70598088], [ -0.55571746], [ 0.37230161]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 27.4739775]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - e = np.array([31.89620319]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x[0],x,RTOL) + e = np.array([ 31.89620319]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [1.51884943e02, -5.37622793e00, -1.86970286e00], - [-5.37622793e00, 2.48972661e-01, 5.26564244e-02], - [-1.86970286e00, 5.26564244e-02, 3.18930650e-02], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 1.51884943e+02, -5.37622793e+00, -1.86970286e+00], [ -5.37622793e+00, 2.48972661e-01, 5.26564244e-02], [ -1.86970286e+00, 5.26564244e-02, 3.18930650e-02]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 191.73716465732355 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - + np.testing.assert_allclose(reg.sig2,sig2,RTOL) class TestGMError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.GM_Error(self.y, self.X, self.w) - betas = np.array([[47.94371455], [0.70598088], [-0.55571746], [0.37230161]]) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([27.4739775]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 47.94371455], [ 0.70598088], [ -0.55571746], [ 0.37230161]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 27.4739775]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - e = np.array([31.89620319]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x[0],x,RTOL) + e = np.array([ 31.89620319]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [1.51884943e02, -5.37622793e00, -1.86970286e00], - [-5.37622793e00, 2.48972661e-01, 5.26564244e-02], - [-1.86970286e00, 5.26564244e-02, 3.18930650e-02], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 1.51884943e+02, -5.37622793e+00, -1.86970286e+00], [ -5.37622793e+00, 2.48972661e-01, 5.26564244e-02], [ -1.86970286e+00, 5.26564244e-02, 3.18930650e-02]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 191.73716465732355 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) pr2 = 0.3495097406012179 - np.testing.assert_allclose(reg.pr2, pr2) - std_err = np.array([12.32416094, 0.4989716, 0.1785863]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [3.89022140e00, 1.00152805e-04], - [1.41487186e00, 1.57106070e-01], - [-3.11175868e00, 1.85976455e-03], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - + np.testing.assert_allclose(reg.pr2,pr2) + std_err = np.array([ 12.32416094, 0.4989716 , 0.1785863 ]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 3.89022140e+00, 1.00152805e-04], [ 1.41487186e+00, 1.57106070e-01], [ -3.11175868e+00, 1.85976455e-03]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) class TestBaseGMEndogError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) self.X = np.array(X).T - self.X = np.hstack((np.ones(self.y.shape), self.X)) + self.X = np.hstack((np.ones(self.y.shape),self.X)) yd = [] yd.append(db.by_col("CRIME")) self.yd = np.array(yd).T @@ -136,55 +111,50 @@ def setUp(self): q.append(db.by_col("DISCBD")) self.q = np.array(q).T self.w = weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) - self.w.transform = "r" + self.w.transform = 'r' def test_model(self): reg = SP.BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse) - betas = np.array([[55.36095292], [0.46411479], [-0.66883535], [0.38989939]]) - # raising a warning causes a failure... - print("Running reduced precision test in L120 of test_error_sp.py") - np.testing.assert_allclose(reg.betas, betas, RTOL + 0.0001) - u = np.array([26.55951566]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e = np.array([31.23925425]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([53.9074875]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 55.36095292], [ 0.46411479], [ -0.66883535], [ 0.38989939]]) + #raising a warning causes a failure... + print('Running reduced precision test in L120 of test_error_sp.py') + np.testing.assert_allclose(reg.betas,betas,RTOL+.0001) + u = np.array([ 26.55951566]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e = np.array([ 31.23925425]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 53.9074875]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - yend = np.array([15.72598]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.z[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531]) + np.testing.assert_allclose(reg.x[0],x,RTOL) + yend = np.array([ 15.72598]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.z[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) - # std_y + np.testing.assert_allclose(reg.mean_y,my,RTOL) + #std_y sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - # vm - vm = np.array( - [ - [5.29158422e02, -1.57833675e01, -8.38021080e00], - [-1.57833675e01, 5.40235041e-01, 2.31120327e-01], - [-8.38021080e00, 2.31120327e-01, 1.44977385e-01], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + #vm + vm = np.array([[ 5.29158422e+02, -1.57833675e+01, -8.38021080e+00], + [ -1.57833675e+01, 5.40235041e-01, 2.31120327e-01], + [ -8.38021080e+00, 2.31120327e-01, 1.44977385e-01]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 192.50022721929574 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - + np.testing.assert_allclose(reg.sig2,sig2,RTOL) class TestGMEndogError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) self.X = np.array(X).T @@ -194,180 +164,105 @@ def setUp(self): q = [] q.append(db.by_col("DISCBD")) self.q = np.array(q).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w) - betas = np.array([[55.36095292], [0.46411479], [-0.66883535], [0.38989939]]) - print("Running reduced precision test in L175 of test_error_sp.py") - np.testing.assert_allclose(reg.betas, betas, RTOL + 0.0001) - u = np.array([26.55951566]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e = np.array([31.23925425]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([53.9074875]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 55.36095292], [ 0.46411479], [ -0.66883535], [ 0.38989939]]) + print('Running reduced precision test in L175 of test_error_sp.py') + np.testing.assert_allclose(reg.betas,betas,RTOL +.0001) + u = np.array([ 26.55951566]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e = np.array([ 31.23925425]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 53.9074875]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - yend = np.array([15.72598]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.z[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531]) + np.testing.assert_allclose(reg.x[0],x,RTOL) + yend = np.array([ 15.72598]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.z[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [5.29158422e02, -1.57833675e01, -8.38021080e00], - [-1.57833675e01, 5.40235041e-01, 2.31120327e-01], - [-8.38021080e00, 2.31120327e-01, 1.44977385e-01], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 5.29158422e+02, -1.57833675e+01, -8.38021080e+00], + [ -1.57833675e+01, 5.40235041e-01, 2.31120327e-01], + [ -8.38021080e+00, 2.31120327e-01, 1.44977385e-01]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) pr2 = 0.346472557570858 - np.testing.assert_allclose(reg.pr2, pr2, RTOL) + np.testing.assert_allclose(reg.pr2,pr2,RTOL) sig2 = 192.50022721929574 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - std_err = np.array([23.003401, 0.73500657, 0.38075777]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [2.40664208, 0.01609994], - [0.63144305, 0.52775088], - [-1.75659016, 0.07898769], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - - -class TestBaseGMCombo(unittest.TestCase): - def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") - y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) - X = [] - X.append(db.by_col("INC")) - X.append(db.by_col("CRIME")) - self.X = np.array(X).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" - - def test_model(self): - # Only spatial lag - yd2, q2 = utils.set_endog(self.y, self.X, self.w, None, None, 1, True) - self.X = np.hstack((np.ones(self.y.shape), self.X)) - reg = SP.BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse) - betas = np.array( - [[57.61123461], [0.73441314], [-0.59459416], [-0.21762921], [0.54732051]] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([25.57932637]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e_filtered = np.array([31.65374945]) - np.testing.assert_allclose(reg.e_filtered[0], e_filtered, RTOL) - predy = np.array([54.88767663]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) - n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) - k = 4 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - yend = np.array([35.4585005]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598, 35.4585005]) - np.testing.assert_allclose(reg.z[0], z, RTOL) - my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) - sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array([5.22438365e02, 2.38012873e-01, 3.20924172e-02, 2.15753599e-01]) - np.testing.assert_allclose(np.diag(reg.vm), vm, RTOL) - sig2 = 181.78650186468832 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) + std_err = np.array([ 23.003401 , 0.73500657, 0.38075777]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 2.40664208, 0.01609994], [ 0.63144305, 0.52775088], [-1.75659016, 0.07898769]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) class TestGMCombo(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" - + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): # Only spatial lag reg = SP.GM_Combo(self.y, self.X, w=self.w) - e_reduced = np.array([28.18617481]) - np.testing.assert_allclose(reg.e_pred[0], e_reduced, RTOL) - predy_e = np.array([52.28082782]) - np.testing.assert_allclose(reg.predy_e[0], predy_e, RTOL) - betas = np.array( - [[57.61123515], [0.73441313], [-0.59459416], [-0.21762921], [0.54732051]] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([25.57932637]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e_filtered = np.array([31.65374945]) - np.testing.assert_allclose(reg.e_filtered[0], e_filtered, RTOL) - predy = np.array([54.88767685]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + e_reduced = np.array([ 28.18617481]) + np.testing.assert_allclose(reg.e_pred[0],e_reduced,RTOL) + predy_e = np.array([ 52.28082782]) + np.testing.assert_allclose(reg.predy_e[0],predy_e,RTOL) + betas = np.array([[ 57.61123515],[ 0.73441313], [ -0.59459416], [ -0.21762921], [ 0.54732051]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 25.57932637]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e_filtered = np.array([ 31.65374945]) + np.testing.assert_allclose(reg.e_filtered[0],e_filtered,RTOL) + predy = np.array([ 54.88767685]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 4 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x[0], x, RTOL) - yend = np.array([35.4585005]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598, 35.4585005]) - np.testing.assert_allclose(reg.z[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x[0],x,RTOL) + yend = np.array([ 35.4585005]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598 , 35.4585005]) + np.testing.assert_allclose(reg.z[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my) + np.testing.assert_allclose(reg.mean_y,my) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy) - vm = np.array([5.22438333e02, 2.38012875e-01, 3.20924173e-02, 2.15753579e-01]) - np.testing.assert_allclose(np.diag(reg.vm), vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy) + vm = np.array([ 5.22438333e+02, 2.38012875e-01, 3.20924173e-02, + 2.15753579e-01]) + np.testing.assert_allclose(np.diag(reg.vm),vm,RTOL) sig2 = 181.78650186468832 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) pr2 = 0.3018280166937799 - np.testing.assert_allclose(reg.pr2, pr2, RTOL) + np.testing.assert_allclose(reg.pr2,pr2,RTOL) pr2_e = 0.3561355586759414 - np.testing.assert_allclose(reg.pr2_e, pr2_e, RTOL) - std_err = np.array([22.85692222, 0.48786559, 0.17914356, 0.46449318]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [2.52051597e00, 1.17182922e-02], - [1.50535954e00, 1.32231664e-01], - [-3.31909311e00, 9.03103123e-04], - [-4.68530506e-01, 6.39405261e-01], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - + np.testing.assert_allclose(reg.pr2_e,pr2_e,RTOL) + std_err = np.array([ 22.85692222, 0.48786559, 0.17914356, 0.46449318]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 2.52051597e+00, 1.17182922e-02], [ 1.50535954e+00, 1.32231664e-01], [ -3.31909311e+00, 9.03103123e-04], [ -4.68530506e-01, 6.39405261e-01]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/spreg/tests/test_error_sp_sparse.py b/spreg/tests/test_error_sp_sparse.py index 07fd942a..4fad34cc 100755 --- a/spreg/tests/test_error_sp_sparse.py +++ b/spreg/tests/test_error_sp_sparse.py @@ -5,133 +5,108 @@ from scipy import sparse from spreg import utils from spreg import error_sp as SP -from libpysal.common import RTOL - +from libpysal.common import RTOL class TestBaseGMError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T - self.X = np.hstack((np.ones(self.y.shape), self.X)) + self.X = np.hstack((np.ones(self.y.shape),self.X)) self.X = sparse.csr_matrix(self.X) - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.BaseGM_Error(self.y, self.X, self.w.sparse) - betas = np.array([[47.94371455], [0.70598088], [-0.55571746], [0.37230161]]) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([27.4739775]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 47.94371455], [ 0.70598088], [ -0.55571746], [ 0.37230161]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 27.4739775]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - e = np.array([31.89620319]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x.toarray()[0],x,RTOL) + e = np.array([ 31.89620319]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [1.51884943e02, -5.37622793e00, -1.86970286e00], - [-5.37622793e00, 2.48972661e-01, 5.26564244e-02], - [-1.86970286e00, 5.26564244e-02, 3.18930650e-02], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 1.51884943e+02, -5.37622793e+00, -1.86970286e+00], [ -5.37622793e+00, 2.48972661e-01, 5.26564244e-02], [ -1.86970286e+00, 5.26564244e-02, 3.18930650e-02]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 191.73716465732355 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - + np.testing.assert_allclose(reg.sig2,sig2,RTOL) class TestGMError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T self.X = sparse.csr_matrix(self.X) - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.GM_Error(self.y, self.X, self.w) - betas = np.array([[47.94371455], [0.70598088], [-0.55571746], [0.37230161]]) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([27.4739775]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 47.94371455], [ 0.70598088], [ -0.55571746], [ 0.37230161]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 27.4739775]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - e = np.array([31.89620319]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([52.9930255]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x.toarray()[0],x,RTOL) + e = np.array([ 31.89620319]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 52.9930255]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [1.51884943e02, -5.37622793e00, -1.86970286e00], - [-5.37622793e00, 2.48972661e-01, 5.26564244e-02], - [-1.86970286e00, 5.26564244e-02, 3.18930650e-02], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 1.51884943e+02, -5.37622793e+00, -1.86970286e+00], [ -5.37622793e+00, 2.48972661e-01, 5.26564244e-02], [ -1.86970286e+00, 5.26564244e-02, 3.18930650e-02]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 191.73716465732355 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) pr2 = 0.3495097406012179 - np.testing.assert_allclose(reg.pr2, pr2, RTOL) - std_err = np.array([12.32416094, 0.4989716, 0.1785863]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [3.89022140e00, 1.00152805e-04], - [1.41487186e00, 1.57106070e-01], - [-3.11175868e00, 1.85976455e-03], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - + np.testing.assert_allclose(reg.pr2,pr2,RTOL) + std_err = np.array([ 12.32416094, 0.4989716 , 0.1785863 ]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 3.89022140e+00, 1.00152805e-04], [ 1.41487186e+00, 1.57106070e-01], [ -3.11175868e+00, 1.85976455e-03]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) class TestBaseGMEndogError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) self.X = np.array(X).T - self.X = np.hstack((np.ones(self.y.shape), self.X)) + self.X = np.hstack((np.ones(self.y.shape),self.X)) self.X = sparse.csr_matrix(self.X) yd = [] yd.append(db.by_col("CRIME")) @@ -139,57 +114,50 @@ def setUp(self): q = [] q.append(db.by_col("DISCBD")) self.q = np.array(q).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.BaseGM_Endog_Error(self.y, self.X, self.yd, self.q, self.w.sparse) - betas = np.array([[55.36095292], [0.46411479], [-0.66883535], [0.38989939]]) - print("Running reduced-precision test in L125 of test_error_sp_sparse.py") - np.testing.assert_allclose(reg.betas, betas, RTOL + 0.0001) - u = np.array([26.55951566]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e = np.array([31.23925425]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([53.9074875]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 55.36095292], [ 0.46411479], [ -0.66883535], [ 0.38989939]]) + print('Running reduced-precision test in L125 of test_error_sp_sparse.py') + np.testing.assert_allclose(reg.betas,betas,RTOL + .0001) + u = np.array([ 26.55951566]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e = np.array([ 31.23925425]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 53.9074875]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - yend = np.array([15.72598]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.z.toarray()[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531]) + np.testing.assert_allclose(reg.x.toarray()[0],x,RTOL) + yend = np.array([ 15.72598]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.z.toarray()[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) - # std_y + np.testing.assert_allclose(reg.mean_y,my,RTOL) + #std_y sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - # vm - vm = np.array( - [ - [529.15840986, -15.78336736, -8.38021053], - [-15.78336736, 0.54023504, 0.23112032], - [-8.38021053, 0.23112032, 0.14497738], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + #vm + vm = np.array([[ 529.15840986, -15.78336736, -8.38021053], + [ -15.78336736, 0.54023504, 0.23112032], + [ -8.38021053, 0.23112032, 0.14497738]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) sig2 = 192.5002 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - + np.testing.assert_allclose(reg.sig2,sig2,RTOL) class TestGMEndogError(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) self.X = np.array(X).T @@ -200,185 +168,109 @@ def setUp(self): q = [] q.append(db.by_col("DISCBD")) self.q = np.array(q).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): reg = SP.GM_Endog_Error(self.y, self.X, self.yd, self.q, self.w) - betas = np.array([[55.36095292], [0.46411479], [-0.66883535], [0.38989939]]) - print("Running reduced-tolernace test in L181 of test_error_sp_sparse.py") - np.testing.assert_allclose(reg.betas, betas, RTOL + 0.0001) - u = np.array([26.55951566]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e = np.array([31.23925425]) - np.testing.assert_allclose(reg.e_filtered[0], e, RTOL) - predy = np.array([53.9074875]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + betas = np.array([[ 55.36095292], [ 0.46411479], [ -0.66883535], [ 0.38989939]]) + print('Running reduced-tolernace test in L181 of test_error_sp_sparse.py') + np.testing.assert_allclose(reg.betas,betas,RTOL + .0001) + u = np.array([ 26.55951566]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e = np.array([ 31.23925425]) + np.testing.assert_allclose(reg.e_filtered[0],e,RTOL) + predy = np.array([ 53.9074875]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 3 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - yend = np.array([15.72598]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.z.toarray()[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531]) + np.testing.assert_allclose(reg.x.toarray()[0],x,RTOL) + yend = np.array([ 15.72598]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.z.toarray()[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array( - [ - [529.15840986, -15.78336736, -8.38021053], - [-15.78336736, 0.54023504, 0.23112032], - [-8.38021053, 0.23112032, 0.14497738], - ] - ) - np.testing.assert_allclose(reg.vm, vm, RTOL) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([[ 529.15840986, -15.78336736, -8.38021053], + [ -15.78336736, 0.54023504, 0.23112032], + [ -8.38021053, 0.23112032, 0.14497738]]) + np.testing.assert_allclose(reg.vm,vm,RTOL) pr2 = 0.346472557570858 - np.testing.assert_allclose(reg.pr2, pr2, RTOL) + np.testing.assert_allclose(reg.pr2,pr2,RTOL) sig2 = 192.5002 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) - std_err = np.array([23.003401, 0.73500657, 0.38075777]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [2.40664208, 0.01609994], - [0.63144305, 0.52775088], - [-1.75659016, 0.07898769], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - - -class TestBaseGMCombo(unittest.TestCase): - def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") - y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) - X = [] - X.append(db.by_col("INC")) - X.append(db.by_col("CRIME")) - self.X = np.array(X).T - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" - - def test_model(self): - # Only spatial lag - yd2, q2 = utils.set_endog(self.y, self.X, self.w, None, None, 1, True) - self.X = np.hstack((np.ones(self.y.shape), self.X)) - self.X = sparse.csr_matrix(self.X) - reg = SP.BaseGM_Combo(self.y, self.X, yend=yd2, q=q2, w=self.w.sparse) - betas = np.array( - [[57.61123461], [0.73441314], [-0.59459416], [-0.21762921], [0.54732051]] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([25.57932637]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e_filtered = np.array([31.65374945]) - np.testing.assert_allclose(reg.e_filtered[0], e_filtered, RTOL) - predy = np.array([54.88767663]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) - n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) - k = 4 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - yend = np.array([35.4585005]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598, 35.4585005]) - np.testing.assert_allclose(reg.z.toarray()[0], z, RTOL) - my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) - sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array([22.85691168, 0.48786563, 0.17914357, 0.46449287]) - np.testing.assert_allclose(np.sqrt(reg.vm.diagonal()), vm, RTOL) - sig2 = 181.78650186468832 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) + std_err = np.array([ 23.003401 , 0.73500657, 0.38075777]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 2.40664208, 0.01609994], [ 0.63144305, 0.52775088], [-1.75659016, 0.07898769]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) class TestGMCombo(unittest.TestCase): def setUp(self): - db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + db=libpysal.io.open(libpysal.examples.get_path("columbus.dbf"),"r") y = np.array(db.by_col("HOVAL")) - self.y = np.reshape(y, (49, 1)) + self.y = np.reshape(y, (49,1)) X = [] X.append(db.by_col("INC")) X.append(db.by_col("CRIME")) self.X = np.array(X).T self.X = sparse.csr_matrix(self.X) - self.w = libpysal.weights.Rook.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" - + self.w = libpysal.weights.Rook.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' def test_model(self): # Only spatial lag reg = SP.GM_Combo(self.y, self.X, w=self.w) - e_reduced = np.array([28.18617481]) - np.testing.assert_allclose(reg.e_pred[0], e_reduced, RTOL) - predy_e = np.array([52.28082782]) - np.testing.assert_allclose(reg.predy_e[0], predy_e, RTOL) - betas = np.array( - [[57.61123515], [0.73441313], [-0.59459416], [-0.21762921], [0.54732051]] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - u = np.array([25.57932637]) - np.testing.assert_allclose(reg.u[0], u, RTOL) - e_filtered = np.array([31.65374945]) - np.testing.assert_allclose(reg.e_filtered[0], e_filtered, RTOL) - predy = np.array([54.88767685]) - np.testing.assert_allclose(reg.predy[0], predy, RTOL) + e_reduced = np.array([ 28.18617481]) + np.testing.assert_allclose(reg.e_pred[0],e_reduced,RTOL) + predy_e = np.array([ 52.28082782]) + np.testing.assert_allclose(reg.predy_e[0],predy_e,RTOL) + betas = np.array([[ 57.61123515],[ 0.73441313], [ -0.59459416], [ -0.21762921], [ 0.54732051]]) + np.testing.assert_allclose(reg.betas,betas,RTOL) + u = np.array([ 25.57932637]) + np.testing.assert_allclose(reg.u[0],u,RTOL) + e_filtered = np.array([ 31.65374945]) + np.testing.assert_allclose(reg.e_filtered[0],e_filtered,RTOL) + predy = np.array([ 54.88767685]) + np.testing.assert_allclose(reg.predy[0],predy,RTOL) n = 49 - np.testing.assert_allclose(reg.n, n, RTOL) + np.testing.assert_allclose(reg.n,n,RTOL) k = 4 - np.testing.assert_allclose(reg.k, k, RTOL) - y = np.array([80.467003]) - np.testing.assert_allclose(reg.y[0], y, RTOL) - x = np.array([1.0, 19.531, 15.72598]) - np.testing.assert_allclose(reg.x.toarray()[0], x, RTOL) - yend = np.array([35.4585005]) - np.testing.assert_allclose(reg.yend[0], yend, RTOL) - z = np.array([1.0, 19.531, 15.72598, 35.4585005]) - np.testing.assert_allclose(reg.z.toarray()[0], z, RTOL) + np.testing.assert_allclose(reg.k,k,RTOL) + y = np.array([ 80.467003]) + np.testing.assert_allclose(reg.y[0],y,RTOL) + x = np.array([ 1. , 19.531 , 15.72598]) + np.testing.assert_allclose(reg.x.toarray()[0],x,RTOL) + yend = np.array([ 35.4585005]) + np.testing.assert_allclose(reg.yend[0],yend,RTOL) + z = np.array([ 1. , 19.531 , 15.72598 , 35.4585005]) + np.testing.assert_allclose(reg.z.toarray()[0],z,RTOL) my = 38.43622446938776 - np.testing.assert_allclose(reg.mean_y, my, RTOL) + np.testing.assert_allclose(reg.mean_y,my,RTOL) sy = 18.466069465206047 - np.testing.assert_allclose(reg.std_y, sy, RTOL) - vm = np.array([22.85691168, 0.48786563, 0.17914357, 0.46449287]) + np.testing.assert_allclose(reg.std_y,sy,RTOL) + vm = np.array([22.85691168, 0.48786563, 0.17914357, 0.46449287]) np.testing.assert_allclose(np.sqrt(reg.vm.diagonal()), vm, RTOL) sig2 = 181.78650186468832 - np.testing.assert_allclose(reg.sig2, sig2, RTOL) + np.testing.assert_allclose(reg.sig2,sig2,RTOL) pr2 = 0.3018280166937799 - np.testing.assert_allclose(reg.pr2, pr2, RTOL) + np.testing.assert_allclose(reg.pr2,pr2,RTOL) pr2_e = 0.3561355587000738 - np.testing.assert_allclose(reg.pr2_e, pr2_e, RTOL) - std_err = np.array([22.85692222, 0.48786559, 0.17914356, 0.46449318]) - np.testing.assert_allclose(reg.std_err, std_err, RTOL) - z_stat = np.array( - [ - [2.52051597e00, 1.17182922e-02], - [1.50535954e00, 1.32231664e-01], - [-3.31909311e00, 9.03103123e-04], - [-4.68530506e-01, 6.39405261e-01], - ] - ) - np.testing.assert_allclose(reg.z_stat, z_stat, RTOL) - + np.testing.assert_allclose(reg.pr2_e,pr2_e,RTOL) + std_err = np.array([ 22.85692222, 0.48786559, 0.17914356, 0.46449318]) + np.testing.assert_allclose(reg.std_err,std_err,RTOL) + z_stat = np.array([[ 2.52051597e+00, 1.17182922e-02], [ 1.50535954e+00, 1.32231664e-01], [ -3.31909311e+00, 9.03103123e-04], [ -4.68530506e-01, 6.39405261e-01]]) + np.testing.assert_allclose(reg.z_stat,z_stat,RTOL) -if __name__ == "__main__": - start_suppress = np.get_printoptions()["suppress"] - np.set_printoptions(suppress=True) +if __name__ == '__main__': + start_suppress = np.get_printoptions()['suppress'] + np.set_printoptions(suppress=True) unittest.main() np.set_printoptions(suppress=start_suppress) + diff --git a/spreg/tests/test_twosls_sp_regimes.py b/spreg/tests/test_twosls_sp_regimes.py index a264a973..f763ac74 100644 --- a/spreg/tests/test_twosls_sp_regimes.py +++ b/spreg/tests/test_twosls_sp_regimes.py @@ -6,527 +6,349 @@ from spreg.twosls_sp import GM_Lag from libpysal.common import RTOL - class TestGMLag_Regimes(unittest.TestCase): def setUp(self): - self.w = libpysal.weights.Queen.from_shapefile( - libpysal.examples.get_path("columbus.shp") - ) - self.w.transform = "r" - self.db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r") + self.w = libpysal.weights.Queen.from_shapefile(libpysal.examples.get_path("columbus.shp")) + self.w.transform = 'r' + self.db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), 'r') y = np.array(self.db.by_col("CRIME")) - self.y = np.reshape(y, (49, 1)) - self.r_var = "NSA" + self.y = np.reshape(y, (49,1)) + self.r_var = 'NSA' self.regimes = self.db.by_col(self.r_var) def test___init__(self): - # Matches SpaceStat + #Matches SpaceStat X = [] X.append(self.db.by_col("INC")) X.append(self.db.by_col("HOVAL")) self.X = np.array(X).T - reg = GM_Lag_Regimes( - self.y, - self.X, - self.regimes, - w=self.w, - sig2n_k=True, - regime_lag_sep=False, - regime_err_sep=False, - ) - betas = np.array( - [ - [45.14892906], - [-1.42593383], - [-0.11501037], - [40.99023016], - [-0.81498302], - [-0.28391409], - [0.4736163], - ] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - e_5 = np.array( - [[-1.47960519], [-7.93748769], [-5.88561835], [-13.37941105], [5.2524303]] - ) - np.testing.assert_allclose(reg.e_pred[0:5], e_5, RTOL) - h_0 = np.array( - [[0.0, 0.0, 0.0, 1.0, 19.531, 80.467003, 0.0, 0.0, 18.594, 35.4585005]] - ) - np.testing.assert_allclose(reg.h[0] * np.eye(10), h_0) + reg = GM_Lag_Regimes(self.y, self.X, self.regimes, w=self.w, sig2n_k=True, regime_lag_sep=False, regime_err_sep=False) + betas = np.array([[ 45.14892906], + [ -1.42593383], + [ -0.11501037], + [ 40.99023016], + [ -0.81498302], + [ -0.28391409], + [ 0.4736163 ]]) + np.testing.assert_allclose(reg.betas, betas,RTOL) + e_5 = np.array([[ -1.47960519], + [ -7.93748769], + [ -5.88561835], + [-13.37941105], + [ 5.2524303 ]]) + np.testing.assert_allclose(reg.e_pred[0:5], e_5,RTOL) + h_0 = np.array([[ 0. , 0. , 0. , 1. , 19.531 , + 80.467003 , 0. , 0. , 18.594 , 35.4585005]]) + np.testing.assert_allclose(reg.h[0]*np.eye(10), h_0) self.assertEqual(reg.k, 7) self.assertEqual(reg.kstar, 1) - np.testing.assert_allclose(reg.mean_y, 35.128823897959187, RTOL) + np.testing.assert_allclose(reg.mean_y, 35.128823897959187,RTOL) self.assertEqual(reg.n, 49) - np.testing.assert_allclose(reg.pr2, 0.6572182131915739, RTOL) - np.testing.assert_allclose(reg.pr2_e, 0.5779687278635434, RTOL) - pfora1a2 = np.array( - [ - -2.15017629, - -0.30169328, - -0.07603704, - -22.06541809, - 0.45738058, - 0.02805828, - 0.39073923, - ] - ) - np.testing.assert_allclose(reg.pfora1a2[0], pfora1a2, RTOL) - predy_5 = np.array( - [[13.93216104], [23.46424269], [34.43510955], [44.32473878], [44.39117516]] - ) - np.testing.assert_allclose(reg.predy[0:5], predy_5, RTOL) - predy_e_5 = np.array( - [[17.20558519], [26.73924169], [36.51239935], [45.76717105], [45.4790797]] - ) - np.testing.assert_allclose(reg.predy_e[0:5], predy_e_5, RTOL) - q_5 = np.array([[0.0, 0.0, 18.594, 35.4585005]]) - np.testing.assert_allclose(reg.q[0] * np.eye(4), q_5, RTOL) - self.assertEqual(reg.robust, "unadjusted") - np.testing.assert_allclose(reg.sig2n_k, 109.76462904625834, RTOL) - np.testing.assert_allclose(reg.sig2n, 94.08396775393571, RTOL) - np.testing.assert_allclose(reg.sig2, 109.76462904625834, RTOL) - np.testing.assert_allclose(reg.std_y, 16.732092091229699, RTOL) - u_5 = np.array( - [[1.79381896], [-4.66248869], [-3.80832855], [-11.93697878], [6.34033484]] - ) - np.testing.assert_allclose(reg.u[0:5], u_5, RTOL) - np.testing.assert_allclose(reg.utu, 4610.11441994285, RTOL) - varb = np.array( - [ - 1.23841820e00, - -3.65620114e-02, - -1.21919663e-03, - 1.00057547e00, - -2.07403182e-02, - -1.27232693e-03, - -1.77184084e-02, - ] - ) - np.testing.assert_allclose(reg.varb[0], varb, RTOL) - vm = np.array( - [ - 1.35934514e02, - -4.01321561e00, - -1.33824666e-01, - 1.09827796e02, - -2.27655334e00, - -1.39656494e-01, - -1.94485452e00, - ] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - x_0 = np.array([[0.0, 0.0, 0.0, 1.0, 19.531, 80.467003]]) - np.testing.assert_allclose(reg.x[0] * np.eye(6), x_0, RTOL) - y_5 = np.array([[15.72598], [18.801754], [30.626781], [32.38776], [50.73151]]) - np.testing.assert_allclose(reg.y[0:5], y_5, RTOL) - yend_5 = np.array( - [[24.7142675], [26.24684033], [29.411751], [34.64647575], [40.4653275]] - ) - np.testing.assert_allclose(reg.yend[0:5] * np.array([[1]]), yend_5, RTOL) - z_0 = np.array([[0.0, 0.0, 0.0, 1.0, 19.531, 80.467003, 24.7142675]]) - np.testing.assert_allclose(reg.z[0] * np.eye(7), z_0, RTOL) - zthhthi = np.array( - [ - 1.00000000e00, - -2.35922393e-16, - 5.55111512e-17, - 0.00000000e00, - 0.00000000e00, - 0.00000000e00, - -4.44089210e-16, - 2.22044605e-16, - 0.00000000e00, - 0.00000000e00, - ] - ) + np.testing.assert_allclose(reg.pr2, 0.6572182131915739,RTOL) + np.testing.assert_allclose(reg.pr2_e, 0.5779687278635434,RTOL) + pfora1a2 = np.array([ -2.15017629, -0.30169328, -0.07603704, -22.06541809, + 0.45738058, 0.02805828, 0.39073923]) + np.testing.assert_allclose(reg.pfora1a2[0], pfora1a2,RTOL) + predy_5 = np.array([[ 13.93216104], + [ 23.46424269], + [ 34.43510955], + [ 44.32473878], + [ 44.39117516]]) + np.testing.assert_allclose(reg.predy[0:5], predy_5,RTOL) + predy_e_5 = np.array([[ 17.20558519], + [ 26.73924169], + [ 36.51239935], + [ 45.76717105], + [ 45.4790797 ]]) + np.testing.assert_allclose(reg.predy_e[0:5], predy_e_5,RTOL) + q_5 = np.array([[ 0. , 0. , 18.594 , 35.4585005]]) + np.testing.assert_allclose(reg.q[0]*np.eye(4), q_5, RTOL) + self.assertEqual(reg.robust, 'unadjusted') + np.testing.assert_allclose(reg.sig2n_k, 109.76462904625834,RTOL) + np.testing.assert_allclose(reg.sig2n, 94.08396775393571,RTOL) + np.testing.assert_allclose(reg.sig2, 109.76462904625834,RTOL) + np.testing.assert_allclose(reg.std_y, 16.732092091229699,RTOL) + u_5 = np.array([[ 1.79381896], + [ -4.66248869], + [ -3.80832855], + [-11.93697878], + [ 6.34033484]]) + np.testing.assert_allclose(reg.u[0:5], u_5,RTOL) + np.testing.assert_allclose(reg.utu, 4610.11441994285,RTOL) + varb = np.array([ 1.23841820e+00, -3.65620114e-02, -1.21919663e-03, + 1.00057547e+00, -2.07403182e-02, -1.27232693e-03, + -1.77184084e-02]) + np.testing.assert_allclose(reg.varb[0], varb,RTOL) + vm = np.array([ 1.35934514e+02, -4.01321561e+00, -1.33824666e-01, + 1.09827796e+02, -2.27655334e+00, -1.39656494e-01, + -1.94485452e+00]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + x_0 = np.array([[ 0. , 0. , 0. , 1. , 19.531 , + 80.467003]]) + np.testing.assert_allclose(reg.x[0]*np.eye(6), x_0,RTOL) + y_5 = np.array([[ 15.72598 ], + [ 18.801754], + [ 30.626781], + [ 32.38776 ], + [ 50.73151 ]]) + np.testing.assert_allclose(reg.y[0:5], y_5,RTOL) + yend_5 = np.array([[ 24.7142675 ], + [ 26.24684033], + [ 29.411751 ], + [ 34.64647575], + [ 40.4653275 ]]) + np.testing.assert_allclose(reg.yend[0:5]*np.array([[1]]), yend_5,RTOL) + z_0 = np.array([[ 0. , 0. , 0. , 1. , 19.531 , + 80.467003 , 24.7142675]]) + np.testing.assert_allclose(reg.z[0]*np.eye(7), z_0,RTOL) + zthhthi = np.array([ 1.00000000e+00, -2.35922393e-16, 5.55111512e-17, + 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, + -4.44089210e-16, 2.22044605e-16, 0.00000000e+00, + 0.00000000e+00]) # np.testing.assert_allclose(reg.zthhthi[0], zthhthi, RTOL) np.testing.assert_array_almost_equal(reg.zthhthi[0], zthhthi) - chow_regi = np.array( - [[0.19692667, 0.65721307], [0.5666492, 0.45159351], [0.45282066, 0.5009985]] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.82409867601863462, RTOL) - + chow_regi = np.array([[ 0.19692667, 0.65721307], + [ 0.5666492 , 0.45159351], + [ 0.45282066, 0.5009985 ]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 0.82409867601863462,RTOL) + def test_init_discbd(self): - # Matches SpaceStat. + #Matches SpaceStat. X = np.array(self.db.by_col("INC")) - X = np.reshape(X, (49, 1)) + X = np.reshape(X, (49,1)) yd = np.array(self.db.by_col("HOVAL")) - yd = np.reshape(yd, (49, 1)) + yd = np.reshape(yd, (49,1)) q = np.array(self.db.by_col("DISCBD")) - q = np.reshape(q, (49, 1)) - reg = GM_Lag_Regimes( - self.y, - X, - self.regimes, - yend=yd, - q=q, - lag_q=False, - w=self.w, - sig2n_k=True, - regime_lag_sep=False, - regime_err_sep=False, - ) - tbetas = np.array( - [ - [42.7266306], - [-0.15552345], - [37.70545276], - [-0.5341577], - [-0.68305796], - [-0.37106077], - [0.55809516], - ] - ) - np.testing.assert_allclose(tbetas, reg.betas, RTOL) - vm = np.array( - [ - 270.62979422, - 3.62539081, - 327.89638627, - 6.24949355, - -5.25333106, - -6.01743515, - -4.19290074, - ] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - e_3 = np.array([[-0.33142796], [-9.51719607], [-7.86272153]]) - np.testing.assert_allclose(reg.e_pred[0:3], e_3, RTOL) - u_3 = np.array([[4.51839601], [-5.67363147], [-5.1927562]]) - np.testing.assert_allclose(reg.u[0:3], u_3, RTOL) - predy_3 = np.array([[11.20758399], [24.47538547], [35.8195372]]) - np.testing.assert_allclose(reg.predy[0:3], predy_3, RTOL) - predy_e_3 = np.array([[16.05740796], [28.31895007], [38.48950253]]) - np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3, RTOL) - chow_regi = np.array( - [ - [0.13130991, 0.71707772], - [0.04740966, 0.82763357], - [0.15474413, 0.6940423], - ] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.31248100032096549, RTOL) - + q = np.reshape(q, (49,1)) + reg = GM_Lag_Regimes(self.y, X, self.regimes, yend=yd, q=q, lag_q=False, w=self.w, sig2n_k=True, regime_lag_sep=False, regime_err_sep=False) + tbetas = np.array([[ 42.7266306 ], + [ -0.15552345], + [ 37.70545276], + [ -0.5341577 ], + [ -0.68305796], + [ -0.37106077], + [ 0.55809516]]) + np.testing.assert_allclose(tbetas, reg.betas,RTOL) + vm = np.array([ 270.62979422, 3.62539081, 327.89638627, 6.24949355, + -5.25333106, -6.01743515, -4.19290074]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + e_3 = np.array([[-0.33142796], + [-9.51719607], + [-7.86272153]]) + np.testing.assert_allclose(reg.e_pred[0:3], e_3,RTOL) + u_3 = np.array([[ 4.51839601], + [-5.67363147], + [-5.1927562 ]]) + np.testing.assert_allclose(reg.u[0:3], u_3,RTOL) + predy_3 = np.array([[ 11.20758399], + [ 24.47538547], + [ 35.8195372 ]]) + np.testing.assert_allclose(reg.predy[0:3], predy_3,RTOL) + predy_e_3 = np.array([[ 16.05740796], + [ 28.31895007], + [ 38.48950253]]) + np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3,RTOL) + chow_regi = np.array([[ 0.13130991, 0.71707772], + [ 0.04740966, 0.82763357], + [ 0.15474413, 0.6940423 ]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 0.31248100032096549,RTOL) + def test_lag_q(self): X = np.array(self.db.by_col("INC")) - X = np.reshape(X, (49, 1)) + X = np.reshape(X, (49,1)) yd = np.array(self.db.by_col("HOVAL")) - yd = np.reshape(yd, (49, 1)) + yd = np.reshape(yd, (49,1)) q = np.array(self.db.by_col("DISCBD")) - q = np.reshape(q, (49, 1)) - reg = GM_Lag_Regimes( - self.y, - X, - self.regimes, - yend=yd, - q=q, - w=self.w, - sig2n_k=True, - regime_lag_sep=False, - regime_err_sep=False, - ) - tbetas = np.array( - [ - [37.87698329], - [-0.89426982], - [31.4714777], - [-0.71640525], - [-0.28494432], - [-0.2294271], - [0.62996544], - ] - ) - np.testing.assert_allclose(tbetas, reg.betas, RTOL) - vm = np.array( - [ - 128.25714554, - -0.38975354, - 95.7271044, - -1.8429218, - -1.75331978, - -0.18240338, - -1.67767464, - ] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - chow_regi = np.array( - [ - [0.43494049, 0.50957463], - [0.02089281, 0.88507135], - [0.01180501, 0.91347943], - ] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.54288190938307757, RTOL) - + q = np.reshape(q, (49,1)) + reg = GM_Lag_Regimes(self.y, X, self.regimes, yend=yd, q=q, w=self.w, sig2n_k=True, regime_lag_sep=False, regime_err_sep=False) + tbetas = np.array([[ 37.87698329], + [ -0.89426982], + [ 31.4714777 ], + [ -0.71640525], + [ -0.28494432], + [ -0.2294271 ], + [ 0.62996544]]) + np.testing.assert_allclose(tbetas, reg.betas,RTOL) + vm = np.array([ 128.25714554, -0.38975354, 95.7271044 , -1.8429218 , + -1.75331978, -0.18240338, -1.67767464]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + chow_regi = np.array([[ 0.43494049, 0.50957463], + [ 0.02089281, 0.88507135], + [ 0.01180501, 0.91347943]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 0.54288190938307757,RTOL) + def test_all_regi(self): X = np.array(self.db.by_col("INC")) - X = np.reshape(X, (49, 1)) + X = np.reshape(X, (49,1)) yd = np.array(self.db.by_col("HOVAL")) - yd = np.reshape(yd, (49, 1)) + yd = np.reshape(yd, (49,1)) q = np.array(self.db.by_col("DISCBD")) - q = np.reshape(q, (49, 1)) - reg = GM_Lag_Regimes( - self.y, - X, - self.regimes, - yend=yd, - q=q, - w=self.w, - regime_lag_sep=False, - regime_err_sep=True, - ) - tbetas = np.array( - [ - [ - 37.87698329, - -0.89426982, - 31.4714777, - -0.71640525, - -0.28494432, - -0.2294271, - 0.62996544, - ] - ] - ) - np.testing.assert_allclose(tbetas, reg.betas.T, RTOL) - vm = np.array( - [ - 70.38291551, - -0.64868787, - 49.25453215, - -0.62851534, - -0.75413453, - -0.12674433, - -0.97179236, - ] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - e_3 = np.array([[-2.66997799], [-7.69786264], [-4.39412782]]) - np.testing.assert_allclose(reg.e_pred[0:3], e_3, RTOL) - u_3 = np.array([[1.13879007], [-3.76873198], [-1.89671717]]) - np.testing.assert_allclose(reg.u[0:3], u_3, RTOL) - predy_3 = np.array([[14.58718993], [22.57048598], [32.52349817]]) - np.testing.assert_allclose(reg.predy[0:3], predy_3, RTOL) - predy_e_3 = np.array([[18.39595799], [26.49961664], [35.02090882]]) - np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3, RTOL) - chow_regi = np.array( - [ - [0.60091096, 0.43823066], - [0.03006744, 0.8623373], - [0.01943727, 0.88912016], - ] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.88634854058300516, RTOL) - + q = np.reshape(q, (49,1)) + reg = GM_Lag_Regimes(self.y, X, self.regimes, yend=yd, q=q, w=self.w, regime_lag_sep=False, regime_err_sep=False) + tbetas = np.array([[ 37.87698329, -0.89426982, 31.4714777 , -0.71640525, + -0.28494432, -0.2294271 , 0.62996544]]) + np.testing.assert_allclose(tbetas, reg.betas.T,RTOL) + vm = np.array([109.934696, -0.334074, 82.051804, -1.579647, -1.502846, + -0.156346, -1.438007]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + e_3 = np.array([[-2.66997799], + [-7.69786264], + [-4.39412782]]) + np.testing.assert_allclose(reg.e_pred[0:3], e_3,RTOL) + u_3 = np.array([[ 1.13879007], + [-3.76873198], + [-1.89671717]]) + np.testing.assert_allclose(reg.u[0:3], u_3,RTOL) + predy_3 = np.array([[ 14.58718993], + [ 22.57048598], + [ 32.52349817]]) + np.testing.assert_allclose(reg.predy[0:3], predy_3,RTOL) + predy_e_3 = np.array([[ 18.39595799], + [ 26.49961664], + [ 35.02090882]]) + np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3,RTOL) + chow_regi = np.array([[0.507431, 0.476253], + [0.024375, 0.875935], + [0.013773, 0.906578]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,1e-04) + np.testing.assert_allclose(reg.chow.joint[0], 0.633362,RTOL) + def test_all_regi_sig2(self): - # Artficial: + #Artficial: n = 256 - x1 = np.random.uniform(-10, 10, (n, 1)) - x2 = np.random.uniform(1, 5, (n, 1)) - q = x2 + np.random.normal(0, 1, (n, 1)) - x = np.hstack((x1, x2)) - y = np.dot( - np.hstack((np.ones((n, 1)), x)), np.array([[1], [0.5], [2]]) - ) + np.random.normal(0, 1, (n, 1)) + x1 = np.random.uniform(-10,10,(n,1)) + x2 = np.random.uniform(1,5,(n,1)) + q = x2 + np.random.normal(0,1,(n,1)) + x = np.hstack((x1,x2)) + y = np.dot(np.hstack((np.ones((n,1)),x)),np.array([[1],[0.5],[2]])) + np.random.normal(0,1,(n,1)) latt = int(np.sqrt(n)) - w = libpysal.weights.util.lat2W(latt, latt) - w.transform = "r" - regi = [0] * (n // 2) + [1] * (n // 2) - model = GM_Lag_Regimes( - y, x1, regi, q=q, yend=x2, w=w, regime_lag_sep=True, regime_err_sep=True - ) - w1 = libpysal.weights.util.lat2W(latt // 2, latt) - w1.transform = "r" - model1 = GM_Lag( - y[0 : (n // 2)].reshape((n // 2), 1), - x1[0 : (n // 2)], - yend=x2[0 : (n // 2)], - q=q[0 : (n // 2)], - w=w1, - ) - model2 = GM_Lag( - y[(n // 2) : n].reshape((n // 2), 1), - x1[(n // 2) : n], - yend=x2[(n // 2) : n], - q=q[(n // 2) : n], - w=w1, - ) + w = libpysal.weights.util.lat2W(latt,latt) + w.transform='r' + regi = [0]*(n//2) + [1]*(n//2) + model = GM_Lag_Regimes(y, x1, regi, q=q, yend=x2, w=w, regime_lag_sep=True, regime_err_sep=True) + w1 = libpysal.weights.util.lat2W(latt//2,latt) + w1.transform='r' + model1 = GM_Lag(y[0:(n//2)].reshape((n//2),1), x1[0:(n//2)],yend=x2[0:(n//2)], q=q[0:(n//2)], w=w1) + model2 = GM_Lag(y[(n//2):n].reshape((n//2),1), x1[(n//2):n],yend=x2[(n//2):n], q=q[(n//2):n], w=w1) tbetas = np.vstack((model1.betas, model2.betas)) - np.testing.assert_allclose(model.betas, tbetas) - vm = np.hstack((model1.vm.diagonal(), model2.vm.diagonal())) - np.testing.assert_allclose(model.vm.diagonal(), vm, RTOL) - # Columbus: + np.testing.assert_allclose(model.betas,tbetas) + vm = np.hstack((model1.vm.diagonal(),model2.vm.diagonal())) + np.testing.assert_allclose(model.vm.diagonal(), vm,RTOL) + #Columbus: X = np.array(self.db.by_col("INC")) - X = np.reshape(X, (49, 1)) + X = np.reshape(X, (49,1)) yd = np.array(self.db.by_col("HOVAL")) - yd = np.reshape(yd, (49, 1)) + yd = np.reshape(yd, (49,1)) q = np.array(self.db.by_col("DISCBD")) - q = np.reshape(q, (49, 1)) - reg = GM_Lag_Regimes( - self.y, - X, - self.regimes, - yend=yd, - q=q, - w=self.w, - regime_lag_sep=True, - regime_err_sep=True, - ) - tbetas = np.array( - [ - [42.35827477], - [-0.09472413], - [-0.68794223], - [0.54482537], - [32.24228762], - [-0.12304063], - [-0.46840307], - [0.67108156], - ] - ) + q = np.reshape(q, (49,1)) + reg = GM_Lag_Regimes(self.y, X, self.regimes, yend=yd, q=q, w=self.w,regime_lag_sep=True, regime_err_sep = True) + tbetas = np.array([[ 42.35827477], + [ -0.09472413], + [ -0.68794223], + [ 0.54482537], + [ 32.24228762], + [ -0.12304063], + [ -0.46840307], + [ 0.67108156]]) np.testing.assert_allclose(tbetas, reg.betas) - vm = np.array( - [200.92894859, 4.56244927, -4.85603079, -2.9755413, 0.0, 0.0, 0.0, 0.0] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - e_3 = np.array([[-1.32209547], [-13.15611199], [-11.62357696]]) - np.testing.assert_allclose(reg.e_pred[0:3], e_3, RTOL) - u_3 = np.array([[6.99250069], [-7.5665856], [-7.04753328]]) - np.testing.assert_allclose(reg.u[0:3], u_3, RTOL) - predy_3 = np.array([[8.73347931], [26.3683396], [37.67431428]]) - np.testing.assert_allclose(reg.predy[0:3], predy_3, RTOL) - predy_e_3 = np.array([[17.04807547], [31.95786599], [42.25035796]]) - np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3, RTOL) - chow_regi = np.array( - [ - [1.51825373e-01, 6.96797034e-01], - [3.20105698e-04, 9.85725412e-01], - [8.58836996e-02, 7.69476896e-01], - [1.01357290e-01, 7.50206873e-01], - ] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.38417230022512161, RTOL) + vm = np.array([ 200.92894859, 4.56244927, -4.85603079, -2.9755413 , + 0. , 0. , 0. , 0. ]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + e_3 = np.array([[ -1.32209547], + [-13.15611199], + [-11.62357696]]) + np.testing.assert_allclose(reg.e_pred[0:3], e_3,RTOL) + u_3 = np.array([[ 6.99250069], + [-7.5665856 ], + [-7.04753328]]) + np.testing.assert_allclose(reg.u[0:3], u_3,RTOL) + predy_3 = np.array([[ 8.73347931], + [ 26.3683396 ], + [ 37.67431428]]) + np.testing.assert_allclose(reg.predy[0:3], predy_3,RTOL) + predy_e_3 = np.array([[ 17.04807547], + [ 31.95786599], + [ 42.25035796]]) + np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3,RTOL) + chow_regi = np.array([[ 1.51825373e-01, 6.96797034e-01], + [ 3.20105698e-04, 9.85725412e-01], + [ 8.58836996e-02, 7.69476896e-01], + [ 1.01357290e-01, 7.50206873e-01]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 0.38417230022512161,RTOL) def test_fixed_const(self): X = np.array(self.db.by_col("INC")) - X = np.reshape(X, (49, 1)) + X = np.reshape(X, (49,1)) yd = np.array(self.db.by_col("HOVAL")) - yd = np.reshape(yd, (49, 1)) + yd = np.reshape(yd, (49,1)) q = np.array(self.db.by_col("DISCBD")) - q = np.reshape(q, (49, 1)) - reg = GM_Lag_Regimes( - self.y, - X, - self.regimes, - yend=yd, - q=q, - w=self.w, - constant_regi="one", - regime_lag_sep=False, - regime_err_sep=False, - ) - tbetas = np.array( - [ - [-0.37658823], - [-0.9666079], - [35.5445944], - [-0.45793559], - [-0.24216904], - [0.62500602], - ] - ) - np.testing.assert_allclose(tbetas, reg.betas, RTOL) - vm = np.array( - [1.4183697, -0.05975784, -0.27161863, -0.62517245, 0.02266177, 0.00312976] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - e_3 = np.array([[0.17317815], [-5.53766328], [-3.82889307]]) - np.testing.assert_allclose(reg.e_pred[0:3], e_3, RTOL) - u_3 = np.array([[3.10025518], [-1.83150689], [-1.49598494]]) - np.testing.assert_allclose(reg.u[0:3], u_3, RTOL) - predy_3 = np.array([[12.62572482], [20.63326089], [32.12276594]]) - np.testing.assert_allclose(reg.predy[0:3], predy_3, RTOL) - predy_e_3 = np.array([[15.55280185], [24.33941728], [34.45567407]]) - np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3, RTOL) - chow_regi = np.array( - [[1.85767047e-01, 6.66463269e-01], [1.19445012e01, 5.48089036e-04]] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 12.017256217621382, RTOL) + q = np.reshape(q, (49,1)) + reg = GM_Lag_Regimes(self.y, X, self.regimes, yend=yd, q=q, w=self.w, constant_regi='one', regime_lag_sep=False, regime_err_sep=False) + tbetas = np.array([[ -0.37658823], + [ -0.9666079 ], + [ 35.5445944 ], + [ -0.45793559], + [ -0.24216904], + [ 0.62500602]]) + np.testing.assert_allclose(tbetas, reg.betas,RTOL) + vm = np.array([ 1.4183697 , -0.05975784, -0.27161863, -0.62517245, 0.02266177, + 0.00312976]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + e_3 = np.array([[ 0.17317815], + [-5.53766328], + [-3.82889307]]) + np.testing.assert_allclose(reg.e_pred[0:3], e_3,RTOL) + u_3 = np.array([[ 3.10025518], + [-1.83150689], + [-1.49598494]]) + np.testing.assert_allclose(reg.u[0:3], u_3,RTOL) + predy_3 = np.array([[ 12.62572482], + [ 20.63326089], + [ 32.12276594]]) + np.testing.assert_allclose(reg.predy[0:3], predy_3,RTOL) + predy_e_3 = np.array([[ 15.55280185], + [ 24.33941728], + [ 34.45567407]]) + np.testing.assert_allclose(reg.predy_e[0:3], predy_e_3,RTOL) + chow_regi = np.array([[ 1.85767047e-01, 6.66463269e-01], + [ 1.19445012e+01, 5.48089036e-04]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 12.017256217621382,RTOL) def test_names(self): - y_var = "CRIME" - x_var = ["INC"] + y_var = 'CRIME' + x_var = ['INC'] x = np.array([self.db.by_col(name) for name in x_var]).T - yd_var = ["HOVAL"] + yd_var = ['HOVAL'] yd = np.array([self.db.by_col(name) for name in yd_var]).T - q_var = ["DISCBD"] + q_var = ['DISCBD'] q = np.array([self.db.by_col(name) for name in q_var]).T - r_var = "NSA" - reg = GM_Lag_Regimes( - self.y, - x, - self.regimes, - yend=yd, - q=q, - w=self.w, - name_y=y_var, - name_x=x_var, - name_yend=yd_var, - name_q=q_var, - name_regimes=r_var, - name_ds="columbus", - name_w="columbus.gal", - regime_lag_sep=False, - regime_err_sep=False, - ) - betas = np.array( - [ - [37.87698329], - [-0.89426982], - [31.4714777], - [-0.71640525], - [-0.28494432], - [-0.2294271], - [0.62996544], - ] - ) - np.testing.assert_allclose(reg.betas, betas, RTOL) - vm = np.array( - [ - 109.93469618, - -0.33407447, - 82.05180377, - -1.57964725, - -1.50284553, - -0.15634575, - -1.43800683, - ] - ) - np.testing.assert_allclose(reg.vm[0], vm, RTOL) - chow_regi = np.array( - [ - [0.50743058, 0.47625326], - [0.02437494, 0.87593468], - [0.01377251, 0.9065777], - ] - ) - np.testing.assert_allclose(reg.chow.regi, chow_regi, RTOL) - np.testing.assert_allclose(reg.chow.joint[0], 0.63336222761359162, RTOL) - self.assertListEqual(reg.name_x, ["0_CONSTANT", "0_INC", "1_CONSTANT", "1_INC"]) - self.assertListEqual(reg.name_yend, ["0_HOVAL", "1_HOVAL", "_Global_W_CRIME"]) - self.assertListEqual( - reg.name_q, - ["0_DISCBD", "0_W_INC", "0_W_DISCBD", "1_DISCBD", "1_W_INC", "1_W_DISCBD"], - ) + r_var = 'NSA' + reg = GM_Lag_Regimes(self.y, x, self.regimes, yend=yd, q=q, w=self.w, name_y=y_var, name_x=x_var, name_yend=yd_var, name_q=q_var, name_regimes=r_var, name_ds='columbus', name_w='columbus.gal', regime_lag_sep=False, regime_err_sep=False) + betas = np.array([[ 37.87698329], + [ -0.89426982], + [ 31.4714777 ], + [ -0.71640525], + [ -0.28494432], + [ -0.2294271 ], + [ 0.62996544]]) + np.testing.assert_allclose(reg.betas, betas,RTOL) + vm = np.array([ 109.93469618, -0.33407447, 82.05180377, -1.57964725, + -1.50284553, -0.15634575, -1.43800683]) + np.testing.assert_allclose(reg.vm[0], vm,RTOL) + chow_regi = np.array([[ 0.50743058, 0.47625326], + [ 0.02437494, 0.87593468], + [ 0.01377251, 0.9065777 ]]) + np.testing.assert_allclose(reg.chow.regi, chow_regi,RTOL) + np.testing.assert_allclose(reg.chow.joint[0], 0.63336222761359162,RTOL) + self.assertListEqual(reg.name_x, ['0_CONSTANT', '0_INC', '1_CONSTANT', '1_INC']) + self.assertListEqual(reg.name_yend, ['0_HOVAL', '1_HOVAL', '_Global_W_CRIME']) + self.assertListEqual(reg.name_q, ['0_DISCBD', '0_W_INC', '0_W_DISCBD', '1_DISCBD', '1_W_INC', '1_W_DISCBD']) self.assertEqual(reg.name_y, y_var) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() From 1af9b1ff24828adf85a9bd91726911680b5bac78 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 13 Sep 2023 17:34:39 -0300 Subject: [PATCH 17/28] Attempt at fixing the SUR-related failures due to deprecation --- spreg/diagnostics_sur.py | 2 +- spreg/sur_utils.py | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/spreg/diagnostics_sur.py b/spreg/diagnostics_sur.py index 8e145b54..7fdfdb1d 100644 --- a/spreg/diagnostics_sur.py +++ b/spreg/diagnostics_sur.py @@ -221,7 +221,7 @@ def surLMlag(n_eq, WS, bigy, bigX, bigE, bigYP, sig, varb): """ # Score - Y = np.hstack((bigy[r]) for r in range(n_eq)) + Y = np.hstack([bigy[r] for r in range(n_eq)]) WY = WS * Y EWY = np.dot(bigE.T, WY) sigi = la.inv(sig) diff --git a/spreg/sur_utils.py b/spreg/sur_utils.py index 50dc7341..bb78d3c8 100644 --- a/spreg/sur_utils.py +++ b/spreg/sur_utils.py @@ -290,7 +290,9 @@ def sur_dict2mat(dicts): """ n_dicts = len(dicts.keys()) - mat = np.vstack((dicts[t] for t in range(n_dicts))) + #mat = np.vstack((dicts[t] for t in range(n_dicts))) + mat = np.vstack([dicts[t] for t in range(n_dicts)]) + return mat @@ -392,10 +394,11 @@ def sur_est(bigXX, bigXy, bigE, bigK): for t in range(n_eq): sxy = sxy + sigi[r, t] * bigXy[(r, t)] sigiXy[r] = sxy - xsigy = np.vstack((sigiXy[t] for t in range(n_eq))) - xsigx = np.vstack( - ((np.hstack(sigiXX[(r, t)] for t in range(n_eq))) for r in range(n_eq)) - ) + #xsigy = np.vstack((sigiXy[t] for t in range(n_eq))) + xsigy = np.vstack(tuple(sigiXy[t] for t in range(n_eq))) + #xsigx = np.vstack(((np.hstack(sigiXX[(r, t)] for t in range(n_eq))) for r in range(n_eq))) + array_lists = [[sigiXX[(r, t)] for t in range(n_eq)] for r in range(n_eq)] + xsigx = np.vstack([np.hstack(arr_list) for arr_list in array_lists]) varb = la.inv(xsigx) beta = np.dot(varb, xsigy) bSUR = sur_mat2dict(beta, bigK) @@ -423,7 +426,9 @@ def sur_resids(bigy, bigX, beta): """ n_eq = len(bigy.keys()) - bigE = np.hstack((bigy[r] - spdot(bigX[r], beta[r])) for r in range(n_eq)) + #bigE = np.hstack((bigy[r] - spdot(bigX[r], beta[r])) for r in range(n_eq)) + bigE = np.hstack(tuple(bigy[r] - spdot(bigX[r], beta[r]) for r in range(n_eq))) + return bigE @@ -449,7 +454,9 @@ def sur_predict(bigy, bigX, beta): """ n_eq = len(bigy.keys()) - bigYP = np.hstack(spdot(bigX[r], beta[r]) for r in range(n_eq)) + #bigYP = np.hstack(spdot(bigX[r], beta[r]) for r in range(n_eq)) + bigYP = np.hstack([spdot(bigX[r], beta[r]) for r in range(n_eq)]) + return bigYP From 503316c4855a4ace846e2e8ec86601ffcb769d46 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 13 Sep 2023 17:42:40 -0300 Subject: [PATCH 18/28] Attempt at fixing last failed SUR file --- spreg/sur_error.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spreg/sur_error.py b/spreg/sur_error.py index b88e1220..37143f5d 100644 --- a/spreg/sur_error.py +++ b/spreg/sur_error.py @@ -553,7 +553,7 @@ def __init__(self, bigy, bigX, w, epsilon=0.0000001): bigE = sur_resids(self.bigy, self.bigX, b1) res = minimize( clik, - lam, + np.array(lam).flatten(), args=(self.n, self.n2, self.n_eq, bigE, I, WS), method="L-BFGS-B", bounds=lambdabounds, @@ -1119,7 +1119,7 @@ def _test(): bigy0, bigX0, w, - regimes=regimes, + #regimes=regimes, name_bigy=bigyvars0, name_bigX=bigXvars0, name_w="natqueen", From e949afa260fec1558349c5d839c9b6ccc7f95cb4 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Wed, 13 Sep 2023 18:01:14 -0300 Subject: [PATCH 19/28] Following Eli's fix! Thanks, Eli! =) --- .github/workflows/unittests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 5e023225..e8db45b7 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -47,7 +47,7 @@ - name: install bleeding edge libpysal (only Ubuntu / Python 3.9) shell: bash -l {0} - run: pip install git+https://github.com/pysal/libpysal.git@master + run: pip install git+https://github.com/pysal/libpysal.git@main if: matrix.os == 'ubuntu-latest' && contains(matrix.environment-file, 'DEV') - name: run tests - bash From c74cf34697340bebf1a39319dad6b64eec272f22 Mon Sep 17 00:00:00 2001 From: Pedro Amaral Date: Thu, 14 Sep 2023 14:14:59 -0300 Subject: [PATCH 20/28] Adding message about the lack of implementation of latex format for the output --- spreg/output.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spreg/output.py b/spreg/output.py index c871c842..25f94e66 100644 --- a/spreg/output.py +++ b/spreg/output.py @@ -16,6 +16,8 @@ ############################################################################### def output(reg, vm, other_end=False, robust=False, latex=False): + if latex: + print("Warning: Latex output not implemented yet. Using standard output instead.") strSummary = output_start(reg) for eq in reg.output['equation'].unique(): try: From 42b59be31fd3f2cc6d8a3e334bd9044ad7d1eac6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:24:33 -0400 Subject: [PATCH 21/28] Bump codecov/codecov-action from 3 to 4 (#119) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v3...v4) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/unittests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 5e023225..f0ef85f7 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -61,7 +61,7 @@ if: matrix.os == 'windows-latest' - name: codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml From 3d0b8c05c77d95c1e705e9ffaaa7593ee075fcf4 Mon Sep 17 00:00:00 2001 From: James Gaboardi Date: Sat, 16 Sep 2023 13:38:20 -0400 Subject: [PATCH 22/28] Revert "Bump codecov/codecov-action from 3 to 4 (#119)" (#120) This reverts commit 42b59be31fd3f2cc6d8a3e334bd9044ad7d1eac6. --- .github/workflows/unittests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index f0ef85f7..5e023225 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -61,7 +61,7 @@ if: matrix.os == 'windows-latest' - name: codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml From 0fe03b2e6435e03fc64e7dcf0778e62d14a71a46 Mon Sep 17 00:00:00 2001 From: eli knaap Date: Wed, 20 Sep 2023 20:17:13 -0700 Subject: [PATCH 23/28] modernize infrastructure --- .gitattributes | 1 - .github/release.yml | 16 + .github/workflows/build_docs.yml | 63 +- .github/workflows/release_and_publish.yml | 103 +- .github/workflows/unittests.yml | 2 +- MANIFEST.in | 3 - Makefile | 24 - ci/{38.yaml => 311.yaml} | 2 +- docs/conf.py | 4 - environment.yml | 4 +- pyproject.toml | 105 + requirements.txt | 5 - requirements_docs.txt | 5 - requirements_plus.txt | 11 - requirements_tests.txt | 8 - setup.cfg | 7 - setup.py | 71 - spreg/__init__.py | 45 +- spreg/_version.py | 686 ------- spreg/diagnostics_panel.py | 2 +- versioneer.py | 2189 --------------------- 21 files changed, 231 insertions(+), 3125 deletions(-) delete mode 100644 .gitattributes create mode 100644 .github/release.yml delete mode 100644 MANIFEST.in delete mode 100644 Makefile rename ci/{38.yaml => 311.yaml} (96%) create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 requirements_docs.txt delete mode 100644 requirements_plus.txt delete mode 100644 requirements_tests.txt delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 spreg/_version.py delete mode 100644 versioneer.py diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index f606b65c..00000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -spreg/_version.py export-subst diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..f5435449 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,16 @@ +changelog: + exclude: + labels: + - ignore-for-release + authors: + - dependabot + categories: + - title: Bug Fixes + labels: + - bug + - title: Enhancements + labels: + - enhancement + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index dda4d0b0..af0611af 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -1,44 +1,48 @@ name: Build Docs - on: push: - # Sequence of patterns matched against refs/tags - tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 - workflow_dispatch: - inputs: - version: - description: Manual Doc Build Reason - default: test - required: false + branches: + - master + - main jobs: docs: - name: build & push docs + name: CI (${{ matrix.os }}-${{ matrix.environment-file }}) runs-on: ${{ matrix.os }} - timeout-minutes: 90 + continue-on-error: ${{ matrix.experimental }} + timeout-minutes: 20 strategy: matrix: os: ['ubuntu-latest'] - environment-file: [ci/310.yaml] + environment-file: [.ci/39.yml] experimental: [false] defaults: run: shell: bash -l {0} - steps: - - name: checkout repo - uses: actions/checkout@v4 - - - name: setup micromamba - uses: mamba-org/provision-with-micromamba@main + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + env: + CACHE_NUMBER: 0 with: - environment-file: ${{ matrix.environment-file }} - micromamba-version: 'latest' - - - name: make docs - run: cd docs; make html - - - name: commit docs + path: ~/conda_pkgs_dir + key: ${{ matrix.os }}-conda-${{ env.CACHE_NUMBER }}-${{ hashFiles(matrix.environment-file) }} + - uses: conda-incubator/setup-miniconda@v2 + with: + miniconda-version: 'latest' + channels: conda-forge + channel-priority: true + auto-update-conda: true + auto-activate-base: false + environment-file: ${{ matrix.environment-file }} + activate-environment: test + use-only-tar-bz2: true + - run: conda info --all + - run: conda list + - run: conda config --show-sources + - run: conda config --show + - run: pip install -e . --no-deps --force-reinstall + - run: cd docs; make html + - name: Commit documentation changes run: | git clone https://github.com/ammaraskar/sphinx-action-test.git --branch gh-pages --single-branch gh-pages cp -r docs/_build/html/* gh-pages/ @@ -47,10 +51,9 @@ git config --local user.name "GitHub Action" git add . git commit -m "Update documentation" -a || true - # The above command will fail if no changes were present, - # so we ignore the return code. - - - name: push to gh-pages + # The above command will fail if no changes were present, so we ignore + # the return code. + - name: Push changes uses: ad-m/github-push-action@master with: branch: gh-pages diff --git a/.github/workflows/release_and_publish.yml b/.github/workflows/release_and_publish.yml index 8d4da65f..420633db 100644 --- a/.github/workflows/release_and_publish.yml +++ b/.github/workflows/release_and_publish.yml @@ -7,59 +7,52 @@ # under the user's name, not the organzation. #-------------------------------------------------- - name: Release & Publish +name: Release & Publish - on: - push: - # Sequence of patterns matched against refs/tags - tags: - - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 - - jobs: - build: - name: Create release & publish to PyPI - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Set up python - uses: actions/setup-python@v4 - with: - python-version: "3.x" - - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine jupyter urllib3 pandas pyyaml versioneer - python setup.py sdist bdist_wheel - - - name: run Changelog - run: | - jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.timeout=-1 --ExecutePreprocessor.kernel_name=python3 tools/gitcount.ipynb - - - name: cat Changelog - uses: pCYSl5EDgo/cat@master - id: changetxt - with: - path: ./tools/changelog.md - env: - TEXT: ${{ steps.changetxt.outputs.text }} - - - name: Get the tag name - run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV - - - name: Release - uses: softprops/action-gh-release@v1 - with: - body: ${{ steps.changetxt.outputs.text }} - body_path: ${{ steps.changetxt.outputs.path }} - name: Release ${{ env.TAG }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Publish distribution 📦 to PyPI - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.PYPI_PASSWORD }} +on: + push: + # Sequence of patterns matched against refs/tags + tags: + - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 + workflow_dispatch: + inputs: + version: + description: Manual Release + default: test + required: false + +jobs: + build: + name: Create release & publish to PyPI + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Set up python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade build twine + python -m build + twine check --strict dist/* + + - name: Create Release Notes + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + await github.request(`POST /repos/${{ github.repository }}/releases`, { + tag_name: "${{ github.ref }}", + generate_release_notes: true + }); + + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_PASSWORD }} \ No newline at end of file diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index e8db45b7..8c5c5f7f 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -24,11 +24,11 @@ matrix: os: [ubuntu-latest] environment-file: - - ci/38.yaml - ci/39.yaml - ci/310.yaml - ci/310-BASE.yaml - ci/310-DEV.yaml + - ci/311.yaml include: - environment-file: ci/310.yaml os: macos-latest diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 386dbca8..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include LICENSE.txt MANIFEST.in requirements_tests.txt requirements_docs.txt requirements_plus.txt requirements.txt -include versioneer.py -include spreg/_version.py diff --git a/Makefile b/Makefile deleted file mode 100644 index dafea398..00000000 --- a/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# developer Makefile for repeated tasks -# -.PHONY: clean - -test: - nosetests - -doctest: - cd doc; make pickle; make doctest - -install: - python setup.py install >/dev/null - -src: - python setup.py sdist >/dev/null - -win: - python setup.py bdist_wininst >/dev/null - -clean: - find . -name "*.pyc" -exec rm '{}' ';' - find spreg -name "__pycache__" -exec rm -rf '{}' ';' - rm -rf dist - rm -rf build diff --git a/ci/38.yaml b/ci/311.yaml similarity index 96% rename from ci/38.yaml rename to ci/311.yaml index ead6ee36..bc295d06 100644 --- a/ci/38.yaml +++ b/ci/311.yaml @@ -2,7 +2,7 @@ name: test channels: - conda-forge dependencies: - - python=3.8 + - python=3.11 # required - libpysal - numpy>=1.3 diff --git a/docs/conf.py b/docs/conf.py index 9e1d3fb8..3bcf078d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,12 +16,8 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -import sys, os import sphinx_bootstrap_theme - -sys.path.insert(0, os.path.abspath("../")) - # import your package to obtain the version info to display on the docs website import spreg diff --git a/environment.yml b/environment.yml index 09680823..4ecc2762 100644 --- a/environment.yml +++ b/environment.yml @@ -1,8 +1,8 @@ -name: notebooks-environment +name: spreg channels: - conda-forge dependencies: - - python=3.10 + - python>=3.10 - bokeh - folium - geojson diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..a469cb3b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,105 @@ +[build-system] +requires = ["setuptools>=61.0", "setuptools_scm[toml]>=6.2"] +build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] + +[project] +name = "spreg" +dynamic = ["version"] +authors = [ + { name = "Luc Anselin", email = "anselin@uchicago.edu" }, + { name = "Serge Rey", email = "sjsrey@gmail.com" }, + { name = "Pedo Amaral", email = "pedrovma@gmail.com" }, +] +maintainers = [{ name = "pysal contributors" }] +license = { text = "BSD 3-Clause" } +description = "PySAL Spatial Econometric Regression in Python" +keywords = [ + "spatial econometrics, regression, statistics, spatial modeling" +] +readme = { text = """\ +Spatial Econometric Regression in Python" + +""", content-type = "text/x-rst" } +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering :: GIS", +] +requires-python = ">=3.8" +dependencies = [ +"scipy>=0.11", +"numpy>=1.3", +"pandas", +"libpysal>=4.0.0", +"scikit-learn>=0.22", +] + +[project.urls] +Home = "https://github.com/pysal/spreg/" +Repository = "https://github.com/pysal/spreg" + +[project.optional-dependencies] +dev = ["pre-commit"] +docs = [ + "nbsphinx", + "numpydoc", + "pandoc", + "sphinx", + "sphinxcontrib-bibtex", + "sphinx_bootstrap_theme", + "mkdocs-jupyter", + "myst-parser" +] +tests = [ + "codecov", + "coverage", + "pytest", + "pytest-mpl", + "pytest-cov", + "watermark", + +] + +[tool.setuptools.packages.find] +include = ["spreg", "spreg.*"] + +[tool.black] +line-length = 88 + +[tool.ruff] +line-length = 88 +select = ["E", "F", "W", "I", "UP", "N", "B", "A", "C4", "SIM", "ARG"] +target-version = "py39" +ignore = [ + "B006", + "B008", + "B009", + "B010", + "C408", + "E731", + "F401", + "F403", + "N803", + "N806", + "N999", + "UP007" +] +exclude = ["spreg/tests/*", "docs/*"] + +[tool.coverage.run] +source = ["./spreg"] + +[tool.coverage.report] +exclude_lines = [ + "if self.debug:", + "pragma: no cover", + "raise NotImplementedError", + "except ModuleNotFoundError:", + "except ImportError", +] +ignore_errors = true +omit = ["spreg/tests/*", "docs/conf.py"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d8a091d6..00000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -scipy>=0.11 -numpy>=1.3 -pandas -libpysal>=4.0.0 -scikit-learn>=0.22 diff --git a/requirements_docs.txt b/requirements_docs.txt deleted file mode 100644 index 8e82663f..00000000 --- a/requirements_docs.txt +++ /dev/null @@ -1,5 +0,0 @@ -sphinx>=1.4.3 -sphinxcontrib-bibtex -sphinx_bootstrap_theme>=0.7.0 -numpydoc -nbsphinx \ No newline at end of file diff --git a/requirements_plus.txt b/requirements_plus.txt deleted file mode 100644 index ac1e32bc..00000000 --- a/requirements_plus.txt +++ /dev/null @@ -1,11 +0,0 @@ -matplotlib>=1.5.1 -seaborn>=0.7.0 -geopandas>=0.2 -bokeh>=0.11.1 -geojson>=1.3.2 -folium>=0.2.1 -mplleaflet>=0.0.5 -statsmodels>=0.6.1 -numba -numexpr -watermark diff --git a/requirements_tests.txt b/requirements_tests.txt deleted file mode 100644 index 7c8c886f..00000000 --- a/requirements_tests.txt +++ /dev/null @@ -1,8 +0,0 @@ -codecov -coverage -pytest -pytest-cov -pytest-xdist -twine -versioneer -wheel diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 60b4c73e..00000000 --- a/setup.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[versioneer] -VCS = git -style = pep440 -versionfile_source = spreg/_version.py -versionfile_build = spreg/_version.py -tag_prefix = v -parentdir_prefix = spreg- diff --git a/setup.py b/setup.py deleted file mode 100644 index 7bedc601..00000000 --- a/setup.py +++ /dev/null @@ -1,71 +0,0 @@ -# coding: utf-8 -from distutils.command.build_py import build_py -from setuptools import setup -import versioneer - -package = "spreg" - -with open("README.md", encoding="utf8") as file: - long_description = file.read() - - -def _get_requirements_from_files(groups_files): - groups_reqlist = {} - - for k, v in groups_files.items(): - with open(v, "r") as f: - pkg_list = f.read().splitlines() - groups_reqlist[k] = pkg_list - - return groups_reqlist - - -def setup_package(): - # get all file endings and copy whole file names without a file suffix - # assumes nested directories are only down one level - _groups_files = { - "base": "requirements.txt", - "tests": "requirements_tests.txt", - "plus": "requirements_plus.txt", - "docs": "requirements_docs.txt", - } - - reqs = _get_requirements_from_files(_groups_files) - install_reqs = reqs.pop("base") - extras_reqs = reqs - - setup( - name=package, - version=versioneer.get_version(), - description="PySAL Spatial Econometrics Package", - long_description=long_description, - long_description_content_type="text/markdown", - maintainer="PySAL Developers", - maintainer_email="pysal-dev@googlegroups.com", - url=f"https://github.com/pysal/{package}", - download_url=f"https://pypi.python.org/pypi/{package}", - license="BSD", - py_modules=[package], - packages=[package], - keywords="spatial statistics", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Science/Research", - "Intended Audience :: Developers", - "Intended Audience :: Education", - "Topic :: Scientific/Engineering", - "Topic :: Scientific/Engineering :: GIS", - "License :: OSI Approved :: BSD License", - "Programming Language :: Python", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - ], - install_requires=install_reqs, - extras_require=extras_reqs, - cmdclass=versioneer.get_cmdclass({"build_py": build_py}), - ) - - -if __name__ == "__main__": - setup_package() diff --git a/spreg/__init__.py b/spreg/__init__.py index 2e7e01f8..845e95e8 100644 --- a/spreg/__init__.py +++ b/spreg/__init__.py @@ -1,38 +1,41 @@ -from .ols import * + +import contextlib +from importlib.metadata import PackageNotFoundError, version + from .diagnostics import * from .diagnostics_panel import * from .diagnostics_sp import * from .diagnostics_sur import * from .diagnostics_tsls import * -from .user_output import * -from .twosls import * -from .twosls_sp import * from .error_sp import * from .error_sp_het import * -from .error_sp_hom import * -from .ols_regimes import * -from .twosls_regimes import * -from .twosls_sp_regimes import * -from .error_sp_regimes import * from .error_sp_het_regimes import * +from .error_sp_hom import * from .error_sp_hom_regimes import * -from .probit import * -from .ml_lag import * -from .ml_lag_regimes import * +from .error_sp_regimes import * from .ml_error import * from .ml_error_regimes import * +from .ml_lag import * +from .ml_lag_regimes import * +from .ols import * +from .ols_regimes import * +from .panel_fe import * +from .panel_re import * +from .probit import * +from .regimes import * +from .skater_reg import * +from .sp_panels import * +from .sputils import * from .sur import * from .sur_error import * from .sur_lag import * from .sur_utils import * +from .twosls import * +from .twosls_regimes import * +from .twosls_sp import * +from .twosls_sp_regimes import * +from .user_output import * from .utils import * -from .regimes import * -from .sputils import * -from .sp_panels import * -from .panel_fe import * -from .panel_re import * -from .skater_reg import * - -from . import _version -__version__ = _version.get_versions()["version"] +with contextlib.suppress(PackageNotFoundError): + __version__ = version("spreg") diff --git a/spreg/_version.py b/spreg/_version.py deleted file mode 100644 index db0ad52e..00000000 --- a/spreg/_version.py +++ /dev/null @@ -1,686 +0,0 @@ -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.22 (https://github.com/python-versioneer/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys -from typing import Callable, Dict -import functools - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - git_date = "$Format:%ci$" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440" - cfg.tag_prefix = "v" - cfg.parentdir_prefix = "spreg-" - cfg.versionfile_source = "spreg/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs, method): # decorator - """Create decorator to mark a method as the handler of a VCS.""" - - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen( - [command] + args, - cwd=cwd, - env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr else None), - **popen_kwargs - ) - break - except OSError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, process.returncode - return stdout, process.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return { - "version": dirname[len(parentdir_prefix) :], - "full-revisionid": None, - "dirty": False, - "error": None, - "date": None, - } - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print( - "Tried directories %s but none started with prefix %s" - % (str(rootdirs), parentdir_prefix) - ) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r"\d", r)} - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix) :] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r"\d", r): - continue - if verbose: - print("picking %s" % r) - return { - "version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": None, - "date": date, - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return { - "version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": "no suitable tags", - "date": None, - } - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - MATCH_ARGS = ["--match", "%s*" % tag_prefix] if tag_prefix else [] - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner( - GITS, - ["describe", "--tags", "--dirty", "--always", "--long", *MATCH_ARGS], - cwd=root, - ) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[: git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( - full_tag, - tag_prefix, - ) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix) :] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces): - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver): - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces): - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"]) - else: - rendered += ".post0.dev%d" % (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return { - "version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None, - } - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return { - "version": rendered, - "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], - "error": None, - "date": pieces.get("date"), - } - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for _ in cfg.versionfile_source.split("/"): - root = os.path.dirname(root) - except NameError: - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None, - } - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", - "date": None, - } diff --git a/spreg/diagnostics_panel.py b/spreg/diagnostics_panel.py index 730135cc..5b299d34 100644 --- a/spreg/diagnostics_panel.py +++ b/spreg/diagnostics_panel.py @@ -10,7 +10,7 @@ import numpy.linalg as la from scipy import sparse as sp from . import user_output as USER -from . import OLS +from .ols import OLS from .utils import spdot from scipy import stats from .panel_utils import check_panel diff --git a/versioneer.py b/versioneer.py deleted file mode 100644 index f1c45727..00000000 --- a/versioneer.py +++ /dev/null @@ -1,2189 +0,0 @@ -# Version: 0.22 - -"""The Versioneer - like a rocketeer, but for versions. - -The Versioneer -============== - -* like a rocketeer, but for versions! -* https://github.com/python-versioneer/python-versioneer -* Brian Warner -* License: Public Domain -* Compatible with: Python 3.6, 3.7, 3.8, 3.9, 3.10 and pypy3 -* [![Latest Version][pypi-image]][pypi-url] -* [![Build Status][travis-image]][travis-url] - -This is a tool for managing a recorded version number in distutils/setuptools-based -python projects. The goal is to remove the tedious and error-prone "update -the embedded version string" step from your release process. Making a new -release should be as easy as recording a new tag in your version-control -system, and maybe making new tarballs. - - -## Quick Install - -* `pip install versioneer` to somewhere in your $PATH -* add a `[versioneer]` section to your setup.cfg (see [Install](INSTALL.md)) -* run `versioneer install` in your source tree, commit the results -* Verify version information with `python setup.py version` - -## Version Identifiers - -Source trees come from a variety of places: - -* a version-control system checkout (mostly used by developers) -* a nightly tarball, produced by build automation -* a snapshot tarball, produced by a web-based VCS browser, like github's - "tarball from tag" feature -* a release tarball, produced by "setup.py sdist", distributed through PyPI - -Within each source tree, the version identifier (either a string or a number, -this tool is format-agnostic) can come from a variety of places: - -* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows - about recent "tags" and an absolute revision-id -* the name of the directory into which the tarball was unpacked -* an expanded VCS keyword ($Id$, etc) -* a `_version.py` created by some earlier build step - -For released software, the version identifier is closely related to a VCS -tag. Some projects use tag names that include more than just the version -string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool -needs to strip the tag prefix to extract the version identifier. For -unreleased software (between tags), the version identifier should provide -enough information to help developers recreate the same tree, while also -giving them an idea of roughly how old the tree is (after version 1.2, before -version 1.3). Many VCS systems can report a description that captures this, -for example `git describe --tags --dirty --always` reports things like -"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the -0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has -uncommitted changes). - -The version identifier is used for multiple purposes: - -* to allow the module to self-identify its version: `myproject.__version__` -* to choose a name and prefix for a 'setup.py sdist' tarball - -## Theory of Operation - -Versioneer works by adding a special `_version.py` file into your source -tree, where your `__init__.py` can import it. This `_version.py` knows how to -dynamically ask the VCS tool for version information at import time. - -`_version.py` also contains `$Revision$` markers, and the installation -process marks `_version.py` to have this marker rewritten with a tag name -during the `git archive` command. As a result, generated tarballs will -contain enough information to get the proper version. - -To allow `setup.py` to compute a version too, a `versioneer.py` is added to -the top level of your source tree, next to `setup.py` and the `setup.cfg` -that configures it. This overrides several distutils/setuptools commands to -compute the version when invoked, and changes `setup.py build` and `setup.py -sdist` to replace `_version.py` with a small static file that contains just -the generated version data. - -## Installation - -See [INSTALL.md](./INSTALL.md) for detailed installation instructions. - -## Version-String Flavors - -Code which uses Versioneer can learn about its version string at runtime by -importing `_version` from your main `__init__.py` file and running the -`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can -import the top-level `versioneer.py` and run `get_versions()`. - -Both functions return a dictionary with different flavors of version -information: - -* `['version']`: A condensed version string, rendered using the selected - style. This is the most commonly used value for the project's version - string. The default "pep440" style yields strings like `0.11`, - `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section - below for alternative styles. - -* `['full-revisionid']`: detailed revision identifier. For Git, this is the - full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". - -* `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the - commit date in ISO 8601 format. This will be None if the date is not - available. - -* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that - this is only accurate if run in a VCS checkout, otherwise it is likely to - be False or None - -* `['error']`: if the version string could not be computed, this will be set - to a string describing the problem, otherwise it will be None. It may be - useful to throw an exception in setup.py if this is set, to avoid e.g. - creating tarballs with a version string of "unknown". - -Some variants are more useful than others. Including `full-revisionid` in a -bug report should allow developers to reconstruct the exact code being tested -(or indicate the presence of local changes that should be shared with the -developers). `version` is suitable for display in an "about" box or a CLI -`--version` output: it can be easily compared against release notes and lists -of bugs fixed in various releases. - -The installer adds the following text to your `__init__.py` to place a basic -version in `YOURPROJECT.__version__`: - - from ._version import get_versions - __version__ = get_versions()['version'] - del get_versions - -## Styles - -The setup.cfg `style=` configuration controls how the VCS information is -rendered into a version string. - -The default style, "pep440", produces a PEP440-compliant string, equal to the -un-prefixed tag name for actual releases, and containing an additional "local -version" section with more detail for in-between builds. For Git, this is -TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags ---dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the -tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and -that this commit is two revisions ("+2") beyond the "0.11" tag. For released -software (exactly equal to a known tag), the identifier will only contain the -stripped tag, e.g. "0.11". - -Other styles are available. See [details.md](details.md) in the Versioneer -source tree for descriptions. - -## Debugging - -Versioneer tries to avoid fatal errors: if something goes wrong, it will tend -to return a version of "0+unknown". To investigate the problem, run `setup.py -version`, which will run the version-lookup code in a verbose mode, and will -display the full contents of `get_versions()` (including the `error` string, -which may help identify what went wrong). - -## Known Limitations - -Some situations are known to cause problems for Versioneer. This details the -most significant ones. More can be found on Github -[issues page](https://github.com/python-versioneer/python-versioneer/issues). - -### Subprojects - -Versioneer has limited support for source trees in which `setup.py` is not in -the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are -two common reasons why `setup.py` might not be in the root: - -* Source trees which contain multiple subprojects, such as - [Buildbot](https://github.com/buildbot/buildbot), which contains both - "master" and "slave" subprojects, each with their own `setup.py`, - `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI - distributions (and upload multiple independently-installable tarballs). -* Source trees whose main purpose is to contain a C library, but which also - provide bindings to Python (and perhaps other languages) in subdirectories. - -Versioneer will look for `.git` in parent directories, and most operations -should get the right version string. However `pip` and `setuptools` have bugs -and implementation details which frequently cause `pip install .` from a -subproject directory to fail to find a correct version string (so it usually -defaults to `0+unknown`). - -`pip install --editable .` should work correctly. `setup.py install` might -work too. - -Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in -some later version. - -[Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking -this issue. The discussion in -[PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the -issue from the Versioneer side in more detail. -[pip PR#3176](https://github.com/pypa/pip/pull/3176) and -[pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve -pip to let Versioneer work correctly. - -Versioneer-0.16 and earlier only looked for a `.git` directory next to the -`setup.cfg`, so subprojects were completely unsupported with those releases. - -### Editable installs with setuptools <= 18.5 - -`setup.py develop` and `pip install --editable .` allow you to install a -project into a virtualenv once, then continue editing the source code (and -test) without re-installing after every change. - -"Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a -convenient way to specify executable scripts that should be installed along -with the python package. - -These both work as expected when using modern setuptools. When using -setuptools-18.5 or earlier, however, certain operations will cause -`pkg_resources.DistributionNotFound` errors when running the entrypoint -script, which must be resolved by re-installing the package. This happens -when the install happens with one version, then the egg_info data is -regenerated while a different version is checked out. Many setup.py commands -cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into -a different virtualenv), so this can be surprising. - -[Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes -this one, but upgrading to a newer version of setuptools should probably -resolve it. - - -## Updating Versioneer - -To upgrade your project to a new release of Versioneer, do the following: - -* install the new Versioneer (`pip install -U versioneer` or equivalent) -* edit `setup.cfg`, if necessary, to include any new configuration settings - indicated by the release notes. See [UPGRADING](./UPGRADING.md) for details. -* re-run `versioneer install` in your source tree, to replace - `SRC/_version.py` -* commit any changed files - -## Future Directions - -This tool is designed to make it easily extended to other version-control -systems: all VCS-specific components are in separate directories like -src/git/ . The top-level `versioneer.py` script is assembled from these -components by running make-versioneer.py . In the future, make-versioneer.py -will take a VCS name as an argument, and will construct a version of -`versioneer.py` that is specific to the given VCS. It might also take the -configuration arguments that are currently provided manually during -installation by editing setup.py . Alternatively, it might go the other -direction and include code from all supported VCS systems, reducing the -number of intermediate scripts. - -## Similar projects - -* [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time - dependency -* [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of - versioneer -* [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools - plugin - -## License - -To make Versioneer easier to embed, all its code is dedicated to the public -domain. The `_version.py` that it creates is also in the public domain. -Specifically, both are released under the Creative Commons "Public Domain -Dedication" license (CC0-1.0), as described in -https://creativecommons.org/publicdomain/zero/1.0/ . - -[pypi-image]: https://img.shields.io/pypi/v/versioneer.svg -[pypi-url]: https://pypi.python.org/pypi/versioneer/ -[travis-image]: -https://img.shields.io/travis/com/python-versioneer/python-versioneer.svg -[travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer - -""" -# pylint:disable=invalid-name,import-outside-toplevel,missing-function-docstring -# pylint:disable=missing-class-docstring,too-many-branches,too-many-statements -# pylint:disable=raise-missing-from,too-many-lines,too-many-locals,import-error -# pylint:disable=too-few-public-methods,redefined-outer-name,consider-using-with -# pylint:disable=attribute-defined-outside-init,too-many-arguments - -import configparser -import errno -import json -import os -import re -import subprocess -import sys -from typing import Callable, Dict -import functools - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_root(): - """Get the project root directory. - - We require that all commands are run from the project root, i.e. the - directory that contains setup.py, setup.cfg, and versioneer.py . - """ - root = os.path.realpath(os.path.abspath(os.getcwd())) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - # allow 'python path/to/setup.py COMMAND' - root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) - setup_py = os.path.join(root, "setup.py") - versioneer_py = os.path.join(root, "versioneer.py") - if not (os.path.exists(setup_py) or os.path.exists(versioneer_py)): - err = ( - "Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND')." - ) - raise VersioneerBadRootError(err) - try: - # Certain runtime workflows (setup.py install/develop in a setuptools - # tree) execute all dependencies in a single python process, so - # "versioneer" may be imported multiple times, and python's shared - # module-import table will cache the first one. So we can't use - # os.path.dirname(__file__), as that will find whichever - # versioneer.py was first imported, even in later projects. - my_path = os.path.realpath(os.path.abspath(__file__)) - me_dir = os.path.normcase(os.path.splitext(my_path)[0]) - vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) - if me_dir != vsr_dir: - print( - "Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(my_path), versioneer_py) - ) - except NameError: - pass - return root - - -def get_config_from_root(root): - """Read the project setup.cfg file to determine Versioneer config.""" - # This might raise OSError (if setup.cfg is missing), or - # configparser.NoSectionError (if it lacks a [versioneer] section), or - # configparser.NoOptionError (if it lacks "VCS="). See the docstring at - # the top of versioneer.py for instructions on writing your setup.cfg . - setup_cfg = os.path.join(root, "setup.cfg") - parser = configparser.ConfigParser() - with open(setup_cfg, "r") as cfg_file: - parser.read_file(cfg_file) - VCS = parser.get("versioneer", "VCS") # mandatory - - # Dict-like interface for non-mandatory entries - section = parser["versioneer"] - - cfg = VersioneerConfig() - cfg.VCS = VCS - cfg.style = section.get("style", "") - cfg.versionfile_source = section.get("versionfile_source") - cfg.versionfile_build = section.get("versionfile_build") - cfg.tag_prefix = section.get("tag_prefix") - if cfg.tag_prefix in ("''", '""'): - cfg.tag_prefix = "" - cfg.parentdir_prefix = section.get("parentdir_prefix") - cfg.verbose = section.get("verbose") - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -# these dictionaries contain VCS-specific tools -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs, method): # decorator - """Create decorator to mark a method as the handler of a VCS.""" - - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - HANDLERS.setdefault(vcs, {})[method] = f - return f - - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen( - [command] + args, - cwd=cwd, - env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr else None), - **popen_kwargs, - ) - break - except OSError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, process.returncode - return stdout, process.returncode - - -LONG_VERSION_PY[ - "git" -] = r''' -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. Generated by -# versioneer-0.22 (https://github.com/python-versioneer/python-versioneer) - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys -from typing import Callable, Dict -import functools - - -def get_keywords(): - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" - git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" - git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - -def get_config(): - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "%(STYLE)s" - cfg.tag_prefix = "%(TAG_PREFIX)s" - cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" - cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs, method): # decorator - """Create decorator to mark a method as the handler of a VCS.""" - def decorate(f): - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, - env=None): - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None), **popen_kwargs) - break - except OSError: - e = sys.exc_info()[1] - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %%s" %% dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %%s" %% (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %%s (error)" %% dispcmd) - print("stdout was %%s" %% stdout) - return None, process.returncode - return stdout, process.returncode - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %%s but none started with prefix %%s" %% - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %%d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} - if verbose: - print("discarding '%%s', no digits" %% ",".join(refs - tags)) - if verbose: - print("likely tags: %%s" %% ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r'\d', r): - continue - if verbose: - print("picking %%s" %% r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %%s not under git control" %% root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - MATCH_ARGS = ["--match", "%%s*" %% tag_prefix] if tag_prefix else [] - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, ["describe", "--tags", "--dirty", - "--always", "--long", *MATCH_ARGS], - cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%%s'" - %% describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%%s' doesn't start with prefix '%%s'" - print(fmt %% (full_tag, tag_prefix)) - pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" - %% (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces): - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver): - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces): - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%%d.dev%%d" %% (post_version+1, pieces["distance"]) - else: - rendered += ".post0.dev%%d" %% (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%%d" %% pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%%s'" %% style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -def get_versions(): - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for _ in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} -''' - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs): - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords(keywords, tag_prefix, verbose): - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r"\d", r)} - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix) :] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r"\d", r): - continue - if verbose: - print("picking %s" % r) - return { - "version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": None, - "date": date, - } - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return { - "version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, - "error": "no suitable tags", - "date": None, - } - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs(tag_prefix, root, verbose, runner=run_command): - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - MATCH_ARGS = ["--match", "%s*" % tag_prefix] if tag_prefix else [] - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner( - GITS, - ["describe", "--tags", "--dirty", "--always", "--long", *MATCH_ARGS], - cwd=root, - ) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[: git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % ( - full_tag, - tag_prefix, - ) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix) :] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - count_out, rc = runner(GITS, ["rev-list", "HEAD", "--count"], cwd=root) - pieces["distance"] = int(count_out) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def do_vcs_install(manifest_in, versionfile_source, ipy): - """Git-specific installation logic for Versioneer. - - For Git, this means creating/changing .gitattributes to mark _version.py - for export-subst keyword substitution. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - files = [manifest_in, versionfile_source] - if ipy: - files.append(ipy) - try: - my_path = __file__ - if my_path.endswith(".pyc") or my_path.endswith(".pyo"): - my_path = os.path.splitext(my_path)[0] + ".py" - versioneer_file = os.path.relpath(my_path) - except NameError: - versioneer_file = "versioneer.py" - files.append(versioneer_file) - present = False - try: - with open(".gitattributes", "r") as fobj: - for line in fobj: - if line.strip().startswith(versionfile_source): - if "export-subst" in line.strip().split()[1:]: - present = True - break - except OSError: - pass - if not present: - with open(".gitattributes", "a+") as fobj: - fobj.write(f"{versionfile_source} export-subst\n") - files.append(".gitattributes") - run_command(GITS, ["add", "--"] + files) - - -def versions_from_parentdir(parentdir_prefix, root, verbose): - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return { - "version": dirname[len(parentdir_prefix) :], - "full-revisionid": None, - "dirty": False, - "error": None, - "date": None, - } - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print( - "Tried directories %s but none started with prefix %s" - % (str(rootdirs), parentdir_prefix) - ) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -SHORT_VERSION_PY = """ -# This file was generated by 'versioneer.py' (0.22) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json - -version_json = ''' -%s -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) -""" - - -def versions_from_file(filename): - """Try to determine the version from _version.py if present.""" - try: - with open(filename) as f: - contents = f.read() - except OSError: - raise NotThisMethod("unable to read _version.py") - mo = re.search( - r"version_json = '''\n(.*)''' # END VERSION_JSON", contents, re.M | re.S - ) - if not mo: - mo = re.search( - r"version_json = '''\r\n(.*)''' # END VERSION_JSON", contents, re.M | re.S - ) - if not mo: - raise NotThisMethod("no version_json in _version.py") - return json.loads(mo.group(1)) - - -def write_to_version_file(filename, versions): - """Write the given version number to the given _version.py file.""" - os.unlink(filename) - contents = json.dumps(versions, sort_keys=True, indent=1, separators=(",", ": ")) - with open(filename, "w") as f: - f.write(SHORT_VERSION_PY % contents) - - print("set %s to '%s'" % (filename, versions["version"])) - - -def plus_or_dot(pieces): - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces): - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces): - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver): - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces): - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"]) - else: - rendered += ".post0.dev%d" % (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces): - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces): - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces): - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces): - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces, style): - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return { - "version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None, - } - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return { - "version": rendered, - "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], - "error": None, - "date": pieces.get("date"), - } - - -class VersioneerBadRootError(Exception): - """The project root directory is unknown or missing key files.""" - - -def get_versions(verbose=False): - """Get the project version from whatever source is available. - - Returns dict with two keys: 'version' and 'full'. - """ - if "versioneer" in sys.modules: - # see the discussion in cmdclass.py:get_cmdclass() - del sys.modules["versioneer"] - - root = get_root() - cfg = get_config_from_root(root) - - assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" - handlers = HANDLERS.get(cfg.VCS) - assert handlers, "unrecognized VCS '%s'" % cfg.VCS - verbose = verbose or cfg.verbose - assert ( - cfg.versionfile_source is not None - ), "please set versioneer.versionfile_source" - assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" - - versionfile_abs = os.path.join(root, cfg.versionfile_source) - - # extract version from first of: _version.py, VCS command (e.g. 'git - # describe'), parentdir. This is meant to work for developers using a - # source checkout, for users of a tarball created by 'setup.py sdist', - # and for users of a tarball/zipball created by 'git archive' or github's - # download-from-tag feature or the equivalent in other VCSes. - - get_keywords_f = handlers.get("get_keywords") - from_keywords_f = handlers.get("keywords") - if get_keywords_f and from_keywords_f: - try: - keywords = get_keywords_f(versionfile_abs) - ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) - if verbose: - print("got version from expanded keyword %s" % ver) - return ver - except NotThisMethod: - pass - - try: - ver = versions_from_file(versionfile_abs) - if verbose: - print("got version from file %s %s" % (versionfile_abs, ver)) - return ver - except NotThisMethod: - pass - - from_vcs_f = handlers.get("pieces_from_vcs") - if from_vcs_f: - try: - pieces = from_vcs_f(cfg.tag_prefix, root, verbose) - ver = render(pieces, cfg.style) - if verbose: - print("got version from VCS %s" % ver) - return ver - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - if verbose: - print("got version from parentdir %s" % ver) - return ver - except NotThisMethod: - pass - - if verbose: - print("unable to compute version") - - return { - "version": "0+unknown", - "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", - "date": None, - } - - -def get_version(): - """Get the short version string for this project.""" - return get_versions()["version"] - - -def get_cmdclass(cmdclass=None): - """Get the custom setuptools/distutils subclasses used by Versioneer. - - If the package uses a different cmdclass (e.g. one from numpy), it - should be provide as an argument. - """ - if "versioneer" in sys.modules: - del sys.modules["versioneer"] - # this fixes the "python setup.py develop" case (also 'install' and - # 'easy_install .'), in which subdependencies of the main project are - # built (using setup.py bdist_egg) in the same python process. Assume - # a main project A and a dependency B, which use different versions - # of Versioneer. A's setup.py imports A's Versioneer, leaving it in - # sys.modules by the time B's setup.py is executed, causing B to run - # with the wrong versioneer. Setuptools wraps the sub-dep builds in a - # sandbox that restores sys.modules to it's pre-build state, so the - # parent is protected against the child's "import versioneer". By - # removing ourselves from sys.modules here, before the child build - # happens, we protect the child from the parent's versioneer too. - # Also see https://github.com/python-versioneer/python-versioneer/issues/52 - - cmds = {} if cmdclass is None else cmdclass.copy() - - # we add "version" to both distutils and setuptools - try: - from setuptools import Command - except ImportError: - from distutils.core import Command - - class cmd_version(Command): - description = "report generated version string" - user_options = [] - boolean_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - vers = get_versions(verbose=True) - print("Version: %s" % vers["version"]) - print(" full-revisionid: %s" % vers.get("full-revisionid")) - print(" dirty: %s" % vers.get("dirty")) - print(" date: %s" % vers.get("date")) - if vers["error"]: - print(" error: %s" % vers["error"]) - - cmds["version"] = cmd_version - - # we override "build_py" in both distutils and setuptools - # - # most invocation pathways end up running build_py: - # distutils/build -> build_py - # distutils/install -> distutils/build ->.. - # setuptools/bdist_wheel -> distutils/install ->.. - # setuptools/bdist_egg -> distutils/install_lib -> build_py - # setuptools/install -> bdist_egg ->.. - # setuptools/develop -> ? - # pip install: - # copies source tree to a tempdir before running egg_info/etc - # if .git isn't copied too, 'git describe' will fail - # then does setup.py bdist_wheel, or sometimes setup.py install - # setup.py egg_info -> ? - - # we override different "build_py" commands for both environments - if "build_py" in cmds: - _build_py = cmds["build_py"] - elif "setuptools" in sys.modules: - from setuptools.command.build_py import build_py as _build_py - else: - from distutils.command.build_py import build_py as _build_py - - class cmd_build_py(_build_py): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_py.run(self) - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - cmds["build_py"] = cmd_build_py - - if "build_ext" in cmds: - _build_ext = cmds["build_ext"] - elif "setuptools" in sys.modules: - from setuptools.command.build_ext import build_ext as _build_ext - else: - from distutils.command.build_ext import build_ext as _build_ext - - class cmd_build_ext(_build_ext): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_ext.run(self) - if self.inplace: - # build_ext --inplace will only build extensions in - # build/lib<..> dir with no _version.py to write to. - # As in place builds will already have a _version.py - # in the module dir, we do not need to write one. - return - # now locate _version.py in the new build/ directory and replace - # it with an updated value - target_versionfile = os.path.join(self.build_lib, cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - cmds["build_ext"] = cmd_build_ext - - if "cx_Freeze" in sys.modules: # cx_freeze enabled? - from cx_Freeze.dist import build_exe as _build_exe - - # nczeczulin reports that py2exe won't like the pep440-style string - # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. - # setup(console=[{ - # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION - # "product_version": versioneer.get_version(), - # ... - - class cmd_build_exe(_build_exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _build_exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - cmds["build_exe"] = cmd_build_exe - del cmds["build_py"] - - if "py2exe" in sys.modules: # py2exe enabled? - from py2exe.distutils_buildexe import py2exe as _py2exe - - class cmd_py2exe(_py2exe): - def run(self): - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _py2exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - cmds["py2exe"] = cmd_py2exe - - # we override different "sdist" commands for both environments - if "sdist" in cmds: - _sdist = cmds["sdist"] - elif "setuptools" in sys.modules: - from setuptools.command.sdist import sdist as _sdist - else: - from distutils.command.sdist import sdist as _sdist - - class cmd_sdist(_sdist): - def run(self): - versions = get_versions() - self._versioneer_generated_versions = versions - # unless we update this, the command will keep using the old - # version - self.distribution.metadata.version = versions["version"] - return _sdist.run(self) - - def make_release_tree(self, base_dir, files): - root = get_root() - cfg = get_config_from_root(root) - _sdist.make_release_tree(self, base_dir, files) - # now locate _version.py in the new base_dir directory - # (remembering that it may be a hardlink) and replace it with an - # updated value - target_versionfile = os.path.join(base_dir, cfg.versionfile_source) - print("UPDATING %s" % target_versionfile) - write_to_version_file( - target_versionfile, self._versioneer_generated_versions - ) - - cmds["sdist"] = cmd_sdist - - return cmds - - -CONFIG_ERROR = """ -setup.cfg is missing the necessary Versioneer configuration. You need -a section like: - - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - -You will also need to edit your setup.py to use the results: - - import versioneer - setup(version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), ...) - -Please read the docstring in ./versioneer.py for configuration instructions, -edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. -""" - -SAMPLE_CONFIG = """ -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -#VCS = git -#style = pep440 -#versionfile_source = -#versionfile_build = -#tag_prefix = -#parentdir_prefix = - -""" - -OLD_SNIPPET = """ -from ._version import get_versions -__version__ = get_versions()['version'] -del get_versions -""" - -INIT_PY_SNIPPET = """ -from . import {0} -__version__ = {0}.get_versions()['version'] -""" - - -def do_setup(): - """Do main VCS-independent setup function for installing Versioneer.""" - root = get_root() - try: - cfg = get_config_from_root(root) - except (OSError, configparser.NoSectionError, configparser.NoOptionError) as e: - if isinstance(e, (OSError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", file=sys.stderr) - with open(os.path.join(root, "setup.cfg"), "a") as f: - f.write(SAMPLE_CONFIG) - print(CONFIG_ERROR, file=sys.stderr) - return 1 - - print(" creating %s" % cfg.versionfile_source) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write( - LONG - % { - "DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - } - ) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), "__init__.py") - if os.path.exists(ipy): - try: - with open(ipy, "r") as f: - old = f.read() - except OSError: - old = "" - module = os.path.splitext(os.path.basename(cfg.versionfile_source))[0] - snippet = INIT_PY_SNIPPET.format(module) - if OLD_SNIPPET in old: - print(" replacing boilerplate in %s" % ipy) - with open(ipy, "w") as f: - f.write(old.replace(OLD_SNIPPET, snippet)) - elif snippet not in old: - print(" appending to %s" % ipy) - with open(ipy, "a") as f: - f.write(snippet) - else: - print(" %s unmodified" % ipy) - else: - print(" %s doesn't exist, ok" % ipy) - ipy = None - - # Make sure both the top-level "versioneer.py" and versionfile_source - # (PKG/_version.py, used by runtime code) are in MANIFEST.in, so - # they'll be copied into source distributions. Pip won't be able to - # install the package without this. - manifest_in = os.path.join(root, "MANIFEST.in") - simple_includes = set() - try: - with open(manifest_in, "r") as f: - for line in f: - if line.startswith("include "): - for include in line.split()[1:]: - simple_includes.add(include) - except OSError: - pass - # That doesn't cover everything MANIFEST.in can do - # (http://docs.python.org/2/distutils/sourcedist.html#commands), so - # it might give some false negatives. Appending redundant 'include' - # lines is safe, though. - if "versioneer.py" not in simple_includes: - print(" appending 'versioneer.py' to MANIFEST.in") - with open(manifest_in, "a") as f: - f.write("include versioneer.py\n") - else: - print(" 'versioneer.py' already in MANIFEST.in") - if cfg.versionfile_source not in simple_includes: - print( - " appending versionfile_source ('%s') to MANIFEST.in" - % cfg.versionfile_source - ) - with open(manifest_in, "a") as f: - f.write("include %s\n" % cfg.versionfile_source) - else: - print(" versionfile_source already in MANIFEST.in") - - # Make VCS-specific changes. For git, this means creating/changing - # .gitattributes to mark _version.py for export-subst keyword - # substitution. - do_vcs_install(manifest_in, cfg.versionfile_source, ipy) - return 0 - - -def scan_setup_py(): - """Validate the contents of setup.py against Versioneer's expectations.""" - found = set() - setters = False - errors = 0 - with open("setup.py", "r") as f: - for line in f.readlines(): - if "import versioneer" in line: - found.add("import") - if "versioneer.get_cmdclass()" in line: - found.add("cmdclass") - if "versioneer.get_version()" in line: - found.add("get_version") - if "versioneer.VCS" in line: - setters = True - if "versioneer.versionfile_source" in line: - setters = True - if len(found) != 3: - print("") - print("Your setup.py appears to be missing some important items") - print("(but I might be wrong). Please make sure it has something") - print("roughly like the following:") - print("") - print(" import versioneer") - print(" setup( version=versioneer.get_version(),") - print(" cmdclass=versioneer.get_cmdclass(), ...)") - print("") - errors += 1 - if setters: - print("You should remove lines like 'versioneer.VCS = ' and") - print("'versioneer.versionfile_source = ' . This configuration") - print("now lives in setup.cfg, and should be removed from setup.py") - print("") - errors += 1 - return errors - - -if __name__ == "__main__": - cmd = sys.argv[1] - if cmd == "setup": - errors = do_setup() - errors += scan_setup_py() - if errors: - sys.exit(1) From ee14315430a4c42519b486e421a5c3f6971a395c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:29:56 -0400 Subject: [PATCH 24/28] Bump actions/cache from 2 to 3 (#123) Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index af0611af..cfc46ef9 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -20,7 +20,7 @@ shell: bash -l {0} steps: - uses: actions/checkout@v2 - - uses: actions/cache@v2 + - uses: actions/cache@v3 env: CACHE_NUMBER: 0 with: From cd1a77bb4dc20fca64e98744a16add4f78089dbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:40:54 -0400 Subject: [PATCH 25/28] Bump actions/checkout from 2 to 4 (#122) Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build_docs.yml | 2 +- .github/workflows/release_and_publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index cfc46ef9..e5391750 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -19,7 +19,7 @@ run: shell: bash -l {0} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: actions/cache@v3 env: CACHE_NUMBER: 0 diff --git a/.github/workflows/release_and_publish.yml b/.github/workflows/release_and_publish.yml index 420633db..4993b64d 100644 --- a/.github/workflows/release_and_publish.yml +++ b/.github/workflows/release_and_publish.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up python uses: actions/setup-python@v4 From 809c072110d6b0026e086530aa430d7caa1c48c5 Mon Sep 17 00:00:00 2001 From: eli knaap Date: Tue, 26 Sep 2023 07:40:39 -0700 Subject: [PATCH 26/28] Update build_docs.yml rm leading period in .ci --- .github/workflows/build_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index e5391750..58c77f00 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -13,7 +13,7 @@ strategy: matrix: os: ['ubuntu-latest'] - environment-file: [.ci/39.yml] + environment-file: [ci/39.yml] experimental: [false] defaults: run: From e57cac0e2244602f9977304600e0007b6f97b83b Mon Sep 17 00:00:00 2001 From: eli knaap Date: Tue, 26 Sep 2023 07:43:13 -0700 Subject: [PATCH 27/28] Update build_docs.yml yml-->yaml --- .github/workflows/build_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 58c77f00..fe8fbedd 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -13,7 +13,7 @@ strategy: matrix: os: ['ubuntu-latest'] - environment-file: [ci/39.yml] + environment-file: [ci/39.yaml] experimental: [false] defaults: run: From c0ead26df0938ea523a9804d6900abebb934a50a Mon Sep 17 00:00:00 2001 From: James Gaboardi Date: Tue, 3 Oct 2023 11:43:04 -0400 Subject: [PATCH 28/28] Update pyproject.toml (#124) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a469cb3b..8fadf3f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ classifiers = [ requires-python = ">=3.8" dependencies = [ "scipy>=0.11", -"numpy>=1.3", +"numpy>=1.23", "pandas", "libpysal>=4.0.0", "scikit-learn>=0.22",