Skip to content

Commit 13b5d66

Browse files
committed
update worksheet3
1 parent a2030f9 commit 13b5d66

1 file changed

Lines changed: 84 additions & 22 deletions

File tree

notebooks/worksheet3.ipynb

Lines changed: 84 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
},
4545
{
4646
"cell_type": "code",
47-
"execution_count": null,
47+
"execution_count": 2,
4848
"metadata": {},
4949
"outputs": [],
5050
"source": [
@@ -63,9 +63,11 @@
6363
"import cartopy.crs as ccrs\n",
6464
"from mpl_toolkits.axes_grid1 import AxesGrid\n",
6565
"from cartopy.mpl.geoaxes import GeoAxes\n",
66+
"from utils import copy_s3_files, flush_data\n",
67+
"\n",
6668
"\n",
6769
"# Provide the names of the directories where the netCDF model files are stored\n",
68-
"DATADIR = '/project/ciid/projects/PRECIS/worksheets/data/'\n",
70+
"DATADIR = 'data/'\n",
6971
"\n",
7072
"# Directory name where data is read from\n",
7173
"HISTDIR = os.path.join(DATADIR, 'historical')\n",
@@ -139,9 +141,21 @@
139141
},
140142
{
141143
"cell_type": "code",
142-
"execution_count": null,
143-
"metadata": {},
144-
"outputs": [],
144+
"execution_count": 3,
145+
"metadata": {},
146+
"outputs": [
147+
{
148+
"ename": "NameError",
149+
"evalue": "name 'lat' is not defined",
150+
"output_type": "error",
151+
"traceback": [
152+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
153+
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
154+
"\u001b[0;32m<ipython-input-3-ecda39f860d9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m# Note that the Aphrodite data are on a regular grid (unlike the model data) so real latitudes and longitudes are\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# used to define the region around KL (more on this in section 2.6)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mobs_cube_KL\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobs_cube\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mintersection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlatitude\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlongitude\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlon\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 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# save the constrained cube to directory\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
155+
"\u001b[0;31mNameError\u001b[0m: name 'lat' is not defined"
156+
]
157+
}
158+
],
145159
"source": [
146160
"# load APHRODITE data\n",
147161
"obs_cube = iris.load_cube(APHRODIR + '/aphro.mon.1961_1990.nc')\n",
@@ -174,12 +188,21 @@
174188
},
175189
{
176190
"cell_type": "code",
177-
"execution_count": null,
178-
"metadata": {},
179-
"outputs": [],
191+
"execution_count": 4,
192+
"metadata": {},
193+
"outputs": [
194+
{
195+
"name": "stdout",
196+
"output_type": "stream",
197+
"text": [
198+
"Pole Latitude: 75.0\n",
199+
"Pole Longitude: 289.0\n"
200+
]
201+
}
202+
],
180203
"source": [
181204
"# Load the HadCM3Q0 (cahpa) model cube data as need grid information from it\n",
182-
"infile = os.path.join(HISTDIR, 'cahpa.mon.1961_1990.pr.rr.nc')\n",
205+
"infile = os.path.join(DATADIR, 'cahpa.mon.1961_1990.pr.rr.nc')\n",
183206
"cahpa_cube = iris.load_cube(infile)\n",
184207
"\n",
185208
"pole_lat = cahpa_cube.coord_system().grid_north_pole_latitude\n",
@@ -197,9 +220,18 @@
197220
},
198221
{
199222
"cell_type": "code",
200-
"execution_count": null,
201-
"metadata": {},
202-
"outputs": [],
223+
"execution_count": 5,
224+
"metadata": {},
225+
"outputs": [
226+
{
227+
"name": "stdout",
228+
"output_type": "stream",
229+
"text": [
230+
"Rotated Longitudes: -7.92, -6.98\n",
231+
"Rotated Latitudes: -12.12, -11.41\n"
232+
]
233+
}
234+
],
203235
"source": [
204236
"lon=np.array([101.25, 102.15])\n",
205237
"lat=np.array([2.74, 3.48])\n",
@@ -217,16 +249,34 @@
217249
},
218250
{
219251
"cell_type": "code",
220-
"execution_count": null,
221-
"metadata": {},
222-
"outputs": [],
252+
"execution_count": 6,
253+
"metadata": {},
254+
"outputs": [
255+
{
256+
"ename": "OSError",
257+
"evalue": "One or more of the files specified did not exist:\n * \"/home/sagemaker-user/PyPRECIS/notebooks/data/cahpa.mon.1961_1990.pr.rr.mmday-1.nc\" didn't match any files",
258+
"output_type": "error",
259+
"traceback": [
260+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
261+
"\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)",
262+
"\u001b[0;32m<ipython-input-6-32f825d0a64b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# Load the baseline precipitation data using the KL_constraint - the command below\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# loads the data into a cube constrained by the area chosen\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miris\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_cube\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minfile\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 11\u001b[0m \u001b[0;31m# All grid cells whose longitudes and latitudes lie within the limits shown will be selected.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m data_KL = data.intersection(grid_longitude=rotated_lons,\n",
263+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/__init__.py\u001b[0m in \u001b[0;36mload_cube\u001b[0;34m(uris, constraint, callback)\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'only a single constraint is allowed'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 386\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 387\u001b[0;31m \u001b[0mcubes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_load_collection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muris\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstraints\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcubes\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[0m\u001b[1;32m 388\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 389\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
264+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/__init__.py\u001b[0m in \u001b[0;36m_load_collection\u001b[0;34m(uris, constraints, callback)\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[0mcubes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_generate_cubes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muris\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstraints\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 325\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miris\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcube\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_CubeFilterCollection\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_cubes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcubes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstraints\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 326\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mEOFError\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[1;32m 327\u001b[0m raise iris.exceptions.TranslationError(\n",
265+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/cube.py\u001b[0m in \u001b[0;36mfrom_cubes\u001b[0;34m(cubes, constraints)\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0mpairs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_CubeFilter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconstraint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mconstraint\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mconstraints\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[0mcollection\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_CubeFilterCollection\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpairs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 157\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mcube\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcubes\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 158\u001b[0m \u001b[0mcollection\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_cube\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcube\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcollection\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
266+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/__init__.py\u001b[0m in \u001b[0;36m_generate_cubes\u001b[0;34m(uris, callback, constraints)\u001b[0m\n\u001b[1;32m 310\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mscheme\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'file'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[0mpart_names\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgroups\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 312\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mcube\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miris\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_files\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpart_names\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstraints\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[0m\u001b[1;32m 313\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mcube\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mscheme\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'http'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'https'\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",
267+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/io/__init__.py\u001b[0m in \u001b[0;36mload_files\u001b[0;34m(filenames, callback, constraints)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 192\u001b[0m \"\"\"\n\u001b[0;32m--> 193\u001b[0;31m \u001b[0mall_file_paths\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexpand_filespecs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilenames\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 194\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 195\u001b[0m \u001b[0;31m# Create default dict mapping iris format handler to its associated filenames\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
268+
"\u001b[0;32m/opt/conda/envs/pyprecis-environment/lib/python3.6/site-packages/iris/io/__init__.py\u001b[0m in \u001b[0;36mexpand_filespecs\u001b[0;34m(file_specs)\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m'\\n * \"{}\" didn\\'t match any files'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpattern\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 176\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\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 177\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mfname\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfnames\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mall_expanded\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfnames\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
269+
"\u001b[0;31mOSError\u001b[0m: One or more of the files specified did not exist:\n * \"/home/sagemaker-user/PyPRECIS/notebooks/data/cahpa.mon.1961_1990.pr.rr.mmday-1.nc\" didn't match any files"
270+
]
271+
}
272+
],
223273
"source": [
224274
"# Constrain the cube area over Kuala Lumpur (KL).\n",
225275
"# PRECIS uses a rotated grid, so the co-ordinates required are different to real world coordinates.\n",
226276
"\n",
227277
"for jobid in ['cahpa', 'cahpb']:\n",
228278
" # Directory name where data are read from and stored to\n",
229-
" infile = os.path.join(DATADIR, 'historical', jobid + '.mon.1961_1990.pr.rr.mmday-1.nc')\n",
279+
" infile = os.path.join(DATADIR, jobid + '.mon.1961_1990.pr.rr.mmday-1.nc')\n",
230280
" \n",
231281
" # Load the baseline precipitation data using the KL_constraint - the command below\n",
232282
" # loads the data into a cube constrained by the area chosen\n",
@@ -236,7 +286,7 @@
236286
" grid_latitude=rotated_lats)\n",
237287
"\n",
238288
" # save the constrained cube\n",
239-
" outfile = os.path.join(DATADIR, 'historical', jobid + '.mon.1961_1990.pr.rr.mmday-1.KL.nc')\n",
289+
" outfile = os.path.join(DATADIR, jobid + '.mon.1961_1990.pr.rr.mmday-1.KL.nc')\n",
240290
" iris.save(data_KL, outfile)\n",
241291
" print('Saved: {}'.format(outfile))"
242292
]
@@ -302,7 +352,7 @@
302352
"source": [
303353
"for jobid in ['cahpa', 'cahpb']:\n",
304354
" # Set up the path to the data\n",
305-
" infile = os.path.join(DATADIR, 'historical', jobid + '.mon.1961_1990.pr.rr.mmday-1.KL.nc')\n",
355+
" infile = os.path.join(DATADIR, jobid + '.mon.1961_1990.pr.rr.mmday-1.KL.nc')\n",
306356
" \n",
307357
" # Load the data extracted around Kuala Lumpur created in previous step\n",
308358
" data = iris.load_cube(infile)\n",
@@ -745,6 +795,17 @@
745795
"**j) Plot a series of figures** that shows 1) the monthly cycles of temperature and rainfall comparing the 6 models and the observations; and 2) the monthly differences between the models and observations"
746796
]
747797
},
798+
{
799+
"cell_type": "code",
800+
"execution_count": null,
801+
"metadata": {},
802+
"outputs": [],
803+
"source": [
804+
"# we first need to download CRU and netcdf data\n",
805+
"copy_s3_files('s3://ias-pyprecis/data/CRU/*.nc', 'data/CRU/')\n",
806+
"copy_s3_files('s3://ias-pyprecis/data/netcdf/*.nc', 'data/netcdf/')"
807+
]
808+
},
748809
{
749810
"cell_type": "code",
750811
"execution_count": null,
@@ -755,7 +816,7 @@
755816
"Here are some useful varibles you might like to use in your scripts\n",
756817
"'''\n",
757818
"# Some helpful data locations\n",
758-
"DATADIR = '/project/precis/worksheets/data'\n",
819+
"DATADIR = 'data'\n",
759820
"APHRODIR = os.path.join(DATADIR, 'APHRODITE')\n",
760821
"CRUDIR = os.path.join(DATADIR, 'CRU')\n",
761822
"CLIMDIR = os.path.join(DATADIR, 'climatology')\n",
@@ -991,10 +1052,11 @@
9911052
}
9921053
],
9931054
"metadata": {
1055+
"instance_type": "ml.t3.medium",
9941056
"kernelspec": {
995-
"display_name": "pyprecis-environment",
1057+
"display_name": "Python [conda env:pyprecis-environment] (arn:aws:sagemaker:eu-west-2:198477955030:image-version/abtraining/1)",
9961058
"language": "python",
997-
"name": "pyprecis-environment"
1059+
"name": "conda-env-pyprecis-environment-py__SAGEMAKER_INTERNAL__arn:aws:sagemaker:eu-west-2:198477955030:image-version/abtraining/1"
9981060
},
9991061
"language_info": {
10001062
"codemirror_mode": {
@@ -1014,5 +1076,5 @@
10141076
}
10151077
},
10161078
"nbformat": 4,
1017-
"nbformat_minor": 1
1079+
"nbformat_minor": 4
10181080
}

0 commit comments

Comments
 (0)