Skip to content

Instantly share code, notes, and snippets.

@rsignell
Created February 23, 2026 16:20
Show Gist options
  • Select an option

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

Select an option

Save rsignell/e25356cca7b048693dcd380314f8237c to your computer and use it in GitHub Desktop.
query_rustac.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "a1b2c3d4",
"metadata": {},
"source": [
"# Querying the dynamical.org STAC Catalog with rustac\n",
"\n",
"This notebook shows how to query the dynamical.org STAC catalog stored as a\n",
"[stac-geoparquet](https://github.com/stac-utils/stac-geoparquet) file on R2,\n",
"using [rustac](https://github.com/stac-utils/rustac) — Python bindings to the\n",
"high-performance [stac-rs](https://github.com/stac-utils/stac-rs) Rust library.\n",
"\n",
"Compared to the static-JSON approach (parsing JSON files with `pystac`),\n",
"this approach:\n",
"- Uses **DuckDB** under the hood for fast column-store queries\n",
"- Supports **spatial queries** via bounding box\n",
"- Supports **CQL2 filter expressions** for complex queries\n",
"- Scales to catalogs with thousands of items without downloading all JSON\n",
"\n",
"## Install dependencies\n",
"```\n",
"pip install rustac xpystac\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b2c3d4e5",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:11:51.427318Z",
"iopub.status.busy": "2026-02-23T16:11:51.427053Z",
"iopub.status.idle": "2026-02-23T16:11:51.766962Z",
"shell.execute_reply": "2026-02-23T16:11:51.765313Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"rustac ready — querying https://r2-pub.openscicomp.io/stac/dynamical/catalog.parquet\n"
]
}
],
"source": [
"import rustac\n",
"\n",
"PARQUET_URL = \"https://r2-pub.openscicomp.io/stac/dynamical/catalog.parquet\"\n",
"\n",
"client = rustac.DuckdbClient()\n",
"print(f\"rustac ready — querying {PARQUET_URL}\")"
]
},
{
"cell_type": "markdown",
"id": "c3d4e5f6",
"metadata": {},
"source": [
"## 1. List all items"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "d4e5f6a7",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:11:51.772085Z",
"iopub.status.busy": "2026-02-23T16:11:51.771170Z",
"iopub.status.idle": "2026-02-23T16:12:15.297162Z",
"shell.execute_reply": "2026-02-23T16:12:15.293742Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7 items in catalog:\n",
"\n",
"ecmwf-ifs-ens-forecast-15-day-0-25-degree-v0-1-0\n",
" bbox: [-180.0, -90.0, 180.0, 90.0]\n",
" start: 2024-04-01T00:00:00+00:00\n",
" end: 2026-02-23T00:00:00+00:00\n",
"\n",
"noaa-gefs-analysis-v0-1-2\n",
" bbox: [-180.0, -90.0, 180.0, 90.0]\n",
" start: 2000-01-01T00:00:00+00:00\n",
" end: 2026-02-23T09:00:00+00:00\n",
"\n",
"noaa-gefs-forecast-35-day-v0-2-0\n",
" bbox: [-180.0, -90.0, 180.0, 90.0]\n",
" start: 2020-10-01T00:00:00+00:00\n",
" end: 2026-02-23T00:00:00+00:00\n",
"\n",
"noaa-gfs-analysis-v0-1-0\n",
" bbox: [-180.0, -90.0, 180.0, 90.0]\n",
" start: 2021-05-01T00:00:00+00:00\n",
" end: 2026-02-23T14:00:00+00:00\n",
"\n",
"noaa-gfs-forecast-v0-2-7\n",
" bbox: [-180.0, -90.0, 180.0, 90.0]\n",
" start: 2021-05-01T00:00:00+00:00\n",
" end: 2026-02-23T06:00:00+00:00\n",
"\n",
"noaa-hrrr-analysis-v0-1-0\n",
" bbox: [-134.12142793280145, 21.122192719272277, -60.891244531606546, 52.62870335266728]\n",
" start: 2018-09-16T00:00:00+00:00\n",
" end: 2026-02-23T14:00:00+00:00\n",
"\n",
"noaa-hrrr-forecast-48-hour-v0-1-0\n",
" bbox: [-134.12142793280145, 21.122192719272277, -60.891244531606546, 52.62870335266728]\n",
" start: 2018-07-13T12:00:00+00:00\n",
" end: 2026-02-23T12:00:00+00:00\n",
"\n"
]
}
],
"source": [
"items = list(client.search(PARQUET_URL, limit=100))\n",
"print(f\"{len(items)} items in catalog:\\n\")\n",
"for item in items:\n",
" props = item.get(\"properties\", {})\n",
" print(f\"{item['id']}\")\n",
" print(f\" bbox: {item.get('bbox')}\")\n",
" print(f\" start: {props.get('start_datetime')}\")\n",
" print(f\" end: {props.get('end_datetime')}\")\n",
" print()"
]
},
{
"cell_type": "markdown",
"id": "e5f6a7b8",
"metadata": {},
"source": [
"## 2. Spatial query — datasets that cover a region\n",
"\n",
"Pass a `bbox` as `[lon_min, lat_min, lon_max, lat_max]`. DuckDB runs the\n",
"spatial intersection server-side."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f6a7b8c9",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:12:15.303201Z",
"iopub.status.busy": "2026-02-23T16:12:15.302705Z",
"iopub.status.idle": "2026-02-23T16:12:16.027289Z",
"shell.execute_reply": "2026-02-23T16:12:16.024548Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Datasets covering Italy (5 of 7):\n",
"\n",
" ecmwf-ifs-ens-forecast-15-day-0-25-degree-v0-1-0\n",
" noaa-gefs-analysis-v0-1-2\n",
" noaa-gefs-forecast-35-day-v0-2-0\n",
" noaa-gfs-analysis-v0-1-0\n",
" noaa-gfs-forecast-v0-2-7\n"
]
}
],
"source": [
"italy_bbox = [6.6, 36.6, 18.5, 47.1] # lon_min, lat_min, lon_max, lat_max\n",
"\n",
"matches = list(client.search(PARQUET_URL, bbox=italy_bbox, limit=100))\n",
"\n",
"print(f\"Datasets covering Italy ({len(matches)} of {len(items)}):\\n\")\n",
"for item in matches:\n",
" print(f\" {item['id']}\")"
]
},
{
"cell_type": "markdown",
"id": "a7b8c9d0",
"metadata": {},
"source": [
"## 3. Temporal query — datasets covering a date range\n",
"\n",
"For items with `start_datetime` / `end_datetime` (and `datetime: null`),\n",
"use a CQL2 `filter` expression to check interval overlap.\n",
"\n",
"The overlap condition is: `start_datetime <= query_end AND end_datetime >= query_start`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b8c9d0e1",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:12:16.031953Z",
"iopub.status.busy": "2026-02-23T16:12:16.031467Z",
"iopub.status.idle": "2026-02-23T16:12:16.655091Z",
"shell.execute_reply": "2026-02-23T16:12:16.652890Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Datasets covering 2024-01-01 – 2025-01-01 (7):\n",
"\n",
" ecmwf-ifs-ens-forecast-15-day-0-25-degree-v0-1-0\n",
" 2024-04-01T00:00:00+00:00 → 2026-02-23T00:00:00+00:00\n",
" noaa-gefs-analysis-v0-1-2\n",
" 2000-01-01T00:00:00+00:00 → 2026-02-23T09:00:00+00:00\n",
" noaa-gefs-forecast-35-day-v0-2-0\n",
" 2020-10-01T00:00:00+00:00 → 2026-02-23T00:00:00+00:00\n",
" noaa-gfs-analysis-v0-1-0\n",
" 2021-05-01T00:00:00+00:00 → 2026-02-23T14:00:00+00:00\n",
" noaa-gfs-forecast-v0-2-7\n",
" 2021-05-01T00:00:00+00:00 → 2026-02-23T06:00:00+00:00\n",
" noaa-hrrr-analysis-v0-1-0\n",
" 2018-09-16T00:00:00+00:00 → 2026-02-23T14:00:00+00:00\n",
" noaa-hrrr-forecast-48-hour-v0-1-0\n",
" 2018-07-13T12:00:00+00:00 → 2026-02-23T12:00:00+00:00\n"
]
}
],
"source": [
"query_start = \"2024-01-01T00:00:00Z\"\n",
"query_end = \"2025-01-01T00:00:00Z\"\n",
"\n",
"time_filter = {\n",
" \"op\": \"and\",\n",
" \"args\": [\n",
" {\"op\": \"<=\", \"args\": [{\"property\": \"start_datetime\"}, query_end]},\n",
" {\"op\": \">=\", \"args\": [{\"property\": \"end_datetime\"}, query_start]},\n",
" ],\n",
"}\n",
"\n",
"matches_time = list(client.search(PARQUET_URL, filter=time_filter, limit=100))\n",
"\n",
"print(f\"Datasets covering {query_start[:10]} – {query_end[:10]} ({len(matches_time)}):\\n\")\n",
"for item in matches_time:\n",
" props = item.get(\"properties\", {})\n",
" print(f\" {item['id']}\")\n",
" print(f\" {props.get('start_datetime')} → {props.get('end_datetime')}\")"
]
},
{
"cell_type": "markdown",
"id": "c9d0e1f2",
"metadata": {},
"source": [
"## 4. Combined spatial + temporal query\n",
"\n",
"Combine `bbox` with a CQL2 `filter` to find datasets that cover\n",
"both Italy **and** a given date range."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d0e1f2a3",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:12:16.660190Z",
"iopub.status.busy": "2026-02-23T16:12:16.659802Z",
"iopub.status.idle": "2026-02-23T16:12:17.311537Z",
"shell.execute_reply": "2026-02-23T16:12:17.309053Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Datasets covering Italy and 2024-01-01 – 2025-01-01 (5):\n",
"\n",
" ecmwf-ifs-ens-forecast-15-day-0-25-degree-v0-1-0\n",
" noaa-gefs-analysis-v0-1-2\n",
" noaa-gefs-forecast-35-day-v0-2-0\n",
" noaa-gfs-analysis-v0-1-0\n",
" noaa-gfs-forecast-v0-2-7\n"
]
}
],
"source": [
"combined = list(client.search(\n",
" PARQUET_URL,\n",
" bbox=italy_bbox,\n",
" filter=time_filter,\n",
" limit=100,\n",
"))\n",
"\n",
"print(f\"Datasets covering Italy and {query_start[:10]} – {query_end[:10]} ({len(combined)}):\\n\")\n",
"for item in combined:\n",
" print(f\" {item['id']}\")"
]
},
{
"cell_type": "markdown",
"id": "e1f2a3b4",
"metadata": {},
"source": [
"## 5. Open a matching dataset with xarray\n",
"\n",
"rustac drops non-spec top-level attributes (like `storage:schemes`) when writing\n",
"GeoParquet, so we look the item up by ID in the original JSON catalog, which has\n",
"the full metadata needed by `xpystac` to open the icechunk store."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f2a3b4c5",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:12:17.316399Z",
"iopub.status.busy": "2026-02-23T16:12:17.316088Z",
"iopub.status.idle": "2026-02-23T16:12:25.081464Z",
"shell.execute_reply": "2026-02-23T16:12:25.079955Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Opening: ecmwf-ifs-ens-forecast-15-day-0-25-degree-v0-1-0\n"
]
},
{
"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",
" padding-bottom: 4px;\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",
"}\n",
"\n",
".xr-header {\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
" margin-bottom: 4px;\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",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-group-box-contents > label {\n",
" color: var(--xr-font-color2);\n",
" display: block;\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",
".xr-group-box-contents > input,\n",
".xr-array-wrap > input {\n",
" display: block;\n",
" opacity: 0;\n",
" height: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-section-item > input + label,\n",
".xr-var-item > input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item > input:enabled + label,\n",
".xr-var-item > input:enabled + label,\n",
".xr-array-wrap > input:enabled + label,\n",
".xr-group-box-contents > input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item > input:focus-visible + label,\n",
".xr-var-item > input:focus-visible + label,\n",
".xr-array-wrap > input:focus-visible + label,\n",
".xr-group-box-contents > input:focus-visible + label {\n",
" outline: auto;\n",
"}\n",
"\n",
".xr-section-item > input:enabled + label:hover,\n",
".xr-var-item > input:enabled + label:hover,\n",
".xr-array-wrap > input:enabled + label:hover,\n",
".xr-group-box-contents > 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",
" white-space: nowrap;\n",
"}\n",
"\n",
".xr-section-summary > em {\n",
" font-weight: normal;\n",
"}\n",
"\n",
".xr-span-grid {\n",
" grid-column-end: -1;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.3em;\n",
"}\n",
"\n",
".xr-group-box-contents > input:checked + label > span {\n",
" display: inline-block;\n",
" padding-left: 0.6em;\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",
".xr-group-box-contents > label {\n",
" padding-top: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" grid-column: 1 / -1;\n",
" margin-top: 4px;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in ~ .xr-section-details {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-children {\n",
" display: inline-grid;\n",
" grid-template-columns: 100%;\n",
" grid-column: 1 / -1;\n",
" padding-top: 4px;\n",
"}\n",
"\n",
".xr-group-box {\n",
" display: inline-grid;\n",
" grid-template-columns: 0px 30px auto;\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: 26px;\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",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-group-box-contents > label::before {\n",
" content: \"📂\";\n",
" padding-right: 0.3em;\n",
"}\n",
"\n",
".xr-group-box-contents > input:checked + label::before {\n",
" content: \"📁\";\n",
"}\n",
"\n",
".xr-group-box-contents > input:checked + label {\n",
" padding-bottom: 0px;\n",
"}\n",
"\n",
".xr-group-box-contents > input:checked ~ .xr-sections {\n",
" display: none;\n",
"}\n",
"\n",
".xr-group-box-contents > input + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-group-box-ellipsis {\n",
" font-size: 1.4em;\n",
" font-weight: 900;\n",
" color: var(--xr-font-color2);\n",
" letter-spacing: 0.15em;\n",
" cursor: default;\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: 162TB\n",
"Dimensions: (init_time: 694, lead_time: 85,\n",
" ensemble_member: 51,\n",
" latitude: 721, longitude: 1440)\n",
"Coordinates:\n",
" * init_time (init_time) datetime64[ns] 6kB ...\n",
" ingested_forecast_length (init_time) timedelta64[ns] 6kB ...\n",
" expected_forecast_length (init_time) timedelta64[ns] 6kB ...\n",
" * lead_time (lead_time) timedelta64[ns] 680B ...\n",
" valid_time (init_time, lead_time) datetime64[ns] 472kB ...\n",
" * ensemble_member (ensemble_member) int16 102B ...\n",
" * latitude (latitude) float64 6kB 90.0 ....\n",
" * longitude (longitude) float64 12kB -180...\n",
" spatial_ref int64 8B ...\n",
"Data variables: (12/13)\n",
" categorical_precipitation_type_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" downward_short_wave_radiation_flux_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" downward_long_wave_radiation_flux_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" precipitation_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" pressure_reduced_to_mean_sea_level (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" dew_point_temperature_2m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" ... ...\n",
" pressure_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_u_10m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_v_100m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_u_100m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_v_10m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" geopotential_height_500hpa (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
"Attributes:\n",
" dataset_id: ecmwf-ifs-ens-forecast-15-day-0-25-degree\n",
" dataset_version: 0.1.0\n",
" name: ECMWF IFS ENS Forecast, 15 day, 0.25 degree\n",
" description: Ensemble weather forecasts from the ECMWF Integrate...\n",
" attribution: ECMWF IFS ENS Forecast data processed by dynamical....\n",
" spatial_domain: Global\n",
" spatial_resolution: 0.25 degrees (~20km)\n",
" time_domain: Forecasts initialized 2024-04-01 00:00:00 UTC to Pr...\n",
" time_resolution: Forecasts initialized every 24 hours\n",
" forecast_domain: Forecast lead time 0-360 hours (0-15 days) ahead\n",
" forecast_resolution: Forecast step 0-144 hours: 3 hourly, 144-360 hours:...</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-b15e9f37-f6f3-4bce-bf54-98cbe130befb' class='xr-section-summary-in' type='checkbox' disabled /><label for='section-b15e9f37-f6f3-4bce-bf54-98cbe130befb' class='xr-section-summary'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>init_time</span>: 694</li><li><span class='xr-has-index'>lead_time</span>: 85</li><li><span class='xr-has-index'>ensemble_member</span>: 51</li><li><span class='xr-has-index'>latitude</span>: 721</li><li><span class='xr-has-index'>longitude</span>: 1440</li></ul></div></li><li class='xr-section-item'><input id='section-535d54f3-3bc5-4bd0-b65b-9b3ee631ad5d' class='xr-section-summary-in' type='checkbox' checked /><label for='section-535d54f3-3bc5-4bd0-b65b-9b3ee631ad5d' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(9)</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'>init_time</span></div><div class='xr-var-dims'>(init_time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2024-04-01 ... 2026-02-23</div><input id='attrs-8ea7ed17-ed56-4642-a662-e2379a5abae7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8ea7ed17-ed56-4642-a662-e2379a5abae7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a87ba832-8b3a-49eb-aa34-2de607e31f13' class='xr-var-data-in' type='checkbox'><label for='data-a87ba832-8b3a-49eb-aa34-2de607e31f13' 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 initialization time</dd><dt><span>standard_name :</span></dt><dd>forecast_reference_time</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: &#x27;2024-04-01T00:00:00&#x27;, &#x27;max&#x27;: &#x27;Present&#x27;}</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;2024-04-01T00:00:00.000000000&#x27;, &#x27;2024-04-02T00:00:00.000000000&#x27;,\n",
" &#x27;2024-04-03T00:00:00.000000000&#x27;, ..., &#x27;2026-02-21T00:00:00.000000000&#x27;,\n",
" &#x27;2026-02-22T00:00:00.000000000&#x27;, &#x27;2026-02-23T00:00:00.000000000&#x27;],\n",
" shape=(694,), dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>ingested_forecast_length</span></div><div class='xr-var-dims'>(init_time)</div><div class='xr-var-dtype'>timedelta64[ns]</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-da1e5707-dce7-43a7-af91-32532324caa0' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-da1e5707-dce7-43a7-af91-32532324caa0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-acc062d2-2dd9-42bc-9926-0de2fb8d72e4' class='xr-var-data-in' type='checkbox'><label for='data-acc062d2-2dd9-42bc-9926-0de2fb8d72e4' 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>Ingested forecast length</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: &#x27;0 days 00:00:00&#x27;, &#x27;max&#x27;: &#x27;15 days 00:00:00&#x27;}</dd></dl></div><div class='xr-var-data'><pre>[694 values with dtype=timedelta64[ns]]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>expected_forecast_length</span></div><div class='xr-var-dims'>(init_time)</div><div class='xr-var-dtype'>timedelta64[ns]</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-b097e5e9-a66d-4740-bfa2-998a13d4e327' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b097e5e9-a66d-4740-bfa2-998a13d4e327' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d274969b-3376-41a2-89f1-002226d6bc22' class='xr-var-data-in' type='checkbox'><label for='data-d274969b-3376-41a2-89f1-002226d6bc22' 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>Expected forecast length</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: &#x27;0 days 00:00:00&#x27;, &#x27;max&#x27;: &#x27;15 days 00:00:00&#x27;}</dd></dl></div><div class='xr-var-data'><pre>[694 values with dtype=timedelta64[ns]]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lead_time</span></div><div class='xr-var-dims'>(lead_time)</div><div class='xr-var-dtype'>timedelta64[ns]</div><div class='xr-var-preview xr-preview'>0 days 00:00:00 ... 15 days 00:0...</div><input id='attrs-9b80e176-ea6f-4642-a6d5-22fa2356020d' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-9b80e176-ea6f-4642-a6d5-22fa2356020d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b41d00ed-6389-48ef-ab4e-ac64d771af26' class='xr-var-data-in' type='checkbox'><label for='data-b41d00ed-6389-48ef-ab4e-ac64d771af26' 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 lead time</dd><dt><span>standard_name :</span></dt><dd>forecast_period</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: &#x27;0 days 00:00:00&#x27;, &#x27;max&#x27;: &#x27;15 days 00:00:00&#x27;}</dd></dl></div><div class='xr-var-data'><pre>array([ 0, 10800000000000, 21600000000000, 32400000000000,\n",
" 43200000000000, 54000000000000, 64800000000000, 75600000000000,\n",
" 86400000000000, 97200000000000, 108000000000000, 118800000000000,\n",
" 129600000000000, 140400000000000, 151200000000000, 162000000000000,\n",
" 172800000000000, 183600000000000, 194400000000000, 205200000000000,\n",
" 216000000000000, 226800000000000, 237600000000000, 248400000000000,\n",
" 259200000000000, 270000000000000, 280800000000000, 291600000000000,\n",
" 302400000000000, 313200000000000, 324000000000000, 334800000000000,\n",
" 345600000000000, 356400000000000, 367200000000000, 378000000000000,\n",
" 388800000000000, 399600000000000, 410400000000000, 421200000000000,\n",
" 432000000000000, 442800000000000, 453600000000000, 464400000000000,\n",
" 475200000000000, 486000000000000, 496800000000000, 507600000000000,\n",
" 518400000000000, 540000000000000, 561600000000000, 583200000000000,\n",
" 604800000000000, 626400000000000, 648000000000000, 669600000000000,\n",
" 691200000000000, 712800000000000, 734400000000000, 756000000000000,\n",
" 777600000000000, 799200000000000, 820800000000000, 842400000000000,\n",
" 864000000000000, 885600000000000, 907200000000000, 928800000000000,\n",
" 950400000000000, 972000000000000, 993600000000000, 1015200000000000,\n",
" 1036800000000000, 1058400000000000, 1080000000000000, 1101600000000000,\n",
" 1123200000000000, 1144800000000000, 1166400000000000, 1188000000000000,\n",
" 1209600000000000, 1231200000000000, 1252800000000000, 1274400000000000,\n",
" 1296000000000000], dtype=&#x27;timedelta64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>valid_time</span></div><div class='xr-var-dims'>(init_time, lead_time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-59e48390-664e-461e-8822-f3e01702ce69' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-59e48390-664e-461e-8822-f3e01702ce69' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e9bfcc1c-7bf4-45cd-8087-c8c5a10099d2' class='xr-var-data-in' type='checkbox'><label for='data-e9bfcc1c-7bf4-45cd-8087-c8c5a10099d2' 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>Valid time</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: &#x27;2024-04-01T00:00:00&#x27;, &#x27;max&#x27;: &#x27;Present&#x27;}</dd></dl></div><div class='xr-var-data'><pre>[58990 values with dtype=datetime64[ns]]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ensemble_member</span></div><div class='xr-var-dims'>(ensemble_member)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 45 46 47 48 49 50</div><input id='attrs-276df3f7-6177-4dc8-91b5-e2b4dd8404af' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-276df3f7-6177-4dc8-91b5-e2b4dd8404af' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-26bbfeb6-193f-43e5-883b-5f0bdc4783fe' class='xr-var-data-in' type='checkbox'><label for='data-26bbfeb6-193f-43e5-883b-5f0bdc4783fe' 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>Ensemble member</dd><dt><span>standard_name :</span></dt><dd>realization</dd><dt><span>units :</span></dt><dd>1</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: 0, &#x27;max&#x27;: 50}</dd></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n",
" 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n",
" 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>90.0 89.75 89.5 ... -89.75 -90.0</div><input id='attrs-ce3406a3-cd50-4173-8015-f790e0ef3e42' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ce3406a3-cd50-4173-8015-f790e0ef3e42' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-65c0b641-38ab-44bd-837c-e8af98ae1b2f' class='xr-var-data-in' type='checkbox'><label for='data-65c0b641-38ab-44bd-837c-e8af98ae1b2f' 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>standard_name :</span></dt><dd>latitude</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>units :</span></dt><dd>degree_north</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: -90.0, &#x27;max&#x27;: 90.0}</dd></dl></div><div class='xr-var-data'><pre>array([ 90. , 89.75, 89.5 , ..., -89.5 , -89.75, -90. ], shape=(721,))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-180.0 -179.8 ... 179.5 179.8</div><input id='attrs-464fb868-036c-4a72-a438-862b7b071359' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-464fb868-036c-4a72-a438-862b7b071359' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5d07b028-2671-4d6d-a71f-061e0f6e8fa0' class='xr-var-data-in' type='checkbox'><label for='data-5d07b028-2671-4d6d-a71f-061e0f6e8fa0' 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>standard_name :</span></dt><dd>longitude</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>units :</span></dt><dd>degree_east</dd><dt><span>statistics_approximate :</span></dt><dd>{&#x27;min&#x27;: -180.0, &#x27;max&#x27;: 179.75}</dd></dl></div><div class='xr-var-data'><pre>array([-180. , -179.75, -179.5 , ..., 179.25, 179.5 , 179.75],\n",
" shape=(1440,))</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>spatial_ref</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-aa496120-a6de-49f2-bf17-d212813a5e38' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-aa496120-a6de-49f2-bf17-d212813a5e38' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d21497bf-9a9f-4cad-8d66-40bdd94bcfc6' class='xr-var-data-in' type='checkbox'><label for='data-d21497bf-9a9f-4cad-8d66-40bdd94bcfc6' 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>comment :</span></dt><dd>This coordinate reference system matches the source data which follows WMO conventions of assuming the earth is a perfect sphere with a radius of 6,371,229m. It is similar to EPSG:4326, but EPSG:4326 uses a more accurate representation of the earth&#x27;s shape.</dd><dt><span>crs_wkt :</span></dt><dd>GEOGCS[&quot;unknown&quot;,DATUM[&quot;unknown&quot;,SPHEROID[&quot;unknown&quot;,6371229,0]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AXIS[&quot;Longitude&quot;,EAST],AXIS[&quot;Latitude&quot;,NORTH]]</dd><dt><span>semi_major_axis :</span></dt><dd>6371229.0</dd><dt><span>semi_minor_axis :</span></dt><dd>6371229.0</dd><dt><span>inverse_flattening :</span></dt><dd>0.0</dd><dt><span>reference_ellipsoid_name :</span></dt><dd>unknown</dd><dt><span>longitude_of_prime_meridian :</span></dt><dd>0.0</dd><dt><span>prime_meridian_name :</span></dt><dd>Greenwich</dd><dt><span>geographic_crs_name :</span></dt><dd>unknown</dd><dt><span>horizontal_datum_name :</span></dt><dd>unknown</dd><dt><span>grid_mapping_name :</span></dt><dd>latitude_longitude</dd><dt><span>spatial_ref :</span></dt><dd>GEOGCS[&quot;unknown&quot;,DATUM[&quot;unknown&quot;,SPHEROID[&quot;unknown&quot;,6371229,0]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AXIS[&quot;Longitude&quot;,EAST],AXIS[&quot;Latitude&quot;,NORTH]]</dd></dl></div><div class='xr-var-data'><pre>[1 values with dtype=int64]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ecb449e4-3d19-4bda-8b46-6d0f31b1b993' class='xr-section-summary-in' type='checkbox' checked /><label for='section-ecb449e4-3d19-4bda-8b46-6d0f31b1b993' class='xr-section-summary' title='Expand/collapse section'>Data variables: <span>(13)</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>categorical_precipitation_type_surface</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-a3c54c48-cb2c-4a6e-ae76-ccae1c7f884c' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a3c54c48-cb2c-4a6e-ae76-ccae1c7f884c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-07eef936-f6f9-48a0-9cc1-33ffce8c6ea3' class='xr-var-data-in' type='checkbox'><label for='data-07eef936-f6f9-48a0-9cc1-33ffce8c6ea3' 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>Precipitation type</dd><dt><span>short_name :</span></dt><dd>ptype</dd><dt><span>units :</span></dt><dd>1</dd><dt><span>comment :</span></dt><dd>0=No precipitation; 1=Rain; 2=Thunderstorm; 3=Freezing rain; 4=Mixed/ice; 5=Snow; 6=Wet snow; 7=Mixture of rain and snow; 8=Ice pellets; 9=Graupel; 10=Hail; 11=Drizzle; 12=Freezing drizzle; 13=Hail (less than 5 mm); 14=Hail (greater than or equal to 5 mm); 15-191=Reserved; 192-254=Reserved for local use; 255=Missing</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>downward_short_wave_radiation_flux_surface</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-ae072370-237e-496d-b72c-ecc5816c3928' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ae072370-237e-496d-b72c-ecc5816c3928' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7c785bca-9e35-43e7-935d-123a6b1ddf8d' class='xr-var-data-in' type='checkbox'><label for='data-7c785bca-9e35-43e7-935d-123a6b1ddf8d' 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>Surface downward short-wave radiation flux</dd><dt><span>short_name :</span></dt><dd>sdswrf</dd><dt><span>standard_name :</span></dt><dd>surface_downwelling_shortwave_flux_in_air</dd><dt><span>units :</span></dt><dd>W m-2</dd><dt><span>step_type :</span></dt><dd>avg</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>downward_long_wave_radiation_flux_surface</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-9ad75dd9-57ab-4558-a393-0d4ac658bb78' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-9ad75dd9-57ab-4558-a393-0d4ac658bb78' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-31f9e0f9-f463-4f92-a77c-4e2a541ea657' class='xr-var-data-in' type='checkbox'><label for='data-31f9e0f9-f463-4f92-a77c-4e2a541ea657' 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>Surface downward long-wave radiation flux</dd><dt><span>short_name :</span></dt><dd>sdlwrf</dd><dt><span>standard_name :</span></dt><dd>surface_downwelling_longwave_flux_in_air</dd><dt><span>units :</span></dt><dd>W m-2</dd><dt><span>step_type :</span></dt><dd>avg</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>precipitation_surface</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-2ab18921-b602-48ee-b923-9a265f3d3f3f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2ab18921-b602-48ee-b923-9a265f3d3f3f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ad7aa649-baca-4d68-a290-b5bed2e76995' class='xr-var-data-in' type='checkbox'><label for='data-ad7aa649-baca-4d68-a290-b5bed2e76995' 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>Precipitation rate</dd><dt><span>short_name :</span></dt><dd>prate</dd><dt><span>standard_name :</span></dt><dd>precipitation_flux</dd><dt><span>units :</span></dt><dd>kg m-2 s-1</dd><dt><span>comment :</span></dt><dd>Average precipitation rate since the previous forecast step. Units equivalent to mm/s.</dd><dt><span>step_type :</span></dt><dd>avg</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>pressure_reduced_to_mean_sea_level</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-1da8f16e-ca70-4883-9093-454cd5eb3e1d' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1da8f16e-ca70-4883-9093-454cd5eb3e1d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-71e21a06-97ab-4c77-96f2-89df403f9ccb' class='xr-var-data-in' type='checkbox'><label for='data-71e21a06-97ab-4c77-96f2-89df403f9ccb' 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>Pressure reduced to MSL</dd><dt><span>short_name :</span></dt><dd>prmsl</dd><dt><span>standard_name :</span></dt><dd>air_pressure_at_mean_sea_level</dd><dt><span>units :</span></dt><dd>Pa</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dew_point_temperature_2m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-307af782-8291-466c-ae5a-2e49afe11157' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-307af782-8291-466c-ae5a-2e49afe11157' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1f2f1e37-68df-498f-b0c6-b923d7ccf879' class='xr-var-data-in' type='checkbox'><label for='data-1f2f1e37-68df-498f-b0c6-b923d7ccf879' 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>2 metre dewpoint temperature</dd><dt><span>short_name :</span></dt><dd>2d</dd><dt><span>standard_name :</span></dt><dd>dew_point_temperature</dd><dt><span>units :</span></dt><dd>degree_Celsius</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>temperature_2m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-23c9fd70-98f6-4541-8e44-f2a68164309a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-23c9fd70-98f6-4541-8e44-f2a68164309a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-26260332-2bd7-46b7-bc71-07c33c03a3bd' class='xr-var-data-in' type='checkbox'><label for='data-26260332-2bd7-46b7-bc71-07c33c03a3bd' 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>2 metre temperature</dd><dt><span>short_name :</span></dt><dd>2t</dd><dt><span>standard_name :</span></dt><dd>air_temperature</dd><dt><span>units :</span></dt><dd>degree_Celsius</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>pressure_surface</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-6a1f8ba1-2de6-4fd1-9432-c0bd2a755b65' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-6a1f8ba1-2de6-4fd1-9432-c0bd2a755b65' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a6d154d8-b5a8-4c5c-8ac5-3a4e53fb69db' class='xr-var-data-in' type='checkbox'><label for='data-a6d154d8-b5a8-4c5c-8ac5-3a4e53fb69db' 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>Surface pressure</dd><dt><span>short_name :</span></dt><dd>sp</dd><dt><span>standard_name :</span></dt><dd>surface_air_pressure</dd><dt><span>units :</span></dt><dd>Pa</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>wind_u_10m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-5f05874a-e5be-48dc-be4f-6a9546375f0b' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-5f05874a-e5be-48dc-be4f-6a9546375f0b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e8f07924-8029-4cb8-9804-71539ee06e44' class='xr-var-data-in' type='checkbox'><label for='data-e8f07924-8029-4cb8-9804-71539ee06e44' 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>10 metre U wind component</dd><dt><span>short_name :</span></dt><dd>10u</dd><dt><span>standard_name :</span></dt><dd>eastward_wind</dd><dt><span>units :</span></dt><dd>m s-1</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>wind_v_100m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-d9cb0e11-8829-4b2d-a69e-3539267b6fad' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d9cb0e11-8829-4b2d-a69e-3539267b6fad' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-00deb6c7-78a8-4fa5-b5f5-bf9e881c637a' class='xr-var-data-in' type='checkbox'><label for='data-00deb6c7-78a8-4fa5-b5f5-bf9e881c637a' 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>100 metre V wind component</dd><dt><span>short_name :</span></dt><dd>100v</dd><dt><span>standard_name :</span></dt><dd>northward_wind</dd><dt><span>units :</span></dt><dd>m s-1</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>wind_u_100m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-a302b4bb-e30f-4767-b8e1-0c9e53e8dd84' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a302b4bb-e30f-4767-b8e1-0c9e53e8dd84' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ace2b51b-1848-4e49-a475-f7591f3ca229' class='xr-var-data-in' type='checkbox'><label for='data-ace2b51b-1848-4e49-a475-f7591f3ca229' 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>100 metre U wind component</dd><dt><span>short_name :</span></dt><dd>100u</dd><dt><span>standard_name :</span></dt><dd>eastward_wind</dd><dt><span>units :</span></dt><dd>m s-1</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>wind_v_10m</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-855623c6-4d2e-40dc-b8d3-41d4a7f16154' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-855623c6-4d2e-40dc-b8d3-41d4a7f16154' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1443eb52-63c7-46f0-9fd8-7591501dda78' class='xr-var-data-in' type='checkbox'><label for='data-1443eb52-63c7-46f0-9fd8-7591501dda78' 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>10 metre V wind component</dd><dt><span>short_name :</span></dt><dd>10v</dd><dt><span>standard_name :</span></dt><dd>northward_wind</dd><dt><span>units :</span></dt><dd>m s-1</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>geopotential_height_500hpa</span></div><div class='xr-var-dims'>(init_time, lead_time, ensemble_member, latitude, longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-743cfd27-337a-45e2-bc47-ab17338a40de' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-743cfd27-337a-45e2-bc47-ab17338a40de' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-82de0cfe-c6fc-4709-8641-d1ca5d12980c' class='xr-var-data-in' type='checkbox'><label for='data-82de0cfe-c6fc-4709-8641-d1ca5d12980c' 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>Geopotential height</dd><dt><span>short_name :</span></dt><dd>gh</dd><dt><span>standard_name :</span></dt><dd>geopotential_height</dd><dt><span>units :</span></dt><dd>m</dd><dt><span>step_type :</span></dt><dd>instant</dd></dl></div><div class='xr-var-data'><pre>[3123534657600 values with dtype=float32]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-db19499d-5c1d-43ba-8224-860e386ebef1' class='xr-section-summary-in' type='checkbox' /><label for='section-db19499d-5c1d-43ba-8224-860e386ebef1' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(11)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>dataset_id :</span></dt><dd>ecmwf-ifs-ens-forecast-15-day-0-25-degree</dd><dt><span>dataset_version :</span></dt><dd>0.1.0</dd><dt><span>name :</span></dt><dd>ECMWF IFS ENS Forecast, 15 day, 0.25 degree</dd><dt><span>description :</span></dt><dd>Ensemble weather forecasts from the ECMWF Integrated Forecasting System (IFS).</dd><dt><span>attribution :</span></dt><dd>ECMWF IFS ENS Forecast data processed by dynamical.org from ECMWF Open Data.</dd><dt><span>spatial_domain :</span></dt><dd>Global</dd><dt><span>spatial_resolution :</span></dt><dd>0.25 degrees (~20km)</dd><dt><span>time_domain :</span></dt><dd>Forecasts initialized 2024-04-01 00:00:00 UTC to Present</dd><dt><span>time_resolution :</span></dt><dd>Forecasts initialized every 24 hours</dd><dt><span>forecast_domain :</span></dt><dd>Forecast lead time 0-360 hours (0-15 days) ahead</dd><dt><span>forecast_resolution :</span></dt><dd>Forecast step 0-144 hours: 3 hourly, 144-360 hours: 6 hourly</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 162TB\n",
"Dimensions: (init_time: 694, lead_time: 85,\n",
" ensemble_member: 51,\n",
" latitude: 721, longitude: 1440)\n",
"Coordinates:\n",
" * init_time (init_time) datetime64[ns] 6kB ...\n",
" ingested_forecast_length (init_time) timedelta64[ns] 6kB ...\n",
" expected_forecast_length (init_time) timedelta64[ns] 6kB ...\n",
" * lead_time (lead_time) timedelta64[ns] 680B ...\n",
" valid_time (init_time, lead_time) datetime64[ns] 472kB ...\n",
" * ensemble_member (ensemble_member) int16 102B ...\n",
" * latitude (latitude) float64 6kB 90.0 ....\n",
" * longitude (longitude) float64 12kB -180...\n",
" spatial_ref int64 8B ...\n",
"Data variables: (12/13)\n",
" categorical_precipitation_type_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" downward_short_wave_radiation_flux_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" downward_long_wave_radiation_flux_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" precipitation_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" pressure_reduced_to_mean_sea_level (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" dew_point_temperature_2m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" ... ...\n",
" pressure_surface (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_u_10m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_v_100m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_u_100m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" wind_v_10m (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
" geopotential_height_500hpa (init_time, lead_time, ensemble_member, latitude, longitude) float32 12TB ...\n",
"Attributes:\n",
" dataset_id: ecmwf-ifs-ens-forecast-15-day-0-25-degree\n",
" dataset_version: 0.1.0\n",
" name: ECMWF IFS ENS Forecast, 15 day, 0.25 degree\n",
" description: Ensemble weather forecasts from the ECMWF Integrate...\n",
" attribution: ECMWF IFS ENS Forecast data processed by dynamical....\n",
" spatial_domain: Global\n",
" spatial_resolution: 0.25 degrees (~20km)\n",
" time_domain: Forecasts initialized 2024-04-01 00:00:00 UTC to Pr...\n",
" time_resolution: Forecasts initialized every 24 hours\n",
" forecast_domain: Forecast lead time 0-360 hours (0-15 days) ahead\n",
" forecast_resolution: Forecast step 0-144 hours: 3 hourly, 144-360 hours:..."
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pystac\n",
"import xarray as xr\n",
"import xpystac # registers xarray backend for icechunk assets\n",
"\n",
"CATALOG_URL = \"https://r2-pub.openscicomp.io/stac/dynamical/catalog.json\"\n",
"\n",
"# Load the JSON catalog once (small — 7 items, ~1 KB)\n",
"catalog = pystac.Catalog.from_file(CATALOG_URL)\n",
"item_index = {item.id: item for item in catalog.get_items()}\n",
"\n",
"# Pick the first match from the rustac query and fetch the full JSON item\n",
"match_id = combined[0][\"id\"]\n",
"item = item_index[match_id]\n",
"print(f\"Opening: {item.id}\")\n",
"\n",
"asset_key = next(k for k in item.assets if \"@\" in k)\n",
"asset = item.assets[asset_key]\n",
"\n",
"ds = xr.open_dataset(asset)\n",
"ds"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "cloudify-notebooks",
"language": "python",
"name": "cloudify-notebooks"
},
"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.11.14"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment