From f83557b31f4a47df22a941abfd1e42121c2d7216 Mon Sep 17 00:00:00 2001 From: Olufunke Awowale Date: Mon, 13 Jul 2026 01:08:41 -0400 Subject: [PATCH 1/5] adding intro to backends notebook --- _toc.yml | 1 + advanced/backends/intro-backends.ipynb | 800 +++++++++++++++++++++++++ 2 files changed, 801 insertions(+) create mode 100644 advanced/backends/intro-backends.ipynb diff --git a/_toc.yml b/_toc.yml index cfe7f887..0f3cf851 100644 --- a/_toc.yml +++ b/_toc.yml @@ -84,6 +84,7 @@ parts: - file: advanced/map_blocks/simple_map_blocks - file: advanced/backends/backends.md sections: + - file: advanced/backends/intro-backends.ipynb - file: advanced/backends/1.Backend_without_Lazy_Loading.ipynb - file: advanced/backends/2.Backend_with_Lazy_Loading.ipynb - file: advanced/accessors/accessors.md diff --git a/advanced/backends/intro-backends.ipynb b/advanced/backends/intro-backends.ipynb new file mode 100644 index 00000000..21213e8a --- /dev/null +++ b/advanced/backends/intro-backends.ipynb @@ -0,0 +1,800 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2508174a", + "metadata": {}, + "source": [ + "# Introduction to Xarray Backends\n", + "In this lesson, we will learn about and how to use xarray's backends\n", + "\n", + ":::{admonition} Learning Goals\n", + "- Learn about xarray's internal and external backends\n", + "- Learn how to specify backend engines\n", + "- Learn how make your own custom backend\n", + ":::\n", + "\n", + "## What are Xarray Backends\n", + "\n", + "Xarray supports direct serialization and IO to several file formats, through the use of internal and external backends. Xarray's internal backends cover many common data formats such as \"netCDF4\", \"h5netcdf\", and \"zarr\". These backends provide a set of instructions that tells xarray how read data and store it into a `Dataset`, `DataTree` or `DataTree` model and are stored in the underlying “backend”. \n", + "\n", + "Xarray also supports external backends such as \"rioxarray\" and \"cfgrib\" and even creating your own backend.\n", + "\n", + "\n", + ":::{admonition} See also\n", + "You can learn more about xarray's [internal](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-internal-backends) and [external](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-external-backends-not-comprehensive) and our [guide](https://docs.xarray.dev/en/latest/user-guide/io.html) on internal and external backends.\n", + "\n", + ":::\n", + "\n", + "## Why should you create your own Xarray backend?\n", + "\n", + "- Allows you to use xarray's interface\n", + "- Easy intergration with dask for lazy loading with Dask\n", + "- You don’t need to integrate any code in Xarray.\n", + "\n", + "Text and boxes are clickable for more information. Following the diagram is detailed information on many popular backends. You can learn more about using and developing backends in the Xarray tutorial JupyterBook.\n", + "You can [read different types of files](https://docs.xarray.dev/en/stable/user-guide/io.html) in `xr.open_dataset` by specifying the engine to be used:\n" + ] + }, + { + "cell_type": "markdown", + "id": "544c1b02", + "metadata": {}, + "source": [ + "## Internal Backend Selection\n", + "\n", + "When opening a file or URL without explicitly specifying the ``engine`` parameter,\n", + "xarray automatically selects an appropriate backend based on the file path or URL.\n", + "The backends are tried in order: **netcdf4 → h5netcdf → scipy → pydap → zarr**.\n" + ] + }, + { + "cell_type": "markdown", + "id": "8548e481", + "metadata": {}, + "source": [ + "### Check for available backends\n", + "\n", + "We can get a list of our available engines with `list_engines`" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f02ba31a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'netcdf4': \n", + " Open netCDF (.nc, .nc4 and .cdf) and most HDF5 files using netCDF4 in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.NetCDF4BackendEntrypoint.html,\n", + " 'h5netcdf': \n", + " Open netCDF (.nc, .nc4 and .cdf) and most HDF5 files using h5netcdf in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.H5netcdfBackendEntrypoint.html,\n", + " 'scipy': \n", + " Open netCDF files (.nc, .cdf and .nc.gz) using scipy in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.ScipyBackendEntrypoint.html,\n", + " 'pydap': \n", + " Open remote datasets via OPeNDAP using pydap in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.PydapBackendEntrypoint.html,\n", + " 'rasterio': ,\n", + " 'store': \n", + " Open AbstractDataStore instances in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.StoreBackendEntrypoint.html,\n", + " 'zarr': \n", + " Open zarr files (.zarr) using zarr in Xarray\n", + " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.ZarrBackendEntrypoint.html}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import xarray as xr\n", + "xr.backends.list_engines()" + ] + }, + { + "cell_type": "markdown", + "id": "992a1ed0", + "metadata": {}, + "source": [ + "### Reading without specifying engine\n", + "\n", + "When opening a file or URL without explicitly specifying the ``engine`` parameter,\n", + "xarray automatically selects an appropriate backend based on the file path or URL.\n", + "The backends are tried in order: **netcdf4 → h5netcdf → scipy → pydap → zarr**.\n", + "\n", + "In the following example this dataset is read with the \"netcdf4\" engine without explicitly setting the `\"engine=netcdf4\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "90966b50", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 31MB\n",
+       "Dimensions:  (time: 2920, lat: 25, lon: 53)\n",
+       "Coordinates:\n",
+       "  * time     (time) datetime64[ns] 23kB 2013-01-01 ... 2014-12-31T18:00:00\n",
+       "  * lat      (lat) float32 100B 75.0 72.5 70.0 67.5 65.0 ... 22.5 20.0 17.5 15.0\n",
+       "  * lon      (lon) float32 212B 200.0 202.5 205.0 207.5 ... 325.0 327.5 330.0\n",
+       "Data variables:\n",
+       "    air      (time, lat, lon) float64 31MB ...\n",
+       "Attributes:\n",
+       "    Conventions:  COARDS\n",
+       "    title:        4x daily NMC reanalysis (1948)\n",
+       "    description:  Data is from NMC initialized reanalysis\\n(4x/day).  These a...\n",
+       "    platform:     Model\n",
+       "    references:   http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly...
" + ], + "text/plain": [ + " Size: 31MB\n", + "Dimensions: (time: 2920, lat: 25, lon: 53)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 23kB 2013-01-01 ... 2014-12-31T18:00:00\n", + " * lat (lat) float32 100B 75.0 72.5 70.0 67.5 65.0 ... 22.5 20.0 17.5 15.0\n", + " * lon (lon) float32 212B 200.0 202.5 205.0 207.5 ... 325.0 327.5 330.0\n", + "Data variables:\n", + " air (time, lat, lon) float64 31MB ...\n", + "Attributes:\n", + " Conventions: COARDS\n", + " title: 4x daily NMC reanalysis (1948)\n", + " description: Data is from NMC initialized reanalysis\\n(4x/day). These a...\n", + " platform: Model\n", + " references: http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly..." + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xr.tutorial.open_dataset('air_temperature')" + ] + }, + { + "cell_type": "markdown", + "id": "c5e4f362", + "metadata": {}, + "source": [ + "### Setting engine order\n", + "\n", + "You can customize the order in which netcdf4 backends are resolved using `xr.set_options(netcdf_engine_order=)`\n", + "\n", + "Let's update our engine order to have \"h5netcdf\" and the \"netCDF4\" and reopening the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0c7b3ac", + "metadata": {}, + "outputs": [], + "source": [ + "xr.set_options(netcdf_engine_order=[\"h5netcdf\", 'netcdf4', 'scipy'])" + ] + }, + { + "cell_type": "markdown", + "id": "ba077ebf", + "metadata": {}, + "source": [ + "### Specifying the wrong backend" + ] + }, + { + "cell_type": "markdown", + "id": "fcaa4f1c", + "metadata": {}, + "source": [ + "Lets trying specifying a bad engine for opening our dataset\n", + "\n", + ":::{warning}\n", + "This will fail because we cannot use the \"pydap\" engine to read this dataset\n", + ":::" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5be80b2d", + "metadata": {}, + "outputs": [], + "source": [ + "xr.tutorial.open_dataset('air_temperature', engine='pydap')" + ] + }, + { + "cell_type": "markdown", + "id": "1a798222", + "metadata": {}, + "source": [ + "## Creating your own Xarray Backend" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "xarray-tutorial:default (3.12.9)", + "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.14.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 0bda90a6804e4d6bb625b80e2f76c375736f16c2 Mon Sep 17 00:00:00 2001 From: Olufunke Awowale Date: Mon, 13 Jul 2026 12:34:46 -0400 Subject: [PATCH 2/5] adding pydap --- advanced/backends/intro-backends.ipynb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/advanced/backends/intro-backends.ipynb b/advanced/backends/intro-backends.ipynb index 21213e8a..c39f9b2c 100644 --- a/advanced/backends/intro-backends.ipynb +++ b/advanced/backends/intro-backends.ipynb @@ -22,18 +22,15 @@ "\n", "\n", ":::{admonition} See also\n", - "You can learn more about xarray's [internal](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-internal-backends) and [external](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-external-backends-not-comprehensive) and our [guide](https://docs.xarray.dev/en/latest/user-guide/io.html) on internal and external backends.\n", + "You can learn more about xarray's [internal](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-internal-backends) and [external](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-external-backends-not-comprehensive) with our [guide](https://docs.xarray.dev/en/latest/user-guide/io.html) to backends.\n", "\n", ":::\n", "\n", "## Why should you create your own Xarray backend?\n", "\n", "- Allows you to use xarray's interface\n", - "- Easy intergration with dask for lazy loading with Dask\n", - "- You don’t need to integrate any code in Xarray.\n", - "\n", - "Text and boxes are clickable for more information. Following the diagram is detailed information on many popular backends. You can learn more about using and developing backends in the Xarray tutorial JupyterBook.\n", - "You can [read different types of files](https://docs.xarray.dev/en/stable/user-guide/io.html) in `xr.open_dataset` by specifying the engine to be used:\n" + "- Easy integration with dask for lazy loading with Dask\n", + "- You don’t need to integrate any code in Xarray.\n" ] }, { From fc2b6e74dff303339408da5fa07c372dd99ab335 Mon Sep 17 00:00:00 2001 From: Olufunke Awowale Date: Mon, 13 Jul 2026 17:04:14 -0400 Subject: [PATCH 3/5] section about netcdf4 backends --- advanced/backends/intro-backends.ipynb | 45 +++++++++++++++----------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/advanced/backends/intro-backends.ipynb b/advanced/backends/intro-backends.ipynb index c39f9b2c..07a71399 100644 --- a/advanced/backends/intro-backends.ipynb +++ b/advanced/backends/intro-backends.ipynb @@ -10,8 +10,8 @@ "\n", ":::{admonition} Learning Goals\n", "- Learn about xarray's internal and external backends\n", + "- Learn how xarray selects backend engines\n", "- Learn how to specify backend engines\n", - "- Learn how make your own custom backend\n", ":::\n", "\n", "## What are Xarray Backends\n", @@ -24,13 +24,28 @@ ":::{admonition} See also\n", "You can learn more about xarray's [internal](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-internal-backends) and [external](https://tutorial.xarray.dev/advanced/backends/backends.html#links-to-external-backends-not-comprehensive) with our [guide](https://docs.xarray.dev/en/latest/user-guide/io.html) to backends.\n", "\n", - ":::\n", - "\n", - "## Why should you create your own Xarray backend?\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "985ba2e6", + "metadata": {}, + "source": [ + "## Reading a dataset with the netCDF4 engine\n", "\n", - "- Allows you to use xarray's interface\n", - "- Easy integration with dask for lazy loading with Dask\n", - "- You don’t need to integrate any code in Xarray.\n" + "We can read in a dataset by selecting the \"netcdf4\" engine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d25101fb", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "xr.tutorial.open_dataset('air_temperature', engine='netcdf4')" ] }, { @@ -50,7 +65,7 @@ "id": "8548e481", "metadata": {}, "source": [ - "### Check for available backends\n", + "## Check for available backends\n", "\n", "We can get a list of our available engines with `list_engines`" ] @@ -100,7 +115,7 @@ "id": "992a1ed0", "metadata": {}, "source": [ - "### Reading without specifying engine\n", + "## Reading without specifying engine\n", "\n", "When opening a file or URL without explicitly specifying the ``engine`` parameter,\n", "xarray automatically selects an appropriate backend based on the file path or URL.\n", @@ -717,7 +732,7 @@ "id": "c5e4f362", "metadata": {}, "source": [ - "### Setting engine order\n", + "## Setting engine order\n", "\n", "You can customize the order in which netcdf4 backends are resolved using `xr.set_options(netcdf_engine_order=)`\n", "\n", @@ -739,7 +754,7 @@ "id": "ba077ebf", "metadata": {}, "source": [ - "### Specifying the wrong backend" + "## Specifying the wrong backend" ] }, { @@ -763,14 +778,6 @@ "source": [ "xr.tutorial.open_dataset('air_temperature', engine='pydap')" ] - }, - { - "cell_type": "markdown", - "id": "1a798222", - "metadata": {}, - "source": [ - "## Creating your own Xarray Backend" - ] } ], "metadata": { From a3f17f1c391ed669402b53546a00403ece9c28df Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 02:07:05 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- advanced/backends/intro-backends.ipynb | 674 +------------------------ 1 file changed, 24 insertions(+), 650 deletions(-) diff --git a/advanced/backends/intro-backends.ipynb b/advanced/backends/intro-backends.ipynb index 07a71399..3d0da840 100644 --- a/advanced/backends/intro-backends.ipynb +++ b/advanced/backends/intro-backends.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2508174a", + "id": "0", "metadata": {}, "source": [ "# Introduction to Xarray Backends\n", @@ -29,7 +29,7 @@ }, { "cell_type": "markdown", - "id": "985ba2e6", + "id": "1", "metadata": {}, "source": [ "## Reading a dataset with the netCDF4 engine\n", @@ -40,17 +40,18 @@ { "cell_type": "code", "execution_count": null, - "id": "d25101fb", + "id": "2", "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", - "xr.tutorial.open_dataset('air_temperature', engine='netcdf4')" + "\n", + "xr.tutorial.open_dataset(\"air_temperature\", engine=\"netcdf4\")" ] }, { "cell_type": "markdown", - "id": "544c1b02", + "id": "3", "metadata": {}, "source": [ "## Internal Backend Selection\n", @@ -62,7 +63,7 @@ }, { "cell_type": "markdown", - "id": "8548e481", + "id": "4", "metadata": {}, "source": [ "## Check for available backends\n", @@ -72,47 +73,19 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "f02ba31a", + "execution_count": null, + "id": "5", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'netcdf4': \n", - " Open netCDF (.nc, .nc4 and .cdf) and most HDF5 files using netCDF4 in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.NetCDF4BackendEntrypoint.html,\n", - " 'h5netcdf': \n", - " Open netCDF (.nc, .nc4 and .cdf) and most HDF5 files using h5netcdf in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.H5netcdfBackendEntrypoint.html,\n", - " 'scipy': \n", - " Open netCDF files (.nc, .cdf and .nc.gz) using scipy in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.ScipyBackendEntrypoint.html,\n", - " 'pydap': \n", - " Open remote datasets via OPeNDAP using pydap in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.PydapBackendEntrypoint.html,\n", - " 'rasterio': ,\n", - " 'store': \n", - " Open AbstractDataStore instances in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.StoreBackendEntrypoint.html,\n", - " 'zarr': \n", - " Open zarr files (.zarr) using zarr in Xarray\n", - " Learn more at https://docs.xarray.dev/en/stable/generated/xarray.backends.ZarrBackendEntrypoint.html}" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import xarray as xr\n", + "\n", "xr.backends.list_engines()" ] }, { "cell_type": "markdown", - "id": "992a1ed0", + "id": "6", "metadata": {}, "source": [ "## Reading without specifying engine\n", @@ -126,610 +99,17 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "90966b50", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 31MB\n",
-       "Dimensions:  (time: 2920, lat: 25, lon: 53)\n",
-       "Coordinates:\n",
-       "  * time     (time) datetime64[ns] 23kB 2013-01-01 ... 2014-12-31T18:00:00\n",
-       "  * lat      (lat) float32 100B 75.0 72.5 70.0 67.5 65.0 ... 22.5 20.0 17.5 15.0\n",
-       "  * lon      (lon) float32 212B 200.0 202.5 205.0 207.5 ... 325.0 327.5 330.0\n",
-       "Data variables:\n",
-       "    air      (time, lat, lon) float64 31MB ...\n",
-       "Attributes:\n",
-       "    Conventions:  COARDS\n",
-       "    title:        4x daily NMC reanalysis (1948)\n",
-       "    description:  Data is from NMC initialized reanalysis\\n(4x/day).  These a...\n",
-       "    platform:     Model\n",
-       "    references:   http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly...
" - ], - "text/plain": [ - " Size: 31MB\n", - "Dimensions: (time: 2920, lat: 25, lon: 53)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 23kB 2013-01-01 ... 2014-12-31T18:00:00\n", - " * lat (lat) float32 100B 75.0 72.5 70.0 67.5 65.0 ... 22.5 20.0 17.5 15.0\n", - " * lon (lon) float32 212B 200.0 202.5 205.0 207.5 ... 325.0 327.5 330.0\n", - "Data variables:\n", - " air (time, lat, lon) float64 31MB ...\n", - "Attributes:\n", - " Conventions: COARDS\n", - " title: 4x daily NMC reanalysis (1948)\n", - " description: Data is from NMC initialized reanalysis\\n(4x/day). These a...\n", - " platform: Model\n", - " references: http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly..." - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "xr.tutorial.open_dataset('air_temperature')" + "xr.tutorial.open_dataset(\"air_temperature\")" ] }, { "cell_type": "markdown", - "id": "c5e4f362", + "id": "8", "metadata": {}, "source": [ "## Setting engine order\n", @@ -742,16 +122,16 @@ { "cell_type": "code", "execution_count": null, - "id": "d0c7b3ac", + "id": "9", "metadata": {}, "outputs": [], "source": [ - "xr.set_options(netcdf_engine_order=[\"h5netcdf\", 'netcdf4', 'scipy'])" + "xr.set_options(netcdf_engine_order=[\"h5netcdf\", \"netcdf4\", \"scipy\"])" ] }, { "cell_type": "markdown", - "id": "ba077ebf", + "id": "10", "metadata": {}, "source": [ "## Specifying the wrong backend" @@ -759,7 +139,7 @@ }, { "cell_type": "markdown", - "id": "fcaa4f1c", + "id": "11", "metadata": {}, "source": [ "Lets trying specifying a bad engine for opening our dataset\n", @@ -772,20 +152,15 @@ { "cell_type": "code", "execution_count": null, - "id": "5be80b2d", + "id": "12", "metadata": {}, "outputs": [], "source": [ - "xr.tutorial.open_dataset('air_temperature', engine='pydap')" + "xr.tutorial.open_dataset(\"air_temperature\", engine=\"pydap\")" ] } ], "metadata": { - "kernelspec": { - "display_name": "xarray-tutorial:default (3.12.9)", - "language": "python", - "name": "python3" - }, "language_info": { "codemirror_mode": { "name": "ipython", @@ -795,8 +170,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.14.6" + "pygments_lexer": "ipython3" } }, "nbformat": 4, From 9d8598fd8b0f8e870ada8ecbdeb0147deb9d8887 Mon Sep 17 00:00:00 2001 From: Vecko <36369090+VeckoTheGecko@users.noreply.github.com> Date: Mon, 13 Jul 2026 21:31:07 -0500 Subject: [PATCH 5/5] Add cell tag --- advanced/backends/intro-backends.ipynb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/advanced/backends/intro-backends.ipynb b/advanced/backends/intro-backends.ipynb index 3d0da840..d7002d09 100644 --- a/advanced/backends/intro-backends.ipynb +++ b/advanced/backends/intro-backends.ipynb @@ -153,7 +153,11 @@ "cell_type": "code", "execution_count": null, "id": "12", - "metadata": {}, + "metadata": { + "tags": [ + "raises-exception" + ] + }, "outputs": [], "source": [ "xr.tutorial.open_dataset(\"air_temperature\", engine=\"pydap\")"