Skip to content

Commit be2bce6

Browse files
authored
Merge pull request #378 from Labelbox/AL-711-update-nb-errors
add in import errors where they were blank and correct a few nb's
2 parents 78f105e + 9b93e4c commit be2bce6

File tree

6 files changed

+81
-200
lines changed

6 files changed

+81
-200
lines changed

examples/model_assisted_labeling/debugging_mal.ipynb

Lines changed: 49 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"metadata": {},
1616
"source": [
1717
"#### 1: Make sure that model assisted labeling is turned on for your project.\n",
18+
" * This is the default, but can be manually turned on as well.\n",
1819
" * You can do that from the web ui or with the following code:\n",
1920
"``` project.enable_model_assisted_labeling()```"
2021
]
@@ -59,7 +60,7 @@
5960
},
6061
{
6162
"cell_type": "code",
62-
"execution_count": 1,
63+
"execution_count": null,
6364
"id": "dimensional-celebrity",
6465
"metadata": {},
6566
"outputs": [],
@@ -90,7 +91,7 @@
9091
},
9192
{
9293
"cell_type": "code",
93-
"execution_count": 3,
94+
"execution_count": null,
9495
"id": "entire-mechanics",
9596
"metadata": {},
9697
"outputs": [],
@@ -113,7 +114,7 @@
113114
},
114115
{
115116
"cell_type": "code",
116-
"execution_count": 4,
117+
"execution_count": 6,
117118
"id": "indoor-pharmacy",
118119
"metadata": {},
119120
"outputs": [],
@@ -124,7 +125,7 @@
124125
},
125126
{
126127
"cell_type": "code",
127-
"execution_count": 5,
128+
"execution_count": null,
128129
"id": "healthy-perry",
129130
"metadata": {},
130131
"outputs": [],
@@ -134,7 +135,7 @@
134135
},
135136
{
136137
"cell_type": "code",
137-
"execution_count": 6,
138+
"execution_count": 8,
138139
"id": "instrumental-ontario",
139140
"metadata": {},
140141
"outputs": [],
@@ -146,7 +147,7 @@
146147
},
147148
{
148149
"cell_type": "code",
149-
"execution_count": 7,
150+
"execution_count": 9,
150151
"id": "particular-blocking",
151152
"metadata": {},
152153
"outputs": [],
@@ -164,7 +165,28 @@
164165
},
165166
{
166167
"cell_type": "code",
167-
"execution_count": 8,
168+
"execution_count": 26,
169+
"id": "5147f018-daac-4f7e-8e71-f32587604515",
170+
"metadata": {},
171+
"outputs": [
172+
{
173+
"data": {
174+
"text/plain": [
175+
"'cky4mzhmknvos0zcwexjj9nc0'"
176+
]
177+
},
178+
"execution_count": 26,
179+
"metadata": {},
180+
"output_type": "execute_result"
181+
}
182+
],
183+
"source": [
184+
"list(list(project.datasets())[0].data_rows())[0].uid"
185+
]
186+
},
187+
{
188+
"cell_type": "code",
189+
"execution_count": 27,
168190
"id": "cross-assumption",
169191
"metadata": {},
170192
"outputs": [],
@@ -173,10 +195,11 @@
173195
" \"uuid\":\n",
174196
" \"1b5762e9-416c-44cf-9a5f-07effb51f863\",\n",
175197
" \"schemaId\":\n",
176-
" ontology.tools[0].feature_schema_id,\n",
198+
"# ontology.tools[0].feature_schema_id,\n",
199+
" list(list(project.datasets())[0].data_rows())[0].uid,\n",
177200
" \"dataRow\": {\n",
178201
" \"id\":\n",
179-
" \"cjxav4aa07r1g0dsq70t9eveg\" #Invalid (not attached to this project) data_row.uid\n",
202+
" \"cky4mzhmknvos0zcwexjj9nc0\" #Invalid (not attached to this project) data_row.uid\n",
180203
" },\n",
181204
" \"polygon\": [{\n",
182205
" \"x\": 2,\n",
@@ -196,29 +219,8 @@
196219
},
197220
{
198221
"cell_type": "code",
199-
"execution_count": 9,
200-
"id": "monetary-catalyst",
201-
"metadata": {},
202-
"outputs": [
203-
{
204-
"data": {
205-
"text/plain": [
206-
"'ckmunvlqt4w9u0y625l7cd7zq'"
207-
]
208-
},
209-
"execution_count": 8,
210-
"metadata": {},
211-
"output_type": "execute_result"
212-
}
213-
],
214-
"source": [
215-
"list(list(project.datasets())[0].data_rows())[0].uid"
216-
]
217-
},
218-
{
219-
"cell_type": "code",
220-
"execution_count": 10,
221-
"id": "designing-cricket",
222+
"execution_count": 29,
223+
"id": "52d24602-b12d-468a-a44a-e0a1ba69c3fd",
222224
"metadata": {},
223225
"outputs": [
224226
{
@@ -228,19 +230,22 @@
228230
"traceback": [
229231
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
230232
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
231-
"\u001b[0;32m~/Library/Python/3.8/lib/python/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36m_validate_ndjson\u001b[0;34m(lines, project)\u001b[0m\n\u001b[1;32m 401\u001b[0m \u001b[0mannotation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNDAnnotation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 402\u001b[0;31m \u001b[0mannotation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_instance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_row_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 403\u001b[0m \u001b[0muuid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mannotation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muuid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
232-
"\u001b[0;32m~/Library/Python/3.8/lib/python/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36mvalidate_instance\u001b[0;34m(self, valid_datarows, valid_feature_schemas)\u001b[0m\n\u001b[1;32m 600\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_feature_schemas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 601\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_datarow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_datarows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 602\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
233-
"\u001b[0;32m~/Library/Python/3.8/lib/python/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36mvalidate_datarow\u001b[0;34m(self, valid_datarows)\u001b[0m\n\u001b[1;32m 583\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataRow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mid\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvalid_datarows\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 584\u001b[0;31m raise ValueError(\n\u001b[0m\u001b[1;32m 585\u001b[0m \u001b[0;34mf\"datarow {self.dataRow.id} is not attached to the specified project\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
234-
"\u001b[0;31mValueError\u001b[0m: datarow cjxav4aa07r1g0dsq70t9eveg is not attached to the specified project",
233+
"\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36m_validate_ndjson\u001b[0;34m(lines, project)\u001b[0m\n\u001b[1;32m 428\u001b[0m \u001b[0mannotation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNDAnnotation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 429\u001b[0;31m \u001b[0mannotation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_instance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfeature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 430\u001b[0m \u001b[0muuid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mannotation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muuid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
234+
"\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36mvalidate_instance\u001b[0;34m(self, valid_feature_schemas)\u001b[0m\n\u001b[1;32m 620\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvalidate_instance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 621\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_feature_schemas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 622\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
235+
"\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36mvalidate_feature_schemas\u001b[0;34m(self, valid_feature_schemas)\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvalidate_feature_schemas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 701\u001b[0;31m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mNDBaseTool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidate_feature_schemas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 702\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mclassification\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassifications\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
236+
"\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36mvalidate_feature_schemas\u001b[0;34m(self, valid_feature_schemas)\u001b[0m\n\u001b[1;32m 610\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mschemaId\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mvalid_feature_schemas\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 611\u001b[0;31m raise ValueError(\n\u001b[0m\u001b[1;32m 612\u001b[0m \u001b[0;34mf\"schema id {self.schemaId} is not valid for the provided project's ontology.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
237+
"\u001b[0;31mValueError\u001b[0m: schema id cky4mzhmknvos0zcwexjj9nc0 is not valid for the provided project's ontology.",
235238
"\nThe above exception was the direct cause of the following exception:\n",
236239
"\u001b[0;31mMALValidationError\u001b[0m Traceback (most recent call last)",
237-
"\u001b[0;32m<ipython-input-9-9b20d211103c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_validate_ndjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpoly_example\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproject\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
238-
"\u001b[0;32m~/Library/Python/3.8/lib/python/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36m_validate_ndjson\u001b[0;34m(lines, project)\u001b[0m\n\u001b[1;32m 408\u001b[0m \u001b[0muids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muuid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mpydantic\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mValidationError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 410\u001b[0;31m raise labelbox.exceptions.MALValidationError(\n\u001b[0m\u001b[1;32m 411\u001b[0m f\"Invalid NDJson on line {idx}\") from e\n\u001b[1;32m 412\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
240+
"\u001b[0;32m<ipython-input-29-9b20d211103c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_validate_ndjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpoly_example\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproject\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
241+
"\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/labelbox/schema/bulk_import_request.py\u001b[0m in \u001b[0;36m_validate_ndjson\u001b[0;34m(lines, project)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[0muids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muuid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mpydantic\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mValidationError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 437\u001b[0;31m raise labelbox.exceptions.MALValidationError(\n\u001b[0m\u001b[1;32m 438\u001b[0m f\"Invalid NDJson on line {idx}\") from e\n\u001b[1;32m 439\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
239242
"\u001b[0;31mMALValidationError\u001b[0m: Invalid NDJson on line 0('Invalid NDJson on line 0', None)"
240243
]
241244
}
242245
],
243246
"source": [
247+
"#we can see that we did not pass in a valid schemaId - instead, we passed in the dataRow uid\n",
248+
"\n",
244249
"_validate_ndjson([poly_example], project)"
245250
]
246251
},
@@ -258,7 +263,7 @@
258263
},
259264
{
260265
"cell_type": "code",
261-
"execution_count": 11,
266+
"execution_count": null,
262267
"id": "thick-juvenile",
263268
"metadata": {},
264269
"outputs": [],
@@ -268,36 +273,31 @@
268273
"\n",
269274
"# Old way:\n",
270275
"name = str(uuid.uuid4())\n",
271-
"bulk_import_request = project.upload_annotations(\n",
276+
"upload_task = project.upload_annotations(\n",
272277
" name=name,\n",
273278
" annotations=[poly_example, invalid_example],\n",
274279
" validate=False # Turn this off or it will raise the error on the client side\n",
275280
")\n",
276-
"bulk_import_request.wait_until_done()"
281+
"upload_task.wait_until_done()"
277282
]
278283
},
279284
{
280285
"cell_type": "code",
281-
"execution_count": 12,
286+
"execution_count": 14,
282287
"id": "stock-correction",
283288
"metadata": {},
284289
"outputs": [
285290
{
286291
"name": "stdout",
287292
"output_type": "stream",
288293
"text": [
289-
"{'uuid': '1b5762e9-416c-44cf-9a5f-07effb51f863', 'dataRow': {'id': 'cjxav4aa07r1g0dsq70t9eveg'}, 'status': 'FAILURE', 'errors': [{'name': 'DataRowNotFound', 'message': 'dataRow.id cjxav4aa07r1g0dsq70t9eveg invalid', 'additionalInfo': None}]}\n",
290-
"{'uuid': '1b5762e9-416c-44cf-9a5f-07effb51f863', 'dataRow': {'id': 'cjxav4aa07r1g0dsq70t9eveg'}, 'status': 'FAILURE', 'errors': [{'name': 'DataRowNotFound', 'message': 'dataRow.id cjxav4aa07r1g0dsq70t9eveg invalid', 'additionalInfo': None}, {'name': 'GeometryInvalid', 'message': 'Invalid geometry: Each linear ring must contain at least 4 positions', 'additionalInfo': None}]}\n"
294+
"[{'uuid': '1b5762e9-416c-44cf-9a5f-07effb51f863', 'dataRow': {'id': 'cjxav4aa07r1g0dsq70t9eveg'}, 'status': 'FAILURE', 'errors': [{'name': 'DataRowNotFound', 'message': 'dataRow.id cjxav4aa07r1g0dsq70t9eveg invalid', 'additionalInfo': None}]}, {'uuid': '1b5762e9-416c-44cf-9a5f-07effb51f863', 'dataRow': {'id': 'cjxav4aa07r1g0dsq70t9eveg'}, 'status': 'FAILURE', 'errors': [{'name': 'DataRowNotFound', 'message': 'dataRow.id cjxav4aa07r1g0dsq70t9eveg invalid', 'additionalInfo': None}]}]\n"
291295
]
292296
}
293297
],
294298
"source": [
295299
"# Let's check the status:\n",
296-
"for status in bulk_import_request.statuses:\n",
297-
" print(status)\n",
298-
"\n",
299-
"for error in bulk_import_request.errors:\n",
300-
" print(error)"
300+
"print(upload_task.errors)"
301301
]
302302
},
303303
{
@@ -310,14 +310,6 @@
310310
"# We can see that we are using invalid datarows (they don't belong to the project we are uploading to)\n",
311311
"# and that the geometry is invalid."
312312
]
313-
},
314-
{
315-
"cell_type": "code",
316-
"execution_count": 14,
317-
"id": "clean-grave",
318-
"metadata": {},
319-
"outputs": [],
320-
"source": []
321313
}
322314
],
323315
"metadata": {

examples/model_assisted_labeling/image_mal.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@
528528
],
529529
"metadata": {
530530
"kernelspec": {
531-
"display_name": "Python 3 (ipykernel)",
531+
"display_name": "Python 3",
532532
"language": "python",
533533
"name": "python3"
534534
},
@@ -542,9 +542,9 @@
542542
"name": "python",
543543
"nbconvert_exporter": "python",
544544
"pygments_lexer": "ipython3",
545-
"version": "3.8.2"
545+
"version": "3.8.8"
546546
}
547547
},
548548
"nbformat": 4,
549549
"nbformat_minor": 5
550-
}
550+
}

0 commit comments

Comments
 (0)