Skip to content

Instantly share code, notes, and snippets.

@rsignell
Created October 16, 2025 20:24
Show Gist options
  • Select an option

  • Save rsignell/0d15a989eb5ea2a54fb8efbf3a70a879 to your computer and use it in GitHub Desktop.

Select an option

Save rsignell/0d15a989eb5ea2a54fb8efbf3a70a879 to your computer and use it in GitHub Desktop.
era5_evap.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "d9a0259d-b56b-429c-9a76-7316829b8b63",
"metadata": {},
"source": [
"# ERA5 EVAP from AWS: Virtualizarr & Icechunk"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "096be375-3c98-429f-843e-b53f94049da6",
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings(\"ignore\", category=UserWarning)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1de3bfc8-2eb4-440b-be3e-3f34cbc6389f",
"metadata": {},
"outputs": [],
"source": [
"data_bucket = \"s3://nsf-ncar-era5\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e5478c68-745e-423c-ac1e-eedf997bc992",
"metadata": {},
"outputs": [],
"source": [
"import fsspec\n",
"fs = fsspec.filesystem('s3', anon=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c652eea8-93ca-4791-9a1c-2a331f3091c1",
"metadata": {},
"outputs": [],
"source": [
"flist = fs.glob(f'{data_bucket}/e5.oper.fc.sfc.accumu/196001/*128_182_e*.nc')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "08e66934-0405-4fa7-9a04-a6528c6d8577",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['nsf-ncar-era5/e5.oper.fc.sfc.accumu/196001/e5.oper.fc.sfc.accumu.128_182_e.ll025sc.1960010106_1960011606.nc',\n",
" 'nsf-ncar-era5/e5.oper.fc.sfc.accumu/196001/e5.oper.fc.sfc.accumu.128_182_e.ll025sc.1960011606_1960020106.nc']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flist"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "47383323-52d7-4ae5-bf31-cc74f547f79d",
"metadata": {},
"outputs": [],
"source": [
"flist = [f's3://{f}' for f in flist]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "fa06c4b3-7c50-4b65-b8bc-caca5522cb7f",
"metadata": {},
"outputs": [],
"source": [
"import xarray as xr\n",
"from obstore.store import from_url\n",
"\n",
"from virtualizarr import open_virtual_dataset\n",
"from virtualizarr.parsers import HDFParser\n",
"from virtualizarr.registry import ObjectStoreRegistry"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "865edd39-32f4-4dcc-b556-44c0789d0846",
"metadata": {},
"outputs": [],
"source": [
"store = from_url(data_bucket, region=\"us-west-2\", skip_signature=True)\n",
"registry = ObjectStoreRegistry({data_bucket: store})\n",
"parser = HDFParser()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "c7d02c8f-0e04-4d51-a80b-83e229e14dd9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.26 s, sys: 370 ms, total: 1.63 s\n",
"Wall time: 31.9 s\n"
]
}
],
"source": [
"%%time\n",
"ds_list = [\n",
" open_virtual_dataset(\n",
" url=f,\n",
" parser=parser,\n",
" registry=registry, \n",
" loadable_variables=[\"forecast_initial_time\"],\n",
" )\n",
" for f in flist\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "6919a6d6-2c4b-4c0e-a974-8557bad7beb7",
"metadata": {
"scrolled": true
},
"outputs": [
{
"ename": "ValueError",
"evalue": "Cannot concatenate arrays with partial chunks because only regular chunk grids are currently supported. Concat input 0 has array length 30 along the concatenation axis which is not evenly divisible by chunk length 1024.",
"output_type": "error",
"traceback": [
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
"\u001b[31mValueError\u001b[39m Traceback (most recent call last)",
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[10]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m ds = \u001b[43mxr\u001b[49m\u001b[43m.\u001b[49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 2\u001b[39m \u001b[43m \u001b[49m\u001b[43mds_list\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3\u001b[39m \u001b[43m \u001b[49m\u001b[43mdim\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mforecast_initial_time\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 4\u001b[39m \u001b[43m \u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mminimal\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 5\u001b[39m \u001b[43m \u001b[49m\u001b[43mcompat\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43moverride\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 6\u001b[39m \u001b[43m \u001b[49m\u001b[43mcombine_attrs\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43moverride\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 7\u001b[39m \u001b[43m)\u001b[49m\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/xarray/structure/concat.py:295\u001b[39m, in \u001b[36mconcat\u001b[39m\u001b[34m(objs, dim, data_vars, coords, compat, positions, fill_value, join, combine_attrs, create_index_for_new_dim)\u001b[39m\n\u001b[32m 282\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m _dataarray_concat(\n\u001b[32m 283\u001b[39m objs,\n\u001b[32m 284\u001b[39m dim=dim,\n\u001b[32m (...)\u001b[39m\u001b[32m 292\u001b[39m create_index_for_new_dim=create_index_for_new_dim,\n\u001b[32m 293\u001b[39m )\n\u001b[32m 294\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(first_obj, Dataset):\n\u001b[32m--> \u001b[39m\u001b[32m295\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_dataset_concat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 296\u001b[39m \u001b[43m \u001b[49m\u001b[43mobjs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 297\u001b[39m \u001b[43m \u001b[49m\u001b[43mdim\u001b[49m\u001b[43m=\u001b[49m\u001b[43mdim\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 298\u001b[39m \u001b[43m \u001b[49m\u001b[43mdata_vars\u001b[49m\u001b[43m=\u001b[49m\u001b[43mdata_vars\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 299\u001b[39m \u001b[43m \u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 300\u001b[39m \u001b[43m \u001b[49m\u001b[43mcompat\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcompat\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 301\u001b[39m \u001b[43m \u001b[49m\u001b[43mpositions\u001b[49m\u001b[43m=\u001b[49m\u001b[43mpositions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 302\u001b[39m \u001b[43m \u001b[49m\u001b[43mfill_value\u001b[49m\u001b[43m=\u001b[49m\u001b[43mfill_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 303\u001b[39m \u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[43m=\u001b[49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 304\u001b[39m \u001b[43m \u001b[49m\u001b[43mcombine_attrs\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcombine_attrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 305\u001b[39m \u001b[43m \u001b[49m\u001b[43mcreate_index_for_new_dim\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcreate_index_for_new_dim\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 306\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 307\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 308\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[32m 309\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mcan only concatenate xarray Dataset and DataArray \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 310\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mobjects, got \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(first_obj)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 311\u001b[39m )\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/xarray/structure/concat.py:770\u001b[39m, in \u001b[36m_dataset_concat\u001b[39m\u001b[34m(datasets, dim, data_vars, coords, compat, positions, fill_value, join, combine_attrs, create_index_for_new_dim)\u001b[39m\n\u001b[32m 768\u001b[39m result_vars[k] = v\n\u001b[32m 769\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m770\u001b[39m combined_var = \u001b[43mconcat_vars\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 771\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mvars\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdim_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpositions\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcombine_attrs\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcombine_attrs\u001b[49m\n\u001b[32m 772\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 773\u001b[39m \u001b[38;5;66;03m# reindex if variable is not present in all datasets\u001b[39;00m\n\u001b[32m 774\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(variable_index) < concat_index_size:\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/xarray/core/variable.py:3110\u001b[39m, in \u001b[36mconcat\u001b[39m\u001b[34m(variables, dim, positions, shortcut, combine_attrs)\u001b[39m\n\u001b[32m 3108\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m IndexVariable.concat(variables, dim, positions, shortcut, combine_attrs)\n\u001b[32m 3109\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m3110\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mVariable\u001b[49m\u001b[43m.\u001b[49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvariables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdim\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpositions\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshortcut\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcombine_attrs\u001b[49m\u001b[43m)\u001b[49m\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/xarray/core/variable.py:1841\u001b[39m, in \u001b[36mVariable.concat\u001b[39m\u001b[34m(cls, variables, dim, positions, shortcut, combine_attrs)\u001b[39m\n\u001b[32m 1839\u001b[39m axis = first_var.get_axis_num(dim)\n\u001b[32m 1840\u001b[39m dims = first_var_dims\n\u001b[32m-> \u001b[39m\u001b[32m1841\u001b[39m data = \u001b[43mduck_array_ops\u001b[49m\u001b[43m.\u001b[49m\u001b[43mconcatenate\u001b[49m\u001b[43m(\u001b[49m\u001b[43marrays\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m=\u001b[49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1842\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m positions \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m 1843\u001b[39m \u001b[38;5;66;03m# TODO: deprecate this option -- we don't need it for groupby\u001b[39;00m\n\u001b[32m 1844\u001b[39m \u001b[38;5;66;03m# any more.\u001b[39;00m\n\u001b[32m 1845\u001b[39m indices = nputils.inverse_permutation(np.concatenate(positions))\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/xarray/core/duck_array_ops.py:441\u001b[39m, in \u001b[36mconcatenate\u001b[39m\u001b[34m(arrays, axis)\u001b[39m\n\u001b[32m 439\u001b[39m xp = get_array_namespace(*arrays)\n\u001b[32m 440\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(xp, \u001b[33m\"\u001b[39m\u001b[33mconcat\u001b[39m\u001b[33m\"\u001b[39m):\n\u001b[32m--> \u001b[39m\u001b[32m441\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mxp\u001b[49m\u001b[43m.\u001b[49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43mas_shared_dtype\u001b[49m\u001b[43m(\u001b[49m\u001b[43marrays\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxp\u001b[49m\u001b[43m=\u001b[49m\u001b[43mxp\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m=\u001b[49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 442\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 443\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m xp.concatenate(as_shared_dtype(arrays, xp=xp), axis=axis)\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/virtualizarr/manifests/array.py:141\u001b[39m, in \u001b[36mManifestArray.__array_function__\u001b[39m\u001b[34m(self, func, types, args, kwargs)\u001b[39m\n\u001b[32m 138\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\u001b[38;5;28missubclass\u001b[39m(t, ManifestArray) \u001b[38;5;28;01mfor\u001b[39;00m t \u001b[38;5;129;01min\u001b[39;00m types):\n\u001b[32m 139\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m\n\u001b[32m--> \u001b[39m\u001b[32m141\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mMANIFESTARRAY_HANDLED_ARRAY_FUNCTIONS\u001b[49m\u001b[43m[\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m]\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/virtualizarr/manifests/array_api.py:91\u001b[39m, in \u001b[36mconcatenate\u001b[39m\u001b[34m(arrays, axis)\u001b[39m\n\u001b[32m 89\u001b[39m arr_chunks = [arr.chunks \u001b[38;5;28;01mfor\u001b[39;00m arr \u001b[38;5;129;01min\u001b[39;00m arrays]\n\u001b[32m 90\u001b[39m check_same_shapes_except_on_concat_axis(arr_shapes, axis)\n\u001b[32m---> \u001b[39m\u001b[32m91\u001b[39m \u001b[43mcheck_no_partial_chunks_on_concat_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43marr_shapes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43marr_chunks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 93\u001b[39m \u001b[38;5;66;03m# find what new array shape must be\u001b[39;00m\n\u001b[32m 94\u001b[39m new_length_along_concat_axis = \u001b[38;5;28msum\u001b[39m([shape[axis] \u001b[38;5;28;01mfor\u001b[39;00m shape \u001b[38;5;129;01min\u001b[39;00m arr_shapes])\n",
"\u001b[36mFile \u001b[39m\u001b[32m/srv/conda/envs/notebook/lib/python3.13/site-packages/virtualizarr/manifests/utils.py:173\u001b[39m, in \u001b[36mcheck_no_partial_chunks_on_concat_axis\u001b[39m\u001b[34m(shapes, chunks, axis)\u001b[39m\n\u001b[32m 171\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i, (shape, chunk_shape) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(\u001b[38;5;28mzip\u001b[39m(shapes, chunks)):\n\u001b[32m 172\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m shape[axis] % chunk_shape[axis] > \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m173\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 174\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mCannot concatenate arrays with partial chunks because only regular chunk grids are currently supported. \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 175\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mConcat input \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m has array length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mshape[axis]\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m along the concatenation axis which is not \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 176\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mevenly divisible by chunk length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mchunk_shape[axis]\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 177\u001b[39m )\n",
"\u001b[31mValueError\u001b[39m: Cannot concatenate arrays with partial chunks because only regular chunk grids are currently supported. Concat input 0 has array length 30 along the concatenation axis which is not evenly divisible by chunk length 1024."
]
}
],
"source": [
"ds = xr.concat(\n",
" ds_list,\n",
" dim=\"forecast_initial_time\",\n",
" coords=\"minimal\",\n",
" compat=\"override\",\n",
" combine_attrs=\"override\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "e304421a-b519-4875-b2d3-272df25023b7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(30, 12, 721, 1440)\n",
"(32, 12, 721, 1440)\n"
]
}
],
"source": [
"_ = [print(ds.E.shape) for ds in ds_list]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "9ecd0a3f-4d29-409a-afad-13513537a5bb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 12, 721, 1440)\n",
"(1, 12, 721, 1440)\n"
]
}
],
"source": [
"_ = [print(ds.E.chunks) for ds in ds_list]"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "77badac4-362e-4501-b669-24c6d986bb69",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in notebooks */\n",
"\n",
":root {\n",
" --xr-font-color0: var(\n",
" --jp-content-font-color0,\n",
" var(--pst-color-text-base rgba(0, 0, 0, 1))\n",
" );\n",
" --xr-font-color2: var(\n",
" --jp-content-font-color2,\n",
" var(--pst-color-text-base, rgba(0, 0, 0, 0.54))\n",
" );\n",
" --xr-font-color3: var(\n",
" --jp-content-font-color3,\n",
" var(--pst-color-text-base, rgba(0, 0, 0, 0.38))\n",
" );\n",
" --xr-border-color: var(\n",
" --jp-border-color2,\n",
" hsl(from var(--pst-color-on-background, white) h s calc(l - 10))\n",
" );\n",
" --xr-disabled-color: var(\n",
" --jp-layout-color3,\n",
" hsl(from var(--pst-color-on-background, white) h s calc(l - 40))\n",
" );\n",
" --xr-background-color: var(\n",
" --jp-layout-color0,\n",
" var(--pst-color-on-background, white)\n",
" );\n",
" --xr-background-color-row-even: var(\n",
" --jp-layout-color1,\n",
" hsl(from var(--pst-color-on-background, white) h s calc(l - 5))\n",
" );\n",
" --xr-background-color-row-odd: var(\n",
" --jp-layout-color2,\n",
" hsl(from var(--pst-color-on-background, white) h s calc(l - 15))\n",
" );\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: var(\n",
" --jp-content-font-color0,\n",
" var(--pst-color-text-base, rgba(255, 255, 255, 1))\n",
" );\n",
" --xr-font-color2: var(\n",
" --jp-content-font-color2,\n",
" var(--pst-color-text-base, rgba(255, 255, 255, 0.54))\n",
" );\n",
" --xr-font-color3: var(\n",
" --jp-content-font-color3,\n",
" var(--pst-color-text-base, rgba(255, 255, 255, 0.38))\n",
" );\n",
" --xr-border-color: var(\n",
" --jp-border-color2,\n",
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 10))\n",
" );\n",
" --xr-disabled-color: var(\n",
" --jp-layout-color3,\n",
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 40))\n",
" );\n",
" --xr-background-color: var(\n",
" --jp-layout-color0,\n",
" var(--pst-color-on-background, #111111)\n",
" );\n",
" --xr-background-color-row-even: var(\n",
" --jp-layout-color1,\n",
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 5))\n",
" );\n",
" --xr-background-color-row-odd: var(\n",
" --jp-layout-color2,\n",
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 15))\n",
" );\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
" line-height: 1.6;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-obj-name,\n",
".xr-group-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-group-name::before {\n",
" content: \"📁\";\n",
" padding-right: 0.3em;\n",
"}\n",
"\n",
".xr-group-name,\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
" margin-block-start: 0;\n",
" margin-block-end: 0;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
" border: 2px solid transparent !important;\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0) !important;\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-top: 4px;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-group-box {\n",
" display: inline-grid;\n",
" grid-template-columns: 0px 20px auto;\n",
" width: 100%;\n",
"}\n",
"\n",
".xr-group-box-vline {\n",
" grid-column-start: 1;\n",
" border-right: 0.2em solid;\n",
" border-color: var(--xr-border-color);\n",
" width: 0px;\n",
"}\n",
"\n",
".xr-group-box-hline {\n",
" grid-column-start: 2;\n",
" grid-row-start: 1;\n",
" height: 1em;\n",
" width: 20px;\n",
" border-bottom: 0.2em solid;\n",
" border-color: var(--xr-border-color);\n",
"}\n",
"\n",
".xr-group-box-contents {\n",
" grid-column-start: 3;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" border-color: var(--xr-background-color-row-odd);\n",
" margin-bottom: 0;\n",
" padding-top: 2px;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
" border-color: var(--xr-background-color-row-even);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" border-top: 2px dotted var(--xr-background-color);\n",
" padding-bottom: 20px !important;\n",
" padding-top: 10px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in + label,\n",
".xr-var-data-in + label,\n",
".xr-index-data-in + label {\n",
" padding: 0 1px;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-data > pre,\n",
".xr-index-data > pre,\n",
".xr-var-data > table > tbody > tr {\n",
" background-color: transparent !important;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked + label > .xr-icon-file-text2,\n",
".xr-var-data-in:checked + label > .xr-icon-database,\n",
".xr-index-data-in:checked + label > .xr-icon-database {\n",
" color: var(--xr-font-color0);\n",
" filter: drop-shadow(1px 1px 5px var(--xr-font-color2));\n",
" stroke-width: 0.8px;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 1GB\n",
"Dimensions: (forecast_initial_time: 30, forecast_hour: 12,\n",
" latitude: 721, longitude: 1440)\n",
"Coordinates:\n",
" * forecast_initial_time (forecast_initial_time) datetime64[ns] 240B 1960-0...\n",
" forecast_hour (forecast_hour) int32 48B ManifestArray&lt;shape=(12,...\n",
" latitude (latitude) float64 6kB ManifestArray&lt;shape=(721,),...\n",
" longitude (longitude) float64 12kB ManifestArray&lt;shape=(1440...\n",
"Data variables:\n",
" E (forecast_initial_time, forecast_hour, latitude, longitude) float32 1GB ManifestArray&lt;shape=(30, 12, 721, 1440), dtype=float32, chun...\n",
" utc_date (forecast_initial_time) int32 120B ManifestArray&lt;s...\n",
"Attributes:\n",
" DATA_SOURCE: ECMWF: https://cds.climate.copernicus.eu, Copernicu...\n",
" NETCDF_CONVERSION: CISL RDA: Conversion from ECMWF GRIB1 data to netCDF4.\n",
" NETCDF_VERSION: 4.8.1\n",
" CONVERSION_PLATFORM: Linux r8i3n21 4.12.14-95.51-default #1 SMP Fri Apr ...\n",
" CONVERSION_DATE: Mon Jun 27 14:39:26 MDT 2022\n",
" Conventions: CF-1.6\n",
" NETCDF_COMPRESSION: NCO: Precision-preserving compression to netCDF4/HD...\n",
" history: Mon Jun 27 14:39:34 2022: ncks -4 --ppc default=7 e...\n",
" NCO: netCDF Operators version 5.0.3 (Homepage = http://n...</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-f1665fe4-9b6e-4420-8607-e89279a7c9c6' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-f1665fe4-9b6e-4420-8607-e89279a7c9c6' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>forecast_initial_time</span>: 30</li><li><span>forecast_hour</span>: 12</li><li><span>latitude</span>: 721</li><li><span>longitude</span>: 1440</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-5e8796b2-05cb-4924-90be-78a311ef74cb' class='xr-section-summary-in' type='checkbox' checked><label for='section-5e8796b2-05cb-4924-90be-78a311ef74cb' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>forecast_initial_time</span></div><div class='xr-var-dims'>(forecast_initial_time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1960-01-01T06:00:00 ... 1960-01-...</div><input id='attrs-038fe4c1-91fb-4741-ab81-faf409760fc4' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-038fe4c1-91fb-4741-ab81-faf409760fc4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0a3630f5-5dfb-47d7-9786-4b7596bbe669' class='xr-var-data-in' type='checkbox'><label for='data-0a3630f5-5dfb-47d7-9786-4b7596bbe669' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>forecast initial time</dd><dt><span>short_name :</span></dt><dd>fitime</dd><dt><span>standard_name :</span></dt><dd>forecast_reference_time</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;1960-01-01T06:00:00.000000000&#x27;, &#x27;1960-01-01T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-02T06:00:00.000000000&#x27;, &#x27;1960-01-02T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-03T06:00:00.000000000&#x27;, &#x27;1960-01-03T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-04T06:00:00.000000000&#x27;, &#x27;1960-01-04T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-05T06:00:00.000000000&#x27;, &#x27;1960-01-05T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-06T06:00:00.000000000&#x27;, &#x27;1960-01-06T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-07T06:00:00.000000000&#x27;, &#x27;1960-01-07T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-08T06:00:00.000000000&#x27;, &#x27;1960-01-08T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-09T06:00:00.000000000&#x27;, &#x27;1960-01-09T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-10T06:00:00.000000000&#x27;, &#x27;1960-01-10T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-11T06:00:00.000000000&#x27;, &#x27;1960-01-11T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-12T06:00:00.000000000&#x27;, &#x27;1960-01-12T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-13T06:00:00.000000000&#x27;, &#x27;1960-01-13T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-14T06:00:00.000000000&#x27;, &#x27;1960-01-14T18:00:00.000000000&#x27;,\n",
" &#x27;1960-01-15T06:00:00.000000000&#x27;, &#x27;1960-01-15T18:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>forecast_hour</span></div><div class='xr-var-dims'>(forecast_hour)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>ManifestArray&lt;shape=(12,), dtype...</div><input id='attrs-7f267d99-be41-4276-b0fc-9c2cd6fc5e37' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7f267d99-be41-4276-b0fc-9c2cd6fc5e37' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4345e204-b36f-4d7c-8b84-fee9ca056c45' class='xr-var-data-in' type='checkbox'><label for='data-4345e204-b36f-4d7c-8b84-fee9ca056c45' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>forecast hour</dd><dt><span>short_name :</span></dt><dd>fhr</dd><dt><span>standard_name :</span></dt><dd>forecast_period</dd><dt><span>units :</span></dt><dd>hour</dd><dt><span>units_qualifier :</span></dt><dd>hours since forecast_initial_time</dd></dl></div><div class='xr-var-data'><pre>ManifestArray&lt;shape=(12,), dtype=int32, chunks=(12,)&gt;</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>ManifestArray&lt;shape=(721,), dtyp...</div><input id='attrs-2c2c6b35-0095-4637-a5d7-1c316c3990e8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2c2c6b35-0095-4637-a5d7-1c316c3990e8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-cf7a78c0-8445-4373-9230-eb0547729ac0' class='xr-var-data-in' type='checkbox'><label for='data-cf7a78c0-8445-4373-9230-eb0547729ac0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>latitude</dd><dt><span>short_name :</span></dt><dd>lat</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>ManifestArray&lt;shape=(721,), dtype=float64, chunks=(721,)&gt;</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>ManifestArray&lt;shape=(1440,), dty...</div><input id='attrs-75e3a880-d14e-41fa-a8f1-a99c95694509' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-75e3a880-d14e-41fa-a8f1-a99c95694509' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-da527bdb-6e9e-4345-8c4a-f5d91865fe52' class='xr-var-data-in' type='checkbox'><label for='data-da527bdb-6e9e-4345-8c4a-f5d91865fe52' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>longitude</dd><dt><span>short_name :</span></dt><dd>lon</dd><dt><span>units :</span></dt><dd>degrees_east</dd></dl></div><div class='xr-var-data'><pre>ManifestArray&lt;shape=(1440,), dtype=float64, chunks=(1440,)&gt;</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-24b2057b-3481-4e88-a7e7-a21f3332724e' class='xr-section-summary-in' type='checkbox' checked><label for='section-24b2057b-3481-4e88-a7e7-a21f3332724e' class='xr-section-summary' >Data variables: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>E</span></div><div class='xr-var-dims'>(forecast_initial_time, forecast_hour, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>ManifestArray&lt;shape=(30, 12, 721...</div><input id='attrs-a8043eb5-0ecd-467c-ada2-1b7c8c43110e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a8043eb5-0ecd-467c-ada2-1b7c8c43110e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b300f36e-690b-46f6-847c-c149f36de914' class='xr-var-data-in' type='checkbox'><label for='data-b300f36e-690b-46f6-847c-c149f36de914' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Evaporation</dd><dt><span>short_name :</span></dt><dd>e</dd><dt><span>units :</span></dt><dd>m of water equivalent</dd><dt><span>original_format :</span></dt><dd>WMO GRIB 1 with ECMWF local table</dd><dt><span>ecmwf_local_table :</span></dt><dd>128</dd><dt><span>ecmwf_parameter :</span></dt><dd>182</dd><dt><span>_FillValue :</span></dt><dd>AAAAQDMaS0Q=</dd><dt><span>missing_value :</span></dt><dd>9.999000260554009e+20</dd><dt><span>minimum_value :</span></dt><dd>-0.001647725235670805</dd><dt><span>maximum_value :</span></dt><dd>0.0003123336937278509</dd><dt><span>grid_specification :</span></dt><dd>0.25 degree x 0.25 degree from 90N to 90S and 0E to 359.75E (721 x 1440 Latitude/Longitude)</dd><dt><span>rda_dataset :</span></dt><dd>ds633.0</dd><dt><span>rda_dataset_url :</span></dt><dd>https:/rda.ucar.edu/datasets/ds633.0/</dd><dt><span>rda_dataset_doi :</span></dt><dd>DOI: 10.5065/BH6N-5N20</dd><dt><span>rda_dataset_group :</span></dt><dd>ERA5 atmospheric surface forecast (accumulated) [netCDF4]</dd><dt><span>QuantizeGranularBitGroomNumberOfSignificantDigits :</span></dt><dd>7</dd></dl></div><div class='xr-var-data'><pre>ManifestArray&lt;shape=(30, 12, 721, 1440), dtype=float32, chunks=(1, 12, 721, 1440)&gt;</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>utc_date</span></div><div class='xr-var-dims'>(forecast_initial_time)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>ManifestArray&lt;shape=(30,), dtype...</div><input id='attrs-0e6ee8e8-9d90-4ed8-994a-7702ce726577' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-0e6ee8e8-9d90-4ed8-994a-7702ce726577' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e55fd8de-4216-4ce5-93a8-8e77da054abe' class='xr-var-data-in' type='checkbox'><label for='data-e55fd8de-4216-4ce5-93a8-8e77da054abe' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>UTC date yyyy-mm-dd hh:00:00 as yyyymmddhh</dd><dt><span>units :</span></dt><dd>Gregorian_year month day hour</dd></dl></div><div class='xr-var-data'><pre>ManifestArray&lt;shape=(30,), dtype=int32, chunks=(1024,)&gt;</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-b32925ca-1233-4bce-97ee-b5ebffdd94a4' class='xr-section-summary-in' type='checkbox' checked><label for='section-b32925ca-1233-4bce-97ee-b5ebffdd94a4' class='xr-section-summary' >Attributes: <span>(9)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>DATA_SOURCE :</span></dt><dd>ECMWF: https://cds.climate.copernicus.eu, Copernicus Climate Data Store</dd><dt><span>NETCDF_CONVERSION :</span></dt><dd>CISL RDA: Conversion from ECMWF GRIB1 data to netCDF4.</dd><dt><span>NETCDF_VERSION :</span></dt><dd>4.8.1</dd><dt><span>CONVERSION_PLATFORM :</span></dt><dd>Linux r8i3n21 4.12.14-95.51-default #1 SMP Fri Apr 17 08:14:12 UTC 2020 (c6bab98) x86_64 x86_64 x86_64 GNU/Linux</dd><dt><span>CONVERSION_DATE :</span></dt><dd>Mon Jun 27 14:39:26 MDT 2022</dd><dt><span>Conventions :</span></dt><dd>CF-1.6</dd><dt><span>NETCDF_COMPRESSION :</span></dt><dd>NCO: Precision-preserving compression to netCDF4/HDF5 (see &quot;history&quot; and &quot;NCO&quot; global attributes below for specifics).</dd><dt><span>history :</span></dt><dd>Mon Jun 27 14:39:34 2022: ncks -4 --ppc default=7 e5.oper.fc.sfc.accumu.128_182_e.ll025sc.1960010106_1960011606.unc.nc e5.oper.fc.sfc.accumu.128_182_e.ll025sc.1960010106_1960011606.nc</dd><dt><span>NCO :</span></dt><dd>netCDF Operators version 5.0.3 (Homepage = http://nco.sf.net, Code = http://github.com/nco/nco)</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 1GB\n",
"Dimensions: (forecast_initial_time: 30, forecast_hour: 12,\n",
" latitude: 721, longitude: 1440)\n",
"Coordinates:\n",
" * forecast_initial_time (forecast_initial_time) datetime64[ns] 240B 1960-0...\n",
" forecast_hour (forecast_hour) int32 48B ManifestArray<shape=(12,...\n",
" latitude (latitude) float64 6kB ManifestArray<shape=(721,),...\n",
" longitude (longitude) float64 12kB ManifestArray<shape=(1440...\n",
"Data variables:\n",
" E (forecast_initial_time, forecast_hour, latitude, longitude) float32 1GB ManifestArray<shape=(30, 12, 721, 1440), dtype=float32, chun...\n",
" utc_date (forecast_initial_time) int32 120B ManifestArray<s...\n",
"Attributes:\n",
" DATA_SOURCE: ECMWF: https://cds.climate.copernicus.eu, Copernicu...\n",
" NETCDF_CONVERSION: CISL RDA: Conversion from ECMWF GRIB1 data to netCDF4.\n",
" NETCDF_VERSION: 4.8.1\n",
" CONVERSION_PLATFORM: Linux r8i3n21 4.12.14-95.51-default #1 SMP Fri Apr ...\n",
" CONVERSION_DATE: Mon Jun 27 14:39:26 MDT 2022\n",
" Conventions: CF-1.6\n",
" NETCDF_COMPRESSION: NCO: Precision-preserving compression to netCDF4/HD...\n",
" history: Mon Jun 27 14:39:34 2022: ncks -4 --ppc default=7 e...\n",
" NCO: netCDF Operators version 5.0.3 (Homepage = http://n..."
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds_list[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "439a1e3c-6428-4eb1-9a98-7850c599b69a",
"metadata": {},
"outputs": [],
"source": [
"ds_list[1]"
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment