Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save jorisvandenbossche/c94bfc9626e622fda7285ed88a4d771a to your computer and use it in GitHub Desktop.

Select an option

Save jorisvandenbossche/c94bfc9626e622fda7285ed88a4d771a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Experiment with reading spatial files in parallel"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import geopandas\n",
"\n",
"import dask_geopandas\n",
"import dask.dataframe as dd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following is a delayed \"read_file\" prototype "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from dask.delayed import delayed\n",
"import fiona\n",
"\n",
"def read_file(path, npartitions):\n",
" \n",
" with fiona.open(path) as collection:\n",
" total_size = collection.session.get_length()\n",
" \n",
" # TODO smart inference for a good default partition size\n",
" batch_size = (total_size // npartitions) + 1\n",
" \n",
" row_offset = 0\n",
" dfs = []\n",
" \n",
" while row_offset < total_size:\n",
" rows = slice(row_offset, min(row_offset + batch_size, total_size))\n",
" df = delayed(geopandas.read_file)(path, rows=rows)\n",
" dfs.append(df)\n",
" row_offset += batch_size\n",
" \n",
" # TODO this could be inferred from fiona's collection.meta[\"schema\"]\n",
" meta = geopandas.read_file(path, rows=5)\n",
" \n",
" return dd.from_delayed(dfs, meta)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test\n",
"\n",
"Reading a ~ 200MB ESRI Shapefile of a subset of OSM buildings from London.\n",
"\n",
"Reading with GeoPandas into memory takes around 20s:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 18.8 s, sys: 468 ms, total: 19.2 s\n",
"Wall time: 19.2 s\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>osm_id</th>\n",
" <th>osm_type</th>\n",
" <th>building</th>\n",
" <th>amenity</th>\n",
" <th>addr_stree</th>\n",
" <th>timestamp</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2956186</td>\n",
" <td>way</td>\n",
" <td>block</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02162 51.44472, -0.02033 51.44469...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2956187</td>\n",
" <td>way</td>\n",
" <td>yes</td>\n",
" <td>townhall</td>\n",
" <td>Catford Broadway</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02110 51.44523, -0.02132 51.44508...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2956188</td>\n",
" <td>way</td>\n",
" <td>yes</td>\n",
" <td>theatre</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02004 51.44536, -0.02006 51.44528...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2956192</td>\n",
" <td>way</td>\n",
" <td>store</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.01900 51.44462, -0.01894 51.44486...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2956193</td>\n",
" <td>way</td>\n",
" <td>store</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.01752 51.44542, -0.01771 51.44491...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>584080</th>\n",
" <td>266218115929</td>\n",
" <td>relation</td>\n",
" <td>residential</td>\n",
" <td>None</td>\n",
" <td>Bedford Gardens</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.19751 51.50561, -0.19750 51.50562...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>584081</th>\n",
" <td>266229200037</td>\n",
" <td>relation</td>\n",
" <td>residential</td>\n",
" <td>None</td>\n",
" <td>Bedford Gardens</td>\n",
" <td>0</td>\n",
" <td>MULTIPOLYGON (((-0.19738 51.50565, -0.19730 51...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>584082</th>\n",
" <td>266395470798</td>\n",
" <td>relation</td>\n",
" <td>yes</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.11464 51.45445, -0.11467 51.45450...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>584083</th>\n",
" <td>266406556085</td>\n",
" <td>relation</td>\n",
" <td>yes</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.11409 51.45358, -0.11412 51.45362...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>584084</th>\n",
" <td>266417641373</td>\n",
" <td>relation</td>\n",
" <td>yes</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.11420 51.45375, -0.11422 51.45378...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>584085 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" osm_id osm_type building amenity addr_stree \\\n",
"0 2956186 way block None None \n",
"1 2956187 way yes townhall Catford Broadway \n",
"2 2956188 way yes theatre None \n",
"3 2956192 way store None None \n",
"4 2956193 way store None None \n",
"... ... ... ... ... ... \n",
"584080 266218115929 relation residential None Bedford Gardens \n",
"584081 266229200037 relation residential None Bedford Gardens \n",
"584082 266395470798 relation yes None None \n",
"584083 266406556085 relation yes None None \n",
"584084 266417641373 relation yes None None \n",
"\n",
" timestamp geometry \n",
"0 0 POLYGON ((-0.02162 51.44472, -0.02033 51.44469... \n",
"1 0 POLYGON ((-0.02110 51.44523, -0.02132 51.44508... \n",
"2 0 POLYGON ((-0.02004 51.44536, -0.02006 51.44528... \n",
"3 0 POLYGON ((-0.01900 51.44462, -0.01894 51.44486... \n",
"4 0 POLYGON ((-0.01752 51.44542, -0.01771 51.44491... \n",
"... ... ... \n",
"584080 0 POLYGON ((-0.19751 51.50561, -0.19750 51.50562... \n",
"584081 0 MULTIPOLYGON (((-0.19738 51.50565, -0.19730 51... \n",
"584082 0 POLYGON ((-0.11464 51.45445, -0.11467 51.45450... \n",
"584083 0 POLYGON ((-0.11409 51.45358, -0.11412 51.45362... \n",
"584084 0 POLYGON ((-0.11420 51.45375, -0.11422 51.45378... \n",
"\n",
"[584085 rows x 7 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time geopandas.read_file(\"test_london_buildings.shp\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reading with the delayed function, splitting it into 4"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"gdf = read_file(\"test_london_buildings.shp\", 4)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><strong>Dask DataFrame Structure:</strong></div>\n",
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>osm_id</th>\n",
" <th>osm_type</th>\n",
" <th>building</th>\n",
" <th>amenity</th>\n",
" <th>addr_stree</th>\n",
" <th>timestamp</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" <tr>\n",
" <th>npartitions=4</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th></th>\n",
" <td>int64</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>object</td>\n",
" <td>int64</td>\n",
" <td>geometry</td>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div>Dask Name: from-delayed, 8 tasks</div>"
],
"text/plain": [
"<dask_geopandas.GeoDataFrame | 8 tasks | 4 npartitions>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>osm_id</th>\n",
" <th>osm_type</th>\n",
" <th>building</th>\n",
" <th>amenity</th>\n",
" <th>addr_stree</th>\n",
" <th>timestamp</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2956186</td>\n",
" <td>way</td>\n",
" <td>block</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02162 51.44472, -0.02033 51.44469...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2956187</td>\n",
" <td>way</td>\n",
" <td>yes</td>\n",
" <td>townhall</td>\n",
" <td>Catford Broadway</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02110 51.44523, -0.02132 51.44508...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2956188</td>\n",
" <td>way</td>\n",
" <td>yes</td>\n",
" <td>theatre</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.02004 51.44536, -0.02006 51.44528...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2956192</td>\n",
" <td>way</td>\n",
" <td>store</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.01900 51.44462, -0.01894 51.44486...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2956193</td>\n",
" <td>way</td>\n",
" <td>store</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>POLYGON ((-0.01752 51.44542, -0.01771 51.44491...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" osm_id osm_type building amenity addr_stree timestamp \\\n",
"0 2956186 way block None None 0 \n",
"1 2956187 way yes townhall Catford Broadway 0 \n",
"2 2956188 way yes theatre None 0 \n",
"3 2956192 way store None None 0 \n",
"4 2956193 way store None None 0 \n",
"\n",
" geometry \n",
"0 POLYGON ((-0.02162 51.44472, -0.02033 51.44469... \n",
"1 POLYGON ((-0.02110 51.44523, -0.02132 51.44508... \n",
"2 POLYGON ((-0.02004 51.44536, -0.02006 51.44528... \n",
"3 POLYGON ((-0.01900 51.44462, -0.01894 51.44486... \n",
"4 POLYGON ((-0.01752 51.44542, -0.01771 51.44491... "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.visualize()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To calculate how long the *reading* takes in parallel, I using a cheap calculation on each partition (it's length), to avoid timing the serialization of the resulting DataFrame into a single geopandas GeoDataFrame at the end (what would happen with `gdf.compute()`).\n",
"\n",
"Reading with multiprocessing gives a nice speed-up:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 51.8 ms, sys: 276 ms, total: 328 ms\n",
"Wall time: 6.74 s\n"
]
},
{
"data": {
"text/plain": [
"0 146022\n",
"1 146022\n",
"2 146022\n",
"3 146019\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time gdf.map_partitions(len).compute(scheduler=\"processes\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reading with multithreading, however, does not (as expected, since fiona does not release the GIL while reading and a lot of processing from fiona's output into geopandas happens in Python):"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 24.7 s, sys: 3 s, total: 27.7 s\n",
"Wall time: 24.2 s\n"
]
},
{
"data": {
"text/plain": [
"0 146022\n",
"1 146022\n",
"2 146022\n",
"3 146019\n",
"dtype: int64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time gdf.map_partitions(len).compute()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Further operations can also be done in parallel:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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PaU+jExRUZGuuuoqVa9eXWPGjDnpXK1atVL79u01dOhQNW7cWD179izzdY9/bk81e7jl5eUpLi4uZOen52PoOTzo+Rh6pueyoOdj6Dk8TtXzCQ+tdvwNj//4IpzK89Vh27ZtVblyZU2ZMqXE8a1bt+rw4cO65pprApqlUqVKat68eYmXypUrq1mzZpKkiRMnlnj7oqIiFRYWSpKaNm0qY4z++te/lnib3bt367333iv1el9++aVmzpypzp07Fx/Lz88v9WPy+OOPa/v27RowYIB69epVfPx01y3L7OF29OjRkH7lSM/H0HN40PMx9EzPZUHPx9BzeJyq5xO+M2wzzpycHEnS4cOHSxwvKChQYWGhCgoKFB19bOSqVatq8ODBeuCBBzRnzhx169ZNkvTPf/5Td9xxh7p06SLp2Cf4+DmOO34sNze3xDUknfb+qPbt26tLly56//33ddlll+mOO+7QmjVrtHDhQv38889KT0/XNddco1atWmn8+PHKzc3Vddddp02bNikzM1Pp6emSpIMHD5a47vFv3Y8aNUqtW7fWsmXLtGbNGu3atUurVq1SjRo1VKNGDUlSz549dfHFF+u8885T1apVi2e7/PLLT3ndatWqnXb2a6+9VhUrVizDZys4Qv2dB3qmZ3oODnqm52CjZ3qOmJ5/+yt1y5cvP+E3KcPh66+/Ln5YkqSkJDNu3Dizf/9+M3bsWFOrVi0jyfTv39+sXr26xN+bOnWqufLKK02/fv3MM888Y1599VVTVFRkjDFmyZIlJiUlxUgyffr0MZs2bTJLly417du3N5LMTTfdZNatW2e++uqr4mO33Xab+f77708564EDB8xdd91latSoYerVq2cGDRpk7r33XvOHP/zBzJ492xQWFpq9e/eaPn36mOrVq5tzzjnH3H777Wbbtm3GGGNWrFhhfv/73xtJpmPHjmbevHnGGGPuv/9+U6lSJZOSkmJmz55tPvnkE1OtWjVz4403muzs7BIz9O/f30yaNOmE2U513bLOHk4DBw40F110UcjOT8/0HE70TM/G0HNZ0TM9h9Mpeh7vM6bk98W3bNmievXqafHixUpJSQnWQo4g6969uz7++OOIf+rI0+nXr59WrVql+fPnh+T89OwM9Fw29OwM9Fw29OwMHug5/YR7ho9/GzyUz0eOwMybN0+XXXaZ48OUjnX2vz96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atOmjY4fP67PP/+8XvPNmDFDS5YskSS9/PLL2rZtm7p37667775b//rXvzRnzhzdd999Gj9+/DlvwxhT6/2IpHbt2unQoUMRP8cP6JmeXULP9OwSeqbnejNR0r17d/OHP/whome89dZbplevXiY2NtZMnz7dPPfcc2bgwIFmz5495r/+67/Miy++aIwxpqKiwgwaNMh07NjRlJWVGWOMGT58uLnxxhvP3tYll1xifvjDH579++zZs016ero5ceKEMcaYgwcPmvbt25uOHTvWa8aioiIjyfz+978/+7bNmzebqVOnGknmn//859m3b9q0yUgy//jHP86+7Xz3I5KGDh1qfvazn0X8HD+g59Po2Q30fBo9u4GeT6PnOsuK2mUSR44cifh3amPHjlVGRoYqKyt1yy236I477tAHH3wgSXriiSc0adIkSacfgr/hhhu0b98+vf7665KkUCikSy655Oxt9enT5+yTPh8/flwPPPCApkyZcvaC83bt2mno0KFhmbt379665pprzvtxe/fuPe/9iKSmTZvqiy++iPg5fkDP50bP/kPP50bP/kPP50bPNXPqMglJio+PV1xcXLWL51esWKHy8nLdc8891T72rrvuUkJCgiQpJydHklRWVqaXXnpJq1evVlVVlSTpvffe0+eff660tLRqnx/Oa2zi4s7/T1GX+xFJfLH9Ej3Xjp79hZ5rR8/+Qs+1o+dvitoyXF5ebu0C7S1btqh58+Z69tlnz/kxlZWV+tOf/qStW7fq5z//uXJzc/X+++9L0tknf7Z9gXld7kckxcXFNeipXVxEz41Hz95Bz41Hz95Bz40XtJ6jdplEYmKiysrKonXcN87evXu3du/e/Y33FRUVqaqqSuPGjdOWLVv0wgsvnPM7ss8++ywq857L+e5HpH3xxRdq2rRpxM/xA3puPHr2DnpuPHr2DnpuvKD1HLVluGXLljp69Gi0jqsmLS1Nxhg9+OCD1d5+4MABvfDCC1q1apUWL16s4cOHn31feXm5jDGSpL59+0qS5s6dW+3zq6qqVFlZWa9ZztxmQ5zvfkTaqVOn+GL7/9HzafTsBno+jZ7dQM+n0XPdRe0yiVatWkUlzoqKClVWVqqiouLsdTGjR4/WgAEDlJWVpZMnT2r8+PHatm2bVqxYoezsbH3yySeSTj8VycCBA7V69Wrl5+dr//792rBh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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf.buffer(1).visualize()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (geo-dev)",
"language": "python",
"name": "geo-dev"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment