diff --git a/docs/examples/gfs_opendap.ipynb b/docs/examples/gfs_opendap.ipynb index 2681627..dc58d18 100644 --- a/docs/examples/gfs_opendap.ipynb +++ b/docs/examples/gfs_opendap.ipynb @@ -17587,10 +17587,8 @@ "source": [ "import cf_xarray # noqa\n", "import datetime\n", - "import numpy as np\n", "import xarray as xr\n", "\n", - "import xarray_subset_grid as xsg\n", "\n", "\n", "current_date = datetime.datetime.now().strftime(\"%Y%m%d\")\n", diff --git a/docs/examples/nam_opendap.ipynb b/docs/examples/nam_opendap.ipynb index dd7b624..b436a2f 100644 --- a/docs/examples/nam_opendap.ipynb +++ b/docs/examples/nam_opendap.ipynb @@ -11672,10 +11672,8 @@ "source": [ "import cf_xarray # noqa\n", "import datetime\n", - "import numpy as np\n", "import xarray as xr\n", "\n", - "import xarray_subset_grid as xsg\n", "\n", "\n", "current_date = datetime.datetime.now().strftime(\"%Y%m%d\")\n", diff --git a/docs/examples/regular_grid_2d.ipynb b/docs/examples/regular_grid_2d.ipynb index 584b59d..03ea4a0 100644 --- a/docs/examples/regular_grid_2d.ipynb +++ b/docs/examples/regular_grid_2d.ipynb @@ -1327,7 +1327,6 @@ "import numpy as np\n", "import xarray as xr\n", "\n", - "import xarray_subset_grid\n", "\n", "# Open the dataset from NODD s3 bucket directly\n", "fs = fsspec.filesystem(\"s3\", anon=True)\n", diff --git a/docs/examples/roms-compare.ipynb b/docs/examples/roms-compare.ipynb index 82ce942..9678d62 100644 --- a/docs/examples/roms-compare.ipynb +++ b/docs/examples/roms-compare.ipynb @@ -5293,7 +5293,6 @@ } ], "source": [ - "import cf_xarray\n", "import fsspec\n", "import numpy as np\n", "import xarray as xr\n", @@ -8601,7 +8600,9 @@ } ], "source": [ - "ds_subset_control = xr.open_dataset('./wcofs-subset-control.nc', chunks={}, backend_kwargs={'decode_times': False})\n", + "ds_subset_control = xr.open_dataset('./wcofs-subset-control.nc',\n", + " chunks={},\n", + " backend_kwargs={'decode_times': False})\n", "ds_subset_control" ] }, diff --git a/docs/examples/roms.ipynb b/docs/examples/roms.ipynb index 585add9..6477d00 100644 --- a/docs/examples/roms.ipynb +++ b/docs/examples/roms.ipynb @@ -5235,7 +5235,6 @@ } ], "source": [ - "import cf_xarray\n", "import fsspec\n", "import numpy as np\n", "import xarray as xr\n", diff --git a/docs/examples/roms_3d.ipynb b/docs/examples/roms_3d.ipynb index 2321220..8f9c239 100644 --- a/docs/examples/roms_3d.ipynb +++ b/docs/examples/roms_3d.ipynb @@ -4150,7 +4150,6 @@ } ], "source": [ - "import cf_xarray\n", "import fsspec\n", "import numpy as np\n", "import xarray as xr\n", diff --git a/docs/examples/rtofs.ipynb b/docs/examples/rtofs.ipynb index 48f3c93..7a8efa2 100644 --- a/docs/examples/rtofs.ipynb +++ b/docs/examples/rtofs.ipynb @@ -1285,7 +1285,6 @@ "import cf_xarray # noqa\n", "import datetime\n", "import fsspec\n", - "import numpy as np\n", "import xarray as xr\n", "\n", "import xarray_subset_grid.accessor # noqa: F401\n", diff --git a/docs/examples/sscofs.ipynb b/docs/examples/sscofs.ipynb index 3922ffa..9d9635c 100644 --- a/docs/examples/sscofs.ipynb +++ b/docs/examples/sscofs.ipynb @@ -3883,7 +3883,9 @@ } ], "source": [ - "ds = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds, face_node_connectivity='nv', face_face_connectivity='nbe')\n", + "ds = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds,\n", + " face_node_connectivity='nv',\n", + " face_face_connectivity='nbe')\n", "ds.cf['mesh_topology']" ] }, diff --git a/docs/examples/stofs_2d.ipynb b/docs/examples/stofs_2d.ipynb index ceeedb6..dbe5f77 100644 --- a/docs/examples/stofs_2d.ipynb +++ b/docs/examples/stofs_2d.ipynb @@ -1,3862 +1,3861 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "mtMFWRVnwY0f" - }, - "source": [ - "# STOFS 2D" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/asascience-open/xarray-subset-grid/blob/main/docs/examples/stofs_2d.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We use the Stofs-2d-Global Fields-CWL dataset to compute a subset selector and reuse it" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install required libraries\n", - "# !pip install -q xarray_subset_grid@git+https://github.com/asascience-open/xarray-subset-grid.git\n", - "# !pip install -q s3fs cftime xarray cf-xarray fsspec dask h5netcdf" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 435 - }, - "id": "WzHpywpMwY0n", - "outputId": "7f423d44-f68a-4488-dbb1-8fa10455086f" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 20GB\n",
-              "Dimensions:      (time: 186, node: 12785004, nele: 24875336, nvertex: 3,\n",
-              "                  mesh: 1, nbou: 262, nvel: 12421)\n",
-              "Coordinates:\n",
-              "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
-              "    x            (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
-              "    y            (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
-              "Data variables:\n",
-              "    element      (nele, nvertex) int32 299MB dask.array<chunksize=(2763927, 1), meta=np.ndarray>\n",
-              "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    max_nvell    int32 4B ...\n",
-              "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
-              "    depth        (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
-              "    zeta         (time, node) float64 19GB dask.array<chunksize=(1, 511401), meta=np.ndarray>\n",
-              "Attributes: (12/50)\n",
-              "    _FillValue:         -99999.0\n",
-              "    model:              ADCIRC\n",
-              "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
-              "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
-              "    grid_type:          Triangular\n",
-              "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
-              "    ...                 ...\n",
-              "    sfea0:              45.0\n",
-              "    cf:                 0.0005\n",
-              "    eslm:               -0.2\n",
-              "    cori:               0.0\n",
-              "    ntif:               8\n",
-              "    nbfr:               0
" - ], - "text/plain": [ - " Size: 20GB\n", - "Dimensions: (time: 186, node: 12785004, nele: 24875336, nvertex: 3,\n", - " mesh: 1, nbou: 262, nvel: 12421)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", - " x (node) float64 102MB dask.array\n", - " y (node) float64 102MB dask.array\n", - "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", - "Data variables:\n", - " element (nele, nvertex) int32 299MB dask.array\n", - " adcirc_mesh (mesh) int32 4B dask.array\n", - " nvell (nbou) int32 1kB dask.array\n", - " max_nvell int32 4B ...\n", - " ibtype (nbou) int32 1kB dask.array\n", - " nbvv (nvel) int32 50kB dask.array\n", - " depth (node) float64 102MB dask.array\n", - " zeta (time, node) float64 19GB dask.array\n", - "Attributes: (12/50)\n", - " _FillValue: -99999.0\n", - " model: ADCIRC\n", - " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", - " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", - " grid_type: Triangular\n", - " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", - " ... ...\n", - " sfea0: 45.0\n", - " cf: 0.0005\n", - " eslm: -0.2\n", - " cori: 0.0\n", - " ntif: 8\n", - " nbfr: 0" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import cf_xarray #noqa\n", - "import fsspec\n", - "import numpy as np\n", - "import xarray as xr\n", - "\n", - "import xarray_subset_grid\n", - "\n", - "# Open the dataset from NODD s3 bucket directly\n", - "fs = fsspec.filesystem(\"s3\", anon=True)\n", - "ds_cwl = xr.open_dataset(\n", - " fs.open(\n", - " \"s3://noaa-gestofs-pds/stofs_2d_glo.20240807/stofs_2d_glo.t06z.fields.cwl.nc\"\n", - " ),\n", - " chunks={},\n", - " drop_variables=['nvel']\n", - ")\n", - "\n", - "ds_cwl" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "x-A2kbpYa-7G" - }, - "source": [ - "Make the dataset CF compliant" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "21LQ8NAFwY0v" - }, - "outputs": [], - "source": [ - "ds_cwl = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds_cwl)" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "mtMFWRVnwY0f" + }, + "source": [ + "# STOFS 2D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/asascience-open/xarray-subset-grid/blob/main/docs/examples/stofs_2d.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the Stofs-2d-Global Fields-CWL dataset to compute a subset selector and reuse it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install required libraries\n", + "# !pip install -q xarray_subset_grid@git+https://github.com/asascience-open/xarray-subset-grid.git\n", + "# !pip install -q s3fs cftime xarray cf-xarray fsspec dask h5netcdf" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 435 }, + "id": "WzHpywpMwY0n", + "outputId": "7f423d44-f68a-4488-dbb1-8fa10455086f" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "aTp9T5w7wY0x", - "outputId": "77ef166f-c08f-459e-cada-590530d9c90b" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'Dataset size: 19.629483356 Gb'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 20GB\n",
+       "Dimensions:      (time: 186, node: 12785004, nele: 24875336, nvertex: 3,\n",
+       "                  mesh: 1, nbou: 262, nvel: 12421)\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
+       "    x            (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
+       "    y            (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
+       "Data variables:\n",
+       "    element      (nele, nvertex) int32 299MB dask.array<chunksize=(2763927, 1), meta=np.ndarray>\n",
+       "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    max_nvell    int32 4B ...\n",
+       "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
+       "    depth        (node) float64 102MB dask.array<chunksize=(511401,), meta=np.ndarray>\n",
+       "    zeta         (time, node) float64 19GB dask.array<chunksize=(1, 511401), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    _FillValue:         -99999.0\n",
+       "    model:              ADCIRC\n",
+       "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
+       "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
+       "    grid_type:          Triangular\n",
+       "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
+       "    ...                 ...\n",
+       "    sfea0:              45.0\n",
+       "    cf:                 0.0005\n",
+       "    eslm:               -0.2\n",
+       "    cori:               0.0\n",
+       "    ntif:               8\n",
+       "    nbfr:               0
" ], - "source": [ - "f\"Dataset size: {ds_cwl.nbytes * 1.0e-9} Gb\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MoMm_GNvwY0y" - }, - "source": [ - "### Example BBOX\n", - "\n", - "Drawn with https://geojson.io\n", - "\n", - "![image.png](example_data/image.png)" + "text/plain": [ + " Size: 20GB\n", + "Dimensions: (time: 186, node: 12785004, nele: 24875336, nvertex: 3,\n", + " mesh: 1, nbou: 262, nvel: 12421)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", + " x (node) float64 102MB dask.array\n", + " y (node) float64 102MB dask.array\n", + "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", + "Data variables:\n", + " element (nele, nvertex) int32 299MB dask.array\n", + " adcirc_mesh (mesh) int32 4B dask.array\n", + " nvell (nbou) int32 1kB dask.array\n", + " max_nvell int32 4B ...\n", + " ibtype (nbou) int32 1kB dask.array\n", + " nbvv (nvel) int32 50kB dask.array\n", + " depth (node) float64 102MB dask.array\n", + " zeta (time, node) float64 19GB dask.array\n", + "Attributes: (12/50)\n", + " _FillValue: -99999.0\n", + " model: ADCIRC\n", + " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", + " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", + " grid_type: Triangular\n", + " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", + " ... ...\n", + " sfea0: 45.0\n", + " cf: 0.0005\n", + " eslm: -0.2\n", + " cori: 0.0\n", + " ntif: 8\n", + " nbfr: 0" ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import cf_xarray #noqa\n", + "import fsspec\n", + "import xarray as xr\n", + "\n", + "import xarray_subset_grid\n", + "\n", + "# Open the dataset from NODD s3 bucket directly\n", + "fs = fsspec.filesystem(\"s3\", anon=True)\n", + "ds_cwl = xr.open_dataset(\n", + " fs.open(\n", + " \"s3://noaa-gestofs-pds/stofs_2d_glo.20240807/stofs_2d_glo.t06z.fields.cwl.nc\"\n", + " ),\n", + " chunks={},\n", + " drop_variables=['nvel']\n", + ")\n", + "\n", + "ds_cwl" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x-A2kbpYa-7G" + }, + "source": [ + "Make the dataset CF compliant" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "21LQ8NAFwY0v" + }, + "outputs": [], + "source": [ + "ds_cwl = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds_cwl)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "aTp9T5w7wY0x", + "outputId": "77ef166f-c08f-459e-cada-590530d9c90b" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "6UHg8nKQZRVG" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "source": [ - "Compute the subset selector. \n", - "Specify the selector name for easier accessibility. (optional)" + "text/plain": [ + "'Dataset size: 19.629483356 Gb'" ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f\"Dataset size: {ds_cwl.nbytes * 1.0e-9} Gb\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MoMm_GNvwY0y" + }, + "source": [ + "### Example BBOX\n", + "\n", + "Drawn with https://geojson.io\n", + "\n", + "![image.png](example_data/image.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6UHg8nKQZRVG" + }, + "source": [ + "Compute the subset selector. \n", + "Specify the selector name for easier accessibility. (optional)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "o8655obSwY0z", + "outputId": "e810be20-35b7-4e1f-93c9-60034bec1e2a" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "o8655obSwY0z", - "outputId": "e810be20-35b7-4e1f-93c9-60034bec1e2a" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 17.6 s, sys: 1.92 s, total: 19.5 s\n", - "Wall time: 58.3 s\n" - ] - }, - { - "data": { - "text/plain": [ - " - northeastUSA2d" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "bbox = (-70, 40, -60, 50)\n", - "name = 'northeastUSA2d'\n", - "\n", - "bbox_selector = ds_cwl.xsg.grid.compute_bbox_subset_selector(ds_cwl, bbox, name)\n", - "bbox_selector" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 17.6 s, sys: 1.92 s, total: 19.5 s\n", + "Wall time: 58.3 s\n" + ] }, { - "cell_type": "markdown", - "metadata": { - "id": "CTljtYz_ZadD" - }, - "source": [ - "Use the subset selector to slice the dataset. This is fast because the computation is already done" + "data": { + "text/plain": [ + " - northeastUSA2d" ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "bbox = (-70, 40, -60, 50)\n", + "name = 'northeastUSA2d'\n", + "\n", + "bbox_selector = ds_cwl.xsg.grid.compute_bbox_subset_selector(ds_cwl, bbox, name)\n", + "bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CTljtYz_ZadD" + }, + "source": [ + "Use the subset selector to slice the dataset. This is fast because the computation is already done" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452 }, + "id": "NKOW5A1AZVEW", + "outputId": "8dd61935-c14d-4bc3-c57d-db7856558a05" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 452 - }, - "id": "NKOW5A1AZVEW", - "outputId": "8dd61935-c14d-4bc3-c57d-db7856558a05" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 255 ms, sys: 0 ns, total: 255 ms\n", - "Wall time: 253 ms\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 547MB\n",
-              "Dimensions:      (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n",
-              "                  nbou: 262, nvel: 12421)\n",
-              "Coordinates:\n",
-              "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
-              "    x            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "    y            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
-              "Data variables:\n",
-              "    element      (nele, nvertex) int32 8MB dask.array<chunksize=(44090, 1), meta=np.ndarray>\n",
-              "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    max_nvell    int32 4B ...\n",
-              "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
-              "    depth        (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "    zeta         (time, node) float64 530MB dask.array<chunksize=(1, 79), meta=np.ndarray>\n",
-              "Attributes: (12/50)\n",
-              "    _FillValue:         -99999.0\n",
-              "    model:              ADCIRC\n",
-              "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
-              "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
-              "    grid_type:          Triangular\n",
-              "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
-              "    ...                 ...\n",
-              "    sfea0:              45.0\n",
-              "    cf:                 0.0005\n",
-              "    eslm:               -0.2\n",
-              "    cori:               0.0\n",
-              "    ntif:               8\n",
-              "    nbfr:               0
" - ], - "text/plain": [ - " Size: 547MB\n", - "Dimensions: (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n", - " nbou: 262, nvel: 12421)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", - " x (node) float64 3MB dask.array\n", - " y (node) float64 3MB dask.array\n", - "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", - "Data variables:\n", - " element (nele, nvertex) int32 8MB dask.array\n", - " adcirc_mesh (mesh) int32 4B dask.array\n", - " nvell (nbou) int32 1kB dask.array\n", - " max_nvell int32 4B ...\n", - " ibtype (nbou) int32 1kB dask.array\n", - " nbvv (nvel) int32 50kB dask.array\n", - " depth (node) float64 3MB dask.array\n", - " zeta (time, node) float64 530MB dask.array\n", - "Attributes: (12/50)\n", - " _FillValue: -99999.0\n", - " model: ADCIRC\n", - " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", - " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", - " grid_type: Triangular\n", - " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", - " ... ...\n", - " sfea0: 45.0\n", - " cf: 0.0005\n", - " eslm: -0.2\n", - " cori: 0.0\n", - " ntif: 8\n", - " nbfr: 0" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "ds_subset_cwl = bbox_selector.select(ds_cwl)\n", - "ds_subset_cwl" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 255 ms, sys: 0 ns, total: 255 ms\n", + "Wall time: 253 ms\n" + ] }, { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "RA-O7wKWZiHA", - "outputId": "aea78a2d-7c5c-483c-ee10-d3432917162e" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'Dataset size: 0.546909296 Gb'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 547MB\n",
+       "Dimensions:      (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n",
+       "                  nbou: 262, nvel: 12421)\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
+       "    x            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "    y            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
+       "Data variables:\n",
+       "    element      (nele, nvertex) int32 8MB dask.array<chunksize=(44090, 1), meta=np.ndarray>\n",
+       "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    max_nvell    int32 4B ...\n",
+       "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
+       "    depth        (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "    zeta         (time, node) float64 530MB dask.array<chunksize=(1, 79), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    _FillValue:         -99999.0\n",
+       "    model:              ADCIRC\n",
+       "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
+       "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
+       "    grid_type:          Triangular\n",
+       "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
+       "    ...                 ...\n",
+       "    sfea0:              45.0\n",
+       "    cf:                 0.0005\n",
+       "    eslm:               -0.2\n",
+       "    cori:               0.0\n",
+       "    ntif:               8\n",
+       "    nbfr:               0
" ], - "source": [ - "f\"Dataset size: {ds_subset_cwl.nbytes * 1.0e-9} Gb\"" + "text/plain": [ + " Size: 547MB\n", + "Dimensions: (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n", + " nbou: 262, nvel: 12421)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", + " x (node) float64 3MB dask.array\n", + " y (node) float64 3MB dask.array\n", + "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", + "Data variables:\n", + " element (nele, nvertex) int32 8MB dask.array\n", + " adcirc_mesh (mesh) int32 4B dask.array\n", + " nvell (nbou) int32 1kB dask.array\n", + " max_nvell int32 4B ...\n", + " ibtype (nbou) int32 1kB dask.array\n", + " nbvv (nvel) int32 50kB dask.array\n", + " depth (node) float64 3MB dask.array\n", + " zeta (time, node) float64 530MB dask.array\n", + "Attributes: (12/50)\n", + " _FillValue: -99999.0\n", + " model: ADCIRC\n", + " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", + " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", + " grid_type: Triangular\n", + " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", + " ... ...\n", + " sfea0: 45.0\n", + " cf: 0.0005\n", + " eslm: -0.2\n", + " cori: 0.0\n", + " ntif: 8\n", + " nbfr: 0" ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "ds_subset_cwl = bbox_selector.select(ds_cwl)\n", + "ds_subset_cwl" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "RA-O7wKWZiHA", + "outputId": "aea78a2d-7c5c-483c-ee10-d3432917162e" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "nOKHWSoeZyEi" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "source": [ - "We can save the selector to disk. (as a pickle file) \n", - "Use the `save_to_bytes` function to return the selector as a bytes object. \n", - "To get a unique filename, you can use the `get_hashname` function." + "text/plain": [ + "'Dataset size: 0.546909296 Gb'" ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f\"Dataset size: {ds_subset_cwl.nbytes * 1.0e-9} Gb\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nOKHWSoeZyEi" + }, + "source": [ + "We can save the selector to disk. (as a pickle file) \n", + "Use the `save_to_bytes` function to return the selector as a bytes object. \n", + "To get a unique filename, you can use the `get_hashname` function." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "NsfPNQBNZzsI", + "outputId": "9e3751ab-b435-4cbd-a6c0-8e7d5813dba8" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "NsfPNQBNZzsI", - "outputId": "9e3751ab-b435-4cbd-a6c0-8e7d5813dba8" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'northeastUSA2d_bb3d126e.pkl'" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "selector_bytes = bbox_selector.save_to_bytes()\n", - "filepath = bbox_selector.get_hashname()\n", - "\n", - "with open(filepath, 'wb') as f:\n", - " f.write(selector_bytes)" + "text/plain": [ + "'northeastUSA2d_bb3d126e.pkl'" ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selector_bytes = bbox_selector.save_to_bytes()\n", + "filepath = bbox_selector.get_hashname()\n", + "\n", + "with open(filepath, 'wb') as f:\n", + " f.write(selector_bytes)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KwJRl6GSZ5kI" + }, + "source": [ + "Open a selector using a bytes object.\n", + "This retains the subclass of the selector (i.e, UGridSelector, SGridSelector, etc)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "zU247L2QZ1_O", + "outputId": "997b8a0e-f27f-4620-8392-ad45df9e45df" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "KwJRl6GSZ5kI" - }, - "source": [ - "Open a selector using a bytes object.\n", - "This retains the subclass of the selector (i.e, UGridSelector, SGridSelector, etc)" + "data": { + "text/plain": [ + " - northeastUSA2d" ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from xarray_subset_grid import Selector\n", + "\n", + "selector_bytes = open(filepath, 'rb').read()\n", + "\n", + "loaded_bbox_selector = Selector(selector_bytes)\n", + "\n", + "loaded_bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1y_7FQPmZ85i" + }, + "source": [ + "Test if both the selectors are same." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "KRoJpqVdZ9xL", + "outputId": "bd3273d0-aac7-41cc-a68e-b55a23b82d2c" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "zU247L2QZ1_O", - "outputId": "997b8a0e-f27f-4620-8392-ad45df9e45df" - }, - "outputs": [ - { - "data": { - "text/plain": [ - " - northeastUSA2d" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from xarray_subset_grid import Selector\n", - "\n", - "selector_bytes = open(filepath, 'rb').read()\n", - "\n", - "loaded_bbox_selector = Selector(selector_bytes)\n", - "\n", - "loaded_bbox_selector" + "data": { + "text/plain": [ + "True" ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bbox_selector == loaded_bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JQ-PSVpnZ7oQ" + }, + "source": [ + "Now we can load in a different STOFS-2D file, like the Fields-SWL file. \n", + "To subset a SWL dataset, first compute a selector using the CWL dataset and then reuse the selector. \n", + "This way, we can avoid the error that occurs during the normal subset method." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "P6rA5uFLaF4C" + }, + "outputs": [], + "source": [ + "ds_swl = xr.open_dataset(\n", + " fs.open(\n", + " \"s3://noaa-gestofs-pds/stofs_2d_glo.20240807/stofs_2d_glo.t06z.fields.swl.nc\"\n", + " ),\n", + " chunks={},\n", + " drop_variables=['nvel']\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mLNvz_1JaNNn" + }, + "source": [ + "And then slice it with the same selector! \n", + "To subset a SWL dataset, first compute a selector using the CWL dataset and then reuse the selector." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452 }, + "id": "cNYZW2hpaIxD", + "outputId": "550d2166-7cc1-4e34-e7f8-545246bb5bd9" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "1y_7FQPmZ85i" - }, - "source": [ - "Test if both the selectors are same." - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 380 ms, sys: 1.63 ms, total: 381 ms\n", + "Wall time: 410 ms\n" + ] }, { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "KRoJpqVdZ9xL", - "outputId": "bd3273d0-aac7-41cc-a68e-b55a23b82d2c" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 547MB\n",
+       "Dimensions:      (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n",
+       "                  nbou: 262, nvel: 12421)\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
+       "    x            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "    y            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
+       "Data variables:\n",
+       "    element      (nele, nvertex) int32 8MB dask.array<chunksize=(44090, 1), meta=np.ndarray>\n",
+       "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    max_nvell    int32 4B ...\n",
+       "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
+       "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
+       "    depth        (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
+       "    zeta         (time, node) float64 530MB dask.array<chunksize=(1, 79), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    _FillValue:         -99999.0\n",
+       "    model:              ADCIRC\n",
+       "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
+       "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
+       "    grid_type:          Triangular\n",
+       "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
+       "    ...                 ...\n",
+       "    sfea0:              45.0\n",
+       "    cf:                 0.0005\n",
+       "    eslm:               -0.2\n",
+       "    cori:               0.0\n",
+       "    ntif:               8\n",
+       "    nbfr:               0
" ], - "source": [ - "bbox_selector == loaded_bbox_selector" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "JQ-PSVpnZ7oQ" - }, - "source": [ - "Now we can load in a different STOFS-2D file, like the Fields-SWL file. \n", - "To subset a SWL dataset, first compute a selector using the CWL dataset and then reuse the selector. \n", - "This way, we can avoid the error that occurs during the normal subset method." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "id": "P6rA5uFLaF4C" - }, - "outputs": [], - "source": [ - "ds_swl = xr.open_dataset(\n", - " fs.open(\n", - " \"s3://noaa-gestofs-pds/stofs_2d_glo.20240807/stofs_2d_glo.t06z.fields.swl.nc\"\n", - " ),\n", - " chunks={},\n", - " drop_variables=['nvel']\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "mLNvz_1JaNNn" - }, - "source": [ - "And then slice it with the same selector! \n", - "To subset a SWL dataset, first compute a selector using the CWL dataset and then reuse the selector." + "text/plain": [ + " Size: 547MB\n", + "Dimensions: (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n", + " nbou: 262, nvel: 12421)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", + " x (node) float64 3MB dask.array\n", + " y (node) float64 3MB dask.array\n", + "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", + "Data variables:\n", + " element (nele, nvertex) int32 8MB dask.array\n", + " adcirc_mesh (mesh) int32 4B dask.array\n", + " nvell (nbou) int32 1kB dask.array\n", + " max_nvell int32 4B ...\n", + " ibtype (nbou) int32 1kB dask.array\n", + " nbvv (nvel) int32 50kB dask.array\n", + " depth (node) float64 3MB dask.array\n", + " zeta (time, node) float64 530MB dask.array\n", + "Attributes: (12/50)\n", + " _FillValue: -99999.0\n", + " model: ADCIRC\n", + " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", + " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", + " grid_type: Triangular\n", + " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", + " ... ...\n", + " sfea0: 45.0\n", + " cf: 0.0005\n", + " eslm: -0.2\n", + " cori: 0.0\n", + " ntif: 8\n", + " nbfr: 0" ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "ds_subset_swl = bbox_selector.select(ds_cwl)\n", + "ds_subset_swl" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 489 }, + "id": "fIKRTPtabkXY", + "outputId": "30e7aca7-e4a6-4150-9f61-5b5dfffaf53b" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 452 - }, - "id": "cNYZW2hpaIxD", - "outputId": "550d2166-7cc1-4e34-e7f8-545246bb5bd9" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 380 ms, sys: 1.63 ms, total: 381 ms\n", - "Wall time: 410 ms\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 547MB\n",
-              "Dimensions:      (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n",
-              "                  nbou: 262, nvel: 12421)\n",
-              "Coordinates:\n",
-              "  * time         (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n",
-              "    x            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "    y            (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n",
-              "Data variables:\n",
-              "    element      (nele, nvertex) int32 8MB dask.array<chunksize=(44090, 1), meta=np.ndarray>\n",
-              "    adcirc_mesh  (mesh) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    nvell        (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    max_nvell    int32 4B ...\n",
-              "    ibtype       (nbou) int32 1kB dask.array<chunksize=(262,), meta=np.ndarray>\n",
-              "    nbvv         (nvel) int32 50kB dask.array<chunksize=(12421,), meta=np.ndarray>\n",
-              "    depth        (node) float64 3MB dask.array<chunksize=(79,), meta=np.ndarray>\n",
-              "    zeta         (time, node) float64 530MB dask.array<chunksize=(1, 79), meta=np.ndarray>\n",
-              "Attributes: (12/50)\n",
-              "    _FillValue:         -99999.0\n",
-              "    model:              ADCIRC\n",
-              "    version:            noaa.stofs.2d.glo.v2.1.0r1.v55.12\n",
-              "    git_hash:           23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n",
-              "    grid_type:          Triangular\n",
-              "    description:        2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n",
-              "    ...                 ...\n",
-              "    sfea0:              45.0\n",
-              "    cf:                 0.0005\n",
-              "    eslm:               -0.2\n",
-              "    cori:               0.0\n",
-              "    ntif:               8\n",
-              "    nbfr:               0
" - ], - "text/plain": [ - " Size: 547MB\n", - "Dimensions: (time: 186, node: 356230, nele: 686355, nvertex: 3, mesh: 1,\n", - " nbou: 262, nvel: 12421)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 1kB 2024-08-07T01:00:00 ... 2024-08-14...\n", - " x (node) float64 3MB dask.array\n", - " y (node) float64 3MB dask.array\n", - "Dimensions without coordinates: node, nele, nvertex, mesh, nbou, nvel\n", - "Data variables:\n", - " element (nele, nvertex) int32 8MB dask.array\n", - " adcirc_mesh (mesh) int32 4B dask.array\n", - " nvell (nbou) int32 1kB dask.array\n", - " max_nvell int32 4B ...\n", - " ibtype (nbou) int32 1kB dask.array\n", - " nbvv (nvel) int32 50kB dask.array\n", - " depth (node) float64 3MB dask.array\n", - " zeta (time, node) float64 530MB dask.array\n", - "Attributes: (12/50)\n", - " _FillValue: -99999.0\n", - " model: ADCIRC\n", - " version: noaa.stofs.2d.glo.v2.1.0r1.v55.12\n", - " git_hash: 23947fbd9683d0ef48f12e6ce62d45d18bc27ff3\n", - " grid_type: Triangular\n", - " description: 2024080706 :-6 hr nowcast and +180 hr forecast ! 32 C...\n", - " ... ...\n", - " sfea0: 45.0\n", - " cf: 0.0005\n", - " eslm: -0.2\n", - " cori: 0.0\n", - " ntif: 8\n", - " nbfr: 0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "ds_subset_swl = bbox_selector.select(ds_cwl)\n", - "ds_subset_swl" + "data": { + "text/plain": [ + "[]" ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 489 - }, - "id": "fIKRTPtabkXY", - "outputId": "30e7aca7-e4a6-4150-9f61-5b5dfffaf53b" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds_subset_cwl.isel(time=0).depth.plot()" + "data": { + "image/png": "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", + "text/plain": [ + "
" ] + }, + "metadata": {}, + "output_type": "display_data" } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } + ], + "source": [ + "ds_subset_cwl.isel(time=0).depth.plot()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 0 + "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.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/docs/examples/stofs_3d.ipynb b/docs/examples/stofs_3d.ipynb index 45fc8cd..7f35d95 100644 --- a/docs/examples/stofs_3d.ipynb +++ b/docs/examples/stofs_3d.ipynb @@ -1,7861 +1,7860 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "cKnWTixv0F-d" - }, - "source": [ - "# STOFS 3D" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/asascience-open/xarray-subset-grid/blob/main/docs/examples/stofs_3d.ipynb)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install required libraries\n", - "# !pip install -q xarray_subset_grid@git+https://github.com/asascience-open/xarray-subset-grid.git\n", - "# !pip install -q s3fs cftime xarray cf-xarray fsspec dask h5netcdf" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Fw4rqcNkE3CM" - }, - "source": [ - "We use the Stofs-3d-Atl Out2d file to compute a subset selector and then reuse it to subset other files like temperature, salinity, etc. \n", - "In this example, we reuse it for temperature." - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "cKnWTixv0F-d" + }, + "source": [ + "# STOFS 3D" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/asascience-open/xarray-subset-grid/blob/main/docs/examples/stofs_3d.ipynb)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Install required libraries\n", + "# !pip install -q xarray_subset_grid@git+https://github.com/asascience-open/xarray-subset-grid.git\n", + "# !pip install -q s3fs cftime xarray cf-xarray fsspec dask h5netcdf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fw4rqcNkE3CM" + }, + "source": [ + "We use the Stofs-3d-Atl Out2d file to compute a subset selector and then reuse it to subset other files like temperature, salinity, etc. \n", + "In this example, we reuse it for temperature." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 576 }, + "id": "dOBQPslc0F-f", + "outputId": "90e88961-67f5-48cf-ec1d-dd7aed9f390a" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 576 - }, - "id": "dOBQPslc0F-f", - "outputId": "90e88961-67f5-48cf-ec1d-dd7aed9f390a" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 4GB\n",
-              "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n",
-              "                              nSCHISM_hgrid_face: 5728020,\n",
-              "                              nSCHISM_hgrid_edge: 8701944,\n",
-              "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
-              "Coordinates:\n",
-              "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
-              "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
-              "                                nSCHISM_hgrid_edge,\n",
-              "                                nMaxSCHISM_hgrid_face_nodes, two\n",
-              "Data variables: (12/17)\n",
-              "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    depth                    (nSCHISM_hgrid_node) float32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
-              "    bottom_index_node        (nSCHISM_hgrid_node) int32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array<chunksize=(1145604, 1), meta=np.ndarray>\n",
-              "    ...                       ...\n",
-              "    windSpeedX               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windSpeedY               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windStressX              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windStressY              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 550MB dask.array<chunksize=(1, 954670), meta=np.ndarray>\n",
-              "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
-              "Attributes:\n",
-              "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
-              "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" - ], - "text/plain": [ - " Size: 4GB\n", - "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n", - " nSCHISM_hgrid_face: 5728020,\n", - " nSCHISM_hgrid_edge: 8701944,\n", - " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", - " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 24MB dask.array\n", - " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 24MB dask.array\n", - " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 46MB dask.array\n", - " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 46MB dask.array\n", - " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", - " nSCHISM_hgrid_edge,\n", - " nMaxSCHISM_hgrid_face_nodes, two\n", - "Data variables: (12/17)\n", - " minimum_depth (one) float64 8B dask.array\n", - " SCHISM_hgrid (one) |S1 1B dask.array\n", - " crs (one) int32 4B dask.array\n", - " depth (nSCHISM_hgrid_node) float32 12MB dask.array\n", - " bottom_index_node (nSCHISM_hgrid_node) int32 12MB dask.array\n", - " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array\n", - " ... ...\n", - " windSpeedX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windSpeedY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windStressX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windStressY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " dryFlagElement (time, nSCHISM_hgrid_face) float32 550MB dask.array\n", - " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", - "Attributes:\n", - " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", - " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 4GB\n",
+       "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n",
+       "                              nSCHISM_hgrid_face: 5728020,\n",
+       "                              nSCHISM_hgrid_edge: 8701944,\n",
+       "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
+       "Coordinates:\n",
+       "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
+       "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
+       "                                nSCHISM_hgrid_edge,\n",
+       "                                nMaxSCHISM_hgrid_face_nodes, two\n",
+       "Data variables: (12/17)\n",
+       "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    depth                    (nSCHISM_hgrid_node) float32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
+       "    bottom_index_node        (nSCHISM_hgrid_node) int32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array<chunksize=(1145604, 1), meta=np.ndarray>\n",
+       "    ...                       ...\n",
+       "    windSpeedX               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windSpeedY               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windStressX              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windStressY              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 550MB dask.array<chunksize=(1, 954670), meta=np.ndarray>\n",
+       "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
+       "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" ], - "source": [ - "import cf_xarray #noqa\n", - "import fsspec\n", - "import numpy as np\n", - "import xarray as xr\n", - "\n", - "import xarray_subset_grid\n", - "\n", - "# Open the dataset from NODD s3 bucket directly\n", - "fs = fsspec.filesystem(\"s3\", anon=True)\n", - "ds = xr.open_dataset(\n", - " fs.open(\n", - " \"s3://noaa-nos-stofs3d-pds/STOFS-3D-Atl-shadow-VIMS/20240716/out2d_20240717.nc\"\n", - " ),\n", - " chunks={},\n", - " engine='h5netcdf',\n", - " drop_variables=['nvel']\n", - ")\n", - "\n", - "ds" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "anjPHNNM0F-h" - }, - "source": [ - "Fix any inconsistencies with regards to the dataset's UGRID specifications. (Make the dataset CF compliant)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "Wwf2y4mP0F-i" - }, - "outputs": [], - "source": [ - "ds = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds)" + "text/plain": [ + " Size: 4GB\n", + "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n", + " nSCHISM_hgrid_face: 5728020,\n", + " nSCHISM_hgrid_edge: 8701944,\n", + " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", + " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 24MB dask.array\n", + " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 24MB dask.array\n", + " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 46MB dask.array\n", + " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 46MB dask.array\n", + " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", + " nSCHISM_hgrid_edge,\n", + " nMaxSCHISM_hgrid_face_nodes, two\n", + "Data variables: (12/17)\n", + " minimum_depth (one) float64 8B dask.array\n", + " SCHISM_hgrid (one) |S1 1B dask.array\n", + " crs (one) int32 4B dask.array\n", + " depth (nSCHISM_hgrid_node) float32 12MB dask.array\n", + " bottom_index_node (nSCHISM_hgrid_node) int32 12MB dask.array\n", + " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array\n", + " ... ...\n", + " windSpeedX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windSpeedY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windStressX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windStressY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " dryFlagElement (time, nSCHISM_hgrid_face) float32 550MB dask.array\n", + " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", + "Attributes:\n", + " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", + " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import cf_xarray #noqa\n", + "import fsspec\n", + "import xarray as xr\n", + "\n", + "import xarray_subset_grid\n", + "\n", + "# Open the dataset from NODD s3 bucket directly\n", + "fs = fsspec.filesystem(\"s3\", anon=True)\n", + "ds = xr.open_dataset(\n", + " fs.open(\n", + " \"s3://noaa-nos-stofs3d-pds/STOFS-3D-Atl-shadow-VIMS/20240716/out2d_20240717.nc\"\n", + " ),\n", + " chunks={},\n", + " engine='h5netcdf',\n", + " drop_variables=['nvel']\n", + ")\n", + "\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "anjPHNNM0F-h" + }, + "source": [ + "Fix any inconsistencies with regards to the dataset's UGRID specifications. (Make the dataset CF compliant)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "Wwf2y4mP0F-i" + }, + "outputs": [], + "source": [ + "ds = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "VmXKT-Ey0F-j", + "outputId": "1aa05ec2-a985-443f-e15e-2d07b93395d1" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "VmXKT-Ey0F-j", - "outputId": "1aa05ec2-a985-443f-e15e-2d07b93395d1" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'Dataset size: 4.293908965 Gb'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f\"Dataset size: {ds.nbytes * 1.0e-9} Gb\"" + "text/plain": [ + "'Dataset size: 4.293908965 Gb'" ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f\"Dataset size: {ds.nbytes * 1.0e-9} Gb\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example BBOX\n", + "\n", + "Drawn with https://geojson.io\n", + "\n", + "![image.png](example_data/image.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Or4QgmoD0F-k" + }, + "source": [ + "Compute the subset selection ahead of time, because STOFS doesn't include the grid in all of its output files. \n", + "Specify the selector name for easier accessibility. (optional)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "7uF3xT9U0F-l", + "outputId": "f9d50e0b-3b58-4ce7-b3f8-dde54b35f3e5" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Example BBOX\n", - "\n", - "Drawn with https://geojson.io\n", - "\n", - "![image.png](example_data/image.png)" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 6.54 s, sys: 829 ms, total: 7.37 s\n", + "Wall time: 11.8 s\n" + ] }, { - "cell_type": "markdown", - "metadata": { - "id": "Or4QgmoD0F-k" - }, - "source": [ - "Compute the subset selection ahead of time, because STOFS doesn't include the grid in all of its output files. \n", - "Specify the selector name for easier accessibility. (optional)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "7uF3xT9U0F-l", - "outputId": "f9d50e0b-3b58-4ce7-b3f8-dde54b35f3e5" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 6.54 s, sys: 829 ms, total: 7.37 s\n", - "Wall time: 11.8 s\n" - ] - }, - { - "data": { - "text/plain": [ - " - northeastUSA" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "bbox = (-70, 40, -60, 50)\n", - "name = 'northeastUSA'\n", - "\n", - "bbox_selector = ds.xsg.grid.compute_bbox_subset_selector(ds, bbox, name)\n", - "bbox_selector" + "data": { + "text/plain": [ + " - northeastUSA" ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "bbox = (-70, 40, -60, 50)\n", + "name = 'northeastUSA'\n", + "\n", + "bbox_selector = ds.xsg.grid.compute_bbox_subset_selector(ds, bbox, name)\n", + "bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A4Iveume0F-m" + }, + "source": [ + "Then we can slice this dataset to make sure it works. This is FAST because the hard part is already done" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 611 }, + "id": "fMZWy3zp0F-n", + "outputId": "85e957cf-1f88-48dd-f308-fc573f0351c5" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "A4Iveume0F-m" - }, - "source": [ - "Then we can slice this dataset to make sure it works. This is FAST because the hard part is already done" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 301 ms, sys: 2.83 ms, total: 304 ms\n", + "Wall time: 301 ms\n" + ] }, { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 611 - }, - "id": "fMZWy3zp0F-n", - "outputId": "85e957cf-1f88-48dd-f308-fc573f0351c5" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 301 ms, sys: 2.83 ms, total: 304 ms\n", - "Wall time: 301 ms\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 1GB\n",
-              "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n",
-              "                              nSCHISM_hgrid_face: 274187,\n",
-              "                              nSCHISM_hgrid_edge: 8701944,\n",
-              "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
-              "Coordinates:\n",
-              "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
-              "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
-              "                                nSCHISM_hgrid_edge,\n",
-              "                                nMaxSCHISM_hgrid_face_nodes, two\n",
-              "Data variables: (12/17)\n",
-              "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    depth                    (nSCHISM_hgrid_node) float32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
-              "    bottom_index_node        (nSCHISM_hgrid_node) int32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array<chunksize=(265743, 1), meta=np.ndarray>\n",
-              "    ...                       ...\n",
-              "    windSpeedX               (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
-              "    windSpeedY               (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
-              "    windStressX              (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
-              "    windStressY              (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
-              "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 26MB dask.array<chunksize=(1, 253878), meta=np.ndarray>\n",
-              "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
-              "Attributes:\n",
-              "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
-              "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" - ], - "text/plain": [ - " Size: 1GB\n", - "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n", - " nSCHISM_hgrid_face: 274187,\n", - " nSCHISM_hgrid_edge: 8701944,\n", - " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", - " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 1MB dask.array\n", - " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 1MB dask.array\n", - " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 2MB dask.array\n", - " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 2MB dask.array\n", - " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", - " nSCHISM_hgrid_edge,\n", - " nMaxSCHISM_hgrid_face_nodes, two\n", - "Data variables: (12/17)\n", - " minimum_depth (one) float64 8B dask.array\n", - " SCHISM_hgrid (one) |S1 1B dask.array\n", - " crs (one) int32 4B dask.array\n", - " depth (nSCHISM_hgrid_node) float32 570kB dask.array\n", - " bottom_index_node (nSCHISM_hgrid_node) int32 570kB dask.array\n", - " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array\n", - " ... ...\n", - " windSpeedX (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", - " windSpeedY (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", - " windStressX (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", - " windStressY (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", - " dryFlagElement (time, nSCHISM_hgrid_face) float32 26MB dask.array\n", - " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", - "Attributes:\n", - " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", - " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 1GB\n",
+       "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n",
+       "                              nSCHISM_hgrid_face: 274187,\n",
+       "                              nSCHISM_hgrid_edge: 8701944,\n",
+       "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
+       "Coordinates:\n",
+       "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
+       "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
+       "                                nSCHISM_hgrid_edge,\n",
+       "                                nMaxSCHISM_hgrid_face_nodes, two\n",
+       "Data variables: (12/17)\n",
+       "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    depth                    (nSCHISM_hgrid_node) float32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
+       "    bottom_index_node        (nSCHISM_hgrid_node) int32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array<chunksize=(265743, 1), meta=np.ndarray>\n",
+       "    ...                       ...\n",
+       "    windSpeedX               (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
+       "    windSpeedY               (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
+       "    windStressX              (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
+       "    windStressY              (time, nSCHISM_hgrid_node) float32 14MB dask.array<chunksize=(1, 142475), meta=np.ndarray>\n",
+       "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 26MB dask.array<chunksize=(1, 253878), meta=np.ndarray>\n",
+       "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
+       "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" ], - "source": [ - "%%time\n", - "\n", - "ds_subset_control = bbox_selector.select(ds)\n", - "ds_subset_control" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "mnGd_r7a0F-n", - "outputId": "627fc705-6b1c-4d1b-eef2-439ea802ace0" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'Dataset size: 1.2661721650000002 Gb'" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f\"Dataset size: {ds_subset_control.nbytes * 1.0e-9} Gb\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Tmd9BgNc0F-o" - }, - "source": [ - "We can save the selector to disk. (as a pickle file) \n", - "Use the `save_to_bytes` function to return the selector as a bytes object. \n", - "To get a unique filename, you can use the `get_hashname` function." + "text/plain": [ + " Size: 1GB\n", + "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n", + " nSCHISM_hgrid_face: 274187,\n", + " nSCHISM_hgrid_edge: 8701944,\n", + " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", + " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 1MB dask.array\n", + " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 1MB dask.array\n", + " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 2MB dask.array\n", + " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 2MB dask.array\n", + " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", + " nSCHISM_hgrid_edge,\n", + " nMaxSCHISM_hgrid_face_nodes, two\n", + "Data variables: (12/17)\n", + " minimum_depth (one) float64 8B dask.array\n", + " SCHISM_hgrid (one) |S1 1B dask.array\n", + " crs (one) int32 4B dask.array\n", + " depth (nSCHISM_hgrid_node) float32 570kB dask.array\n", + " bottom_index_node (nSCHISM_hgrid_node) int32 570kB dask.array\n", + " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array\n", + " ... ...\n", + " windSpeedX (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", + " windSpeedY (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", + " windStressX (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", + " windStressY (time, nSCHISM_hgrid_node) float32 14MB dask.array\n", + " dryFlagElement (time, nSCHISM_hgrid_face) float32 26MB dask.array\n", + " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", + "Attributes:\n", + " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", + " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "ds_subset_control = bbox_selector.select(ds)\n", + "ds_subset_control" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "mnGd_r7a0F-n", + "outputId": "627fc705-6b1c-4d1b-eef2-439ea802ace0" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "QgtvWOM40F-o", - "outputId": "5cc6003c-6e46-436f-8a64-8b17a4af39df" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'northeastUSA_bb3d126e.pkl'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "selector_bytes = bbox_selector.save_to_bytes()\n", - "filepath = bbox_selector.get_hashname()\n", - "\n", - "with open(filepath, 'wb') as f:\n", - " f.write(selector_bytes)" + "text/plain": [ + "'Dataset size: 1.2661721650000002 Gb'" ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f\"Dataset size: {ds_subset_control.nbytes * 1.0e-9} Gb\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Tmd9BgNc0F-o" + }, + "source": [ + "We can save the selector to disk. (as a pickle file) \n", + "Use the `save_to_bytes` function to return the selector as a bytes object. \n", + "To get a unique filename, you can use the `get_hashname` function." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, + "id": "QgtvWOM40F-o", + "outputId": "5cc6003c-6e46-436f-8a64-8b17a4af39df" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "4pwdYVPJFQwZ" + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" }, - "source": [ - "Open a selector using a bytes object.\n", - "This retains the subclass of the selector (i.e, UGridSelector, SGridSelector, etc)" + "text/plain": [ + "'northeastUSA_bb3d126e.pkl'" ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selector_bytes = bbox_selector.save_to_bytes()\n", + "filepath = bbox_selector.get_hashname()\n", + "\n", + "with open(filepath, 'wb') as f:\n", + " f.write(selector_bytes)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4pwdYVPJFQwZ" + }, + "source": [ + "Open a selector using a bytes object.\n", + "This retains the subclass of the selector (i.e, UGridSelector, SGridSelector, etc)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "2Qpfhqez190z", + "outputId": "f9c3fc0d-8c65-4b4c-a58e-3e5fdc503236" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "2Qpfhqez190z", - "outputId": "f9c3fc0d-8c65-4b4c-a58e-3e5fdc503236" - }, - "outputs": [ - { - "data": { - "text/plain": [ - " - northeastUSA" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from xarray_subset_grid import Selector\n", - "\n", - "selector_bytes = open(filepath, 'rb').read()\n", - "\n", - "loaded_bbox_selector = Selector(selector_bytes)\n", - "\n", - "loaded_bbox_selector" + "data": { + "text/plain": [ + " - northeastUSA" ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from xarray_subset_grid import Selector\n", + "\n", + "selector_bytes = open(filepath, 'rb').read()\n", + "\n", + "loaded_bbox_selector = Selector(selector_bytes)\n", + "\n", + "loaded_bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TbaU-82Y1YN6" + }, + "source": [ + "Test if both the selectors are same." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, + "id": "VeinLqPr1bF5", + "outputId": "1913721d-e39f-4a09-9a59-f83e4001769b" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "TbaU-82Y1YN6" - }, - "source": [ - "Test if both the selectors are same." + "data": { + "text/plain": [ + "True" ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bbox_selector == loaded_bbox_selector" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ebvSzaIE0F-o" + }, + "source": [ + "Now we can load in a STOFS 3D - temperature file from a different day and subset it!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 576 }, + "id": "e1J5_Gxj0F-o", + "outputId": "3c335e74-a57c-4689-a00e-fd23b011bde6" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "VeinLqPr1bF5", - "outputId": "1913721d-e39f-4a09-9a59-f83e4001769b" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 4GB\n",
+       "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n",
+       "                              nSCHISM_hgrid_face: 5728020,\n",
+       "                              nSCHISM_hgrid_edge: 8701944,\n",
+       "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
+       "Coordinates:\n",
+       "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
+       "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
+       "                                nSCHISM_hgrid_edge,\n",
+       "                                nMaxSCHISM_hgrid_face_nodes, two\n",
+       "Data variables: (12/17)\n",
+       "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    depth                    (nSCHISM_hgrid_node) float32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
+       "    bottom_index_node        (nSCHISM_hgrid_node) int32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array<chunksize=(1145604, 1), meta=np.ndarray>\n",
+       "    ...                       ...\n",
+       "    windSpeedX               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windSpeedY               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windStressX              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    windStressY              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
+       "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 550MB dask.array<chunksize=(1, 954670), meta=np.ndarray>\n",
+       "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
+       "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" ], - "source": [ - "bbox_selector == loaded_bbox_selector" + "text/plain": [ + " Size: 4GB\n", + "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n", + " nSCHISM_hgrid_face: 5728020,\n", + " nSCHISM_hgrid_edge: 8701944,\n", + " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", + " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 24MB dask.array\n", + " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 24MB dask.array\n", + " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 46MB dask.array\n", + " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 46MB dask.array\n", + " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", + " nSCHISM_hgrid_edge,\n", + " nMaxSCHISM_hgrid_face_nodes, two\n", + "Data variables: (12/17)\n", + " minimum_depth (one) float64 8B dask.array\n", + " SCHISM_hgrid (one) |S1 1B dask.array\n", + " crs (one) int32 4B dask.array\n", + " depth (nSCHISM_hgrid_node) float32 12MB dask.array\n", + " bottom_index_node (nSCHISM_hgrid_node) int32 12MB dask.array\n", + " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array\n", + " ... ...\n", + " windSpeedX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windSpeedY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windStressX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " windStressY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", + " dryFlagElement (time, nSCHISM_hgrid_face) float32 550MB dask.array\n", + " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", + "Attributes:\n", + " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", + " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_temp = xr.open_dataset(\n", + " fs.open(\n", + " \"s3://noaa-nos-stofs3d-pds/STOFS-3D-Atl-shadow-VIMS/20240728/temperature_20240728.nc\"\n", + " ),\n", + " chunks={},\n", + " drop_variables=['nvel']\n", + ")\n", + "\n", + "ds_temp = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds_temp)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "w89jrnv90F-p" + }, + "source": [ + "And then slice it with the same selector!" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 692 }, + "id": "lZbYtR8o0F-p", + "outputId": "7bd6f508-4433-495b-9f9a-3badaa56359e" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "id": "ebvSzaIE0F-o" - }, - "source": [ - "Now we can load in a STOFS 3D - temperature file from a different day and subset it!" - ] + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 171 ms, sys: 129 µs, total: 172 ms\n", + "Wall time: 172 ms\n" + ] }, { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 576 - }, - "id": "e1J5_Gxj0F-o", - "outputId": "3c335e74-a57c-4689-a00e-fd23b011bde6" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 4GB\n",
-              "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n",
-              "                              nSCHISM_hgrid_face: 5728020,\n",
-              "                              nSCHISM_hgrid_edge: 8701944,\n",
-              "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n",
-              "Coordinates:\n",
-              "  * time                     (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n",
-              "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 24MB dask.array<chunksize=(495629,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 46MB dask.array<chunksize=(520730,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
-              "                                nSCHISM_hgrid_edge,\n",
-              "                                nMaxSCHISM_hgrid_face_nodes, two\n",
-              "Data variables: (12/17)\n",
-              "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    depth                    (nSCHISM_hgrid_node) float32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
-              "    bottom_index_node        (nSCHISM_hgrid_node) int32 12MB dask.array<chunksize=(991257,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array<chunksize=(1145604, 1), meta=np.ndarray>\n",
-              "    ...                       ...\n",
-              "    windSpeedX               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windSpeedY               (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windStressX              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    windStressY              (time, nSCHISM_hgrid_node) float32 285MB dask.array<chunksize=(1, 991257), meta=np.ndarray>\n",
-              "    dryFlagElement           (time, nSCHISM_hgrid_face) float32 550MB dask.array<chunksize=(1, 954670), meta=np.ndarray>\n",
-              "    dryFlagSide              (time, nSCHISM_hgrid_edge) float32 835MB dask.array<chunksize=(1, 966883), meta=np.ndarray>\n",
-              "Attributes:\n",
-              "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
-              "    history:  Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -...
" - ], - "text/plain": [ - " Size: 4GB\n", - "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 2973769,\n", - " nSCHISM_hgrid_face: 5728020,\n", - " nSCHISM_hgrid_edge: 8701944,\n", - " nMaxSCHISM_hgrid_face_nodes: 4, two: 2)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 192B 2024-07-17T01:00:00 ....\n", - " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 24MB dask.array\n", - " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 24MB dask.array\n", - " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 46MB dask.array\n", - " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 46MB dask.array\n", - " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", - " nSCHISM_hgrid_edge,\n", - " nMaxSCHISM_hgrid_face_nodes, two\n", - "Data variables: (12/17)\n", - " minimum_depth (one) float64 8B dask.array\n", - " SCHISM_hgrid (one) |S1 1B dask.array\n", - " crs (one) int32 4B dask.array\n", - " depth (nSCHISM_hgrid_node) float32 12MB dask.array\n", - " bottom_index_node (nSCHISM_hgrid_node) int32 12MB dask.array\n", - " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 183MB dask.array\n", - " ... ...\n", - " windSpeedX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windSpeedY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windStressX (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " windStressY (time, nSCHISM_hgrid_node) float32 285MB dask.array\n", - " dryFlagElement (time, nSCHISM_hgrid_face) float32 550MB dask.array\n", - " dryFlagSide (time, nSCHISM_hgrid_edge) float32 835MB dask.array\n", - "Attributes:\n", - " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", - " history: Wed Jul 17 02:17:50 2024: ncatted -a units,windSpeedY,o,c,m/s -..." - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 965MB\n",
+       "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n",
+       "                              nSCHISM_hgrid_face: 274187,\n",
+       "                              nSCHISM_hgrid_edge: 8701944,\n",
+       "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2,\n",
+       "                              nSCHISM_vgrid_layers: 49)\n",
+       "Coordinates:\n",
+       "  * time                     (time) datetime64[ns] 192B 2024-07-28T01:00:00 ....\n",
+       "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
+       "                                nSCHISM_hgrid_edge,\n",
+       "                                nMaxSCHISM_hgrid_face_nodes, two,\n",
+       "                                nSCHISM_vgrid_layers\n",
+       "Data variables:\n",
+       "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "    depth                    (nSCHISM_hgrid_node) float32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
+       "    bottom_index_node        (nSCHISM_hgrid_node) int32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array<chunksize=(265743, 1), meta=np.ndarray>\n",
+       "    SCHISM_hgrid_edge_nodes  (nSCHISM_hgrid_edge, two) float64 139MB dask.array<chunksize=(1740389, 1), meta=np.ndarray>\n",
+       "    temperature              (time, nSCHISM_hgrid_node, nSCHISM_vgrid_layers) float32 670MB dask.array<chunksize=(1, 142475, 49), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
+       "    history:  Mon Jul 29 02:42:02 2024: ncatted -a units,temperature,o,c,Degr...
" ], - "source": [ - "ds_temp = xr.open_dataset(\n", - " fs.open(\n", - " \"s3://noaa-nos-stofs3d-pds/STOFS-3D-Atl-shadow-VIMS/20240728/temperature_20240728.nc\"\n", - " ),\n", - " chunks={},\n", - " drop_variables=['nvel']\n", - ")\n", - "\n", - "ds_temp = xarray_subset_grid.grids.ugrid.assign_ugrid_topology(ds_temp)\n", - "ds" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "w89jrnv90F-p" - }, - "source": [ - "And then slice it with the same selector!" + "text/plain": [ + " Size: 965MB\n", + "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n", + " nSCHISM_hgrid_face: 274187,\n", + " nSCHISM_hgrid_edge: 8701944,\n", + " nMaxSCHISM_hgrid_face_nodes: 4, two: 2,\n", + " nSCHISM_vgrid_layers: 49)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 192B 2024-07-28T01:00:00 ....\n", + " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 1MB dask.array\n", + " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 1MB dask.array\n", + "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", + " nSCHISM_hgrid_edge,\n", + " nMaxSCHISM_hgrid_face_nodes, two,\n", + " nSCHISM_vgrid_layers\n", + "Data variables:\n", + " minimum_depth (one) float64 8B dask.array\n", + " SCHISM_hgrid (one) |S1 1B dask.array\n", + " crs (one) int32 4B dask.array\n", + " depth (nSCHISM_hgrid_node) float32 570kB dask.array\n", + " bottom_index_node (nSCHISM_hgrid_node) int32 570kB dask.array\n", + " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 2MB dask.array\n", + " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 2MB dask.array\n", + " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", + " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array\n", + " SCHISM_hgrid_edge_nodes (nSCHISM_hgrid_edge, two) float64 139MB dask.array\n", + " temperature (time, nSCHISM_hgrid_node, nSCHISM_vgrid_layers) float32 670MB dask.array\n", + "Attributes:\n", + " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", + " history: Mon Jul 29 02:42:02 2024: ncatted -a units,temperature,o,c,Degr..." ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "ds_temp_subset = loaded_bbox_selector.select(ds_temp)\n", + "ds_temp_subset" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 489 }, + "id": "Kn8H9L-82vDi", + "outputId": "58cac6b1-7692-41e8-ac91-c06066a27dab" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 692 - }, - "id": "lZbYtR8o0F-p", - "outputId": "7bd6f508-4433-495b-9f9a-3badaa56359e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 171 ms, sys: 129 µs, total: 172 ms\n", - "Wall time: 172 ms\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 965MB\n",
-              "Dimensions:                  (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n",
-              "                              nSCHISM_hgrid_face: 274187,\n",
-              "                              nSCHISM_hgrid_edge: 8701944,\n",
-              "                              nMaxSCHISM_hgrid_face_nodes: 4, two: 2,\n",
-              "                              nSCHISM_vgrid_layers: 49)\n",
-              "Coordinates:\n",
-              "  * time                     (time) datetime64[ns] 192B 2024-07-28T01:00:00 ....\n",
-              "    SCHISM_hgrid_node_x      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_node_y      (nSCHISM_hgrid_node) float64 1MB dask.array<chunksize=(7165,), meta=np.ndarray>\n",
-              "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n",
-              "                                nSCHISM_hgrid_edge,\n",
-              "                                nMaxSCHISM_hgrid_face_nodes, two,\n",
-              "                                nSCHISM_vgrid_layers\n",
-              "Data variables:\n",
-              "    minimum_depth            (one) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid             (one) |S1 1B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    crs                      (one) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
-              "    depth                    (nSCHISM_hgrid_node) float32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
-              "    bottom_index_node        (nSCHISM_hgrid_node) int32 570kB dask.array<chunksize=(142475,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_x      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_y      (nSCHISM_hgrid_face) float64 2MB dask.array<chunksize=(166039,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_x      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_y      (nSCHISM_hgrid_edge) float64 70MB dask.array<chunksize=(511880,), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_face_nodes  (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array<chunksize=(265743, 1), meta=np.ndarray>\n",
-              "    SCHISM_hgrid_edge_nodes  (nSCHISM_hgrid_edge, two) float64 139MB dask.array<chunksize=(1740389, 1), meta=np.ndarray>\n",
-              "    temperature              (time, nSCHISM_hgrid_node, nSCHISM_vgrid_layers) float32 670MB dask.array<chunksize=(1, 142475, 49), meta=np.ndarray>\n",
-              "Attributes:\n",
-              "    NCO:      netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n",
-              "    history:  Mon Jul 29 02:42:02 2024: ncatted -a units,temperature,o,c,Degr...
" - ], - "text/plain": [ - " Size: 965MB\n", - "Dimensions: (time: 24, one: 1, nSCHISM_hgrid_node: 142475,\n", - " nSCHISM_hgrid_face: 274187,\n", - " nSCHISM_hgrid_edge: 8701944,\n", - " nMaxSCHISM_hgrid_face_nodes: 4, two: 2,\n", - " nSCHISM_vgrid_layers: 49)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 192B 2024-07-28T01:00:00 ....\n", - " SCHISM_hgrid_node_x (nSCHISM_hgrid_node) float64 1MB dask.array\n", - " SCHISM_hgrid_node_y (nSCHISM_hgrid_node) float64 1MB dask.array\n", - "Dimensions without coordinates: one, nSCHISM_hgrid_node, nSCHISM_hgrid_face,\n", - " nSCHISM_hgrid_edge,\n", - " nMaxSCHISM_hgrid_face_nodes, two,\n", - " nSCHISM_vgrid_layers\n", - "Data variables:\n", - " minimum_depth (one) float64 8B dask.array\n", - " SCHISM_hgrid (one) |S1 1B dask.array\n", - " crs (one) int32 4B dask.array\n", - " depth (nSCHISM_hgrid_node) float32 570kB dask.array\n", - " bottom_index_node (nSCHISM_hgrid_node) int32 570kB dask.array\n", - " SCHISM_hgrid_face_x (nSCHISM_hgrid_face) float64 2MB dask.array\n", - " SCHISM_hgrid_face_y (nSCHISM_hgrid_face) float64 2MB dask.array\n", - " SCHISM_hgrid_edge_x (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - " SCHISM_hgrid_edge_y (nSCHISM_hgrid_edge) float64 70MB dask.array\n", - " SCHISM_hgrid_face_nodes (nSCHISM_hgrid_face, nMaxSCHISM_hgrid_face_nodes) float64 9MB dask.array\n", - " SCHISM_hgrid_edge_nodes (nSCHISM_hgrid_edge, two) float64 139MB dask.array\n", - " temperature (time, nSCHISM_hgrid_node, nSCHISM_vgrid_layers) float32 670MB dask.array\n", - "Attributes:\n", - " NCO: netCDF Operators version 4.9.7 (Homepage = http://nco.sf.net, C...\n", - " history: Mon Jul 29 02:42:02 2024: ncatted -a units,temperature,o,c,Degr..." - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%time\n", - "\n", - "ds_temp_subset = loaded_bbox_selector.select(ds_temp)\n", - "ds_temp_subset" + "data": { + "text/plain": [ + "" ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 489 - }, - "id": "Kn8H9L-82vDi", - "outputId": "58cac6b1-7692-41e8-ac91-c06066a27dab" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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yScBACtWrMC7776Ld999F5UqVRL2S05OxunTpzFnzhz06dMH69atw4wZM9C7d2/YbDYsXLgQ7du3x7Jly/Duu+869P3nP/+JCRMmoF27dli1ahWGDh2KDRs2IDExERaLRTivyWTCH3/8oenLGVRVxZUrV1CxYkX7td9++w1Xr15F8+bNi9zfsmVL/PDDD+S4GRkZDmMWcvHiRSxevBhLlixBUFBQidb6ww8/ICQkBPXq1SuypsL2u/Hpp58iMzMTgwYNKtGct1PcuwKAhx56CNu3b8dLL72ECxcu4OTJk0hKSkJWVhZGjx5d4nkKn+PO9x8XF4eqVatqev/FsWbNGtSrVw/fffcdOVezZs2g1+vt7Yqi4MiRI3f9nTh79ixu3rxpv/b0008X+Tn98MMPuO+++xAeHl6kPwAcPnwYAHD06FFYrdYicxmNRjRt2tTp52cYX8PP2wtgGIrGjRvjgQcewL///W/07dsXNWvW1NQvJiYGn376KXQ6Hf71r3/hzJkzWLZsGf75z39i7dq1AIARI0agZs2aePPNN/H0008DAL755hu8/vrr2LBhAwYOHGgfr1OnTujWrRs2b97scP1O/v3vf2Po0KGa1qiqqqb7bmfDhg347bffMHfuXPu1y5cvAwCqVKlS5P4qVarg+vXrMJlMCAgIKHbMPXv2ID09HdOnTy/SNm7cONx///0YMGBAidd6+fJlxMTEQKfTFVkTAPz+++937bthwwYEBATg0UcfLfG8t49x57sCgNWrV+OPP/7A888/j+effx4AULFiRaSlpaFNmzYlnod6/6LndGYug8GAypUrO1w3Go2oUKGCfa7Cn/nd1gTcev916tQRzkX1L7zv9ut33rtnzx4tj8YwPg8bTUyZZfjw4Q6bdatWrZCeno7hw4fbrxkMBjRv3hyHDh2yX9u8eTMiIiLw97//3cEb1KxZM4SGhmLnzp1CoykxMfGup4tkKfSItGnTBkOGDLFfz8/PB4BijaLAwED7PcW1X716FQMHDkR8fDwmTpzo0LZz5058+OGH2L9/v1Prvduct6+pOLKzs7Ft2zb06NEDkZGRTs19t3cFAMHBwahTpw6qVq2KXr164ebNm1ixYgX69euHPXv24N577y3RXNT7z87OduoZZs+ejdmzZxeZy2g0Fnt/YGCgfS1afycKKe4En9afHzXX3X7ODFPa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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds_temp_subset.isel(time=0).temperature.plot()" + "data": { + "image/png": "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yScBACtWrMC7776Ld999F5UqVRL2S05OxunTpzFnzhz06dMH69atw4wZM9C7d2/YbDYsXLgQ7du3x7Jly/Duu+869P3nP/+JCRMmoF27dli1ahWGDh2KDRs2IDExERaLRTivyWTCH3/8oenLGVRVxZUrV1CxYkX7td9++w1Xr15F8+bNi9zfsmVL/PDDD+S4GRkZDmMWcvHiRSxevBhLlixBUFBQidb6ww8/ICQkBPXq1SuypsL2u/Hpp58iMzMTgwYNKtGct1PcuwKAhx56CNu3b8dLL72ECxcu4OTJk0hKSkJWVhZGjx5d4nkKn+PO9x8XF4eqVatqev/FsWbNGtSrVw/fffcdOVezZs2g1+vt7Yqi4MiRI3f9nTh79ixu3rxpv/b0008X+Tn98MMPuO+++xAeHl6kPwAcPnwYAHD06FFYrdYicxmNRjRt2tTp52cYX8PP2wtgGIrGjRvjgQcewL///W/07dsXNWvW1NQvJiYGn376KXQ6Hf71r3/hzJkzWLZsGf75z39i7dq1AIARI0agZs2aePPNN/H0008DAL755hu8/vrr2LBhAwYOHGgfr1OnTujWrRs2b97scP1O/v3vf2Po0KGa1qiqqqb7bmfDhg347bffMHfuXPu1y5cvAwCqVKlS5P4qVarg+vXrMJlMCAgIKHbMPXv2ID09HdOnTy/SNm7cONx///0YMGBAidd6+fJlxMTEQKfTFVkTAPz+++937bthwwYEBATg0UcfLfG8t49x57sCgNWrV+OPP/7A888/j+effx4AULFiRaSlpaFNmzYlnod6/6LndGYug8GAypUrO1w3Go2oUKGCfa7Cn/nd1gTcev916tQRzkX1L7zv9ut33rtnzx4tj8YwPg8bTUyZZfjw4Q6bdatWrZCeno7hw4fbrxkMBjRv3hyHDh2yX9u8eTMiIiLw97//3cEb1KxZM4SGhmLnzp1CoykxMfGup4tkKfSItGnTBkOGDLFfz8/PB4BijaLAwED7PcW1X716FQMHDkR8fDwmTpzo0LZz5058+OGH2L9/v1Prvduct6+pOLKzs7Ft2zb06NEDkZGRTs19t3cFAMHBwahTpw6qVq2KXr164ebNm1ixYgX69euHPXv24N577y3RXNT7z87OduoZZs+ejdmzZxeZy2g0Fnt/YGCgfS1afycKKe4En9afHzXX3X7ODFPa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", + "text/plain": [ + "
" ] + }, + "metadata": {}, + "output_type": "display_data" } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } + ], + "source": [ + "ds_temp_subset.isel(time=0).temperature.plot()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 0 + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/docs/examples/subset_from_ncfile.ipynb b/docs/examples/subset_from_ncfile.ipynb index 9b2ea08..7825963 100644 --- a/docs/examples/subset_from_ncfile.ipynb +++ b/docs/examples/subset_from_ncfile.ipynb @@ -45,7 +45,6 @@ "outputs": [], "source": [ "import cf_xarray # noqa\n", - "import fsspec\n", "import numpy as np\n", "import xarray as xr\n", "\n", @@ -99,6 +98,7 @@ ], "source": [ "from xarray_subset_grid.utils import convert_bytes\n", + "\n", "f\"Dataset size: {convert_bytes(ds.nbytes)}\"" ] }, @@ -703,7 +703,7 @@ " [-122.51257315724197, 37.89737526062751],\n", " [-122.50081931329709, 37.88165893138216],\n", " [-122.51039590603393, 37.870731699265534],\n", - " [-122.49008935972195, 37.85535293037749]] \n", + " [-122.49008935972195, 37.85535293037749]]\n", ")\n", "polygon" ] @@ -1317,7 +1317,9 @@ "import matplotlib.tri as tri\n", "\n", "zeta = ds_subset.zeta.isel(time=0)\n", - "tris = tri.Triangulation(zeta.cf['longitude'], zeta.cf['latitude'], ds_subset[ds_subset.fvcom_mesh.face_node_connectivity].T - 1)\n", + "tris = tri.Triangulation(zeta.cf['longitude'],\n", + " zeta.cf['latitude'],\n", + " ds_subset[ds_subset.fvcom_mesh.face_node_connectivity].T - 1)\n", "plt.tripcolor(tris, zeta, shading='flat')" ] }, diff --git a/tests/test_grids/test_sgrid.py b/tests/test_grids/test_sgrid.py index cbc2948..50bbf82 100644 --- a/tests/test_grids/test_sgrid.py +++ b/tests/test_grids/test_sgrid.py @@ -1,14 +1,14 @@ -import cf_xarray +import os + import fsspec import numpy as np import xarray as xr -import os import xarray_subset_grid.accessor # noqa: F401 -from ..test_utils import ray_tracing_numpy, get_test_file_dir +from tests.test_utils import get_test_file_dir + # open dataset as zarr object using fsspec reference file system and xarray -from gridded import Variable, VectorVariable test_dir = get_test_file_dir() sample_sgrid_file = os.path.join(test_dir, 'arakawa_c_test_grid.nc') @@ -45,7 +45,7 @@ def test_polygon_subset(): ) ds_temp = ds.xsg.subset_vars(['temp_sur']) ds_subset = ds_temp.xsg.subset_polygon(polygon) - + #Check that the subset dataset has the correct dimensions given the original padding assert ds_subset.sizes['eta_rho'] == ds_subset.sizes['eta_psi'] + 1 assert ds_subset.sizes['eta_u'] == ds_subset.sizes['eta_psi'] + 1 @@ -53,14 +53,17 @@ def test_polygon_subset(): assert ds_subset.sizes['xi_rho'] == ds_subset.sizes['xi_psi'] + 1 assert ds_subset.sizes['xi_u'] == ds_subset.sizes['xi_psi'] assert ds_subset.sizes['xi_v'] == ds_subset.sizes['xi_psi'] + 1 - - #Check that the subset rho/psi/u/v positional relationsip makes sense aka psi point is 'between' it's neighbor rho points - #Note that this needs to be better generalized; it's not trivial to write a test that works in all potential cases. - assert ds_subset['lon_rho'][0,0] < ds_subset['lon_psi'][0,0] and ds_subset['lon_rho'][0,1] > ds_subset['lon_psi'][0,0] - + + #Check that the subset rho/psi/u/v positional relationsip makes sense aka psi point is + #'between' it's neighbor rho points + #Note that this needs to be better generalized; it's not trivial to write a test that + #works in all potential cases. + assert (ds_subset['lon_rho'][0,0] < ds_subset['lon_psi'][0,0] + and ds_subset['lon_rho'][0,1] > ds_subset['lon_psi'][0,0]) + #ds_subset.temp_sur.isel(ocean_time=0).plot(x="lon_rho", y="lat_rho") - -def test_polygon_subset_2(): + +def test_polygon_subset_2(): ds = xr.open_dataset(sample_sgrid_file, decode_times=False) polygon = np.array([ [6.5, 37.5], @@ -70,7 +73,7 @@ def test_polygon_subset_2(): [6.5, 37.5] ]) ds_subset = ds.xsg.subset_polygon(polygon) - + #Check that the subset dataset has the correct dimensions given the original padding assert ds_subset.sizes['eta_rho'] == ds_subset.sizes['eta_psi'] + 1 assert ds_subset.sizes['eta_u'] == ds_subset.sizes['eta_psi'] + 1 @@ -78,7 +81,6 @@ def test_polygon_subset_2(): assert ds_subset.sizes['xi_rho'] == ds_subset.sizes['xi_psi'] + 1 assert ds_subset.sizes['xi_u'] == ds_subset.sizes['xi_psi'] assert ds_subset.sizes['xi_v'] == ds_subset.sizes['xi_psi'] + 1 - + assert ds_subset.lon_psi.min() <= 6.5 and ds_subset.lon_psi.max() >= 9.5 assert ds_subset.lat_psi.min() <= 37.5 and ds_subset.lat_psi.max() >= 40.5 - \ No newline at end of file diff --git a/tests/test_utils.py b/tests/test_utils.py index 4df263e..c70e03d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,6 +1,7 @@ +import os + import numpy as np import pytest -import os from xarray_subset_grid.utils import ( normalize_bbox_x_coords, diff --git a/xarray_subset_grid/grids/sgrid.py b/xarray_subset_grid/grids/sgrid.py index 3848781..8e408ad 100644 --- a/xarray_subset_grid/grids/sgrid.py +++ b/xarray_subset_grid/grids/sgrid.py @@ -107,7 +107,7 @@ def compute_polygon_subset_selector( grid_topology = ds[grid_topology_key] dims = _get_sgrid_dim_coord_names(grid_topology) subset_masks: list[tuple[list[str], xr.DataArray]] = [] - + node_dims = grid_topology.attrs["node_dimensions"].split() node_coords = grid_topology.attrs["node_coordinates"].split() @@ -120,23 +120,25 @@ def compute_polygon_subset_selector( node_lat = ds[c] if node_lon is None or node_lat is None: raise ValueError(f"Could not find lon and lat for dimension {node_dims}") - + node_mask = compute_2d_subset_mask(lat=node_lat, lon=node_lon, polygon=polygon) msk = np.where(node_mask) - index_bounding_box = np.array([[msk[0].min(), msk[0].max()+1], [msk[1].min(), msk[1].max()+1]]) - # quick and dirty add a 1 node pad around the psi mask. This is to ensure the entire polygon is covered. + index_bounding_box = np.array([[msk[0].min(), msk[0].max()+1], + [msk[1].min(), msk[1].max()+1]]) + # quick and dirty add a 1 node pad around the psi mask. + # This is to ensure the entire polygon is covered. index_bounding_box[0,0] = max(0, index_bounding_box[0,0] - 1) index_bounding_box[0,1] = min(node_lon.shape[0], index_bounding_box[0,1] + 1) index_bounding_box[1,0] = max(0, index_bounding_box[1,0] - 1) index_bounding_box[1,1] = min(node_lon.shape[1], index_bounding_box[1,1] + 1) node_mask[index_bounding_box[0][0]:index_bounding_box[0][1], index_bounding_box[1][0]:index_bounding_box[1][1]] = True - + subset_masks.append(([node_coords[0], node_coords[1]], node_mask)) for s in ('face', 'edge1', 'edge2'): dims = grid_topology.attrs.get(f"{s}_dimensions", None) coords = grid_topology.attrs.get(f"{s}_coordinates", None).split() - + lon: xr.DataArray | None = None lat: xr.DataArray | None = None for c in coords: @@ -154,7 +156,7 @@ def compute_polygon_subset_selector( index_bounding_box[1][0]:index_bounding_box[1][1] + arranged_padding[1]] = True xr_mask = xr.DataArray(mask, dims=lon.dims) subset_masks.append(([coords[0], coords[1]], xr_mask)) - + return SGridSelector( name=name or 'selector', polygon=polygon, @@ -162,7 +164,7 @@ def compute_polygon_subset_selector( grid_topology=grid_topology, subset_masks=subset_masks, ) - + def _get_sgrid_dim_coord_names( grid_topology: xr.DataArray, @@ -199,14 +201,16 @@ def parse_padding_string(dim_string): parsed_string = dim_string.replace('(padding: ', '').replace(')', '').replace(':', '') split_parsed_string = parsed_string.split(' ') if len(split_parsed_string) == 6: - return {split_parsed_string[0]:split_parsed_string[2], split_parsed_string[3]:split_parsed_string[5]} + return {split_parsed_string[0]:split_parsed_string[2], + split_parsed_string[3]:split_parsed_string[5]} elif len(split_parsed_string) == 5: if split_parsed_string[4] in {'none', 'low', 'high', 'both'}: #2nd dim has padding, and with len 5 that means first does not split_parsed_string.insert(2, 'none') else: split_parsed_string.insert(5, 'none') - return {split_parsed_string[0]:split_parsed_string[2], split_parsed_string[3]:split_parsed_string[5]} + return {split_parsed_string[0]:split_parsed_string[2], + split_parsed_string[3]:split_parsed_string[5]} elif len(split_parsed_string) == 2: #node dimensions string could look like this: 'node_dimensions: xi_psi eta_psi' return {split_parsed_string[0]: 'none', split_parsed_string[1]: 'none'} diff --git a/xarray_subset_grid/utils.py b/xarray_subset_grid/utils.py index 8b056cc..1b0b535 100644 --- a/xarray_subset_grid/utils.py +++ b/xarray_subset_grid/utils.py @@ -151,4 +151,3 @@ def compute_2d_subset_mask( polygon_mask = np.where(polygon_mask > 1, True, False) return xr.DataArray(polygon_mask, dims=mask_dims) - \ No newline at end of file