Created
December 21, 2024 20:19
-
-
Save jGaboardi/f62d8fdb28a1694499636b7736db0019 to your computer and use it in GitHub Desktop.
typology_classification
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.13.1"},"gist_info":{"create_date":"","gist_id":"","gist_url":""}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"879bb7f2-9ccf-4845-b261-fc9cc1c8b2cc","cell_type":"markdown","source":"# Typology Classification\n\n1. `CES`\n 1. Input line data\n 2. Determine stroke continuity \n 3. Generate artifact polygons\n 4. Run the classification sequence\n 5. Get stroke information\n 6. ...\n2. `CEES`\n\n-------------------","metadata":{}},{"id":"b152cfaa-512f-47b0-bdac-6e1314bbcdac","cell_type":"code","source":"%load_ext watermark\n%watermark","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:17.260437Z","iopub.status.busy":"2024-12-21T20:12:17.260160Z","iopub.status.idle":"2024-12-21T20:12:17.287857Z","shell.execute_reply":"2024-12-21T20:12:17.287483Z","shell.execute_reply.started":"2024-12-21T20:12:17.260402Z"},"trusted":false},"outputs":[{"name":"stdout","output_type":"stream","text":"Last updated: 2024-12-21T15:12:17.276535-05:00\n\nPython implementation: CPython\nPython version : 3.13.1\nIPython version : 8.30.0\n\nCompiler : Clang 18.1.8 \nOS : Darwin\nRelease : 24.2.0\nMachine : arm64\nProcessor : arm\nCPU cores : 8\nArchitecture: 64bit\n\n"}],"execution_count":1},{"id":"fb19cecd-1fc9-4374-8854-a8bb85b5cae7","cell_type":"code","source":"import geopandas\nimport matplotlib\nimport momepy\nimport numpy\nimport pandas\nimport shapely\n\nimport neatnet\n\n%watermark -w\n%watermark -iv","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:17.288655Z","iopub.status.busy":"2024-12-21T20:12:17.288522Z","iopub.status.idle":"2024-12-21T20:12:18.236434Z","shell.execute_reply":"2024-12-21T20:12:18.236215Z","shell.execute_reply.started":"2024-12-21T20:12:17.288640Z"},"trusted":false},"outputs":[{"name":"stdout","output_type":"stream","text":"Watermark: 2.5.0\n\nnumpy : 2.2.0\npandas : 2.2.3\nshapely : 2.0.6\nmomepy : 0.9.1\ngeopandas : 1.0.1\nneatnet : 0.1.dev90+gdfb9290\nmatplotlib: 3.10.0\n\n"}],"execution_count":2},{"id":"a5f452f5-4809-481e-b5c4-3aaa6b4940bf","cell_type":"markdown","source":"-----------------\n\n## 1. `CES`\n\n### 1.A. Input line data","metadata":{}},{"id":"6c62292a-45a4-4ad6-8654-36a2a1ae8d4b","cell_type":"code","source":"line1 = shapely.LineString(((0,0), (2,1)))\nline2 = shapely.LineString(((2,1), (4,2)))\nline3 = shapely.LineString(((4,2), (6,2)))\nline4 = shapely.LineString(((6,2), (8,2)))\nline5 = shapely.LineString(((6,2), (6,1)))\nline6 = shapely.LineString(((6,1), (6,0)))\nline7 = shapely.LineString(((2,1), (6,1)))\n\nlines = [\n line1,\n line2,\n line3,\n line4,\n line5,\n line6,\n line7,\n]\n\nroads = geopandas.GeoDataFrame(geometry=lines)\nroads","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.236969Z","iopub.status.busy":"2024-12-21T20:12:18.236804Z","iopub.status.idle":"2024-12-21T20:12:18.242473Z","shell.execute_reply":"2024-12-21T20:12:18.242307Z","shell.execute_reply.started":"2024-12-21T20:12:18.236962Z"},"trusted":false},"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>geometry</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>LINESTRING (0 0, 2 1)</td>\n </tr>\n <tr>\n <th>1</th>\n <td>LINESTRING (2 1, 4 2)</td>\n </tr>\n <tr>\n <th>2</th>\n <td>LINESTRING (4 2, 6 2)</td>\n </tr>\n <tr>\n <th>3</th>\n <td>LINESTRING (6 2, 8 2)</td>\n </tr>\n <tr>\n <th>4</th>\n <td>LINESTRING (6 2, 6 1)</td>\n </tr>\n <tr>\n <th>5</th>\n <td>LINESTRING (6 1, 6 0)</td>\n </tr>\n <tr>\n <th>6</th>\n <td>LINESTRING (2 1, 6 1)</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry\n0 LINESTRING (0 0, 2 1)\n1 LINESTRING (2 1, 4 2)\n2 LINESTRING (4 2, 6 2)\n3 LINESTRING (6 2, 8 2)\n4 LINESTRING (6 2, 6 1)\n5 LINESTRING (6 1, 6 0)\n6 LINESTRING (2 1, 6 1)"},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"execution_count":3},{"id":"aff26d3e-57a3-4866-9289-f9b8ce0caf88","cell_type":"code","source":"roads.plot()","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.242918Z","iopub.status.busy":"2024-12-21T20:12:18.242820Z","iopub.status.idle":"2024-12-21T20:12:18.382016Z","shell.execute_reply":"2024-12-21T20:12:18.381833Z","shell.execute_reply.started":"2024-12-21T20:12:18.242911Z"},"trusted":false},"outputs":[{"data":{"text/plain":"<Axes: >"},"execution_count":4,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAhYAAACnCAYAAABNThUqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAEQ1JREFUeJzt3X9MlYWjx/HPgeSABhQaJF/A0EpL1AyqgVSWje/IuZzNtKVh1B9uaBC35q8206lkLfdtmSTVqOac7k5RW5mSJeh1XpHEvGj+uPpVbmpkSw7i7XCB5/7RlRv5Iw48z3nOec77tbF1TuLzeabJu+c8R1yGYRgCAAAwQZjdAwAAgHMQFgAAwDSEBQAAMA1hAQAATENYAAAA0xAWAADANIQFAAAwzU3+PmBHR4fOnj2r6OhouVwufx8eAAD0gGEYam5uVmJiosLCrn9dwu9hcfbsWSUnJ/v7sAAAwAQNDQ1KSkq67r/3e1hER0dL+n1YTEyMvw8PAAB6wOPxKDk5ufPr+PX4FBYlJSXauHGjfvjhB0VFRSkrK0vLly/X0KFDu/1zXHn5IyYmhrAAACDI/NVtDD7dvFlVVaWCggLt3btXlZWVamtrU05OjlpaWno1EgAAOIOrN9+E7Oeff1Z8fLyqqqr0yCOPdOtzPB6PYmNj1dTUxBULwGEMw9B//0+73TOAkNY3wpq7HLr79btXR29qapIkxcXFXffHeL1eeb3eLsMAOMvBhot6d8dx/X14guZsOGT3HCCk/fPN8bYev8dhYRiGiouLlZ2drbS0tOv+uJKSEi1atKinhwEQwK4ExTc/NEqSTv58yeZFAOzW45dCCgoK9MUXX2j37t03fNvJta5YJCcn81IIEMT+HBRhLmni6L9p9uN3KSHGbfM69MTl1jZlLNkhSdr/+jjLLqfDekH5Usjs2bO1ZcsWVVdX3zAqJMntdsvt5g8awAluFBSpA/rZvA5m6RtxE2GBHvPpd45hGJo9e7YqKiq0c+dOpaamWrULQAAhKAB0l09hUVBQoLVr12rz5s2Kjo7W+fPnJUmxsbGKioqyZCAA+xAUAHzlU1iUlpZKksaOHdvl+fLycs2YMcOsTQBsRlAA6CmfXwoB4FwEBYDe4u4cAAQFANMQFkAIIygAmI2wAEIQQQHAKoQFEEIICgBWIyyAEEBQAPAXwgJwMIICgL8RFoADERQA7EJYAA5CUACwG2EBOABBASBQEBZAECMoAAQawgIIQgQFgEBFWABBhKAAEOgICyAIEBQAggVhAQQwggJAsCEsgABEUAAIVoQFEEAICgDBjrAAAgBBAcApCAvARgQFAKchLAAbEBQAnIqwAPyIoADgdIQF4AcEBYBQQVgAFiIoAIQawgKwAEEBIFQRFoCJCAoAoY6wAExAUADA7wgLoBcICgDoirAAeoCgAIBrIywAHxAUAHBjhAXQDQQFAHQPYQHcAEEBAL4hLIBrICgAoGcIC+APCAoA6B3CAhBBAQBmISwQ0ggKADAXYYGQRFAAgDUIC4QUggIArEVYICQQFADgH4QFHI2gAAD/IizgSAQFANiDsICjEBQAYC/CAo5AUABAYCAsENQICgAILIQFghJBAQCBibBAUCEoACCwERYICgQFAAQHwgIBjaAAgODic1hUV1fr7bffVm1trc6dO6eKigpNnDjRgmkIZQQFAAQnn8OipaVFo0aN0gsvvKCnn37aik0IYf9+8het2vmfqjr2syTJJWnCqIGa+eidumNAX0nS5dY2GxcCzsR/VzCLz2GRm5ur3Nzcbv94r9crr9fb+djj8fh6SISAgw0X9a+1/6U1e093ed6QtOXgOW05eM6eYQAAn1h+j0VJSYkWLVpk9WEQpP74kkdMFLf8AECws/xP8nnz5qm4uLjzscfjUXJystWHRYC71j0UT9yToJeyB3e+5AHAfy63tiljyQ67Z8ABLA8Lt9stt9tt9WEQJLgpEwCcjWvP8AuCAgBCA2EBSxEUABBafA6LS5cu6cSJE52PT506pbq6OsXFxSklJcXUcQheBAUAhCafw2L//v167LHHOh9fuTEzLy9Pn3zyiWnDEJwICgAIbT6HxdixY2UYhhVbEMQICgCAxD0W6CWCAgDwR4QFeoSgAABcC2EBnxAUAIAbISzQLQQFAKA7CAvcEEEBAPAFYYFrIigAAD1BWKALggIA0BuEBSQRFAAAcxAWIY6gAACYibAIUQQFAMAKhEWIISgAAFYiLEIEQQEA8AfCwuEICgCAPxEWDkVQAADsQFg4DEEBALATYeEQBAUAIBAQFkGOoAAABBLCIkgRFACAQERYBBmCAgAQyAiLIEFQAACCAWER4AgKAEAwISwCFEEBAAhGhEWAISgAAMGMsAgQBAUAwAkIC5sRFAAAJyEsbEJQAACciLDwM4ICAOBkhIWfEBQAgFBAWFiMoAAAhBLCwiIEBQAgFBEWJiMoAAChjLAwCUEBAABh0WsEBQAA/4+w6CGCAgCAqxEWPiIoAAC4PsKimwgKAAD+GmHxFwgKAAC6j7C4DoICAADfERZ/QlAAANBzhMX/ISgAAOi9kA8LggIAAPOEbFgQFAAAmC/kwoKgAADAOiETFgQFAADWc3xYEBQAAPhPWE8+adWqVUpNTVVkZKTS09O1a9cus3f12sGGi8r/pEZPvf9v+uaHRoW5pEn3/007/mWsVjxzH1EBAIAFfL5isX79ehUVFWnVqlUaM2aMVq9erdzcXB0+fFgpKSlWbPQJVygAALCPz2GxYsUKvfjii3rppZckSf/4xz+0bds2lZaWqqSkxPSB3fWT5zfN23iIoAAAwEY+hUVra6tqa2s1d+7cLs/n5ORoz5491/wcr9crr9fb+djj8fRg5l+Ljeqj//ixiaAAAMBGPoXFhQsX1N7eroSEhC7PJyQk6Pz589f8nJKSEi1atKjnC7spsk+43nlmlJJu7UtQAICP+kbcpH++Od7uGXCAHt286XK5ujw2DOOq566YN2+empqaOj8aGhp6cshuefiu24gKAABs5NMViwEDBig8PPyqqxONjY1XXcW4wu12y+1293whAAAIGj5dsYiIiFB6eroqKyu7PF9ZWamsrCxThwEAgODj87tCiouLNX36dGVkZCgzM1NlZWU6c+aMZs6c2a3PNwxDknU3cQIAAPNd+bp95ev49fgcFlOmTNEvv/yixYsX69y5c0pLS9OXX36pQYMGdevzm5ubJUnJycm+HhoAANisublZsbGx1/33LuOv0sNkHR0dOnv2rKKjo697w2dPeDweJScnq6GhQTExMab9vIHE6efI+QU/p58j5xf8nH6OVp6fYRhqbm5WYmKiwsKufyeF379XSFhYmJKSkiz7+WNiYhz5m+WPnH6OnF/wc/o5cn7Bz+nnaNX53ehKxRU9erspAADAtRAWAADANI4JC7fbrYULFzr678xw+jlyfsHP6efI+QU/p59jIJyf32/eBAAAzuWYKxYAAMB+hAUAADANYQEAAExDWAAAANMQFgAAwDSOCYtVq1YpNTVVkZGRSk9P165du+yeZJrq6mpNmDBBiYmJcrlc2rRpk92TTFNSUqIHHnhA0dHRio+P18SJE3X06FG7Z5mqtLRUI0eO7Pyb8DIzM7V161a7Z1mmpKRELpdLRUVFdk8xzRtvvCGXy9Xl4/bbb7d7lql+/PFHTZs2Tf3791ffvn113333qba21u5Zprjjjjuu+vVzuVwqKCiwe5pp2tra9Prrrys1NVVRUVEaPHiwFi9erI6ODr9vcURYrF+/XkVFRVqwYIEOHDighx9+WLm5uTpz5ozd00zR0tKiUaNGaeXKlXZPMV1VVZUKCgq0d+9eVVZWqq2tTTk5OWppabF7mmmSkpL05ptvav/+/dq/f78ef/xxPfXUU6qvr7d7mulqampUVlamkSNH2j3FdMOHD9e5c+c6Pw4dOmT3JNP8+uuvGjNmjPr06aOtW7fq8OHDeuedd3TLLbfYPc0UNTU1XX7tKisrJUmTJ0+2eZl5li9frg8++EArV67UkSNH9NZbb+ntt9/We++95/8xhgM8+OCDxsyZM7s8N2zYMGPu3Lk2LbKOJKOiosLuGZZpbGw0JBlVVVV2T7HUrbfeanz00Ud2zzBVc3OzcddddxmVlZXGo48+ahQWFto9yTQLFy40Ro0aZfcMy8yZM8fIzs62e4bfFBYWGkOGDDE6OjrsnmKa8ePHG/n5+V2emzRpkjFt2jS/bwn6Kxatra2qra1VTk5Ol+dzcnK0Z88em1ahp5qamiRJcXFxNi+xRnt7u9atW6eWlhZlZmbaPcdUBQUFGj9+vJ544gm7p1ji+PHjSkxMVGpqqqZOnaqTJ0/aPck0W7ZsUUZGhiZPnqz4+HiNHj1aH374od2zLNHa2qo1a9YoPz/f1O+wbbfs7Gzt2LFDx44dkyQdPHhQu3fv1pNPPun3LX7/7qZmu3Dhgtrb25WQkNDl+YSEBJ0/f96mVegJwzBUXFys7OxspaWl2T3HVIcOHVJmZqZ+++033XzzzaqoqNC9995r9yzTrFu3Tt99951qamrsnmKJhx56SJ999pnuvvtu/fTTT1qyZImysrJUX1+v/v372z2v106ePKnS0lIVFxdr/vz52rdvn15++WW53W49//zzds8z1aZNm3Tx4kXNmDHD7immmjNnjpqamjRs2DCFh4ervb1dS5cu1bPPPuv3LUEfFlf8uTwNw3BUjYaCWbNm6fvvv9fu3bvtnmK6oUOHqq6uThcvXtSGDRuUl5enqqoqR8RFQ0ODCgsLtX37dkVGRto9xxK5ubmd/zxixAhlZmZqyJAh+vTTT1VcXGzjMnN0dHQoIyNDy5YtkySNHj1a9fX1Ki0tdVxYfPzxx8rNzVViYqLdU0y1fv16rVmzRmvXrtXw4cNVV1enoqIiJSYmKi8vz69bgj4sBgwYoPDw8KuuTjQ2Nl51FQOBa/bs2dqyZYuqq6uVlJRk9xzTRURE6M4775QkZWRkqKamRu+++65Wr15t87Leq62tVWNjo9LT0zufa29vV3V1tVauXCmv16vw8HAbF5qvX79+GjFihI4fP273FFMMHDjwqsi95557tGHDBpsWWeP06dP6+uuvtXHjRrunmO61117T3LlzNXXqVEm/B/Dp06dVUlLi97AI+nssIiIilJ6e3nmX7xWVlZXKysqyaRW6yzAMzZo1Sxs3btQ333yj1NRUuyf5hWEY8nq9ds8wxbhx43To0CHV1dV1fmRkZOi5555TXV2d46JCkrxer44cOaKBAwfaPcUUY8aMuept3seOHdOgQYNsWmSN8vJyxcfHa/z48XZPMd3ly5cVFtb1S3p4eLgtbzcN+isWklRcXKzp06crIyNDmZmZKisr05kzZzRz5ky7p5ni0qVLOnHiROfjU6dOqa6uTnFxcUpJSbFxWe8VFBRo7dq12rx5s6KjozuvPMXGxioqKsrmdeaYP3++cnNzlZycrObmZq1bt047d+7UV199Zfc0U0RHR191T0y/fv3Uv39/x9wr8+qrr2rChAlKSUlRY2OjlixZIo/H4/f/E7TKK6+8oqysLC1btkzPPPOM9u3bp7KyMpWVldk9zTQdHR0qLy9XXl6ebrrJEV/6upgwYYKWLl2qlJQUDR8+XAcOHNCKFSuUn5/v/zF+fx+KRd5//31j0KBBRkREhHH//fc76u2K3377rSHpqo+8vDy7p/Xatc5LklFeXm73NNPk5+d3/t687bbbjHHjxhnbt2+3e5alnPZ20ylTphgDBw40+vTpYyQmJhqTJk0y6uvr7Z5lqs8//9xIS0sz3G63MWzYMKOsrMzuSabatm2bIck4evSo3VMs4fF4jMLCQiMlJcWIjIw0Bg8ebCxYsMDwer1+3+IyDMPwf84AAAAnCvp7LAAAQOAgLAAAgGkICwAAYBrCAgAAmIawAAAApiEsAACAaQgLAABgGsICAACYhrAAAACmISwAAIBpCAsAAGCa/wWVB96uQ2PzQAAAAABJRU5ErkJggg==","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":4},{"id":"f156065e-60b7-4263-a708-48ee35de8813","cell_type":"markdown","source":"### 1.B. Determine stroke continuity","metadata":{}},{"id":"8dd2754d-23f7-45d0-ad00-1af0ada5ff59","cell_type":"code","source":"strokes, _ = neatnet.continuity.continuity(roads)\nstrokes","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.382481Z","iopub.status.busy":"2024-12-21T20:12:18.382379Z","iopub.status.idle":"2024-12-21T20:12:18.386995Z","shell.execute_reply":"2024-12-21T20:12:18.386826Z","shell.execute_reply.started":"2024-12-21T20:12:18.382474Z"},"trusted":false},"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>geometry</th>\n <th>coins_group</th>\n <th>coins_end</th>\n <th>coins_len</th>\n <th>coins_count</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>LINESTRING (0 0, 2 1)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>1</th>\n <td>LINESTRING (2 1, 4 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>2</th>\n <td>LINESTRING (4 2, 6 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>3</th>\n <td>LINESTRING (6 2, 8 2)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>4</th>\n <td>LINESTRING (6 2, 6 1)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n </tr>\n <tr>\n <th>5</th>\n <td>LINESTRING (6 1, 6 0)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n </tr>\n <tr>\n <th>6</th>\n <td>LINESTRING (2 1, 6 1)</td>\n <td>2</td>\n <td>True</td>\n <td>4.000000</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry coins_group coins_end coins_len coins_count\n0 LINESTRING (0 0, 2 1) 0 True 8.472136 4\n1 LINESTRING (2 1, 4 2) 0 False 8.472136 4\n2 LINESTRING (4 2, 6 2) 0 False 8.472136 4\n3 LINESTRING (6 2, 8 2) 0 True 8.472136 4\n4 LINESTRING (6 2, 6 1) 1 True 2.000000 2\n5 LINESTRING (6 1, 6 0) 1 True 2.000000 2\n6 LINESTRING (2 1, 6 1) 2 True 4.000000 1"},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"execution_count":5},{"id":"103eb938-3c16-4d71-a1e3-d3919063f3d9","cell_type":"markdown","source":"### 1.C. Generate artifact polygons","metadata":{}},{"id":"38488a2c-8e94-4bf3-8f2f-0fbd6f5b2c1a","cell_type":"code","source":"def artifactify(lines):\n \"\"\"Generate artifact polygons.\"\"\"\n return (\n geopandas.GeoDataFrame(\n geometry=[shapely.polygonize(lines.geometry.to_list())],\n crs=lines.crs\n )\n .explode()\n .reset_index(drop=True)\n )","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.388210Z","iopub.status.busy":"2024-12-21T20:12:18.388118Z","iopub.status.idle":"2024-12-21T20:12:18.389791Z","shell.execute_reply":"2024-12-21T20:12:18.389625Z","shell.execute_reply.started":"2024-12-21T20:12:18.388203Z"},"trusted":false},"outputs":[],"execution_count":6},{"id":"279641f9-7816-4d8d-92a7-f337cdb4539d","cell_type":"code","source":"artifacts = artifactify(roads)\nartifacts","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.390111Z","iopub.status.busy":"2024-12-21T20:12:18.390057Z","iopub.status.idle":"2024-12-21T20:12:18.394617Z","shell.execute_reply":"2024-12-21T20:12:18.394434Z","shell.execute_reply.started":"2024-12-21T20:12:18.390105Z"},"trusted":false},"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>geometry</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>POLYGON ((2 1, 4 2, 6 2, 6 1, 2 1))</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry\n0 POLYGON ((2 1, 4 2, 6 2, 6 1, 2 1))"},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"execution_count":7},{"id":"35ff7f79-8cfe-461e-985f-afa54e57fcad","cell_type":"code","source":"artifacts.plot(cmap=\"Paired\")","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.395043Z","iopub.status.busy":"2024-12-21T20:12:18.394966Z","iopub.status.idle":"2024-12-21T20:12:18.427880Z","shell.execute_reply":"2024-12-21T20:12:18.427648Z","shell.execute_reply.started":"2024-12-21T20:12:18.395035Z"},"trusted":false},"outputs":[{"data":{"text/plain":"<Axes: >"},"execution_count":8,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":8},{"id":"e7dda511-f172-4e01-b52f-197972ae551e","cell_type":"markdown","source":"### 1.D. Run the classification sequence","metadata":{}},{"id":"bfac48c1-7278-4206-8d57-6e69ee74481e","cell_type":"code","source":"nodes, artifacts, roads = neatnet.simplify.classification_sequence(roads, artifacts, True)","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.428548Z","iopub.status.busy":"2024-12-21T20:12:18.428387Z","iopub.status.idle":"2024-12-21T20:12:18.436148Z","shell.execute_reply":"2024-12-21T20:12:18.435862Z","shell.execute_reply.started":"2024-12-21T20:12:18.428530Z"},"trusted":false},"outputs":[],"execution_count":9},{"id":"5efd304a-7407-4298-8432-6fce46f9699b","cell_type":"code","source":"nodes","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.436646Z","iopub.status.busy":"2024-12-21T20:12:18.436532Z","iopub.status.idle":"2024-12-21T20:12:18.440366Z","shell.execute_reply":"2024-12-21T20:12:18.440150Z","shell.execute_reply.started":"2024-12-21T20:12:18.436636Z"},"trusted":false},"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>x</th>\n <th>y</th>\n <th>degree</th>\n <th>nodeID</th>\n <th>geometry</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0.0</td>\n <td>0.0</td>\n <td>1</td>\n <td>0</td>\n <td>POINT (0 0)</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2.0</td>\n <td>1.0</td>\n <td>3</td>\n <td>1</td>\n <td>POINT (2 1)</td>\n </tr>\n <tr>\n <th>2</th>\n <td>4.0</td>\n <td>2.0</td>\n <td>2</td>\n <td>2</td>\n <td>POINT (4 2)</td>\n </tr>\n <tr>\n <th>3</th>\n <td>6.0</td>\n <td>2.0</td>\n <td>3</td>\n <td>3</td>\n <td>POINT (6 2)</td>\n </tr>\n <tr>\n <th>4</th>\n <td>8.0</td>\n <td>2.0</td>\n <td>1</td>\n <td>4</td>\n <td>POINT (8 2)</td>\n </tr>\n <tr>\n <th>5</th>\n <td>6.0</td>\n <td>1.0</td>\n <td>3</td>\n <td>5</td>\n <td>POINT (6 1)</td>\n </tr>\n <tr>\n <th>6</th>\n <td>6.0</td>\n <td>0.0</td>\n <td>1</td>\n <td>6</td>\n <td>POINT (6 0)</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" x y degree nodeID geometry\n0 0.0 0.0 1 0 POINT (0 0)\n1 2.0 1.0 3 1 POINT (2 1)\n2 4.0 2.0 2 2 POINT (4 2)\n3 6.0 2.0 3 3 POINT (6 2)\n4 8.0 2.0 1 4 POINT (8 2)\n5 6.0 1.0 3 5 POINT (6 1)\n6 6.0 0.0 1 6 POINT (6 0)"},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"execution_count":10},{"id":"0787070e-f6aa-4241-93bf-2f3707fa2d62","cell_type":"code","source":"artifacts","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.440715Z","iopub.status.busy":"2024-12-21T20:12:18.440649Z","iopub.status.idle":"2024-12-21T20:12:18.444044Z","shell.execute_reply":"2024-12-21T20:12:18.443849Z","shell.execute_reply.started":"2024-12-21T20:12:18.440707Z"},"trusted":false},"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>geometry</th>\n <th>node_count</th>\n <th>stroke_count</th>\n <th>C</th>\n <th>E</th>\n <th>S</th>\n <th>non_planar</th>\n <th>interstitial_nodes</th>\n <th>ces_type</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>POLYGON ((2 1, 4 2, 6 2, 6 1, 2 1))</td>\n <td>4</td>\n <td>3</td>\n <td>1</td>\n <td>1</td>\n <td>1</td>\n <td>False</td>\n <td>1</td>\n <td>4CES</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry node_count stroke_count C E S \\\n0 POLYGON ((2 1, 4 2, 6 2, 6 1, 2 1)) 4 3 1 1 1 \n\n non_planar interstitial_nodes ces_type \n0 False 1 4CES "},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"execution_count":11},{"id":"03af22da-7684-429f-875f-eefe181f40df","cell_type":"code","source":"roads","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.444457Z","iopub.status.busy":"2024-12-21T20:12:18.444382Z","iopub.status.idle":"2024-12-21T20:12:18.448036Z","shell.execute_reply":"2024-12-21T20:12:18.447833Z","shell.execute_reply.started":"2024-12-21T20:12:18.444449Z"},"trusted":false},"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>geometry</th>\n <th>coins_group</th>\n <th>coins_end</th>\n <th>coins_len</th>\n <th>coins_count</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>LINESTRING (0 0, 2 1)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>1</th>\n <td>LINESTRING (2 1, 4 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>2</th>\n <td>LINESTRING (4 2, 6 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>3</th>\n <td>LINESTRING (6 2, 8 2)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n </tr>\n <tr>\n <th>4</th>\n <td>LINESTRING (6 2, 6 1)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n </tr>\n <tr>\n <th>5</th>\n <td>LINESTRING (6 1, 6 0)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n </tr>\n <tr>\n <th>6</th>\n <td>LINESTRING (2 1, 6 1)</td>\n <td>2</td>\n <td>True</td>\n <td>4.000000</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry coins_group coins_end coins_len coins_count\n0 LINESTRING (0 0, 2 1) 0 True 8.472136 4\n1 LINESTRING (2 1, 4 2) 0 False 8.472136 4\n2 LINESTRING (4 2, 6 2) 0 False 8.472136 4\n3 LINESTRING (6 2, 8 2) 0 True 8.472136 4\n4 LINESTRING (6 2, 6 1) 1 True 2.000000 2\n5 LINESTRING (6 1, 6 0) 1 True 2.000000 2\n6 LINESTRING (2 1, 6 1) 2 True 4.000000 1"},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"execution_count":12},{"id":"08e18c49-7e53-4dae-84a9-2c83c2e58b02","cell_type":"markdown","source":"### 1.E. Get stroke information","metadata":{}},{"id":"2c681f89-e307-4c05-a756-6e915098a461","cell_type":"code","source":"roads = neatnet.continuity.get_stroke_info(artifacts, roads, typify=True)\nroads","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.448440Z","iopub.status.busy":"2024-12-21T20:12:18.448374Z","iopub.status.idle":"2024-12-21T20:12:18.453981Z","shell.execute_reply":"2024-12-21T20:12:18.453790Z","shell.execute_reply.started":"2024-12-21T20:12:18.448434Z"},"trusted":false},"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>geometry</th>\n <th>coins_group</th>\n <th>coins_end</th>\n <th>coins_len</th>\n <th>coins_count</th>\n <th>typology</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>LINESTRING (0 0, 2 1)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n <td>C</td>\n </tr>\n <tr>\n <th>1</th>\n <td>LINESTRING (2 1, 4 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n <td>C</td>\n </tr>\n <tr>\n <th>2</th>\n <td>LINESTRING (4 2, 6 2)</td>\n <td>0</td>\n <td>False</td>\n <td>8.472136</td>\n <td>4</td>\n <td>C</td>\n </tr>\n <tr>\n <th>3</th>\n <td>LINESTRING (6 2, 8 2)</td>\n <td>0</td>\n <td>True</td>\n <td>8.472136</td>\n <td>4</td>\n <td>C</td>\n </tr>\n <tr>\n <th>4</th>\n <td>LINESTRING (6 2, 6 1)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>5</th>\n <td>LINESTRING (6 1, 6 0)</td>\n <td>1</td>\n <td>True</td>\n <td>2.000000</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>6</th>\n <td>LINESTRING (2 1, 6 1)</td>\n <td>2</td>\n <td>True</td>\n <td>4.000000</td>\n <td>1</td>\n <td>S</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry coins_group coins_end coins_len coins_count \\\n0 LINESTRING (0 0, 2 1) 0 True 8.472136 4 \n1 LINESTRING (2 1, 4 2) 0 False 8.472136 4 \n2 LINESTRING (4 2, 6 2) 0 False 8.472136 4 \n3 LINESTRING (6 2, 8 2) 0 True 8.472136 4 \n4 LINESTRING (6 2, 6 1) 1 True 2.000000 2 \n5 LINESTRING (6 1, 6 0) 1 True 2.000000 2 \n6 LINESTRING (2 1, 6 1) 2 True 4.000000 1 \n\n typology \n0 C \n1 C \n2 C \n3 C \n4 E \n5 E \n6 S "},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"execution_count":13},{"id":"31409fc0-0e94-4815-a81d-588028faa82e","cell_type":"markdown","source":"### 1.F. Plot stroke typology","metadata":{}},{"id":"50a81ad4-926e-4446-bdad-322f46148db7","cell_type":"code","source":"def plot_typology(gdf):\n \"\"\"Plot edges based on stroke typology.\"\"\"\n palette = {\"C\": \"black\", \"E\": \"green\", \"S\" : \"orange\", numpy.nan: \"gray\"}\n colors = [palette[stroke_type] for stroke_type in gdf[\"typology\"].unique()]\n cmap = matplotlib.colors.ListedColormap(colors)\n linestyler = [\n \"-\" if _type == \"C\"\n else (\":\" if _type == \"E\" else \"--\") for _type in gdf[\"typology\"]\n ]\n gdf.plot(\n cmap=cmap,\n column=\"typology\",\n linestyle=linestyler,\n lw=3,\n missing_kwds={\"ec\": \"gray\"},\n legend=True\n )","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.454430Z","iopub.status.busy":"2024-12-21T20:12:18.454324Z","iopub.status.idle":"2024-12-21T20:12:18.457361Z","shell.execute_reply":"2024-12-21T20:12:18.456800Z","shell.execute_reply.started":"2024-12-21T20:12:18.454423Z"},"trusted":false},"outputs":[],"execution_count":14},{"id":"f8592677-c0db-443d-ab47-faf53ac7f125","cell_type":"code","source":"plot_typology(roads)","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.458041Z","iopub.status.busy":"2024-12-21T20:12:18.457952Z","iopub.status.idle":"2024-12-21T20:12:18.495529Z","shell.execute_reply":"2024-12-21T20:12:18.495259Z","shell.execute_reply.started":"2024-12-21T20:12:18.458032Z"},"trusted":false},"outputs":[{"data":{"image/png":"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","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":15},{"id":"f07b3413-f8a6-4cc3-ae85-4144ab583a61","cell_type":"markdown","source":"------------------------------\n\n## 2. `CEES`","metadata":{}},{"id":"acd654ae-655c-4df7-8e8f-41f2a7135041","cell_type":"code","source":"line1 = shapely.LineString(((0,0), (0,1)))\nline2 = shapely.LineString(((0,1), (0,2)))\nline3 = shapely.LineString(((0,2), (0,3)))\nline4 = shapely.LineString(((0,1), (1,1)))\nline5 = shapely.LineString(((1,1), (2,1)))\nline6 = shapely.LineString(((0,2), (1,2)))\nline7 = shapely.LineString(((1,2), (2,2)))\nline8 = shapely.LineString(((1,1), (1,2)))\n\nlines = [\n line1,\n line2,\n line3,\n line4,\n line5,\n line6,\n line7,\n line8,\n]\n\nroads = geopandas.GeoDataFrame(geometry=lines)\nroads.plot()","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.496001Z","iopub.status.busy":"2024-12-21T20:12:18.495879Z","iopub.status.idle":"2024-12-21T20:12:18.527808Z","shell.execute_reply":"2024-12-21T20:12:18.527589Z","shell.execute_reply.started":"2024-12-21T20:12:18.495964Z"},"trusted":false},"outputs":[{"data":{"text/plain":"<Axes: >"},"execution_count":16,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":16},{"id":"d878af1a-1961-418c-b0b1-f7f2dbcba37c","cell_type":"code","source":"strokes, _ = neatnet.continuity.continuity(roads)\nartifacts = artifactify(roads)\nartifacts.plot(cmap=\"Paired\")","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.528328Z","iopub.status.busy":"2024-12-21T20:12:18.528174Z","iopub.status.idle":"2024-12-21T20:12:18.563901Z","shell.execute_reply":"2024-12-21T20:12:18.563660Z","shell.execute_reply.started":"2024-12-21T20:12:18.528319Z"},"trusted":false},"outputs":[{"data":{"text/plain":"<Axes: >"},"execution_count":17,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":17},{"id":"e1ebb33f-1683-487a-a3cb-2927deb3319f","cell_type":"code","source":"nodes, artifacts, roads = neatnet.simplify.classification_sequence(roads, artifacts, True)\nroads = neatnet.continuity.get_stroke_info(artifacts, roads, typify=True)\nroads","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.564329Z","iopub.status.busy":"2024-12-21T20:12:18.564246Z","iopub.status.idle":"2024-12-21T20:12:18.575157Z","shell.execute_reply":"2024-12-21T20:12:18.574942Z","shell.execute_reply.started":"2024-12-21T20:12:18.564321Z"},"trusted":false},"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>geometry</th>\n <th>coins_group</th>\n <th>coins_end</th>\n <th>coins_len</th>\n <th>coins_count</th>\n <th>typology</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>LINESTRING (0 0, 0 1)</td>\n <td>0</td>\n <td>True</td>\n <td>3.0</td>\n <td>3</td>\n <td>C</td>\n </tr>\n <tr>\n <th>1</th>\n <td>LINESTRING (0 1, 0 2)</td>\n <td>0</td>\n <td>False</td>\n <td>3.0</td>\n <td>3</td>\n <td>C</td>\n </tr>\n <tr>\n <th>2</th>\n <td>LINESTRING (0 2, 0 3)</td>\n <td>0</td>\n <td>True</td>\n <td>3.0</td>\n <td>3</td>\n <td>C</td>\n </tr>\n <tr>\n <th>3</th>\n <td>LINESTRING (0 1, 1 1)</td>\n <td>1</td>\n <td>True</td>\n <td>2.0</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>4</th>\n <td>LINESTRING (1 1, 2 1)</td>\n <td>1</td>\n <td>True</td>\n <td>2.0</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>5</th>\n <td>LINESTRING (0 2, 1 2)</td>\n <td>2</td>\n <td>True</td>\n <td>2.0</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>6</th>\n <td>LINESTRING (1 2, 2 2)</td>\n <td>2</td>\n <td>True</td>\n <td>2.0</td>\n <td>2</td>\n <td>E</td>\n </tr>\n <tr>\n <th>7</th>\n <td>LINESTRING (1 1, 1 2)</td>\n <td>3</td>\n <td>True</td>\n <td>1.0</td>\n <td>1</td>\n <td>S</td>\n </tr>\n </tbody>\n</table>\n</div>","text/plain":" geometry coins_group coins_end coins_len coins_count \\\n0 LINESTRING (0 0, 0 1) 0 True 3.0 3 \n1 LINESTRING (0 1, 0 2) 0 False 3.0 3 \n2 LINESTRING (0 2, 0 3) 0 True 3.0 3 \n3 LINESTRING (0 1, 1 1) 1 True 2.0 2 \n4 LINESTRING (1 1, 2 1) 1 True 2.0 2 \n5 LINESTRING (0 2, 1 2) 2 True 2.0 2 \n6 LINESTRING (1 2, 2 2) 2 True 2.0 2 \n7 LINESTRING (1 1, 1 2) 3 True 1.0 1 \n\n typology \n0 C \n1 C \n2 C \n3 E \n4 E \n5 E \n6 E \n7 S "},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"execution_count":18},{"id":"fb83157a-6550-44c3-a90a-5bed43839821","cell_type":"code","source":"plot_typology(roads)","metadata":{"execution":{"iopub.execute_input":"2024-12-21T20:12:18.575690Z","iopub.status.busy":"2024-12-21T20:12:18.575551Z","iopub.status.idle":"2024-12-21T20:12:18.614848Z","shell.execute_reply":"2024-12-21T20:12:18.614626Z","shell.execute_reply.started":"2024-12-21T20:12:18.575679Z"},"trusted":false},"outputs":[{"data":{"image/png":"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","text/plain":"<Figure size 640x480 with 1 Axes>"},"metadata":{},"output_type":"display_data"}],"execution_count":19},{"id":"17e58917-b7ce-4643-ad2c-005602ce8f2c","cell_type":"markdown","source":"---------------","metadata":{}}]} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment