Created
February 23, 2026 16:20
-
-
Save rsignell/e25356cca7b048693dcd380314f8237c to your computer and use it in GitHub Desktop.
query_rustac.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "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'><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:...</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>{'min': '2024-04-01T00:00:00', 'max': 'Present'}</dd></dl></div><div class='xr-var-data'><pre>array(['2024-04-01T00:00:00.000000000', '2024-04-02T00:00:00.000000000',\n", | |
| " '2024-04-03T00:00:00.000000000', ..., '2026-02-21T00:00:00.000000000',\n", | |
| " '2026-02-22T00:00:00.000000000', '2026-02-23T00:00:00.000000000'],\n", | |
| " shape=(694,), dtype='datetime64[ns]')</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>{'min': '0 days 00:00:00', 'max': '15 days 00:00:00'}</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>{'min': '0 days 00:00:00', 'max': '15 days 00:00:00'}</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>{'min': '0 days 00:00:00', 'max': '15 days 00:00:00'}</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='timedelta64[ns]')</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>{'min': '2024-04-01T00:00:00', 'max': 'Present'}</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>{'min': 0, 'max': 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>{'min': -90.0, 'max': 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>{'min': -180.0, 'max': 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's shape.</dd><dt><span>crs_wkt :</span></dt><dd>GEOGCS["unknown",DATUM["unknown",SPHEROID["unknown",6371229,0]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Longitude",EAST],AXIS["Latitude",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["unknown",DATUM["unknown",SPHEROID["unknown",6371229,0]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Longitude",EAST],AXIS["Latitude",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