--- /srv/reproducible-results/rbuild-debian/r-b-build.LDZsRdlB/b1/python-xarray_2025.03.0-1_amd64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.LDZsRdlB/b2/python-xarray_2025.03.0-1_amd64.changes ├── Files │ @@ -1,3 +1,3 @@ │ │ - ae8f67acb01ffc559da942b77926235d 5271460 doc optional python-xarray-doc_2025.03.0-1_all.deb │ + dea87fa535ea0bb094f46b46bda883ce 5272312 doc optional python-xarray-doc_2025.03.0-1_all.deb │ c4509de3dac012ff48719b3f70909f11 816472 python optional python3-xarray_2025.03.0-1_all.deb ├── python-xarray-doc_2025.03.0-1_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2025-03-26 13:04:52.000000 debian-binary │ │ --rw-r--r-- 0 0 0 7552 2025-03-26 13:04:52.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 5263716 2025-03-26 13:04:52.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 7556 2025-03-26 13:04:52.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 5264564 2025-03-26 13:04:52.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./control │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ Package: python-xarray-doc │ │ │ │ Source: python-xarray │ │ │ │ Version: 2025.03.0-1 │ │ │ │ Architecture: all │ │ │ │ Maintainer: Debian Science Maintainers │ │ │ │ -Installed-Size: 15074 │ │ │ │ +Installed-Size: 15078 │ │ │ │ Depends: libjs-sphinxdoc (>= 8.1), libjs-mathjax, libjs-requirejs │ │ │ │ Built-Using: alabaster (= 0.7.16-0.1), sphinx (= 8.1.3-5) │ │ │ │ Section: doc │ │ │ │ Priority: optional │ │ │ │ Multi-Arch: foreign │ │ │ │ Homepage: https://xarray.pydata.org/ │ │ │ │ Description: documentation for xarray │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -278,31 +278,31 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 461 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/dask.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 494 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/data-structures.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 8448 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/developers-meeting.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 479 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/duckarrays.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 22909 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/ecosystem.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 196815 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 16004 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 16010 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 82000 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27733 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27748 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 165093 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13312 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13320 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 73045 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25156 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25163 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 58861 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5159 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5163 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/blank_template.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 81893 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7223 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7228 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 74674 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14769 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14772 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 81800 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7001 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7017 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 87944 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 368069 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.ipynb.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 368081 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/examples/weather-data.ipynb.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 491 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/faq.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15073 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/gallery.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 16306 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/genindex.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 51674 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/faq.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7741 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 25661 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/getting-started-guide/installing.html │ │ │ │ @@ -332,36 +332,36 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 473 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/plotting.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6546 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/py-modindex.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 524 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/quick-overview.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 443 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/related-projects.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 476 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/reshaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 24428 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/roadmap.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 6341 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/search.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 269262 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 270488 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 482 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/terminology.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 482 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/time-series.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13358 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/tutorials-and-videos.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 58676 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/combining.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 140285 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/computation.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 140284 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/computation.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 71358 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/dask.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 150064 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/data-structures.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 35119 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/duckarrays.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 50924 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/groupby.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 120337 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/hierarchical-data.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 9025 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/index.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 140656 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/indexing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 68768 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/interpolation.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 145637 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/io.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11704 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/options.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 42223 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/pandas.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 135402 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/plotting.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 63021 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/reshaping.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 46813 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/terminology.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 49549 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 51034 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 53681 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/time-series.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 47248 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/user-guide/weather-climate.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 494 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/weather-climate.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1047074 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/whats-new.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 512 2025-03-26 13:04:52.000000 ./usr/share/doc/python-xarray-doc/html/why-xarray.html │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-03-26 13:04:52.000000 ./usr/share/doc-base/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 290 2025-03-26 13:04:52.000000 ./usr/share/doc-base/python-xarray-doc.python-xarray-doc │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.html │ │ │ │ @@ -149,15 +149,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f02352afe00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -183,15 +183,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f02352afe00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("era5-2mt-2019-03-uk.grib", engine="cfgrib") │ │ │ │ │ │ │ │ @@ -280,15 +280,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f02352afe00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │

Let’s create a simple plot of 2-m air temperature in degrees Celsius:

│ │ │ │
│ │ │ │
[3]:
│ │ │ │  
│ │ │ │
│ │ │ │ @@ -357,15 +357,15 @@ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ -Error in callback <function _draw_all_if_interactive at 0x7f0235513ba0> (for post_execute), with arguments args (),kwargs {}:
│ │ │ │ +Error in callback <function _draw_all_if_interactive at 0x7f6156b03ba0> (for post_execute), with arguments args (),kwargs {}:
│ │ │ │  
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -93,15 +93,15 @@
│ │ │ │ │  File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in
│ │ │ │ │  HTTPConnection._new_conn(self)
│ │ │ │ │      204 except socket.gaierror as e:
│ │ │ │ │  --> 205     raise NameResolutionError(self.host, self, e) from e
│ │ │ │ │      206 except SocketTimeout as e:
│ │ │ │ │  
│ │ │ │ │  NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)
│ │ │ │ │  
│ │ │ │ │  The above exception was the direct cause of the following exception:
│ │ │ │ │  
│ │ │ │ │  MaxRetryError                             Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3/dist-packages/requests/adapters.py:667, in
│ │ │ │ │  HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
│ │ │ │ │ @@ -137,15 +137,15 @@
│ │ │ │ │  --> 519     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore
│ │ │ │ │  [arg-type]
│ │ │ │ │      521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)
│ │ │ │ │  
│ │ │ │ │  MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries
│ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib
│ │ │ │ │  (Caused by NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)"))
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  ConnectionError                           Traceback (most recent call last)
│ │ │ │ │  Cell In[2], line 1
│ │ │ │ │  ----> 1 ds = xr.tutorial.load_dataset("era5-2mt-2019-03-uk.grib",
│ │ │ │ │ @@ -255,15 +255,15 @@
│ │ │ │ │  --> 700     raise ConnectionError(e, request=request)
│ │ │ │ │      702 except ClosedPoolError as e:
│ │ │ │ │      703     raise ConnectionError(e, request=request)
│ │ │ │ │  
│ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
│ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib
│ │ │ │ │  (Caused by NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7f6156893e00>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)"))
│ │ │ │ │  Let’s create a simple plot of 2-m air temperature in degrees Celsius:
│ │ │ │ │  [3]:
│ │ │ │ │  ds = ds - 273.15
│ │ │ │ │  ds.t2m[0].plot(cmap=plt.cm.coolwarm)
│ │ │ │ │  ---------------------------------------------------------------------------
│ │ │ │ │  NameError                                 Traceback (most recent call last)
│ │ │ │ │ @@ -298,15 +298,15 @@
│ │ │ │ │       10 plt.title("ERA5 - 2m temperature British Isles March 2019")
│ │ │ │ │  
│ │ │ │ │  NameError: name 'ds' is not defined
│ │ │ │ │  /usr/lib/python3/dist-packages/cartopy/io/__init__.py:241: DownloadWarning:
│ │ │ │ │  Downloading: https://naturalearth.s3.amazonaws.com/10m_physical/
│ │ │ │ │  ne_10m_coastline.zip
│ │ │ │ │    warnings.warn(f'Downloading: {url}', DownloadWarning)
│ │ │ │ │ -Error in callback  (for
│ │ │ │ │ +Error in callback  (for
│ │ │ │ │  post_execute), with arguments args (),kwargs {}:
│ │ │ │ │  ---------------------------------------------------------------------------
│ │ │ │ │  gaierror                                  Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3.13/urllib/request.py:1319, in AbstractHTTPHandler.do_open
│ │ │ │ │  (self, http_class, req, **http_conn_args)
│ │ │ │ │     1318 try:
│ │ │ │ │  -> 1319     h.request(req.get_method(), req.selector, req.data, headers,
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ERA5-GRIB-example.ipynb.gz
│ │ │ │ ├── ERA5-GRIB-example.ipynb
│ │ │ │ │ ├── Pretty-printed
│ │ │ │ │ │┄ Similarity: 0.9983880154932787%
│ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:00.768931Z', "
│ │ │ │ │ │┄             "'iopub.status.busy': '2025-03-27T00:38:00.768358Z', 'iopub.status.idle': "
│ │ │ │ │ │┄             "'2025-03-27T00:38:07.209761Z', 'shell.execute_reply': "
│ │ │ │ │ │┄             "'2025-03-27T00:38:07.206328Z'}}}, 4: {'metadata': {'execution': "
│ │ │ │ │ │┄             "{'iopub.execute_input': '2025-03-27T00:38:07.218600Z', 'iopub.status.busy': "
│ │ │ │ │ │┄             "'2025-03-27T00:38:07.216712Z', 'iopub.status.idle': '2025-03-27T00:38:0 […]
│ │ │ │ │ │ @@ -15,18 +15,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 1,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:14.597669Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:14.597429Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:15.988071Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:15.987101Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:00.768931Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:00.768358Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:07.209761Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:07.206328Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [],
│ │ │ │ │ │              "source": [
│ │ │ │ │ │                  "import xarray as xr\n",
│ │ │ │ │ │                  "import matplotlib.pyplot as plt"
│ │ │ │ │ │              ]
│ │ │ │ │ │ @@ -39,24 +39,24 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 2,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:15.990892Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:15.990507Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:16.633024Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:16.631932Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:07.218600Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:07.216712Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:09.187992Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:09.186320Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "ConnectionError",
│ │ │ │ │ │ -                    "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │ +                    "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mgaierror\u001b[0m                                  Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m     sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    199\u001b[0m \u001b[43m        \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    200\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    201\u001b[0m \u001b[43m        \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    202\u001b[0m \u001b[43m        \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    203\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m     58\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m     61\u001b[0m     af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m    976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m    978\u001b[0m     af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n",
│ │ │ │ │ │ @@ -65,35 +65,35 @@
│ │ │ │ │ │                          "\u001b[0;31mNameResolutionError\u001b[0m                       Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m    786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    788\u001b[0m \u001b[43m    \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    789\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    790\u001b[0m \u001b[43m    \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    791\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    792\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    793\u001b[0m \u001b[43m    \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    794\u001b[0m \u001b[43m    \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    795\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    796\u001b[0m \u001b[43m    \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    797\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    798\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    799\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m    487\u001b[0m         new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m    490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m    491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m    463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m   1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m     \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m    206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)",
│ │ │ │ │ │ +                        "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)",
│ │ │ │ │ │                          "\nThe above exception was the direct cause of the following exception:\n",
│ │ │ │ │ │                          "\u001b[0;31mMaxRetryError\u001b[0m                             Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m    666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m     resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    668\u001b[0m \u001b[43m        \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    669\u001b[0m \u001b[43m        \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    670\u001b[0m \u001b[43m        \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    671\u001b[0m \u001b[43m        \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    672\u001b[0m \u001b[43m        \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    673\u001b[0m \u001b[43m        \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    674\u001b[0m \u001b[43m        \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    675\u001b[0m \u001b[43m        \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    676\u001b[0m \u001b[43m        \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    677\u001b[0m \u001b[43m        \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    678\u001b[0m \u001b[43m        \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    679\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m    839\u001b[0m     new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    842\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m    843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m    518\u001b[0m     reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m  \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m    521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n",
│ │ │ │ │ │ -                        "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │ +                        "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mConnectionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mera5-2mt-2019-03-uk.grib\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcfgrib\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:215\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_dataset\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m    179\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    180\u001b[0m \u001b[38;5;124;03m    Open, load into memory, and close a dataset from the online repository\u001b[39;00m\n\u001b[1;32m    181\u001b[0m \u001b[38;5;124;03m    (requires internet).\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    213\u001b[0m \u001b[38;5;124;03m    load_dataset\u001b[39;00m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m--> 215\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ds:\n\u001b[1;32m    216\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mload()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m    164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m    166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    168\u001b[0m \u001b[43m    \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m    169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m    171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m    236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    237\u001b[0m     downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m    241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    242\u001b[0m     get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m    243\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    244\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    247\u001b[0m         file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m    248\u001b[0m     )\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m    803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m    804\u001b[0m     \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m    805\u001b[0m     \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m    806\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m         \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    808\u001b[0m         hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m    809\u001b[0m         shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m    218\u001b[0m     \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m    219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    221\u001b[0m     response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m    222\u001b[0m     content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m     62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m     63\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m     64\u001b[0m \n\u001b[1;32m     65\u001b[0m \u001b[38;5;124;03m    :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     70\u001b[0m \u001b[38;5;124;03m    :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m     71\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m     55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m     56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m     57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m     58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m    584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m    585\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m    586\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m    587\u001b[0m }\n\u001b[1;32m    588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m    700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m    702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m    706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m    696\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m    697\u001b[0m         \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m    698\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m    702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    703\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n",
│ │ │ │ │ │ -                        "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))"
│ │ │ │ │ │ +                        "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/era5-2mt-2019-03-uk.grib (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))"
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  }
│ │ │ │ │ │              ],
│ │ │ │ │ │              "source": [
│ │ │ │ │ │                  "ds = xr.tutorial.load_dataset(\"era5-2mt-2019-03-uk.grib\", engine=\"cfgrib\")"
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │ @@ -105,18 +105,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 3,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:16.668086Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:16.667814Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:16.688793Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:16.687990Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:09.260412Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:09.259273Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:09.291253Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:09.289696Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │ @@ -141,18 +141,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 4,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:16.690845Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:16.690603Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:18.144333Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:18.143470Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:09.295476Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:09.294948Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:13.820710Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:13.818850Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │ @@ -171,15 +171,15 @@
│ │ │ │ │ │                          "  warnings.warn(f'Downloading: {url}', DownloadWarning)\n"
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  },
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "name": "stdout",
│ │ │ │ │ │                      "output_type": "stream",
│ │ │ │ │ │                      "text": [
│ │ │ │ │ │ -                        "Error in callback  (for post_execute), with arguments args (),kwargs {}:\n"
│ │ │ │ │ │ +                        "Error in callback  (for post_execute), with arguments args (),kwargs {}:\n"
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  },
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "URLError",
│ │ │ │ │ │                      "evalue": "",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │ @@ -318,18 +318,18 @@
│ │ │ │ │ │              ]
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 5,
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:18.146833Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:18.146590Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:18.163878Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:18.163344Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:13.825740Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:13.825218Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:13.858564Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:13.857152Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "NameError",
│ │ │ │ │ │                      "evalue": "name 'ds' is not defined",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.html
│ │ │ │ @@ -185,15 +185,15 @@
│ │ │ │      705 server_hostname: str = self.host
│ │ │ │  
│ │ │ │  File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self)
│ │ │ │      204 except socket.gaierror as e:
│ │ │ │  --> 205     raise NameResolutionError(self.host, self, e) from e
│ │ │ │      206 except SocketTimeout as e:
│ │ │ │  
│ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f374d048590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)
│ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)
│ │ │ │  
│ │ │ │  The above exception was the direct cause of the following exception:
│ │ │ │  
│ │ │ │  MaxRetryError                             Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
│ │ │ │      666 try:
│ │ │ │  --> 667     resp = conn.urlopen(
│ │ │ │ @@ -219,15 +219,15 @@
│ │ │ │      844 retries.sleep()
│ │ │ │  
│ │ │ │  File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
│ │ │ │      518     reason = error or ResponseError(cause)
│ │ │ │  --> 519     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
│ │ │ │      521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)
│ │ │ │  
│ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f374d048590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  ConnectionError                           Traceback (most recent call last)
│ │ │ │  Cell In[2], line 2
│ │ │ │        1 # load in the file
│ │ │ │  ----> 2 ds = xr.tutorial.open_dataset("ROMS_example.nc", chunks={"ocean_time": 1})
│ │ │ │ @@ -309,15 +309,15 @@
│ │ │ │      696     if isinstance(e.reason, _SSLError):
│ │ │ │      697         # This branch is for urllib3 v1.22 and later.
│ │ │ │      698         raise SSLError(e, request=request)
│ │ │ │  --> 700     raise ConnectionError(e, request=request)
│ │ │ │      702 except ClosedPoolError as e:
│ │ │ │      703     raise ConnectionError(e, request=request)
│ │ │ │  
│ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f374d048590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │  
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │

Add a lazilly calculated vertical coordinates

│ │ │ │

Write equations to calculate the vertical coordinate. These will be only evaluated when data is requested. Information about the ROMS vertical coordinate can be found (here)[https://www.myroms.org/wiki/Vertical_S-coordinate]

│ │ │ │

In short, for Vtransform==2 as used in this example,

│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -134,15 +134,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -178,15 +178,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 2 │ │ │ │ │ 1 # load in the file │ │ │ │ │ @@ -288,15 +288,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4118b7c590>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ ********** AAdddd aa llaazziillllyy ccaallccuullaatteedd vveerrttiiccaall ccoooorrddiinnaatteess_?¶ ********** │ │ │ │ │ Write equations to calculate the vertical coordinate. These will be only │ │ │ │ │ evaluated when data is requested. Information about the ROMS vertical │ │ │ │ │ coordinate can be found (here)[_h_t_t_p_s_:_/_/_w_w_w_._m_y_r_o_m_s_._o_r_g_/_w_i_k_i_/_V_e_r_t_i_c_a_l___S_- │ │ │ │ │ _c_o_o_r_d_i_n_a_t_e] │ │ │ │ │ In short, for Vtransform==2 as used in this example, │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/ROMS_ocean_model.ipynb.gz │ │ │ │ ├── ROMS_ocean_model.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9986983306836248% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:19.227406Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:38:19.226927Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:38:21.213678Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:38:21.212270Z'}}}, 5: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2025-03-27T00:38:21.219669Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2025-03-27T00:38:21.218851Z', 'iopub.status.idle': '2025-03-27T00:38:2 […] │ │ │ │ │ │ @@ -17,18 +17,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:20.692601Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:20.692362Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:21.553776Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:21.552819Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:19.227406Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:19.226927Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:21.213678Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:21.212270Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "import numpy as np\n", │ │ │ │ │ │ "import cartopy.crs as ccrs\n", │ │ │ │ │ │ "import cartopy.feature as cfeature\n", │ │ │ │ │ │ @@ -75,24 +75,24 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:21.556526Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:21.556150Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.412789Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.411895Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:21.219669Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:21.218851Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.295287Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.275546Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -101,34 +101,34 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[2], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# load in the file\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mROMS_example.nc\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchunks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mocean_time\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# This is a way to turn on chunking and lazy evaluation. Opening with mfdataset, or\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# setting the chunking in the open_dataset would also achieve this.\u001b[39;00m\n\u001b[1;32m 6\u001b[0m ds\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/ROMS_example.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "# load in the file\n", │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"ROMS_example.nc\", chunks={\"ocean_time\": 1})\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ @@ -155,18 +155,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:22.415497Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:22.415238Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.433379Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.432334Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:23.314357Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:23.313781Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.384144Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.379193Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -200,18 +200,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:22.435565Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:22.435329Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.447796Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.447048Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:23.403645Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:23.400841Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.461170Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.456168Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "scrolled": false │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ @@ -236,18 +236,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:22.449726Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:22.449491Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.462907Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.462274Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:23.476097Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:23.475487Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.526017Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.523564Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -275,18 +275,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:22.464777Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:22.464541Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.477384Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.476553Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:23.540618Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:23.540062Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.578198Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.576597Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -310,18 +310,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:22.479316Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:22.479081Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:22.563431Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:22.562847Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:23.589888Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:23.589373Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:23.818063Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:23.815453Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.html │ │ │ │ @@ -165,15 +165,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fd83135e510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -199,15 +199,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fd83135e510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[1], line 7 │ │ │ │ 2 import numpy as np │ │ │ │ 4 xr.set_options(display_style="html") # fancy HTML repr │ │ │ │ @@ -303,15 +303,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fd83135e510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │

The function we will apply is np.interp which expects 1D numpy arrays. This functionality is already implemented in xarray so we use that capability to make sure we are not making mistakes.

│ │ │ │
│ │ │ │
[2]:
│ │ │ │  
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -112,15 +112,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -156,15 +156,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[1], line 7 │ │ │ │ │ 2 import numpy as np │ │ │ │ │ @@ -280,15 +280,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f703e4d2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ The function we will apply is np.interp which expects 1D numpy arrays. This │ │ │ │ │ functionality is already implemented in xarray so we use that capability to │ │ │ │ │ make sure we are not making mistakes. │ │ │ │ │ [2]: │ │ │ │ │ newlat = np.linspace(15, 75, 100) │ │ │ │ │ air.interp(lat=newlat) │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/apply_ufunc_vectorize_1d.ipynb.gz │ │ │ │ ├── apply_ufunc_vectorize_1d.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9993842265725289% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:30.093278Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:38:30.092766Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:38:33.097737Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:38:33.095626Z'}}, 'outputs': {0: {'evalue': " │ │ │ │ │ │┄ "'HTTPSConnectionPool(host=\\'github.com\\', port=443): Max retries exceeded with url: " │ │ │ │ │ │┄ '/pydata/xarray-data/raw/master/air_temperature.nc (Caused by ' │ │ │ │ │ │┄ […] │ │ │ │ │ │ @@ -36,24 +36,24 @@ │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:45:51.659160Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:45:50.528742Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:24.738430Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:24.738190Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.042784Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.041788Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:30.093278Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:30.092766Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.097737Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.095626Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -62,35 +62,35 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[1], line 7\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m 4\u001b[0m xr\u001b[38;5;241m.\u001b[39mset_options(display_style\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhtml\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;66;03m# fancy HTML repr\u001b[39;00m\n\u001b[1;32m 6\u001b[0m air \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m----> 7\u001b[0m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mair_temperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;241m.\u001b[39mair\u001b[38;5;241m.\u001b[39msortby(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlat\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;66;03m# np.interp needs coordinate in ascending order\u001b[39;00m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;241m.\u001b[39misel(time\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mslice\u001b[39m(\u001b[38;5;241m4\u001b[39m), lon\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mslice\u001b[39m(\u001b[38;5;241m3\u001b[39m))\n\u001b[1;32m 10\u001b[0m ) \u001b[38;5;66;03m# choose a small subset for convenience\u001b[39;00m\n\u001b[1;32m 11\u001b[0m air\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:215\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_dataset\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m 179\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;124;03m Open, load into memory, and close a dataset from the online repository\u001b[39;00m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 215\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ds:\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mload()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "import xarray as xr\n", │ │ │ │ │ │ "import numpy as np\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ @@ -116,18 +116,18 @@ │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:45:55.431708Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:45:55.104701Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.045325Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.045065Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.059138Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.058337Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.104526Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.104112Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.135823Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.134405Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -156,18 +156,18 @@ │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:45:57.889496Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:45:57.792269Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.061145Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.060901Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.075453Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.074503Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.145149Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.144696Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.182584Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.181477Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -215,18 +215,18 @@ │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:45:59.768626Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:45:59.543808Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.077320Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.077087Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.089254Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.088657Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.187934Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.187379Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.225336Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.222206Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -281,18 +281,18 @@ │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:02.187012Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:02.105563Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.091259Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.091027Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.103770Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.103178Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.230420Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.229965Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.267450Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.265805Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -359,18 +359,18 @@ │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:05.031672Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:04.947588Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.105807Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.105577Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.119284Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.118303Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.272056Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.271600Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.308529Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.307185Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -405,18 +405,18 @@ │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:09.325218Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:09.303020Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.121288Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.121040Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.136422Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.134524Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.315190Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.314684Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.352829Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.351361Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -453,18 +453,18 @@ │ │ │ │ │ │ "execution_count": 8, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:11.295440Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:11.226553Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.141992Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.140704Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.195540Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.193818Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.359743Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.357924Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.401490Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.399793Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -517,18 +517,18 @@ │ │ │ │ │ │ "execution_count": 9, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:13.808646Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:13.680098Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.198738Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.198494Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.247396Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.246821Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.409152Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.408621Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.468113Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.466642Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -590,18 +590,18 @@ │ │ │ │ │ │ "execution_count": 10, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:26.633233Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:26.515209Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.249403Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.249172Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.264779Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.264202Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.474464Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.474013Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.516294Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.514963Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -647,18 +647,18 @@ │ │ │ │ │ │ "execution_count": 11, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:46:30.026663Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:46:29.893267Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.266748Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.266518Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.282787Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.282133Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.523141Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.522531Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.566162Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.564649Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -735,18 +735,18 @@ │ │ │ │ │ │ "execution_count": 12, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:48:42.469341Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:48:42.344209Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.284785Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.284541Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.301978Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.301046Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.577032Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.576604Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.624219Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.622637Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -821,18 +821,18 @@ │ │ │ │ │ │ "execution_count": 13, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:48:45.267633Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:48:44.943939Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.304040Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.303813Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.318497Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.317775Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.634498Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.633974Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.674617Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.670909Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ModuleNotFoundError", │ │ │ │ │ │ "evalue": "No module named 'numba'", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -873,18 +873,18 @@ │ │ │ │ │ │ "execution_count": 14, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:48:54.755405Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:48:54.634724Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.320401Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.320171Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.335802Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.334989Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.681529Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.681040Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.722538Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.720583Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'interp1d_np_gufunc' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -927,18 +927,18 @@ │ │ │ │ │ │ "execution_count": 15, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-15T14:49:28.667528Z", │ │ │ │ │ │ "start_time": "2020-01-15T14:49:28.103914Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:26.337788Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:26.337555Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:26.354962Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:26.354405Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:33.727486Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:33.727000Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:33.774019Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:33.772860Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ModuleNotFoundError", │ │ │ │ │ │ "evalue": "No module named 'numba'", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.html │ │ │ │ @@ -171,15 +171,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fc1bae31010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fc1bae31010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("air_temperature") │ │ │ │ 3 # to celsius │ │ │ │ @@ -304,15 +304,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fc1bae31010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │
│ │ │ │ │ │ │ │

Plot the first timestep:

│ │ │ │
│ │ │ │
[3]:
│ │ │ │  
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -115,15 +115,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -159,15 +159,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("air_temperature") │ │ │ │ │ @@ -278,15 +278,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f86500b1010>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ Plot the first timestep: │ │ │ │ │ [3]: │ │ │ │ │ projection = ccrs.LambertConformal(central_longitude=-95, central_latitude=45) │ │ │ │ │ │ │ │ │ │ f, ax = plt.subplots(subplot_kw=dict(projection=projection)) │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/area_weighted_temperature.ipynb.gz │ │ │ │ ├── area_weighted_temperature.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9990895206766918% │ │ │ │ │ │┄ Differences: {"'cells'": "{2: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:39.172179Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:38:39.171872Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:38:41.014232Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:38:41.013223Z'}}}, 4: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2025-03-27T00:38:41.019922Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2025-03-27T00:38:41.019260Z', 'iopub.status.idle': '2025-03-27T00:38:4 […] │ │ │ │ │ │ @@ -28,18 +28,18 @@ │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:43:57.222351Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:43:56.147541Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:29.211084Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:29.210840Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.133871Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.133241Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:39.172179Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:39.171872Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:41.014232Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:41.013223Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "%matplotlib inline\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "import cartopy.crs as ccrs\n", │ │ │ │ │ │ @@ -63,24 +63,24 @@ │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:43:57.831734Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:43:57.651845Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.137018Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.136223Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.784656Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.783836Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:41.019922Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:41.019260Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:42.777407Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:42.775929Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -89,35 +89,35 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mair_temperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# to celsius\u001b[39;00m\n\u001b[1;32m 4\u001b[0m air \u001b[38;5;241m=\u001b[39m ds\u001b[38;5;241m.\u001b[39mair \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m273.15\u001b[39m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:215\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_dataset\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m 179\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;124;03m Open, load into memory, and close a dataset from the online repository\u001b[39;00m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 215\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ds:\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mload()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.load_dataset(\"air_temperature\")\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "# to celsius\n", │ │ │ │ │ │ @@ -141,18 +141,18 @@ │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:43:59.887120Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:43:59.582894Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.787207Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.786964Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.865827Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.865277Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:42.785803Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:42.785386Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:42.939582Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:42.938264Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -197,18 +197,18 @@ │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:44:18.777092Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:44:18.736587Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.867992Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.867749Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.881566Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.881038Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:42.945472Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:42.945026Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:42.973934Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:42.972715Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -238,18 +238,18 @@ │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:44:52.607120Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:44:52.564674Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.883498Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.883267Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.894879Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.894359Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:42.980458Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:42.980057Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:43.010139Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:43.009069Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -271,18 +271,18 @@ │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:44:54.334279Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:44:54.280022Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.896753Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.896523Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.908079Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.907550Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:43.015584Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:43.014557Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:43.049553Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:43.048212Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'air_weighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -313,18 +313,18 @@ │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-03-17T14:45:08.877307Z", │ │ │ │ │ │ "start_time": "2020-03-17T14:45:08.673383Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:30.910330Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:30.909852Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:30.922173Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:30.921652Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:43.054639Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:43.054131Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:43.087577Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:43.086181Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'weighted_mean' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/blank_template.html │ │ │ │ @@ -144,15 +144,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fc6193e2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -178,15 +178,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fc6193e2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[1], line 5 │ │ │ │ 2 import numpy as np │ │ │ │ 3 import pandas as pd │ │ │ │ @@ -278,15 +278,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fc6193e2510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
[ ]:
│ │ │ │  
│ │ │ │
│ │ │ │

│ │ │ │ ├── html2text {}
│ │ │ │ │ @@ -92,15 +92,15 @@
│ │ │ │ │  File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in
│ │ │ │ │  HTTPConnection._new_conn(self)
│ │ │ │ │      204 except socket.gaierror as e:
│ │ │ │ │  --> 205     raise NameResolutionError(self.host, self, e) from e
│ │ │ │ │      206 except SocketTimeout as e:
│ │ │ │ │  
│ │ │ │ │  NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)
│ │ │ │ │  
│ │ │ │ │  The above exception was the direct cause of the following exception:
│ │ │ │ │  
│ │ │ │ │  MaxRetryError                             Traceback (most recent call last)
│ │ │ │ │  File /usr/lib/python3/dist-packages/requests/adapters.py:667, in
│ │ │ │ │  HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
│ │ │ │ │ @@ -136,15 +136,15 @@
│ │ │ │ │  --> 519     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore
│ │ │ │ │  [arg-type]
│ │ │ │ │      521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)
│ │ │ │ │  
│ │ │ │ │  MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries
│ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
│ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)"))
│ │ │ │ │  
│ │ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │ │  
│ │ │ │ │  ConnectionError                           Traceback (most recent call last)
│ │ │ │ │  Cell In[1], line 5
│ │ │ │ │        2 import numpy as np
│ │ │ │ │ @@ -256,15 +256,15 @@
│ │ │ │ │  --> 700     raise ConnectionError(e, request=request)
│ │ │ │ │      702 except ClosedPoolError as e:
│ │ │ │ │      703     raise ConnectionError(e, request=request)
│ │ │ │ │  
│ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
│ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
│ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │ +0x7fab2023a510>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
│ │ │ │ │  in name resolution)"))
│ │ │ │ │  [ ]:
│ │ │ │ │  _[_L_o_g_o_ _o_f_ _x_a_r_r_a_y_]
│ │ │ │ │  ************ _xx_aa_rr_rr_aa_yy ************
│ │ │ │ │  ******** NNaavviiggaattiioonn ********
│ │ │ │ │  For users
│ │ │ │ │      * _G_e_t_t_i_n_g_ _S_t_a_r_t_e_d
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/blank_template.ipynb.gz
│ │ │ │ ├── blank_template.ipynb
│ │ │ │ │ ├── Pretty-printed
│ │ │ │ │ │┄ Similarity: 0.9986293859649122%
│ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:46.842094Z', "
│ │ │ │ │ │┄             "'iopub.status.busy': '2025-03-27T00:38:46.841716Z', 'iopub.status.idle': "
│ │ │ │ │ │┄             "'2025-03-27T00:38:49.922179Z', 'shell.execute_reply': "
│ │ │ │ │ │┄             "'2025-03-27T00:38:49.913085Z'}}, 'outputs': {0: {'evalue': "
│ │ │ │ │ │┄             "'HTTPSConnectionPool(host=\\'github.com\\', port=443): Max retries exceeded with url: "
│ │ │ │ │ │┄             '/pydata/xarray-data/raw/master/air_temperature.nc (Caused by '
│ │ │ │ │ │┄     […]
│ │ │ │ │ │ @@ -12,24 +12,24 @@
│ │ │ │ │ │          },
│ │ │ │ │ │          {
│ │ │ │ │ │              "cell_type": "code",
│ │ │ │ │ │              "execution_count": 1,
│ │ │ │ │ │              "id": "41b90ede",
│ │ │ │ │ │              "metadata": {
│ │ │ │ │ │                  "execution": {
│ │ │ │ │ │ -                    "iopub.execute_input": "2026-04-29T06:35:33.067967Z",
│ │ │ │ │ │ -                    "iopub.status.busy": "2026-04-29T06:35:33.067724Z",
│ │ │ │ │ │ -                    "iopub.status.idle": "2026-04-29T06:35:34.182844Z",
│ │ │ │ │ │ -                    "shell.execute_reply": "2026-04-29T06:35:34.182022Z"
│ │ │ │ │ │ +                    "iopub.execute_input": "2025-03-27T00:38:46.842094Z",
│ │ │ │ │ │ +                    "iopub.status.busy": "2025-03-27T00:38:46.841716Z",
│ │ │ │ │ │ +                    "iopub.status.idle": "2025-03-27T00:38:49.922179Z",
│ │ │ │ │ │ +                    "shell.execute_reply": "2025-03-27T00:38:49.913085Z"
│ │ │ │ │ │                  }
│ │ │ │ │ │              },
│ │ │ │ │ │              "outputs": [
│ │ │ │ │ │                  {
│ │ │ │ │ │                      "ename": "ConnectionError",
│ │ │ │ │ │ -                    "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │ +                    "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │                      "output_type": "error",
│ │ │ │ │ │                      "traceback": [
│ │ │ │ │ │                          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
│ │ │ │ │ │                          "\u001b[0;31mgaierror\u001b[0m                                  Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m     sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    199\u001b[0m \u001b[43m        \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    200\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    201\u001b[0m \u001b[43m        \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    202\u001b[0m \u001b[43m        \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    203\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m     58\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m     61\u001b[0m     af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m    976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m    978\u001b[0m     af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n",
│ │ │ │ │ │ @@ -38,35 +38,35 @@
│ │ │ │ │ │                          "\u001b[0;31mNameResolutionError\u001b[0m                       Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m    786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    788\u001b[0m \u001b[43m    \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    789\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    790\u001b[0m \u001b[43m    \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    791\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    792\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    793\u001b[0m \u001b[43m    \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    794\u001b[0m \u001b[43m    \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    795\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    796\u001b[0m \u001b[43m    \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    797\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    798\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    799\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m    487\u001b[0m         new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m    490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m    491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m    463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m   1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m     \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m    206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n",
│ │ │ │ │ │ -                        "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)",
│ │ │ │ │ │ +                        "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)",
│ │ │ │ │ │                          "\nThe above exception was the direct cause of the following exception:\n",
│ │ │ │ │ │                          "\u001b[0;31mMaxRetryError\u001b[0m                             Traceback (most recent call last)",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m    666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m     resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    668\u001b[0m \u001b[43m        \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    669\u001b[0m \u001b[43m        \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    670\u001b[0m \u001b[43m        \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    671\u001b[0m \u001b[43m        \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    672\u001b[0m \u001b[43m        \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    673\u001b[0m \u001b[43m        \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    674\u001b[0m \u001b[43m        \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    675\u001b[0m \u001b[43m        \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m    676\u001b[0m \u001b[43m        \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    677\u001b[0m \u001b[43m        \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    678\u001b[0m \u001b[43m        \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    679\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m    839\u001b[0m     new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    842\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m    843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m    518\u001b[0m     reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m  \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m    521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n",
│ │ │ │ │ │ -                        "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │ +                        "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))",
│ │ │ │ │ │                          "\nDuring handling of the above exception, another exception occurred:\n",
│ │ │ │ │ │                          "\u001b[0;31mConnectionError\u001b[0m                           Traceback (most recent call last)",
│ │ │ │ │ │                          "Cell \u001b[0;32mIn[1], line 5\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m      3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mair_temperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m      6\u001b[0m da \u001b[38;5;241m=\u001b[39m ds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mair\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:215\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_dataset\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m    179\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    180\u001b[0m \u001b[38;5;124;03m    Open, load into memory, and close a dataset from the online repository\u001b[39;00m\n\u001b[1;32m    181\u001b[0m \u001b[38;5;124;03m    (requires internet).\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    213\u001b[0m \u001b[38;5;124;03m    load_dataset\u001b[39;00m\n\u001b[1;32m    214\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m--> 215\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ds:\n\u001b[1;32m    216\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mload()\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m    164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m    166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    168\u001b[0m \u001b[43m    \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m    169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m    171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m    236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    237\u001b[0m     downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m    241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    242\u001b[0m     get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m    243\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    244\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    247\u001b[0m         file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m    248\u001b[0m     )\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m    803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m    804\u001b[0m     \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m    805\u001b[0m     \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m    806\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m         \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    808\u001b[0m         hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m    809\u001b[0m         shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m    218\u001b[0m     \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m    219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    221\u001b[0m     response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m    222\u001b[0m     content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m     62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m     63\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m     64\u001b[0m \n\u001b[1;32m     65\u001b[0m \u001b[38;5;124;03m    :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     70\u001b[0m \u001b[38;5;124;03m    :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m     71\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m     55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m     56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m     57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m     58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m    584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m    585\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m    586\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m    587\u001b[0m }\n\u001b[1;32m    588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m    700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m    702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m    706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n",
│ │ │ │ │ │                          "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m    696\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m    697\u001b[0m         \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m    698\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m    702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    703\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n",
│ │ │ │ │ │ -                        "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))"
│ │ │ │ │ │ +                        "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))"
│ │ │ │ │ │                      ]
│ │ │ │ │ │                  }
│ │ │ │ │ │              ],
│ │ │ │ │ │              "source": [
│ │ │ │ │ │                  "import xarray as xr\n",
│ │ │ │ │ │                  "import numpy as np\n",
│ │ │ │ │ │                  "import pandas as pd\n",
│ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.html
│ │ │ │ @@ -156,15 +156,15 @@
│ │ │ │      705 server_hostname: str = self.host
│ │ │ │  
│ │ │ │  File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self)
│ │ │ │      204 except socket.gaierror as e:
│ │ │ │  --> 205     raise NameResolutionError(self.host, self, e) from e
│ │ │ │      206 except SocketTimeout as e:
│ │ │ │  
│ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f1dbf9ada90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)
│ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)
│ │ │ │  
│ │ │ │  The above exception was the direct cause of the following exception:
│ │ │ │  
│ │ │ │  MaxRetryError                             Traceback (most recent call last)
│ │ │ │  File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
│ │ │ │      666 try:
│ │ │ │  --> 667     resp = conn.urlopen(
│ │ │ │ @@ -190,15 +190,15 @@
│ │ │ │      844 retries.sleep()
│ │ │ │  
│ │ │ │  File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
│ │ │ │      518     reason = error or ResponseError(cause)
│ │ │ │  --> 519     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
│ │ │ │      521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)
│ │ │ │  
│ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f1dbf9ada90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │  
│ │ │ │  During handling of the above exception, another exception occurred:
│ │ │ │  
│ │ │ │  ConnectionError                           Traceback (most recent call last)
│ │ │ │  Cell In[2], line 1
│ │ │ │  ----> 1 ds = xr.tutorial.open_dataset("rasm").load()
│ │ │ │        2 ds
│ │ │ │ @@ -277,15 +277,15 @@
│ │ │ │      696     if isinstance(e.reason, _SSLError):
│ │ │ │      697         # This branch is for urllib3 v1.22 and later.
│ │ │ │      698         raise SSLError(e, request=request)
│ │ │ │  --> 700     raise ConnectionError(e, request=request)
│ │ │ │      702 except ClosedPoolError as e:
│ │ │ │      703     raise ConnectionError(e, request=request)
│ │ │ │  
│ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f1dbf9ada90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
│ │ │ │  
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │

Now for the heavy lifting:

│ │ │ │

We first have to come up with the weights, - calculate the month length for each monthly data record - calculate weights using groupby('time.season')

│ │ │ │

Finally, we just need to multiply our weights by the Dataset and sum along the time dimension. Creating a DataArray for the month length is as easy as using the days_in_month accessor on the time coordinate. The calendar type, in this case 'noleap', is automatically considered in this operation.

│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -100,15 +100,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -144,15 +144,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 ds = xr.tutorial.open_dataset("rasm").load() │ │ │ │ │ @@ -249,15 +249,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fa07e419a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ ********** NNooww ffoorr tthhee hheeaavvyy lliiffttiinngg::_?¶ ********** │ │ │ │ │ We first have to come up with the weights, - calculate the month length for │ │ │ │ │ each monthly data record - calculate weights using groupby('time.season') │ │ │ │ │ Finally, we just need to multiply our weights by the Dataset and sum along the │ │ │ │ │ time dimension. Creating a DataArray for the month length is as easy as using │ │ │ │ │ the days_in_month accessor on the time coordinate. The calendar type, in this │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/monthly-means.ipynb.gz │ │ │ │ ├── monthly-means.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9985565110565111% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:38:54.232942Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:38:54.232376Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:38:56.236247Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:38:56.234584Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2025-03-27T00:38:56.243977Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2025-03-27T00:38:56.242892Z', 'iopub.status.idle': '2025-03-27T00:38:5 […] │ │ │ │ │ │ @@ -19,18 +19,18 @@ │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:35.958210Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:35.936966Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:35.857340Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:35.857103Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:36.702299Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:36.701620Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:54.232942Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:54.232376Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:56.236247Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:56.234584Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "%matplotlib inline\n", │ │ │ │ │ │ "import numpy as np\n", │ │ │ │ │ │ "import pandas as pd\n", │ │ │ │ │ │ @@ -50,24 +50,24 @@ │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:36.072316Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:36.016594Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:36.704971Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:36.704570Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.352306Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.351481Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:56.243977Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:56.242892Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.400416Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.397274Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -76,34 +76,34 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrasm\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mload()\n\u001b[1;32m 2\u001b[0m ds\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"rasm\").load()\n", │ │ │ │ │ │ "ds" │ │ │ │ │ │ ] │ │ │ │ │ │ @@ -121,18 +121,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.354976Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.354423Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.367775Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.367244Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.418150Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.416845Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.453311Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.451964Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -154,18 +154,18 @@ │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:36.132413Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:36.073708Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.369871Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.369339Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.382908Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.382373Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.459602Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.459162Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.500401Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.496866Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'month_length' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -195,18 +195,18 @@ │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:36.152913Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:36.133997Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.384721Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.384486Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.395727Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.395209Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.505778Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.505262Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.541458Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.539831Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds_weighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -227,18 +227,18 @@ │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:36.190765Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:36.154416Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.397558Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.397323Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.409571Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.409041Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.548835Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.548165Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.599005Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.596328Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -261,18 +261,18 @@ │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:40.264871Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:36.192467Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.411396Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.411164Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.432373Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.431843Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.607392Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.606715Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.679591Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.677928Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds_unweighted' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -341,18 +341,18 @@ │ │ │ │ │ │ "execution_count": 8, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:51:40.284898Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:51:40.266406Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:37.434182Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:37.433951Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:37.437569Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:37.437038Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:38:58.686502Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:38:58.685925Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:38:58.699911Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:38:58.696086Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "# Wrap it into a simple function\n", │ │ │ │ │ │ "def season_mean(ds, calendar=\"standard\"):\n", │ │ │ │ │ │ " # Make a DataArray with the number of days in each month, size = len(time)\n", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.html │ │ │ │ @@ -155,15 +155,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f6f9240cec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -189,15 +189,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f6f9240cec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 ds = xr.tutorial.open_dataset("rasm").load() │ │ │ │ 2 ds │ │ │ │ @@ -276,15 +276,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f6f9240cec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │

In this example, the logical coordinates are x and y, while the physical coordinates are xc and yc, which represent the longitudes and latitudes of the data.

│ │ │ │
│ │ │ │
[3]:
│ │ │ │  
│ │ │ │
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -98,15 +98,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -142,15 +142,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 ds = xr.tutorial.open_dataset("rasm").load() │ │ │ │ │ @@ -247,15 +247,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f4e05348ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ In this example, the llooggiiccaall ccoooorrddiinnaatteess are x and y, while the pphhyyssiiccaall │ │ │ │ │ ccoooorrddiinnaatteess are xc and yc, which represent the longitudes and latitudes of the │ │ │ │ │ data. │ │ │ │ │ [3]: │ │ │ │ │ print(ds.xc.attrs) │ │ │ │ │ print(ds.yc.attrs) │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/multidimensional-coords.ipynb.gz │ │ │ │ ├── multidimensional-coords.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9991497747747748% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:39:02.909190Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:39:02.908559Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:39:05.382901Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:39:05.379910Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2025-03-27T00:39:05.399279Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2025-03-27T00:39:05.398273Z', 'iopub.status.idle': '2025-03-27T00:39:0 […] │ │ │ │ │ │ @@ -16,18 +16,18 @@ │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:49:56.068395Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:49:56.035349Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:39.202183Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:39.201944Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:40.114234Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:40.113589Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:02.909190Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:02.908559Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:05.382901Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:05.379910Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "%matplotlib inline\n", │ │ │ │ │ │ "import numpy as np\n", │ │ │ │ │ │ "import pandas as pd\n", │ │ │ │ │ │ @@ -48,24 +48,24 @@ │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:13.629720Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:13.484542Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:40.117320Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:40.116706Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:40.773539Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:40.772497Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:05.399279Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:05.398273Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:07.511503Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:07.509589Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -74,34 +74,34 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrasm\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mload()\n\u001b[1;32m 2\u001b[0m ds\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.open_dataset(\"rasm\").load()\n", │ │ │ │ │ │ "ds" │ │ │ │ │ │ ] │ │ │ │ │ │ @@ -118,18 +118,18 @@ │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:15.836061Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:15.768376Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:40.776048Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:40.775801Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:40.789185Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:40.788493Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:07.522285Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:07.520997Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:07.560564Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:07.558599Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -160,18 +160,18 @@ │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:17.928556Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:17.031211Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:40.791106Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:40.790864Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:41.013663Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:41.012886Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:07.571867Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:07.568486Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:08.187269Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:08.171229Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -213,18 +213,18 @@ │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:20.567749Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:19.999393Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:41.015859Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:41.015613Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:41.029528Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:41.028994Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:08.203319Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:08.202764Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:08.251189Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:08.240325Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -252,18 +252,18 @@ │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:31.131708Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:30.444697Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:41.031476Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:41.031242Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:41.099206Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:41.098662Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:08.268824Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:08.268312Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:08.465078Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:08.463247Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -310,18 +310,18 @@ │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2018-11-28T20:50:43.670463Z", │ │ │ │ │ │ "start_time": "2018-11-28T20:50:43.245501Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:41.101193Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:41.100944Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:41.115728Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:41.115213Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:08.481013Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:08.480368Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:08.525962Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:08.524255Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.html │ │ │ │ @@ -152,15 +152,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f1390514ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -186,15 +186,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f1390514ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("air_temperature") │ │ │ │ │ │ │ │ @@ -283,15 +283,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f1390514ec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │

Multiple plots and map projections

│ │ │ │

Control the map projection parameters on multiple axes

│ │ │ │

This example illustrates how to plot multiple maps and control their extent and aspect ratio.

│ │ │ │

For more details see this discussion on github.

│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -94,15 +94,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -138,15 +138,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("air_temperature") │ │ │ │ │ @@ -255,15 +255,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7fd57e2dcec0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ ********** MMuullttiippllee pplloottss aanndd mmaapp pprroojjeeccttiioonnss_?¶ ********** │ │ │ │ │ Control the map projection parameters on multiple axes │ │ │ │ │ This example illustrates how to plot multiple maps and control their extent and │ │ │ │ │ aspect ratio. │ │ │ │ │ For more details see _t_h_i_s_ _d_i_s_c_u_s_s_i_o_n on github. │ │ │ │ │ [3]: │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/visualization_gallery.ipynb.gz │ │ │ │ ├── visualization_gallery.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9982867324561404% │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:39:18.700987Z', " │ │ │ │ │ │┄ "'iopub.status.busy': '2025-03-27T00:39:18.700414Z', 'iopub.status.idle': " │ │ │ │ │ │┄ "'2025-03-27T00:39:22.309029Z', 'shell.execute_reply': " │ │ │ │ │ │┄ "'2025-03-27T00:39:22.307362Z'}}}, 3: {'metadata': {'execution': " │ │ │ │ │ │┄ "{'iopub.execute_input': '2025-03-27T00:39:22.329441Z', 'iopub.status.busy': " │ │ │ │ │ │┄ "'2025-03-27T00:39:22.327335Z', 'iopub.status.idle': '2025-03-27T00:39:2 […] │ │ │ │ │ │ @@ -10,18 +10,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:43.054880Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:43.054628Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:43.921702Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:43.921022Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:18.700987Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:18.700414Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:22.309029Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:22.307362Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "import cartopy.crs as ccrs\n", │ │ │ │ │ │ "import matplotlib.pyplot as plt\n", │ │ │ │ │ │ "import xarray as xr\n", │ │ │ │ │ │ @@ -37,24 +37,24 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:43.924712Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:43.923969Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:44.571665Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:44.570824Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:22.329441Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:22.327335Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:24.812632Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:24.810276Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "ConnectionError", │ │ │ │ │ │ - "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "evalue": "HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ "traceback": [ │ │ │ │ │ │ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", │ │ │ │ │ │ "\u001b[0;31mgaierror\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:198\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 198\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/connection.py:60\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LocationParseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mhost\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, label empty or too long\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m---> 60\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msocket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSOCK_STREAM\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 61\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3.13/socket.py:977\u001b[0m, in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m 976\u001b[0m addrlist \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_socket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetaddrinfo\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhost\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mport\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfamily\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mproto\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mflags\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 978\u001b[0m af, socktype, proto, canonname, sa \u001b[38;5;241m=\u001b[39m res\n", │ │ │ │ │ │ @@ -63,35 +63,35 @@ │ │ │ │ │ │ "\u001b[0;31mNameResolutionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:488\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m new_e \u001b[38;5;241m=\u001b[39m _wrap_proxy_error(new_e, conn\u001b[38;5;241m.\u001b[39mproxy\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[0;32m--> 488\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m new_e\n\u001b[1;32m 490\u001b[0m \u001b[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001b[39;00m\n\u001b[1;32m 491\u001b[0m \u001b[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:464\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (SocketTimeout, BaseSSLError) \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1093\u001b[0m, in \u001b[0;36mHTTPSConnectionPool._validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mis_closed:\n\u001b[0;32m-> 1093\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001b[39;00m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:704\u001b[0m, in \u001b[0;36mHTTPSConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 703\u001b[0m sock: socket\u001b[38;5;241m.\u001b[39msocket \u001b[38;5;241m|\u001b[39m ssl\u001b[38;5;241m.\u001b[39mSSLSocket\n\u001b[0;32m--> 704\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m sock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m server_hostname: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connection.py:205\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 205\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NameResolutionError(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhost, \u001b[38;5;28mself\u001b[39m, e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 206\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m SocketTimeout \u001b[38;5;28;01mas\u001b[39;00m e:\n", │ │ │ │ │ │ - "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ + "\u001b[0;31mNameResolutionError\u001b[0m: : Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)", │ │ │ │ │ │ "\nThe above exception was the direct cause of the following exception:\n", │ │ │ │ │ │ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 668\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 669\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 670\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 671\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 674\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 675\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 676\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 677\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 678\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 679\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/connectionpool.py:841\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 839\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 841\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 842\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 843\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 844\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/urllib3/util/retry.py:519\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 521\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n", │ │ │ │ │ │ - "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))", │ │ │ │ │ │ "\nDuring handling of the above exception, another exception occurred:\n", │ │ │ │ │ │ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", │ │ │ │ │ │ "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtutorial\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mair_temperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:215\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_dataset\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m 179\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;124;03m Open, load into memory, and close a dataset from the online repository\u001b[39;00m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124;03m (requires internet).\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;124;03m load_dataset\u001b[39;00m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 215\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m ds:\n\u001b[1;32m 216\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mload()\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/xarray/tutorial.py:167\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(name, cache, cache_dir, engine, **kws)\u001b[0m\n\u001b[1;32m 164\u001b[0m downloader \u001b[38;5;241m=\u001b[39m pooch\u001b[38;5;241m.\u001b[39mHTTPDownloader(headers\u001b[38;5;241m=\u001b[39mheaders)\n\u001b[1;32m 166\u001b[0m \u001b[38;5;66;03m# retrieve the file\u001b[39;00m\n\u001b[0;32m--> 167\u001b[0m filepath \u001b[38;5;241m=\u001b[39m \u001b[43mpooch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretrieve\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownloader\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ds \u001b[38;5;241m=\u001b[39m _open_dataset(filepath, engine\u001b[38;5;241m=\u001b[39mengine, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkws)\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m cache:\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:239\u001b[0m, in \u001b[0;36mretrieve\u001b[0;34m(url, known_hash, fname, path, processor, downloader, progressbar)\u001b[0m\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m downloader \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 237\u001b[0m downloader \u001b[38;5;241m=\u001b[39m choose_downloader(url, progressbar\u001b[38;5;241m=\u001b[39mprogressbar)\n\u001b[0;32m--> 239\u001b[0m \u001b[43mstream_download\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfull_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mknown_hash\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_hash \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 242\u001b[0m get_logger()\u001b[38;5;241m.\u001b[39minfo(\n\u001b[1;32m 243\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSHA256 hash of downloaded file: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse this value as the \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mknown_hash\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m argument of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpooch.retrieve\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m file_hash(\u001b[38;5;28mstr\u001b[39m(full_path)),\n\u001b[1;32m 248\u001b[0m )\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/core.py:807\u001b[0m, in \u001b[0;36mstream_download\u001b[0;34m(url, fname, known_hash, downloader, pooch, retry_if_failed)\u001b[0m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# Stream the file to a temporary so that we can safely check its\u001b[39;00m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# hash before overwriting the original.\u001b[39;00m\n\u001b[1;32m 806\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m temporary_file(path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mparent)) \u001b[38;5;28;01mas\u001b[39;00m tmp:\n\u001b[0;32m--> 807\u001b[0m \u001b[43mdownloader\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtmp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpooch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m hash_matches(tmp, known_hash, strict\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, source\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(fname\u001b[38;5;241m.\u001b[39mname))\n\u001b[1;32m 809\u001b[0m shutil\u001b[38;5;241m.\u001b[39mmove(tmp, \u001b[38;5;28mstr\u001b[39m(fname))\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/pooch/downloaders.py:220\u001b[0m, in \u001b[0;36mHTTPDownloader.__call__\u001b[0;34m(self, url, output_file, pooch, check_only)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# pylint: enable=consider-using-with\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 220\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 221\u001b[0m response\u001b[38;5;241m.\u001b[39mraise_for_status()\n\u001b[1;32m 222\u001b[0m content \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39miter_content(chunk_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchunk_size)\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:73\u001b[0m, in \u001b[0;36mget\u001b[0;34m(url, params, **kwargs)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget\u001b[39m(url, params\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 63\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a GET request.\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \n\u001b[1;32m 65\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", │ │ │ │ │ │ "File \u001b[0;32m/usr/lib/python3/dist-packages/requests/adapters.py:700\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 697\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 698\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 700\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n", │ │ │ │ │ │ - "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ + "\u001b[0;31mConnectionError\u001b[0m: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError(\": Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)\"))" │ │ │ │ │ │ ] │ │ │ │ │ │ } │ │ │ │ │ │ ], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "ds = xr.tutorial.load_dataset(\"air_temperature\")" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ @@ -110,18 +110,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:44.574145Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:44.573905Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:44.594711Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:44.594169Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:24.829244Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:24.828587Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:24.901826Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:24.900397Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -163,18 +163,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:44.596624Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:44.596392Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:44.613411Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:44.612875Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:24.928612Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:24.925404Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:25.001865Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:24.999251Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -227,18 +227,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:44.615327Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:44.615098Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:44.630420Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:44.629885Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:25.025082Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:25.024528Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:25.140886Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:25.139256Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ │ │ │ @@ -283,18 +283,18 @@ │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:44.632429Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:44.632194Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:44.647712Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:44.646989Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:25.161259Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:25.160631Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:25.264949Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:25.263227Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "ename": "NameError", │ │ │ │ │ │ "evalue": "name 'ds' is not defined", │ │ │ │ │ │ "output_type": "error", │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/weather-data.html │ │ │ │ @@ -470,37 +470,37 @@ │ │ │ │
<xarray.Dataset> Size: 41kB
│ │ │ │  Dimensions:   (time: 731, location: 3)
│ │ │ │  Coordinates:
│ │ │ │    * time      (time) datetime64[ns] 6kB 2000-01-01 2000-01-02 ... 2001-12-31
│ │ │ │    * location  (location) <U2 24B 'IA' 'IN' 'IL'
│ │ │ │  Data variables:
│ │ │ │      tmin      (time, location) float64 18kB -8.037 -1.788 ... -1.346 -4.544
│ │ │ │ -    tmax      (time, location) float64 18kB 12.98 3.31 6.779 ... 3.343 3.805
  • location
    PandasIndex
    PandasIndex(Index(['IA', 'IN', 'IL'], dtype='object', name='location'))
  • │ │ │ │ │ │ │ │
    │ │ │ │

    Examine a dataset with pandas and seaborn

    │ │ │ │
    │ │ │ │

    Convert to a pandas DataFrame

    │ │ │ │
    │ │ │ │
    [2]:
    │ │ │ │ @@ -697,15 +697,15 @@
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    [5]:
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ -<seaborn.axisgrid.PairGrid at 0x7f42be162ba0>
    │ │ │ │ +<seaborn.axisgrid.PairGrid at 0x7f490de7aba0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ ../_images/examples_weather-data_9_1.png │ │ │ │ @@ -1110,26 +1110,26 @@ │ │ │ │ [0. , 0. , 0. ], │ │ │ │ [0. , 0. , 0. ], │ │ │ │ [0. , 0.01612903, 0. ], │ │ │ │ [0.33333333, 0.35 , 0.23333333], │ │ │ │ [0.93548387, 0.85483871, 0.82258065]]) │ │ │ │ Coordinates: │ │ │ │ * location (location) <U2 24B 'IA' 'IN' 'IL' │ │ │ │ - * month (month) int64 96B 1 2 3 4 5 6 7 8 9 10 11 12
    • location
      (location)
      <U2
      'IA' 'IN' 'IL'
      array(['IA', 'IN', 'IL'], dtype='<U2')
    • month
      (month)
      int64
      1 2 3 4 5 6 7 8 9 10 11 12
      array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
    • location
      PandasIndex
      PandasIndex(Index(['IA', 'IN', 'IL'], dtype='object', name='location'))
    • month
      PandasIndex
      PandasIndex(Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype='int64', name='month'))
  • │ │ │ │ │ │ │ │
    │ │ │ │
    [7]:
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    freeze.to_pandas().plot()
    │ │ │ │  
    │ │ │ │ @@ -1642,18 +1642,18 @@ │ │ │ │ Dimensions: (time: 731, location: 3) │ │ │ │ Coordinates: │ │ │ │ * time (time) datetime64[ns] 6kB 2000-01-01 2000-01-02 ... 2001-12-31 │ │ │ │ * location (location) <U2 24B 'IA' 'IN' 'IL' │ │ │ │ month (time) int64 6kB 1 1 1 1 1 1 1 1 1 ... 12 12 12 12 12 12 12 12 │ │ │ │ Data variables: │ │ │ │ some_missing (time, location) float64 18kB nan nan nan ... -1.346 -4.544 │ │ │ │ - filled (time, location) float64 18kB -5.163 -4.216 ... -1.346 -4.544
  • location
    PandasIndex
    PandasIndex(Index(['IA', 'IN', 'IL'], dtype='object', name='location'))
  • │ │ │ │ │ │ │ │
    │ │ │ │
    [12]:
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    df = both.sel(time="2000").mean("location").reset_coords(drop=True).to_dataframe()
    │ │ │ │  df.head()
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -142,15 +142,15 @@
    │ │ │ │ │  [4]:
    │ │ │ │ │  
    │ │ │ │ │  [../_images/examples_weather-data_7_1.png]
    │ │ │ │ │  ******** VViissuuaalliizzee uussiinngg sseeaabboorrnn_?¶ ********
    │ │ │ │ │  [5]:
    │ │ │ │ │  sns.pairplot(df.reset_index(), vars=ds.data_vars)
    │ │ │ │ │  [5]:
    │ │ │ │ │ -
    │ │ │ │ │ +
    │ │ │ │ │  [../_images/examples_weather-data_9_1.png]
    │ │ │ │ │  ********** PPrroobbaabbiilliittyy ooff ffrreeeezzee bbyy ccaalleennddaarr mmoonntthh_?¶ **********
    │ │ │ │ │  [6]:
    │ │ │ │ │  freeze = (ds["tmin"] <= 0).groupby("time.month").mean("time")
    │ │ │ │ │  freeze
    │ │ │ │ │  [6]:
    │ │ │ │ │   Size: 288B
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/examples/weather-data.ipynb.gz
    │ │ │ │ ├── weather-data.ipynb
    │ │ │ │ │ ├── Pretty-printed
    │ │ │ │ │ │┄ Similarity: 0.9992323269378145%
    │ │ │ │ │ │┄ Differences: {"'cells'": "{1: {'metadata': {'execution': {'iopub.execute_input': '2025-03-27T00:39:30.736879Z', "
    │ │ │ │ │ │┄             "'iopub.status.busy': '2025-03-27T00:39:30.736491Z', 'iopub.status.idle': "
    │ │ │ │ │ │┄             "'2025-03-27T00:39:34.842144Z', 'shell.execute_reply': "
    │ │ │ │ │ │┄             "'2025-03-27T00:39:34.840862Z'}}, 'outputs': {0: {'data': {'text/html': {insert: "
    │ │ │ │ │ │┄             '[(377, "    tmax      (time, location) float64 18kB 12.98 3.31 6.779 ... 3.343 '
    │ │ │ │ │ │┄             "3.805
    " │ │ │ │ │ │ ], │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ " Size: 41kB\n", │ │ │ │ │ │ "Dimensions: (time: 731, location: 3)\n", │ │ │ │ │ │ "Coordinates:\n", │ │ │ │ │ │ " * time (time) datetime64[ns] 6kB 2000-01-01 2000-01-02 ... 2001-12-31\n", │ │ │ │ │ │ " * location (location) \n", │ │ │ │ │ │ @@ -594,18 +594,18 @@ │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:47:32.682065Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:47:32.652629Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:48.045187Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:48.044951Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:48.056506Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:48.055945Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:34.882999Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:34.882446Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:34.907012Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:34.905201Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -708,18 +708,18 @@ │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:47:34.617042Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:47:34.282605Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:48.058331Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:48.058098Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:48.289715Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:48.289130Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:34.911417Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:34.910903Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:35.497725Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:35.496452Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -756,25 +756,25 @@ │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:47:37.643175Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:47:37.202479Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:48.291850Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:48.291609Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:48.926675Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:48.926047Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:35.501871Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:35.501458Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:36.880179Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:36.878706Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ - "" │ │ │ │ │ │ + "" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "output_type": "execute_result" │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ @@ -804,18 +804,18 @@ │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:48:11.241224Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:48:11.211156Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:48.929210Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:48.928708Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:48.946659Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:48.946083Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:36.886863Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:36.886366Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:36.934309Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:36.932666Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -1199,26 +1199,26 @@ │ │ │ │ │ │ " [0. , 0. , 0. ],\n", │ │ │ │ │ │ " [0. , 0. , 0. ],\n", │ │ │ │ │ │ " [0. , 0.01612903, 0. ],\n", │ │ │ │ │ │ " [0.33333333, 0.35 , 0.23333333],\n", │ │ │ │ │ │ " [0.93548387, 0.85483871, 0.82258065]])\n", │ │ │ │ │ │ "Coordinates:\n", │ │ │ │ │ │ " * location (location) <U2 24B 'IA' 'IN' 'IL'\n", │ │ │ │ │ │ - " * month (month) int64 96B 1 2 3 4 5 6 7 8 9 10 11 12
    • location
      (location)
      <U2
      'IA' 'IN' 'IL'
      array(['IA', 'IN', 'IL'], dtype='<U2')
    • month
      (month)
      int64
      1 2 3 4 5 6 7 8 9 10 11 12
      array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
    • location
      PandasIndex
      PandasIndex(Index(['IA', 'IN', 'IL'], dtype='object', name='location'))
    • month
      PandasIndex
      PandasIndex(Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype='int64', name='month'))
  • " │ │ │ │ │ │ ], │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ " Size: 288B\n", │ │ │ │ │ │ "array([[0.9516129 , 0.88709677, 0.93548387],\n", │ │ │ │ │ │ " [0.84210526, 0.71929825, 0.77192982],\n", │ │ │ │ │ │ " [0.24193548, 0.12903226, 0.16129032],\n", │ │ │ │ │ │ " [0. , 0. , 0. ],\n", │ │ │ │ │ │ @@ -1250,18 +1250,18 @@ │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:48:13.131247Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:48:12.924985Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:48.948640Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:48.948400Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:49.109424Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:49.108844Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:36.938420Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:36.938014Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:37.283832Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:37.282391Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1298,18 +1298,18 @@ │ │ │ │ │ │ "execution_count": 8, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:48:08.498259Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:48:08.210890Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:49.111480Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:49.111237Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:49.340371Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:49.339751Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:37.288568Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:37.287368Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:37.748547Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:37.747444Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1363,18 +1363,18 @@ │ │ │ │ │ │ "execution_count": 9, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:49:34.855086Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:49:34.406439Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:49.342846Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:49.342594Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:49.603295Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:49.602677Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:37.752277Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:37.751914Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:38.320224Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:38.318930Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1422,18 +1422,18 @@ │ │ │ │ │ │ "execution_count": 10, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:50:09.144586Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:50:08.734682Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:49.605680Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:49.605425Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:49.921555Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:49.920929Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:38.328872Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:38.328349Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:39.041596Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:39.040454Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ │ │ │ @@ -1491,18 +1491,18 @@ │ │ │ │ │ │ "execution_count": 11, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:51:40.279299Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:51:40.220342Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:49.923687Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:49.923438Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:49.967580Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:49.967020Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:39.048202Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:39.047822Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:39.143772Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:39.142438Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/html": [ │ │ │ │ │ │ "
    \n", │ │ │ │ │ │ @@ -1879,18 +1879,18 @@ │ │ │ │ │ │ "Dimensions: (time: 731, location: 3)\n", │ │ │ │ │ │ "Coordinates:\n", │ │ │ │ │ │ " * time (time) datetime64[ns] 6kB 2000-01-01 2000-01-02 ... 2001-12-31\n", │ │ │ │ │ │ " * location (location) <U2 24B 'IA' 'IN' 'IL'\n", │ │ │ │ │ │ " month (time) int64 6kB 1 1 1 1 1 1 1 1 1 ... 12 12 12 12 12 12 12 12\n", │ │ │ │ │ │ "Data variables:\n", │ │ │ │ │ │ " some_missing (time, location) float64 18kB nan nan nan ... -1.346 -4.544\n", │ │ │ │ │ │ - " filled (time, location) float64 18kB -5.163 -4.216 ... -1.346 -4.544
  • " │ │ │ │ │ │ ], │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ " Size: 47kB\n", │ │ │ │ │ │ "Dimensions: (time: 731, location: 3)\n", │ │ │ │ │ │ "Coordinates:\n", │ │ │ │ │ │ " * time (time) datetime64[ns] 6kB 2000-01-01 2000-01-02 ... 2001-12-31\n", │ │ │ │ │ │ " * location (location) \n", │ │ │ │ │ │ @@ -2073,18 +2073,18 @@ │ │ │ │ │ │ "execution_count": 13, │ │ │ │ │ │ "metadata": { │ │ │ │ │ │ "ExecuteTime": { │ │ │ │ │ │ "end_time": "2020-01-27T15:52:14.867866Z", │ │ │ │ │ │ "start_time": "2020-01-27T15:52:14.449684Z" │ │ │ │ │ │ }, │ │ │ │ │ │ "execution": { │ │ │ │ │ │ - "iopub.execute_input": "2026-04-29T06:35:49.980417Z", │ │ │ │ │ │ - "iopub.status.busy": "2026-04-29T06:35:49.980182Z", │ │ │ │ │ │ - "iopub.status.idle": "2026-04-29T06:35:50.278390Z", │ │ │ │ │ │ - "shell.execute_reply": "2026-04-29T06:35:50.277781Z" │ │ │ │ │ │ + "iopub.execute_input": "2025-03-27T00:39:39.169894Z", │ │ │ │ │ │ + "iopub.status.busy": "2025-03-27T00:39:39.169451Z", │ │ │ │ │ │ + "iopub.status.idle": "2025-03-27T00:39:39.760402Z", │ │ │ │ │ │ + "shell.execute_reply": "2025-03-27T00:39:39.759257Z" │ │ │ │ │ │ } │ │ │ │ │ │ }, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "" │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/getting-started-guide/quick-overview.html │ │ │ │ @@ -324,15 +324,15 @@ │ │ │ │
    │ │ │ │ │ │ │ │
    │ │ │ │
    │ │ │ │

    Plotting

    │ │ │ │

    Visualizing your datasets is quick and convenient:

    │ │ │ │
    In [37]: data.plot()
    │ │ │ │ -Out[37]: <matplotlib.collections.QuadMesh at 0x7f6006c6f0e0>
    │ │ │ │ +Out[37]: <matplotlib.collections.QuadMesh at 0x7f34c1b5acf0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/plotting_quick_overview.png │ │ │ │

    Note the automatic labeling with names and units. Our effort in adding metadata attributes has paid off! Many aspects of these figures are customizable: see Plotting.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    pandas

    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -253,15 +253,15 @@ │ │ │ │ │ [0.37342613, 1.49497537, 1.33584385]]) │ │ │ │ │ Coordinates: │ │ │ │ │ * x (x) int64 16B 10 20 │ │ │ │ │ Dimensions without coordinates: y │ │ │ │ │ ********** PPlloottttiinngg_?¶ ********** │ │ │ │ │ Visualizing your datasets is quick and convenient: │ │ │ │ │ In [37]: data.plot() │ │ │ │ │ -Out[37]: │ │ │ │ │ +Out[37]: │ │ │ │ │ [../_images/plotting_quick_overview.png] │ │ │ │ │ Note the automatic labeling with names and units. Our effort in adding metadata │ │ │ │ │ attributes has paid off! Many aspects of these figures are customizable: see │ │ │ │ │ _P_l_o_t_t_i_n_g. │ │ │ │ │ ********** ppaannddaass_?¶ ********** │ │ │ │ │ Xarray objects can be easily converted to and from pandas objects using the │ │ │ │ │ to_series(), to_dataframe() and _t_o___x_a_r_r_a_y_(_) methods: │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/internals/internal-design.html │ │ │ │ @@ -225,15 +225,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f5fd6662490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -259,15 +259,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd6662490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[1], line 1 │ │ │ │ ----> 1 da = xr.tutorial.open_dataset("air_temperature")["air"] │ │ │ │ │ │ │ │ @@ -345,15 +345,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd6662490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ In [2]: var = da.variable │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ Cell In[2], line 1 │ │ │ │ ----> 1 var = da.variable │ │ │ │ │ │ │ │ @@ -462,15 +462,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f5fd5b4d450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -496,15 +496,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd5b4d450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[7], line 1 │ │ │ │ ----> 1 da = xr.tutorial.open_dataset("air_temperature")["air"] │ │ │ │ │ │ │ │ @@ -582,15 +582,15 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd5b4d450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ In [8]: var = da.variable │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ Cell In[8], line 1 │ │ │ │ ----> 1 var = da.variable │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -185,15 +185,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -229,15 +229,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[1], line 1 │ │ │ │ │ ----> 1 da = xr.tutorial.open_dataset("air_temperature")["air"] │ │ │ │ │ @@ -333,15 +333,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34bafb6490>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ In [2]: var = da.variable │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ │ Cell In[2], line 1 │ │ │ │ │ ----> 1 var = da.variable │ │ │ │ │ @@ -460,15 +460,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -504,15 +504,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[7], line 1 │ │ │ │ │ ----> 1 da = xr.tutorial.open_dataset("air_temperature")["air"] │ │ │ │ │ @@ -608,15 +608,15 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34ba2a1450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ In [8]: var = da.variable │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ AttributeError Traceback (most recent call last) │ │ │ │ │ Cell In[8], line 1 │ │ │ │ │ ----> 1 var = da.variable │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/internals/zarr-encoding-spec.html │ │ │ │ @@ -167,15 +167,15 @@ │ │ │ │ 705 server_hostname: str = self.host │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in HTTPConnection._new_conn(self) │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ -NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f5fd4e51090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ +NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution) │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ 666 try: │ │ │ │ --> 667 resp = conn.urlopen( │ │ │ │ @@ -201,15 +201,15 @@ │ │ │ │ 844 retries.sleep() │ │ │ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/util/retry.py:519, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) │ │ │ │ 518 reason = error or ResponseError(cause) │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ -MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd4e51090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ Cell In[4], line 1 │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("rasm") │ │ │ │ │ │ │ │ @@ -298,23 +298,23 @@ │ │ │ │ 696 if isinstance(e.reason, _SSLError): │ │ │ │ 697 # This branch is for urllib3 v1.22 and later. │ │ │ │ 698 raise SSLError(e, request=request) │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd4e51090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)")) │ │ │ │ │ │ │ │ In [5]: ds.to_zarr("rasm.zarr", mode="w") │ │ │ │ -Out[5]: <xarray.backends.zarr.ZarrStore at 0x7f5fd4e057e0> │ │ │ │ +Out[5]: <xarray.backends.zarr.ZarrStore at 0x7f34b96f5630> │ │ │ │ │ │ │ │ In [6]: zgroup = zarr.open("rasm.zarr") │ │ │ │ │ │ │ │ In [7]: print(os.listdir("rasm.zarr")) │ │ │ │ -['time', 'zarr.json'] │ │ │ │ +['zarr.json', 'time'] │ │ │ │ │ │ │ │ In [8]: print(zgroup.tree()) │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ ModuleNotFoundError Traceback (most recent call last) │ │ │ │ File /usr/lib/python3/dist-packages/zarr/core/_tree.py:9 │ │ │ │ 8 try: │ │ │ │ ----> 9 import rich │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -124,15 +124,15 @@ │ │ │ │ │ File /usr/lib/python3/dist-packages/urllib3/connection.py:205, in │ │ │ │ │ HTTPConnection._new_conn(self) │ │ │ │ │ 204 except socket.gaierror as e: │ │ │ │ │ --> 205 raise NameResolutionError(self.host, self, e) from e │ │ │ │ │ 206 except SocketTimeout as e: │ │ │ │ │ │ │ │ │ │ NameResolutionError: : Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution) │ │ │ │ │ │ │ │ │ │ The above exception was the direct cause of the following exception: │ │ │ │ │ │ │ │ │ │ MaxRetryError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/requests/adapters.py:667, in │ │ │ │ │ HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) │ │ │ │ │ @@ -168,15 +168,15 @@ │ │ │ │ │ --> 519 raise MaxRetryError(_pool, url, reason) from reason # type: ignore │ │ │ │ │ [arg-type] │ │ │ │ │ 521 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) │ │ │ │ │ │ │ │ │ │ MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ During handling of the above exception, another exception occurred: │ │ │ │ │ │ │ │ │ │ ConnectionError Traceback (most recent call last) │ │ │ │ │ Cell In[4], line 1 │ │ │ │ │ ----> 1 ds = xr.tutorial.load_dataset("rasm") │ │ │ │ │ @@ -285,24 +285,24 @@ │ │ │ │ │ --> 700 raise ConnectionError(e, request=request) │ │ │ │ │ 702 except ClosedPoolError as e: │ │ │ │ │ 703 raise ConnectionError(e, request=request) │ │ │ │ │ │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34b973d090>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ In [5]: ds.to_zarr("rasm.zarr", mode="w") │ │ │ │ │ -Out[5]: │ │ │ │ │ +Out[5]: │ │ │ │ │ │ │ │ │ │ In [6]: zgroup = zarr.open("rasm.zarr") │ │ │ │ │ │ │ │ │ │ In [7]: print(os.listdir("rasm.zarr")) │ │ │ │ │ -['time', 'zarr.json'] │ │ │ │ │ +['zarr.json', 'time'] │ │ │ │ │ │ │ │ │ │ In [8]: print(zgroup.tree()) │ │ │ │ │ --------------------------------------------------------------------------- │ │ │ │ │ ModuleNotFoundError Traceback (most recent call last) │ │ │ │ │ File /usr/lib/python3/dist-packages/zarr/core/_tree.py:9 │ │ │ │ │ 8 try: │ │ │ │ │ ----> 9 import rich │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/searchindex.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -2410,15 +2410,15 @@ │ │ │ │ │ "3": "py:property", │ │ │ │ │ "4": "py:attribute", │ │ │ │ │ "5": "py:function" │ │ │ │ │ }, │ │ │ │ │ "terms": { │ │ │ │ │ "": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "0": [3, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ - "00": [14, 32, 37, 38, 39, 46, 48, 53, 54, 55], │ │ │ │ │ + "00": [14, 32, 37, 38, 39, 46, 48, 52, 53, 54, 55], │ │ │ │ │ "000": [32, 52], │ │ │ │ │ "0000": 32, │ │ │ │ │ "000000": [14, 16, 32], │ │ │ │ │ "000000000": [14, 38, 39, 53], │ │ │ │ │ "000001": 32, │ │ │ │ │ "000001901": 32, │ │ │ │ │ "0001": [32, 54, 55], │ │ │ │ │ @@ -2426,41 +2426,31 @@ │ │ │ │ │ "00010201": 54, │ │ │ │ │ "00010301": 54, │ │ │ │ │ "0002": [32, 54], │ │ │ │ │ "00021001": 54, │ │ │ │ │ "00021101": 54, │ │ │ │ │ "00021201": 54, │ │ │ │ │ "000e": [49, 52], │ │ │ │ │ - "000j": 52, │ │ │ │ │ - "001": 32, │ │ │ │ │ + "001": [32, 52], │ │ │ │ │ "001901901": 32, │ │ │ │ │ "001e": 38, │ │ │ │ │ - "001j": 52, │ │ │ │ │ - "003": 37, │ │ │ │ │ "003000": 32, │ │ │ │ │ - "004": 37, │ │ │ │ │ - "005": 52, │ │ │ │ │ "005036": 41, │ │ │ │ │ "005e": 38, │ │ │ │ │ - "005j": 52, │ │ │ │ │ "00688889": 37, │ │ │ │ │ "006e": 38, │ │ │ │ │ - "007": 37, │ │ │ │ │ - "007e": 52, │ │ │ │ │ - "008": 37, │ │ │ │ │ - "008j": 52, │ │ │ │ │ + "007j": 52, │ │ │ │ │ "00914929": 37, │ │ │ │ │ "00941742": 37, │ │ │ │ │ "00968205": 37, │ │ │ │ │ "00973567": 37, │ │ │ │ │ - "01": [14, 16, 20, 32, 38, 39, 42, 44, 45, 46, 48, 49, 53, 54], │ │ │ │ │ + "01": [14, 16, 20, 32, 38, 39, 42, 44, 45, 46, 48, 49, 52, 53, 54], │ │ │ │ │ "010569": 14, │ │ │ │ │ "01082401": 37, │ │ │ │ │ "01183847": 37, │ │ │ │ │ - "015": 52, │ │ │ │ │ "016": 52, │ │ │ │ │ "01612903": 14, │ │ │ │ │ "01636376": 37, │ │ │ │ │ "01652688": 37, │ │ │ │ │ "01652764": 37, │ │ │ │ │ "0165891": 37, │ │ │ │ │ "01670071": 37, │ │ │ │ │ @@ -2509,39 +2499,37 @@ │ │ │ │ │ "037": 14, │ │ │ │ │ "037369": 14, │ │ │ │ │ "03736932": 14, │ │ │ │ │ "0379266750948": 46, │ │ │ │ │ "037e": 38, │ │ │ │ │ "038": [44, 52], │ │ │ │ │ "03835": 42, │ │ │ │ │ - "038j": 52, │ │ │ │ │ "03957499": 19, │ │ │ │ │ "03t00": [14, 32, 38, 39], │ │ │ │ │ "04": [14, 19, 32, 37, 38, 39, 42, 44, 48, 53], │ │ │ │ │ "040347": 14, │ │ │ │ │ "04096206": 37, │ │ │ │ │ "04097352": 37, │ │ │ │ │ "040e": 49, │ │ │ │ │ "0417827": 46, │ │ │ │ │ - "041j": 52, │ │ │ │ │ "042e": 38, │ │ │ │ │ "044": [36, 48], │ │ │ │ │ "04423597": 19, │ │ │ │ │ "044236": 48, │ │ │ │ │ - "045": 52, │ │ │ │ │ "045588": 14, │ │ │ │ │ "04569531": 37, │ │ │ │ │ "04569651": 14, │ │ │ │ │ "04703446": 37, │ │ │ │ │ "047e": [38, 49], │ │ │ │ │ + "048": 52, │ │ │ │ │ "04835611": 37, │ │ │ │ │ "04862391": 37, │ │ │ │ │ "048e": 38, │ │ │ │ │ "04t00": [38, 39], │ │ │ │ │ - "05": [14, 32, 37, 39, 46, 49, 53, 54], │ │ │ │ │ + "05": [14, 32, 37, 39, 46, 49, 52, 53, 54], │ │ │ │ │ "05405954": 37, │ │ │ │ │ "05556": 45, │ │ │ │ │ "056": 45, │ │ │ │ │ "057e": 38, │ │ │ │ │ "058e": 38, │ │ │ │ │ "05912615": 37, │ │ │ │ │ "05t00": 38, │ │ │ │ │ @@ -2549,25 +2537,26 @@ │ │ │ │ │ "060403": 14, │ │ │ │ │ "061": 44, │ │ │ │ │ "06141": 42, │ │ │ │ │ "06187252": 14, │ │ │ │ │ "062": 42, │ │ │ │ │ "063": [14, 39], │ │ │ │ │ "06327582": 14, │ │ │ │ │ + "063e": 52, │ │ │ │ │ "06683875": 37, │ │ │ │ │ "06683951": 37, │ │ │ │ │ "06683976": 37, │ │ │ │ │ "06689": 37, │ │ │ │ │ "066e": [38, 49], │ │ │ │ │ "06732": 42, │ │ │ │ │ "067e": 49, │ │ │ │ │ "069": 45, │ │ │ │ │ "06957": 41, │ │ │ │ │ "06t00": 38, │ │ │ │ │ - "07": [14, 32, 39, 52, 53, 54], │ │ │ │ │ + "07": [14, 32, 39, 53, 54], │ │ │ │ │ "070e": 38, │ │ │ │ │ "07180381": 19, │ │ │ │ │ "071804": 48, │ │ │ │ │ "072": 48, │ │ │ │ │ "072e": 49, │ │ │ │ │ "074e": 38, │ │ │ │ │ "078": 42, │ │ │ │ │ @@ -2602,109 +2591,109 @@ │ │ │ │ │ "096": 44, │ │ │ │ │ "096e": 49, │ │ │ │ │ "0970": 32, │ │ │ │ │ "09705329": 37, │ │ │ │ │ "097e": 38, │ │ │ │ │ "099": 42, │ │ │ │ │ "09t00": 38, │ │ │ │ │ - "0a05a95bdb89": 46, │ │ │ │ │ "0alpha10": 55, │ │ │ │ │ "0d": 55, │ │ │ │ │ "0dev": 55, │ │ │ │ │ "0th": [38, 44], │ │ │ │ │ "0x0l": 55, │ │ │ │ │ - "0x7f02352afe00": 6, │ │ │ │ │ - "0x7f0235513ba0": 6, │ │ │ │ │ - "0x7f1390514ec0": 13, │ │ │ │ │ - "0x7f1dbf9ada90": 11, │ │ │ │ │ - "0x7f374d048590": 7, │ │ │ │ │ - "0x7f42be162ba0": 14, │ │ │ │ │ - "0x7f5fd2b2c690": 44, │ │ │ │ │ - "0x7f5fd2b2d950": 44, │ │ │ │ │ - "0x7f5fd2b2da90": 42, │ │ │ │ │ - "0x7f5fd2b2e350": 44, │ │ │ │ │ - "0x7f5fd2b2ead0": 49, │ │ │ │ │ - "0x7f5fd2c10590": 49, │ │ │ │ │ - "0x7f5fd2c138c0": 49, │ │ │ │ │ - "0x7f5fd3018b80": 46, │ │ │ │ │ - "0x7f5fd3019ab0": 46, │ │ │ │ │ - "0x7f5fd3019ea0": 46, │ │ │ │ │ - "0x7f5fd301af80": 46, │ │ │ │ │ - "0x7f5fd301b0a0": 46, │ │ │ │ │ - "0x7f5fd301b490": 46, │ │ │ │ │ - "0x7f5fd3116850": 46, │ │ │ │ │ - "0x7f5fd31179d0": 46, │ │ │ │ │ - "0x7f5fd32e9010": 49, │ │ │ │ │ - "0x7f5fd332ff40": 46, │ │ │ │ │ - "0x7f5fd3fca190": 49, │ │ │ │ │ - "0x7f5fd3fd6210": 39, │ │ │ │ │ - "0x7f5fd3fd6490": 39, │ │ │ │ │ - "0x7f5fd4e057e0": 33, │ │ │ │ │ - "0x7f5fd4e51090": 33, │ │ │ │ │ - "0x7f5fd5b4d450": 30, │ │ │ │ │ - "0x7f5fd6662490": 30, │ │ │ │ │ - "0x7f5fed18fa10": 45, │ │ │ │ │ - "0x7f60069fda90": 45, │ │ │ │ │ - "0x7f60069fdbd0": 45, │ │ │ │ │ - "0x7f60069fde50": 45, │ │ │ │ │ - "0x7f60069ff9d0": 45, │ │ │ │ │ - "0x7f6006beaba0": 49, │ │ │ │ │ - "0x7f6006c6f0e0": 19, │ │ │ │ │ - "0x7f6006c99e50": 49, │ │ │ │ │ - "0x7f6006c9a490": 49, │ │ │ │ │ - "0x7f60245b4690": 49, │ │ │ │ │ - "0x7f60245b47d0": 49, │ │ │ │ │ - "0x7f60245b79d0": 49, │ │ │ │ │ - "0x7f6024636350": 49, │ │ │ │ │ - "0x7f6024653890": 49, │ │ │ │ │ - "0x7f6024785450": 50, │ │ │ │ │ - "0x7f6024786990": 49, │ │ │ │ │ - "0x7f6024786d50": 49, │ │ │ │ │ - "0x7f6024786e90": 49, │ │ │ │ │ - "0x7f6024786fd0": 49, │ │ │ │ │ - "0x7f60248e1950": 49, │ │ │ │ │ - "0x7f60248e1a90": 49, │ │ │ │ │ - "0x7f60248e1bd0": 49, │ │ │ │ │ - "0x7f60248e1d10": 49, │ │ │ │ │ - "0x7f60248e3ed0": 49, │ │ │ │ │ - "0x7f6024e5a710": 49, │ │ │ │ │ - "0x7f6025390a50": 49, │ │ │ │ │ - "0x7f6025390b90": 49, │ │ │ │ │ - "0x7f6025390cd0": 49, │ │ │ │ │ - "0x7f6025390e10": 49, │ │ │ │ │ - "0x7f6025391090": 49, │ │ │ │ │ - "0x7f602541d1d0": 49, │ │ │ │ │ - "0x7f6025496d50": 49, │ │ │ │ │ - "0x7f602565e5d0": 49, │ │ │ │ │ - "0x7f6025680b90": 49, │ │ │ │ │ - "0x7f60259251d0": 49, │ │ │ │ │ - "0x7f6025c134d0": 49, │ │ │ │ │ - "0x7f6025ce4910": 49, │ │ │ │ │ - "0x7f6025ce4f50": 49, │ │ │ │ │ - "0x7f6025e0bc50": 49, │ │ │ │ │ - "0x7f6025e1c2d0": 55, │ │ │ │ │ - "0x7f6025e1ee90": 49, │ │ │ │ │ - "0x7f602628bb60": 49, │ │ │ │ │ - "0x7f60265c3110": 49, │ │ │ │ │ - "0x7f6f9240cec0": 12, │ │ │ │ │ - "0x7fc1bae31010": 9, │ │ │ │ │ - "0x7fc6193e2510": 10, │ │ │ │ │ - "0x7fd83135e510": 8, │ │ │ │ │ + "0x7f34ab3a0b80": 46, │ │ │ │ │ + "0x7f34ab3a1ab0": 46, │ │ │ │ │ + "0x7f34ab3a1f30": 46, │ │ │ │ │ + "0x7f34ab3a30a0": 46, │ │ │ │ │ + "0x7f34ab3a31c0": 46, │ │ │ │ │ + "0x7f34ab3a3490": 46, │ │ │ │ │ + "0x7f34ab49a850": 46, │ │ │ │ │ + "0x7f34ab49b9d0": 46, │ │ │ │ │ + "0x7f34ab66b4d0": 55, │ │ │ │ │ + "0x7f34ab6aff40": 46, │ │ │ │ │ + "0x7f34ab85d010": 49, │ │ │ │ │ + "0x7f34b8314550": 44, │ │ │ │ │ + "0x7f34b8315950": 44, │ │ │ │ │ + "0x7f34b8315a90": 42, │ │ │ │ │ + "0x7f34b8316350": 44, │ │ │ │ │ + "0x7f34b83f0590": 49, │ │ │ │ │ + "0x7f34b83f06e0": 49, │ │ │ │ │ + "0x7f34b83f38c0": 49, │ │ │ │ │ + "0x7f34b88a2190": 49, │ │ │ │ │ + "0x7f34b88ca210": 39, │ │ │ │ │ + "0x7f34b88ca490": 39, │ │ │ │ │ + "0x7f34b96f5630": 33, │ │ │ │ │ + "0x7f34b973d090": 33, │ │ │ │ │ + "0x7f34ba2a1450": 30, │ │ │ │ │ + "0x7f34bafb6490": 30, │ │ │ │ │ + "0x7f34c19b5810": 49, │ │ │ │ │ + "0x7f34c1b5acf0": 19, │ │ │ │ │ + "0x7f34c1c14050": 45, │ │ │ │ │ + "0x7f34c1c22350": 45, │ │ │ │ │ + "0x7f34c1c23610": 49, │ │ │ │ │ + "0x7f34c1c239d0": 45, │ │ │ │ │ + "0x7f34c1c23b10": 49, │ │ │ │ │ + "0x7f34e3691450": 45, │ │ │ │ │ + "0x7f34e36916d0": 45, │ │ │ │ │ + "0x7f34f613a0d0": 49, │ │ │ │ │ + "0x7f34f6270550": 49, │ │ │ │ │ + "0x7f34f6270690": 49, │ │ │ │ │ + "0x7f34f62707d0": 49, │ │ │ │ │ + "0x7f34f6271310": 49, │ │ │ │ │ + "0x7f34f6273250": 49, │ │ │ │ │ + "0x7f34f6273390": 49, │ │ │ │ │ + "0x7f34f62739d0": 49, │ │ │ │ │ + "0x7f34f6273b10": 49, │ │ │ │ │ + "0x7f34f6273c50": 49, │ │ │ │ │ + "0x7f34f62a6490": 49, │ │ │ │ │ + "0x7f34f62a65d0": 49, │ │ │ │ │ + "0x7f34f62a6710": 49, │ │ │ │ │ + "0x7f34f631d810": 49, │ │ │ │ │ + "0x7f34f6435f90": 49, │ │ │ │ │ + "0x7f34f6436850": 49, │ │ │ │ │ + "0x7f34f6436990": 49, │ │ │ │ │ + "0x7f34f6436ad0": 49, │ │ │ │ │ + "0x7f34f6514550": 49, │ │ │ │ │ + "0x7f34f65d2350": 49, │ │ │ │ │ + "0x7f34f66b9d10": 49, │ │ │ │ │ + "0x7f34f6f5f9d0": 49, │ │ │ │ │ + "0x7f34f6f84b90": 49, │ │ │ │ │ + "0x7f34f6fa5450": 50, │ │ │ │ │ + "0x7f34f714a5d0": 49, │ │ │ │ │ + "0x7f34f717a0d0": 49, │ │ │ │ │ + "0x7f34f78e0410": 49, │ │ │ │ │ + "0x7f34f79d8910": 49, │ │ │ │ │ + "0x7f34f79d8f50": 49, │ │ │ │ │ + "0x7f34f7af7c50": 49, │ │ │ │ │ + "0x7f34f7b0ae90": 49, │ │ │ │ │ + "0x7f34f8113110": 49, │ │ │ │ │ + "0x7f34f81f3b60": 49, │ │ │ │ │ + "0x7f4118b7c590": 7, │ │ │ │ │ + "0x7f490de7aba0": 14, │ │ │ │ │ + "0x7f4e05348ec0": 12, │ │ │ │ │ + "0x7f6156893e00": 6, │ │ │ │ │ + "0x7f6156b03ba0": 6, │ │ │ │ │ + "0x7f703e4d2510": 8, │ │ │ │ │ + "0x7f86500b1010": 9, │ │ │ │ │ + "0x7fa07e419a90": 11, │ │ │ │ │ + "0x7fab2023a510": 10, │ │ │ │ │ + "0x7fd57e2dcec0": 13, │ │ │ │ │ "1": [3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "10": [3, 6, 7, 8, 12, 13, 14, 16, 18, 19, 24, 25, 26, 27, 28, 30, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "100": [3, 7, 8, 27, 28, 32, 36, 37, 38, 39, 42, 44, 45, 46, 49, 50, 51, 55], │ │ │ │ │ "1000": [27, 32, 38, 55], │ │ │ │ │ "10000": [32, 37], │ │ │ │ │ "100000": 38, │ │ │ │ │ "1000x1000": [6, 38], │ │ │ │ │ "1002": 6, │ │ │ │ │ "1003": [6, 37], │ │ │ │ │ "1004": 6, │ │ │ │ │ "1005": 6, │ │ │ │ │ "100b": 48, │ │ │ │ │ + "100e": 52, │ │ │ │ │ "101": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "1016": 30, │ │ │ │ │ "1017": 30, │ │ │ │ │ "1018": 30, │ │ │ │ │ "101985": 46, │ │ │ │ │ "101e": 38, │ │ │ │ │ "102": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ @@ -2747,18 +2736,17 @@ │ │ │ │ │ "10t23": 53, │ │ │ │ │ "10th": [51, 55], │ │ │ │ │ "10x180x180": 38, │ │ │ │ │ "11": [3, 7, 8, 14, 19, 27, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "110": [6, 32, 37, 39, 44, 49], │ │ │ │ │ "111": [6, 32, 37, 39, 44, 49], │ │ │ │ │ "11111111": 37, │ │ │ │ │ - "112": [6, 32, 37, 39, 44, 49], │ │ │ │ │ + "112": [6, 32, 37, 39, 44, 49, 52], │ │ │ │ │ "1126": 42, │ │ │ │ │ "113": [6, 32, 37, 39, 44, 49], │ │ │ │ │ - "113e": 52, │ │ │ │ │ "114": [6, 32, 33, 37, 39, 44, 49], │ │ │ │ │ "115": [6, 33, 37, 39, 44, 49], │ │ │ │ │ "11567869": 14, │ │ │ │ │ "116": [33, 37, 39, 44, 49], │ │ │ │ │ "116e": 38, │ │ │ │ │ "117": [33, 37, 39, 44, 49, 53], │ │ │ │ │ "118": [33, 37, 39, 44, 49, 53], │ │ │ │ │ @@ -2778,26 +2766,25 @@ │ │ │ │ │ "123": [14, 19, 37, 39, 44, 48, 49, 50, 53, 55], │ │ │ │ │ "1231": 41, │ │ │ │ │ "12310214428849964": 55, │ │ │ │ │ "1234": 3, │ │ │ │ │ "124": [37, 44, 46, 49, 53], │ │ │ │ │ "12428": 54, │ │ │ │ │ "125": [37, 44, 46, 49], │ │ │ │ │ - "125e": 37, │ │ │ │ │ "126": [37, 44, 49, 55], │ │ │ │ │ "12696983303810094": 55, │ │ │ │ │ "127": [37, 39, 41, 44, 49, 55], │ │ │ │ │ "128": [37, 44, 49, 55], │ │ │ │ │ - "128b": [19, 36, 41, 44], │ │ │ │ │ + "128b": [19, 36, 41, 44, 52], │ │ │ │ │ "129": [6, 37, 44, 49, 55], │ │ │ │ │ "12903226": 14, │ │ │ │ │ "1294": 44, │ │ │ │ │ "12944067971751294": 55, │ │ │ │ │ "12arrai": 14, │ │ │ │ │ - "12b": [19, 36, 44, 48, 50, 52, 55], │ │ │ │ │ + "12b": [19, 36, 44, 48, 50, 55], │ │ │ │ │ "12kb": 53, │ │ │ │ │ "12locat": 14, │ │ │ │ │ "12t00": 38, │ │ │ │ │ "12xarrai": 14, │ │ │ │ │ "13": [6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 30, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "130": [6, 37, 44, 49], │ │ │ │ │ "131": [6, 37, 44, 49], │ │ │ │ │ @@ -2825,35 +2812,35 @@ │ │ │ │ │ "1367": 6, │ │ │ │ │ "1368": 6, │ │ │ │ │ "136b": 44, │ │ │ │ │ "137": [6, 37, 49], │ │ │ │ │ "1375315200": 46, │ │ │ │ │ "1375535565632705": 55, │ │ │ │ │ "137e": 38, │ │ │ │ │ - "138": [37, 49, 55], │ │ │ │ │ + "138": [37, 49, 52, 55], │ │ │ │ │ "1383": 6, │ │ │ │ │ "1384": 6, │ │ │ │ │ "1388": 46, │ │ │ │ │ "139": [37, 44, 49], │ │ │ │ │ "13971902": 14, │ │ │ │ │ "13t00": 38, │ │ │ │ │ "14": [8, 11, 12, 13, 19, 32, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ - "140": [37, 49], │ │ │ │ │ + "140": [37, 49, 52], │ │ │ │ │ "1402938": 19, │ │ │ │ │ "1405": 46, │ │ │ │ │ "140kb": 53, │ │ │ │ │ "141": [37, 45, 49], │ │ │ │ │ "141e": [38, 49], │ │ │ │ │ "142": [19, 37, 49], │ │ │ │ │ "1422": 46, │ │ │ │ │ "143": [37, 49], │ │ │ │ │ "143e": 38, │ │ │ │ │ "144": [37, 49], │ │ │ │ │ "1443657600": 46, │ │ │ │ │ - "144b": [19, 39, 41, 44], │ │ │ │ │ + "144b": [19, 39, 41, 44, 52], │ │ │ │ │ "145": [37, 49], │ │ │ │ │ "145224193": 32, │ │ │ │ │ "145e": 38, │ │ │ │ │ "146": [37, 49], │ │ │ │ │ "1460": 53, │ │ │ │ │ "14641918": 14, │ │ │ │ │ "14672529": 37, │ │ │ │ │ @@ -2870,15 +2857,15 @@ │ │ │ │ │ "14985403": 37, │ │ │ │ │ "14990579": 37, │ │ │ │ │ "14kb": 37, │ │ │ │ │ "14t00": 38, │ │ │ │ │ "15": [6, 7, 8, 9, 13, 14, 19, 32, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "150": [37, 49], │ │ │ │ │ "1505": 37, │ │ │ │ │ - "150e": 49, │ │ │ │ │ + "150e": [49, 52], │ │ │ │ │ "151": 49, │ │ │ │ │ "151542": 32, │ │ │ │ │ "152": [39, 49], │ │ │ │ │ "152b": [39, 51], │ │ │ │ │ "153": 49, │ │ │ │ │ "1531": 33, │ │ │ │ │ "1532": 33, │ │ │ │ │ @@ -2888,14 +2875,15 @@ │ │ │ │ │ "1548": 33, │ │ │ │ │ "1549": 33, │ │ │ │ │ "154e": 38, │ │ │ │ │ "155": 42, │ │ │ │ │ "1550": 33, │ │ │ │ │ "1552": 33, │ │ │ │ │ "1553": 33, │ │ │ │ │ + "157": 52, │ │ │ │ │ "158": [42, 45], │ │ │ │ │ "1582": [32, 53, 54], │ │ │ │ │ "158e": 38, │ │ │ │ │ "15b": 37, │ │ │ │ │ "15t00": 38, │ │ │ │ │ "15t11": 32, │ │ │ │ │ "15th": 51, │ │ │ │ │ @@ -2913,17 +2901,17 @@ │ │ │ │ │ "166": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 42], │ │ │ │ │ "1667": 45, │ │ │ │ │ "167": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 39], │ │ │ │ │ "1677": 32, │ │ │ │ │ "1678": [18, 53], │ │ │ │ │ "168": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "168b": [36, 37], │ │ │ │ │ - "169": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 42], │ │ │ │ │ + "169": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 42, 52], │ │ │ │ │ "16959064": 37, │ │ │ │ │ - "16b": [19, 36, 37, 39, 41, 44, 45, 46, 48, 50, 51, 54, 55], │ │ │ │ │ + "16b": [19, 36, 37, 39, 41, 44, 45, 46, 48, 50, 51, 52, 54, 55], │ │ │ │ │ "16t00": 38, │ │ │ │ │ "17": [8, 19, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "170": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "1703814": 46, │ │ │ │ │ "171": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 44], │ │ │ │ │ "171e": [38, 49], │ │ │ │ │ "172": 6, │ │ │ │ │ @@ -2934,17 +2922,16 @@ │ │ │ │ │ "17321465": [19, 36], │ │ │ │ │ "173215": [19, 48], │ │ │ │ │ "173e": 38, │ │ │ │ │ "174": [38, 39], │ │ │ │ │ "175": 38, │ │ │ │ │ "17522856": 32, │ │ │ │ │ "17540423": 32, │ │ │ │ │ - "175e": 52, │ │ │ │ │ "176": 38, │ │ │ │ │ - "177": [38, 52], │ │ │ │ │ + "177": 38, │ │ │ │ │ "1779": 37, │ │ │ │ │ "177e": 38, │ │ │ │ │ "178": [6, 8, 9, 10, 13, 33, 38], │ │ │ │ │ "179": [6, 8, 9, 10, 13, 33, 38, 42], │ │ │ │ │ "17t00": 38, │ │ │ │ │ "18": [3, 8, 18, 19, 27, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "180": [6, 8, 9, 10, 13, 33, 38, 45], │ │ │ │ │ @@ -2974,27 +2961,29 @@ │ │ │ │ │ "1891": 6, │ │ │ │ │ "18kb": [14, 53], │ │ │ │ │ "18t00": 38, │ │ │ │ │ "19": [8, 14, 19, 32, 33, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "190": 6, │ │ │ │ │ "1900": 46, │ │ │ │ │ "1901901901901": 32, │ │ │ │ │ + "1903": 52, │ │ │ │ │ "191": [41, 42], │ │ │ │ │ "19101252": 19, │ │ │ │ │ "191e": 49, │ │ │ │ │ "1926": 41, │ │ │ │ │ - "192b": [37, 39, 54], │ │ │ │ │ - "192e": 38, │ │ │ │ │ + "192b": [37, 39, 52, 54], │ │ │ │ │ + "192e": [38, 52], │ │ │ │ │ "193000": 32, │ │ │ │ │ "1969": 32, │ │ │ │ │ "197": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "1970": [27, 32, 55], │ │ │ │ │ "1971": 32, │ │ │ │ │ "1972": 32, │ │ │ │ │ "198": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ + "19885": 52, │ │ │ │ │ "199": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "1991": 55, │ │ │ │ │ "1992": 32, │ │ │ │ │ "1999": [32, 37], │ │ │ │ │ "19t00": 38, │ │ │ │ │ "1b": 52, │ │ │ │ │ "1d": [8, 24, 37, 39, 45, 48, 49, 50, 51, 55], │ │ │ │ │ @@ -3037,19 +3026,19 @@ │ │ │ │ │ "209": 33, │ │ │ │ │ "20995484": 19, │ │ │ │ │ "20b": 19, │ │ │ │ │ "20t00": 38, │ │ │ │ │ "21": [8, 19, 32, 33, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54], │ │ │ │ │ "210": 33, │ │ │ │ │ "210e": 38, │ │ │ │ │ - "211": 33, │ │ │ │ │ + "211": [33, 52], │ │ │ │ │ "212": [19, 36, 48, 50], │ │ │ │ │ "212112": [19, 48], │ │ │ │ │ "21211203": [19, 36], │ │ │ │ │ - "213": [6, 8, 9, 10, 13, 33], │ │ │ │ │ + "213": [6, 8, 9, 10, 13, 33, 52], │ │ │ │ │ "214": [6, 8, 9, 10, 13, 33, 41], │ │ │ │ │ "215": [6, 8, 9, 10, 13, 33], │ │ │ │ │ "2152": 6, │ │ │ │ │ "2153": 6, │ │ │ │ │ "2154": 6, │ │ │ │ │ "2155": 6, │ │ │ │ │ "2156": 6, │ │ │ │ │ @@ -3057,21 +3046,23 @@ │ │ │ │ │ "216": [6, 8, 9, 10, 13, 14, 33], │ │ │ │ │ "21616663": 14, │ │ │ │ │ "2174": 37, │ │ │ │ │ "218": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "219": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "2193": 14, │ │ │ │ │ "21t00": 38, │ │ │ │ │ + "21t19": 52, │ │ │ │ │ "22": [6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54], │ │ │ │ │ "220": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 44], │ │ │ │ │ "22012753": 32, │ │ │ │ │ "221": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "222": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "22222222": 37, │ │ │ │ │ "224193": 32, │ │ │ │ │ + "224327": 52, │ │ │ │ │ "224e": 38, │ │ │ │ │ "22546326": 37, │ │ │ │ │ "225e": 52, │ │ │ │ │ "2262": [18, 32, 53], │ │ │ │ │ "226e": 49, │ │ │ │ │ "2281": 33, │ │ │ │ │ "2282": 33, │ │ │ │ │ @@ -3083,15 +3074,14 @@ │ │ │ │ │ "2299": 33, │ │ │ │ │ "22t00": 38, │ │ │ │ │ "23": [14, 18, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54], │ │ │ │ │ "2300": 33, │ │ │ │ │ "23207067": 37, │ │ │ │ │ "2333": 14, │ │ │ │ │ "23333333": 14, │ │ │ │ │ - "234": 52, │ │ │ │ │ "234e": 38, │ │ │ │ │ "235": 6, │ │ │ │ │ "2355": 44, │ │ │ │ │ "236": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "237": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "238": 6, │ │ │ │ │ "2380": 55, │ │ │ │ │ @@ -3117,28 +3107,28 @@ │ │ │ │ │ "245e": 49, │ │ │ │ │ "2467": 38, │ │ │ │ │ "247": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "248": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 37], │ │ │ │ │ "2483": 37, │ │ │ │ │ "248b": [19, 46], │ │ │ │ │ "248e": 38, │ │ │ │ │ + "249": 52, │ │ │ │ │ "2493": 46, │ │ │ │ │ "24b": [14, 19, 36, 37, 39, 41, 42, 44, 45, 48, 49, 50, 51, 55], │ │ │ │ │ "24h": 55, │ │ │ │ │ "24t00": 38, │ │ │ │ │ "25": [7, 8, 14, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "250": [13, 49], │ │ │ │ │ "2509": 37, │ │ │ │ │ "251": 37, │ │ │ │ │ "2515": 37, │ │ │ │ │ "25176289": 14, │ │ │ │ │ "253": 39, │ │ │ │ │ "255": [13, 44, 46], │ │ │ │ │ "2554": 41, │ │ │ │ │ - "257j": 52, │ │ │ │ │ "258": 44, │ │ │ │ │ "25828142": 37, │ │ │ │ │ "259": [42, 45], │ │ │ │ │ "25t00": 38, │ │ │ │ │ "26": [14, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 52, 53, 54], │ │ │ │ │ "260": [13, 44], │ │ │ │ │ "26047600586578334": 55, │ │ │ │ │ @@ -3194,15 +3184,15 @@ │ │ │ │ │ "286e": 37, │ │ │ │ │ "288b": [14, 37, 54], │ │ │ │ │ "289": 6, │ │ │ │ │ "2899444": 37, │ │ │ │ │ "28t00": 38, │ │ │ │ │ "29": [7, 14, 18, 19, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 52, 53, 54], │ │ │ │ │ "290": [6, 13], │ │ │ │ │ - "290308": 32, │ │ │ │ │ + "290308": [32, 52], │ │ │ │ │ "291": 6, │ │ │ │ │ "2917": 46, │ │ │ │ │ "29173175": 37, │ │ │ │ │ "292": [6, 32, 42, 55], │ │ │ │ │ "2920": 49, │ │ │ │ │ "292275055": 32, │ │ │ │ │ "292277022657": 32, │ │ │ │ │ @@ -3218,18 +3208,17 @@ │ │ │ │ │ "29645358": 37, │ │ │ │ │ "296e": 38, │ │ │ │ │ "297e": 49, │ │ │ │ │ "29844148": 37, │ │ │ │ │ "2999": 32, │ │ │ │ │ "29t00": [14, 38], │ │ │ │ │ "29t12": 37, │ │ │ │ │ - "2b": 52, │ │ │ │ │ "2d": [19, 39, 44, 48, 49, 51, 54, 55], │ │ │ │ │ "2ecc71": 49, │ │ │ │ │ - "2kb": [37, 52, 53], │ │ │ │ │ + "2kb": [37, 53], │ │ │ │ │ "2m": 6, │ │ │ │ │ "2mt": 6, │ │ │ │ │ "2nd": [44, 49], │ │ │ │ │ "2x": 55, │ │ │ │ │ "3": [3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 24, 25, 26, 27, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "30": [11, 13, 14, 18, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "300": [7, 37, 42, 45, 46], │ │ │ │ │ @@ -3243,27 +3232,26 @@ │ │ │ │ │ "306": [6, 26], │ │ │ │ │ "30682759": 37, │ │ │ │ │ "306e": 38, │ │ │ │ │ "307": [6, 26], │ │ │ │ │ "307e": 38, │ │ │ │ │ "308": [6, 26, 52], │ │ │ │ │ "30852683": 37, │ │ │ │ │ - "309": [6, 45], │ │ │ │ │ - "30b": 52, │ │ │ │ │ + "308j": 52, │ │ │ │ │ + "309": [6, 45, 52], │ │ │ │ │ "30t00": [14, 38, 53], │ │ │ │ │ "30t1": 53, │ │ │ │ │ "30t12": 53, │ │ │ │ │ "30t18": 53, │ │ │ │ │ "30t21": 53, │ │ │ │ │ "31": [14, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 52, 53, 54], │ │ │ │ │ "310": 13, │ │ │ │ │ "310409": 14, │ │ │ │ │ "31040942": 14, │ │ │ │ │ "311j": 52, │ │ │ │ │ - "313": 52, │ │ │ │ │ "315e": 38, │ │ │ │ │ "316": 45, │ │ │ │ │ "31695352": 14, │ │ │ │ │ "3179": 42, │ │ │ │ │ "319e": 38, │ │ │ │ │ "31arrai": 14, │ │ │ │ │ "31t00": [14, 32], │ │ │ │ │ @@ -3278,14 +3266,15 @@ │ │ │ │ │ "3210": 6, │ │ │ │ │ "3211": 6, │ │ │ │ │ "3213": 6, │ │ │ │ │ "3214": 6, │ │ │ │ │ "3226808": 19, │ │ │ │ │ "32269851": 14, │ │ │ │ │ "322e": 38, │ │ │ │ │ + "324": 52, │ │ │ │ │ "324j": 52, │ │ │ │ │ "3254": 6, │ │ │ │ │ "3256": 6, │ │ │ │ │ "3257": 6, │ │ │ │ │ "3258": 6, │ │ │ │ │ "3260": 6, │ │ │ │ │ "3261": [6, 41], │ │ │ │ │ @@ -3294,15 +3283,15 @@ │ │ │ │ │ "3297": 42, │ │ │ │ │ "32b": [19, 32, 36, 37, 39, 41, 44, 45, 46, 49, 50, 51, 53, 55], │ │ │ │ │ "33": [14, 19, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 52, 53, 55], │ │ │ │ │ "331e": 38, │ │ │ │ │ "333": 50, │ │ │ │ │ "33326004": 19, │ │ │ │ │ "33333333": 14, │ │ │ │ │ - "333e": [38, 52], │ │ │ │ │ + "333e": 38, │ │ │ │ │ "33419587": 37, │ │ │ │ │ "335": [41, 54], │ │ │ │ │ "3356": 42, │ │ │ │ │ "33584385": 19, │ │ │ │ │ "336": [39, 44, 55], │ │ │ │ │ "3362": 41, │ │ │ │ │ "33622174433445307": 55, │ │ │ │ │ @@ -3342,15 +3331,15 @@ │ │ │ │ │ "359": [6, 39, 53], │ │ │ │ │ "36": [3, 19, 32, 36, 37, 39, 42, 44, 45, 46, 49, 50, 52, 53, 55], │ │ │ │ │ "360": [46, 53], │ │ │ │ │ "360_dai": [46, 54, 55], │ │ │ │ │ "361": [6, 53], │ │ │ │ │ "361e": 38, │ │ │ │ │ "362": 53, │ │ │ │ │ - "362e": [37, 49], │ │ │ │ │ + "362e": 49, │ │ │ │ │ "363": [6, 53], │ │ │ │ │ "36303831": 37, │ │ │ │ │ "364": [37, 53], │ │ │ │ │ "3648": 53, │ │ │ │ │ "3649": 53, │ │ │ │ │ "365": [14, 32, 49, 53, 55], │ │ │ │ │ "3650": 53, │ │ │ │ │ @@ -3360,15 +3349,15 @@ │ │ │ │ │ "365_dai": 46, │ │ │ │ │ "366": 32, │ │ │ │ │ "3667": 45, │ │ │ │ │ "366_dai": 46, │ │ │ │ │ "3684": 41, │ │ │ │ │ "368e": 38, │ │ │ │ │ "369": 49, │ │ │ │ │ - "36b": 55, │ │ │ │ │ + "36b": [52, 55], │ │ │ │ │ "37": [19, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 52, 53, 55], │ │ │ │ │ "371": 37, │ │ │ │ │ "37271154": 14, │ │ │ │ │ "372712": 14, │ │ │ │ │ "373": [39, 41, 44, 50, 55], │ │ │ │ │ "37301222522143085": 55, │ │ │ │ │ "37342613": 19, │ │ │ │ │ @@ -3403,14 +3392,15 @@ │ │ │ │ │ "391e": 38, │ │ │ │ │ "392e": 46, │ │ │ │ │ "395": [42, 44], │ │ │ │ │ "395763": 14, │ │ │ │ │ "396": 42, │ │ │ │ │ "3963": 37, │ │ │ │ │ "3989": 37, │ │ │ │ │ + "3992": 52, │ │ │ │ │ "3b": 37, │ │ │ │ │ "3coordin": 14, │ │ │ │ │ "3d": [5, 7, 8, 48, 49, 54, 55], │ │ │ │ │ "3h": 55, │ │ │ │ │ "3kb": [37, 53], │ │ │ │ │ "3min": 54, │ │ │ │ │ "3rd": 28, │ │ │ │ │ @@ -3418,18 +3408,18 @@ │ │ │ │ │ "40": [19, 28, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 51, 55], │ │ │ │ │ "400": [6, 49, 50], │ │ │ │ │ "400e": 49, │ │ │ │ │ "401": [6, 44], │ │ │ │ │ "401501": 32, │ │ │ │ │ "401501601": 32, │ │ │ │ │ "401501601701801901": 32, │ │ │ │ │ - "401e": 52, │ │ │ │ │ "402": 6, │ │ │ │ │ "403": 6, │ │ │ │ │ "40324704": 37, │ │ │ │ │ + "403e": 52, │ │ │ │ │ "404": [6, 44], │ │ │ │ │ "405": 44, │ │ │ │ │ "406e": 49, │ │ │ │ │ "4074": 42, │ │ │ │ │ "407e": 38, │ │ │ │ │ "408": 42, │ │ │ │ │ "40824829": 37, │ │ │ │ │ @@ -3438,35 +3428,33 @@ │ │ │ │ │ "40b": [19, 36, 37, 39, 44, 45, 46, 55], │ │ │ │ │ "41": [19, 32, 36, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "410e": 49, │ │ │ │ │ "41155042": 37, │ │ │ │ │ "41156272": 37, │ │ │ │ │ "41184582": 37, │ │ │ │ │ "41198807": 37, │ │ │ │ │ - "411e": 52, │ │ │ │ │ "412": 42, │ │ │ │ │ "414": 44, │ │ │ │ │ "4152": 37, │ │ │ │ │ "415e": 38, │ │ │ │ │ "4167": 46, │ │ │ │ │ "416b": 37, │ │ │ │ │ "418e": 38, │ │ │ │ │ "419": 42, │ │ │ │ │ "41954454": 19, │ │ │ │ │ "419e": 38, │ │ │ │ │ "41kb": 14, │ │ │ │ │ - "42": [19, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 51, 55], │ │ │ │ │ + "42": [19, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 51, 52, 55], │ │ │ │ │ "423": 49, │ │ │ │ │ "424": 39, │ │ │ │ │ "42497233": 19, │ │ │ │ │ "425": [19, 42], │ │ │ │ │ "427": 45, │ │ │ │ │ "428": 49, │ │ │ │ │ "4281": 37, │ │ │ │ │ - "4294587694564654719": 52, │ │ │ │ │ "42b": 37, │ │ │ │ │ "43": [14, 19, 32, 36, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "4326": 46, │ │ │ │ │ "4333": 45, │ │ │ │ │ "439e": 38, │ │ │ │ │ "44": [19, 32, 36, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "440e": 49, │ │ │ │ │ @@ -3476,60 +3464,61 @@ │ │ │ │ │ "44785582": 14, │ │ │ │ │ "447856": 14, │ │ │ │ │ "4479968246859435": 55, │ │ │ │ │ "448": [39, 41, 44, 50, 55], │ │ │ │ │ "448b": 44, │ │ │ │ │ "448e": 49, │ │ │ │ │ "449": 37, │ │ │ │ │ - "45": [3, 9, 13, 19, 32, 37, 39, 41, 42, 44, 45, 46, 49, 50, 52, 55], │ │ │ │ │ - "450e": 52, │ │ │ │ │ + "45": [3, 9, 13, 19, 32, 37, 39, 41, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "451": [39, 44, 55], │ │ │ │ │ "45137647047539964": 55, │ │ │ │ │ "4514": 41, │ │ │ │ │ "452": 54, │ │ │ │ │ "45209466": 19, │ │ │ │ │ "4521": 38, │ │ │ │ │ "453": [41, 44], │ │ │ │ │ "453e": 49, │ │ │ │ │ "4555": 42, │ │ │ │ │ "456060": 14, │ │ │ │ │ "456b": 39, │ │ │ │ │ "457e": 53, │ │ │ │ │ "458e": 53, │ │ │ │ │ "459e": 53, │ │ │ │ │ + "45j": 52, │ │ │ │ │ "46": [19, 32, 37, 39, 41, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "46194319": 37, │ │ │ │ │ "462": 44, │ │ │ │ │ "463": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "46376911": 14, │ │ │ │ │ "464": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "46462434": 19, │ │ │ │ │ "464e": 38, │ │ │ │ │ "465": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "465e": 38, │ │ │ │ │ "466": [6, 39, 45], │ │ │ │ │ "467": 6, │ │ │ │ │ - "467e": 38, │ │ │ │ │ + "467e": [37, 38], │ │ │ │ │ "468": 6, │ │ │ │ │ "46830462": 37, │ │ │ │ │ "469": [46, 48, 50], │ │ │ │ │ "4691": [19, 36, 38, 48], │ │ │ │ │ "469112": [19, 48], │ │ │ │ │ "4691123": [19, 36], │ │ │ │ │ "47": [7, 19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ + "4704d6e2": 46, │ │ │ │ │ "471": 44, │ │ │ │ │ "47145519": 37, │ │ │ │ │ "47146929": 37, │ │ │ │ │ "4715": 46, │ │ │ │ │ "47179359": 37, │ │ │ │ │ "47195655": 37, │ │ │ │ │ "472e": 38, │ │ │ │ │ "476e": 49, │ │ │ │ │ "47kb": 14, │ │ │ │ │ - "48": [19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ + "48": [19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 52, 55], │ │ │ │ │ "4809": 55, │ │ │ │ │ "480b": 46, │ │ │ │ │ "481": 44, │ │ │ │ │ "481e": 38, │ │ │ │ │ "48541500": 46, │ │ │ │ │ "485e": 38, │ │ │ │ │ "486": 6, │ │ │ │ │ @@ -3538,42 +3527,42 @@ │ │ │ │ │ "48672119": 37, │ │ │ │ │ "487": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "4875": 37, │ │ │ │ │ "487e": 38, │ │ │ │ │ "488": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "489": 6, │ │ │ │ │ "48b": [19, 36, 37, 41, 44, 45, 48, 50, 52, 55], │ │ │ │ │ - "48ea": 46, │ │ │ │ │ "49": [19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "490": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "4909415": 19, │ │ │ │ │ "491": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "492": 6, │ │ │ │ │ "494929": 48, │ │ │ │ │ "49492927": 19, │ │ │ │ │ "49497537": 19, │ │ │ │ │ + "494e": 52, │ │ │ │ │ "495": 48, │ │ │ │ │ "495e": 49, │ │ │ │ │ "497": [44, 45], │ │ │ │ │ "499e": 38, │ │ │ │ │ "4b": [36, 44, 50, 55], │ │ │ │ │ "4d": 49, │ │ │ │ │ + "4d84": 46, │ │ │ │ │ "4kb": [49, 53], │ │ │ │ │ "5": [6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 25, 27, 30, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "50": [7, 14, 19, 28, 32, 36, 37, 39, 41, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "500": [13, 46, 49, 55], │ │ │ │ │ "500000": 32, │ │ │ │ │ "5001": 32, │ │ │ │ │ "500100": 32, │ │ │ │ │ - "500e": 52, │ │ │ │ │ "502": 45, │ │ │ │ │ "503": 6, │ │ │ │ │ "504": 41, │ │ │ │ │ "505": [6, 39], │ │ │ │ │ - "505e": [49, 52], │ │ │ │ │ + "505e": 49, │ │ │ │ │ "506": 6, │ │ │ │ │ "506234": 14, │ │ │ │ │ "507": 6, │ │ │ │ │ "508": [6, 45], │ │ │ │ │ "5081": 30, │ │ │ │ │ "509": [6, 19, 36, 48, 50], │ │ │ │ │ "5090585": [19, 36], │ │ │ │ │ @@ -3591,14 +3580,15 @@ │ │ │ │ │ "518": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "51857326": 37, │ │ │ │ │ "519": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "5199731": 19, │ │ │ │ │ "519e": 38, │ │ │ │ │ "52": [19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "520": 6, │ │ │ │ │ + "520e": 52, │ │ │ │ │ "521": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "522": 6, │ │ │ │ │ "524": 6, │ │ │ │ │ "524e": [38, 49], │ │ │ │ │ "52571455": 37, │ │ │ │ │ "5281": 16, │ │ │ │ │ "528e": 49, │ │ │ │ │ @@ -3607,15 +3597,15 @@ │ │ │ │ │ "52963124": 37, │ │ │ │ │ "52981418": 37, │ │ │ │ │ "53": [8, 19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "531e": 38, │ │ │ │ │ "5334": 16, │ │ │ │ │ "534e": 38, │ │ │ │ │ "538": 45, │ │ │ │ │ - "538e": 38, │ │ │ │ │ + "538e": [38, 52], │ │ │ │ │ "53916524": 19, │ │ │ │ │ "54": [3, 18, 19, 32, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "540e": 49, │ │ │ │ │ "5417": 46, │ │ │ │ │ "541e": 49, │ │ │ │ │ "543": [39, 41, 44, 50], │ │ │ │ │ "54392729": 14, │ │ │ │ │ @@ -3634,27 +3624,27 @@ │ │ │ │ │ "550e": 38, │ │ │ │ │ "551": 39, │ │ │ │ │ "552": 42, │ │ │ │ │ "552b": 39, │ │ │ │ │ "552e": 38, │ │ │ │ │ "553": 42, │ │ │ │ │ "556": 45, │ │ │ │ │ - "556e": 49, │ │ │ │ │ + "556e": [37, 49], │ │ │ │ │ "55799171": 14, │ │ │ │ │ "558073": 14, │ │ │ │ │ "55807323": 14, │ │ │ │ │ "56": [3, 6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ "5607": 46, │ │ │ │ │ "561": 44, │ │ │ │ │ "562": 39, │ │ │ │ │ "567": 19, │ │ │ │ │ "56702035": 19, │ │ │ │ │ "568e": 38, │ │ │ │ │ "56b": [39, 44, 55], │ │ │ │ │ - "57": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ + "57": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 52, 55], │ │ │ │ │ "572e": 38, │ │ │ │ │ "574": 44, │ │ │ │ │ "574e": 38, │ │ │ │ │ "5753": 42, │ │ │ │ │ "577e": 38, │ │ │ │ │ "578": 42, │ │ │ │ │ "58": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ @@ -3664,46 +3654,46 @@ │ │ │ │ │ "585": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 33, 42], │ │ │ │ │ "585e": 38, │ │ │ │ │ "586": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "587": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "588": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "589": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "589e": 38, │ │ │ │ │ - "59": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 38, 39, 42, 44, 45, 46, 49, 50, 55], │ │ │ │ │ + "59": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 38, 39, 42, 44, 45, 46, 49, 50, 52, 55], │ │ │ │ │ "591": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "594": 42, │ │ │ │ │ "59475567": 37, │ │ │ │ │ "5948": 44, │ │ │ │ │ "59499": 16, │ │ │ │ │ "595e": 38, │ │ │ │ │ "596": 44, │ │ │ │ │ "596e": 38, │ │ │ │ │ "598e": 38, │ │ │ │ │ "5b": [37, 44], │ │ │ │ │ "5d": 54, │ │ │ │ │ "5kb": 55, │ │ │ │ │ "5x": 55, │ │ │ │ │ "6": [3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 25, 27, 30, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ - "60": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 53, 54, 55], │ │ │ │ │ + "60": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 50, 52, 53, 54, 55], │ │ │ │ │ "600e": 49, │ │ │ │ │ "601": [37, 39, 45], │ │ │ │ │ "604": 45, │ │ │ │ │ "607": [41, 45], │ │ │ │ │ "609": 41, │ │ │ │ │ + "60b": 52, │ │ │ │ │ "61": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 55], │ │ │ │ │ "611": 44, │ │ │ │ │ "611e": [38, 49], │ │ │ │ │ "612e": 46, │ │ │ │ │ "613": [39, 44], │ │ │ │ │ "616e": 38, │ │ │ │ │ "617e": 49, │ │ │ │ │ "619e": 49, │ │ │ │ │ "62": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 55], │ │ │ │ │ "621": 46, │ │ │ │ │ - "621207f7": 46, │ │ │ │ │ "62238": 32, │ │ │ │ │ "622e": 38, │ │ │ │ │ "623e": 38, │ │ │ │ │ "624e": 38, │ │ │ │ │ "625": 46, │ │ │ │ │ "625e": 38, │ │ │ │ │ "6285": 42, │ │ │ │ │ @@ -3711,15 +3701,14 @@ │ │ │ │ │ "63": [3, 6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 55], │ │ │ │ │ "634": 39, │ │ │ │ │ "634e": 38, │ │ │ │ │ "635": 45, │ │ │ │ │ "635000": 32, │ │ │ │ │ "63593435": 14, │ │ │ │ │ "63696169": 37, │ │ │ │ │ - "636e": 52, │ │ │ │ │ "638e": 49, │ │ │ │ │ "64": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 55], │ │ │ │ │ "642": 44, │ │ │ │ │ "645e": 38, │ │ │ │ │ "648b": 39, │ │ │ │ │ "64b": [36, 37, 41, 44, 50, 51, 53], │ │ │ │ │ "65": [6, 7, 8, 9, 10, 11, 12, 13, 19, 30, 32, 33, 37, 39, 42, 44, 46, 49, 55], │ │ │ │ │ @@ -3770,15 +3759,15 @@ │ │ │ │ │ "693": 33, │ │ │ │ │ "693e": 38, │ │ │ │ │ "696": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "697": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "698": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "6981": 42, │ │ │ │ │ "698e": 52, │ │ │ │ │ - "6b": 36, │ │ │ │ │ + "6b": [36, 52], │ │ │ │ │ "6h": [53, 55], │ │ │ │ │ "6kb": [14, 53], │ │ │ │ │ "7": [3, 6, 7, 8, 9, 11, 12, 14, 19, 25, 27, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "70": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 33, 37, 39, 42, 44, 45, 46, 49, 55], │ │ │ │ │ "700": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "701": 45, │ │ │ │ │ "702": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 44], │ │ │ │ │ @@ -3787,14 +3776,15 @@ │ │ │ │ │ "704": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "705": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "705e": 38, │ │ │ │ │ "706": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "706771": 48, │ │ │ │ │ "70677113": 19, │ │ │ │ │ "7068": 19, │ │ │ │ │ + "706e": 52, │ │ │ │ │ "707": 48, │ │ │ │ │ "707e": 49, │ │ │ │ │ "7083": 46, │ │ │ │ │ "70kb": 53, │ │ │ │ │ "71": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 33, 37, 39, 42, 44, 46, 49, 55], │ │ │ │ │ "714e": [38, 49], │ │ │ │ │ "71713666": [19, 36], │ │ │ │ │ @@ -3810,15 +3800,15 @@ │ │ │ │ │ "726": [33, 41], │ │ │ │ │ "72653812": 37, │ │ │ │ │ "726e": 38, │ │ │ │ │ "727": 33, │ │ │ │ │ "728": [33, 53], │ │ │ │ │ "729": [33, 53], │ │ │ │ │ "72b": [36, 41, 44, 45], │ │ │ │ │ - "73": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 33, 37, 39, 42, 44, 46, 49, 52, 55], │ │ │ │ │ + "73": [6, 7, 8, 9, 10, 11, 12, 13, 30, 32, 33, 37, 39, 42, 44, 46, 49, 55], │ │ │ │ │ "730": [33, 53], │ │ │ │ │ "730119": 32, │ │ │ │ │ "73021329": 37, │ │ │ │ │ "73078492": 14, │ │ │ │ │ "730851": 32, │ │ │ │ │ "731": [14, 33, 53], │ │ │ │ │ "731locat": 14, │ │ │ │ │ @@ -3830,18 +3820,19 @@ │ │ │ │ │ "735": [33, 44, 45], │ │ │ │ │ "736": 33, │ │ │ │ │ "737": 53, │ │ │ │ │ "737e": 49, │ │ │ │ │ "738": [45, 53], │ │ │ │ │ "739": 53, │ │ │ │ │ "739e": [38, 49], │ │ │ │ │ - "74": [32, 37, 38, 39, 42, 44, 46, 49, 55], │ │ │ │ │ + "74": [32, 37, 38, 39, 42, 44, 46, 49, 52, 55], │ │ │ │ │ "740": 53, │ │ │ │ │ "741": 53, │ │ │ │ │ "74165739": 37, │ │ │ │ │ + "741b1ece4be8": 46, │ │ │ │ │ "742": 53, │ │ │ │ │ "742e": 38, │ │ │ │ │ "743": 53, │ │ │ │ │ "744": 53, │ │ │ │ │ "746": 38, │ │ │ │ │ "74795302": 14, │ │ │ │ │ "75": [8, 13, 14, 32, 37, 39, 42, 44, 46, 49, 55], │ │ │ │ │ @@ -3869,15 +3860,14 @@ │ │ │ │ │ "7733": 37, │ │ │ │ │ "774": 46, │ │ │ │ │ "775": 46, │ │ │ │ │ "775807": 32, │ │ │ │ │ "776": 46, │ │ │ │ │ "776e": 38, │ │ │ │ │ "777": 46, │ │ │ │ │ - "777e": 52, │ │ │ │ │ "778": 46, │ │ │ │ │ "77855382": 14, │ │ │ │ │ "778554": 14, │ │ │ │ │ "779": [14, 46], │ │ │ │ │ "78": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "782": 55, │ │ │ │ │ "782e": 38, │ │ │ │ │ @@ -3889,26 +3879,28 @@ │ │ │ │ │ "78844117": 14, │ │ │ │ │ "789": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 39, 45], │ │ │ │ │ "79": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "790": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "790e": 49, │ │ │ │ │ "791": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 46], │ │ │ │ │ "79119196": 37, │ │ │ │ │ + "7913443996966715943": 52, │ │ │ │ │ "7917": 46, │ │ │ │ │ "792": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 46], │ │ │ │ │ "793": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "794": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "795": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "796": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "797": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "797e": 54, │ │ │ │ │ "798": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "798e": [38, 52], │ │ │ │ │ "799": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "799e": 37, │ │ │ │ │ + "7\u016f\u015d\u0133\u0155": 52, │ │ │ │ │ "8": [3, 6, 7, 8, 11, 12, 13, 14, 16, 18, 19, 25, 27, 30, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "80": [32, 37, 39, 42, 44, 49, 50, 55], │ │ │ │ │ "800": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "800b": [25, 37], │ │ │ │ │ "800e": 38, │ │ │ │ │ "800mb": 38, │ │ │ │ │ "802": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ @@ -3946,15 +3938,14 @@ │ │ │ │ │ "827e": [38, 46], │ │ │ │ │ "829e": 38, │ │ │ │ │ "83": [3, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "830e": 38, │ │ │ │ │ "833": 46, │ │ │ │ │ "8331": 42, │ │ │ │ │ "8333": 46, │ │ │ │ │ - "836e": 52, │ │ │ │ │ "837e": 38, │ │ │ │ │ "839": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 44], │ │ │ │ │ "84": [32, 37, 38, 39, 42, 44, 49, 53, 55], │ │ │ │ │ "840": 6, │ │ │ │ │ "8403": 41, │ │ │ │ │ "84076387": 19, │ │ │ │ │ "840b": 39, │ │ │ │ │ @@ -3968,16 +3959,17 @@ │ │ │ │ │ "8434966": 14, │ │ │ │ │ "843e": 38, │ │ │ │ │ "844": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "845": 30, │ │ │ │ │ "846": 30, │ │ │ │ │ "848": 30, │ │ │ │ │ "849": 37, │ │ │ │ │ + "8490804751958207686": 52, │ │ │ │ │ "849e": 38, │ │ │ │ │ - "85": [32, 37, 39, 42, 44, 49, 52, 55], │ │ │ │ │ + "85": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "850": 30, │ │ │ │ │ "851": 30, │ │ │ │ │ "851e": 38, │ │ │ │ │ "853905": 14, │ │ │ │ │ "854775807": 32, │ │ │ │ │ "8548": [14, 37], │ │ │ │ │ "85483871": 14, │ │ │ │ │ @@ -3993,20 +3985,21 @@ │ │ │ │ │ "861849": 48, │ │ │ │ │ "862": [44, 48], │ │ │ │ │ "862e": [38, 49], │ │ │ │ │ "863": 45, │ │ │ │ │ "86400000": 32, │ │ │ │ │ "86436763": 19, │ │ │ │ │ "8652": 53, │ │ │ │ │ + "866e": 52, │ │ │ │ │ "867": 45, │ │ │ │ │ "8676": 53, │ │ │ │ │ "867e": 38, │ │ │ │ │ "868e": 38, │ │ │ │ │ "869e": 38, │ │ │ │ │ - "87": [32, 37, 38, 39, 42, 44, 49, 52, 55], │ │ │ │ │ + "87": [32, 37, 38, 39, 42, 44, 49, 55], │ │ │ │ │ "8700": 53, │ │ │ │ │ "871": 44, │ │ │ │ │ "871e": 38, │ │ │ │ │ "8724": 53, │ │ │ │ │ "874": 38, │ │ │ │ │ "8748": 53, │ │ │ │ │ "874kb": 37, │ │ │ │ │ @@ -4021,58 +4014,63 @@ │ │ │ │ │ "886e": 38, │ │ │ │ │ "887": 42, │ │ │ │ │ "88709677": 14, │ │ │ │ │ "8871": 14, │ │ │ │ │ "888": 45, │ │ │ │ │ "88b": [19, 49, 50], │ │ │ │ │ "89": [32, 37, 38, 39, 42, 44, 49, 55], │ │ │ │ │ + "8905666620511135429": 52, │ │ │ │ │ "893": 45, │ │ │ │ │ "893e": [38, 49], │ │ │ │ │ - "8944590791784654066": 52, │ │ │ │ │ "897": [39, 44], │ │ │ │ │ "8972": 41, │ │ │ │ │ "897e": 49, │ │ │ │ │ "8987": 42, │ │ │ │ │ - "8b": [16, 19, 36, 37, 39, 41, 42, 44, 45, 48, 50, 52, 53, 55], │ │ │ │ │ + "8b": [16, 19, 36, 37, 39, 41, 42, 44, 45, 48, 50, 53, 55], │ │ │ │ │ "8kb": 55, │ │ │ │ │ "8mb": 38, │ │ │ │ │ "8x": 55, │ │ │ │ │ "9": [3, 6, 7, 8, 12, 14, 19, 25, 27, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], │ │ │ │ │ "90": [3, 12, 32, 36, 37, 39, 42, 44, 49, 50, 55], │ │ │ │ │ - "900e": [49, 52], │ │ │ │ │ + "900e": 49, │ │ │ │ │ "901000": 32, │ │ │ │ │ "901901": 32, │ │ │ │ │ "901901901": 32, │ │ │ │ │ "904e": 49, │ │ │ │ │ "905e": 49, │ │ │ │ │ "90680094": 19, │ │ │ │ │ "906e": 49, │ │ │ │ │ + "908e": 52, │ │ │ │ │ "91": [12, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "911": 45, │ │ │ │ │ "912": 45, │ │ │ │ │ "91275558": 37, │ │ │ │ │ "912e": 38, │ │ │ │ │ "913e": 38, │ │ │ │ │ "915": 39, │ │ │ │ │ "915e": 49, │ │ │ │ │ "916": 37, │ │ │ │ │ "9167": 46, │ │ │ │ │ "917": 46, │ │ │ │ │ "92": [6, 7, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "921e": 38, │ │ │ │ │ - "9223372032873389537": 52, │ │ │ │ │ - "9223372033033758968": 52, │ │ │ │ │ - "9223372036854711788": 52, │ │ │ │ │ - "9223372036854713855": 52, │ │ │ │ │ - "9223372036854719962": 52, │ │ │ │ │ - "9223372036854720928": 52, │ │ │ │ │ - "9223372036854722103": 52, │ │ │ │ │ - "9223372036854775622": 52, │ │ │ │ │ - "9223372036854775652": 52, │ │ │ │ │ - "9223372036854775751": 52, │ │ │ │ │ + "9223372034140457165": 52, │ │ │ │ │ + "9223372036803285069": 52, │ │ │ │ │ + "9223372036854724926": 52, │ │ │ │ │ + "9223372036854729269": 52, │ │ │ │ │ + "9223372036854760110": 52, │ │ │ │ │ + "9223372036854761679": 52, │ │ │ │ │ + "9223372036854763508": 52, │ │ │ │ │ + "9223372036854766538": 52, │ │ │ │ │ + "9223372036854767732": 52, │ │ │ │ │ + "9223372036854772832": 52, │ │ │ │ │ + "9223372036854773748": 52, │ │ │ │ │ + "9223372036854775666": 52, │ │ │ │ │ + "9223372036854775761": 52, │ │ │ │ │ + "9223372036854775796": 52, │ │ │ │ │ "9223372036854775807": 32, │ │ │ │ │ "927": 39, │ │ │ │ │ "929e": 38, │ │ │ │ │ "93": [6, 32, 37, 39, 42, 44, 45, 49, 55], │ │ │ │ │ "931542": 14, │ │ │ │ │ "93154201": 14, │ │ │ │ │ "93221199": 14, │ │ │ │ │ @@ -4084,36 +4082,34 @@ │ │ │ │ │ "937": 41, │ │ │ │ │ "9399": 37, │ │ │ │ │ "94": [6, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "941e": 52, │ │ │ │ │ "942": 44, │ │ │ │ │ "944e": [49, 54], │ │ │ │ │ "947726688477": 46, │ │ │ │ │ - "9487": 46, │ │ │ │ │ "95": [6, 9, 13, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "9516": 14, │ │ │ │ │ "9516129": 14, │ │ │ │ │ "953": 39, │ │ │ │ │ "9537291": 37, │ │ │ │ │ "953e": 49, │ │ │ │ │ "958": 46, │ │ │ │ │ "95902648": 37, │ │ │ │ │ "95a5a6": 49, │ │ │ │ │ "96": [6, 32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "960b": 25, │ │ │ │ │ - "960e": 52, │ │ │ │ │ "961e": 38, │ │ │ │ │ "963228": 14, │ │ │ │ │ "96641818": 19, │ │ │ │ │ "9667": [39, 41], │ │ │ │ │ "967": [37, 39, 44], │ │ │ │ │ "967409": 14, │ │ │ │ │ "967e": 38, │ │ │ │ │ "968e": 38, │ │ │ │ │ - "96b": [14, 19, 36, 37, 39, 41, 44, 49, 51, 52, 54, 55], │ │ │ │ │ + "96b": [14, 19, 36, 37, 39, 41, 44, 49, 51, 54, 55], │ │ │ │ │ "97": [32, 37, 39, 42, 44, 49, 55], │ │ │ │ │ "970": 32, │ │ │ │ │ "971e": 49, │ │ │ │ │ "973": 39, │ │ │ │ │ "974": 45, │ │ │ │ │ "97498828": 37, │ │ │ │ │ "975426": 14, │ │ │ │ │ @@ -4132,25 +4128,28 @@ │ │ │ │ │ "985": 44, │ │ │ │ │ "98536051": 19, │ │ │ │ │ "98th": 49, │ │ │ │ │ "99": [32, 37, 39, 42, 44, 45, 49, 50, 55], │ │ │ │ │ "991": 45, │ │ │ │ │ "992b": 53, │ │ │ │ │ "992e": 38, │ │ │ │ │ + "994": 37, │ │ │ │ │ "995e": 49, │ │ │ │ │ "996": 30, │ │ │ │ │ "997": 30, │ │ │ │ │ "998": 30, │ │ │ │ │ "99809483": 19, │ │ │ │ │ + "9986": 37, │ │ │ │ │ "998e": 38, │ │ │ │ │ - "999": 55, │ │ │ │ │ + "999": [37, 55], │ │ │ │ │ "9999": [32, 37, 46], │ │ │ │ │ "999999999": 32, │ │ │ │ │ "99kb": 54, │ │ │ │ │ "9b59b6": 49, │ │ │ │ │ + "9d\u00f6\u00b2": 52, │ │ │ │ │ "9kb": [49, 55], │ │ │ │ │ "A": [3, 5, 6, 8, 19, 24, 27, 30, 32, 33, 34, 36, 37, 38, 39, 40, 42, 44, 46, 48, 49, 50, 51, 52, 53, 54, 55], │ │ │ │ │ "AS": 55, │ │ │ │ │ "And": [7, 19, 49, 54], │ │ │ │ │ "As": [12, 16, 24, 25, 32, 33, 37, 38, 39, 41, 42, 44, 46, 48, 49, 50, 51, 54, 55], │ │ │ │ │ "At": [3, 16, 32, 38, 39, 46, 55], │ │ │ │ │ "Be": 3, │ │ │ │ │ @@ -4273,15 +4272,15 @@ │ │ │ │ │ "_validate_conn": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "_variabl": 55, │ │ │ │ │ "_wait_cursor_for_draw_cm": 6, │ │ │ │ │ "_wrap_proxy_error": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "_xy_index": 28, │ │ │ │ │ "a0": [37, 49], │ │ │ │ │ "a2": [37, 55], │ │ │ │ │ - "a512": 46, │ │ │ │ │ + "a6e4": 46, │ │ │ │ │ "aaron": 55, │ │ │ │ │ "ab": [37, 42, 44, 48], │ │ │ │ │ "abandon": 55, │ │ │ │ │ "abba": 41, │ │ │ │ │ "abbrevi": 19, │ │ │ │ │ "abc": [19, 39, 44, 55], │ │ │ │ │ "abcd": [36, 46], │ │ │ │ │ @@ -4725,14 +4724,15 @@ │ │ │ │ │ "bergemann": 55, │ │ │ │ │ "besid": 55, │ │ │ │ │ "best": [21, 24, 37, 44, 55], │ │ │ │ │ "better": [16, 18, 29, 33, 34, 38, 49, 55], │ │ │ │ │ "between": [3, 8, 14, 16, 24, 33, 34, 36, 37, 39, 40, 44, 45, 46, 48, 49, 51, 53, 54, 55], │ │ │ │ │ "bewar": 38, │ │ │ │ │ "beyond": [3, 16], │ │ │ │ │ + "bfbb": 46, │ │ │ │ │ "bfill": [22, 24, 37, 40, 53, 55], │ │ │ │ │ "bi": 4, │ │ │ │ │ "bibtex": 16, │ │ │ │ │ "bieker": 55, │ │ │ │ │ "big": [3, 5, 25, 27, 38, 46, 55], │ │ │ │ │ "bigger": 55, │ │ │ │ │ "biggest": 55, │ │ │ │ │ @@ -4857,15 +4857,14 @@ │ │ │ │ │ "bytes_": 55, │ │ │ │ │ "bytes_io": 6, │ │ │ │ │ "bytesbytescodec": 46, │ │ │ │ │ "bytesio": 6, │ │ │ │ │ "bytestr": 55, │ │ │ │ │ "bzip2": 46, │ │ │ │ │ "c": [3, 5, 7, 13, 16, 18, 19, 24, 29, 36, 37, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 54, 55], │ │ │ │ │ - "c16": 52, │ │ │ │ │ "ca": [44, 46], │ │ │ │ │ "cabl": 55, │ │ │ │ │ "cach": [6, 7, 8, 9, 10, 11, 12, 13, 26, 27, 30, 33, 34, 55], │ │ │ │ │ "cache_dir": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "cachedir": 3, │ │ │ │ │ "cachingfilemanag": [27, 55], │ │ │ │ │ "calcul": [5, 9, 12, 15, 16, 37, 38, 42, 49, 51, 53, 55], │ │ │ │ │ @@ -5664,14 +5663,15 @@ │ │ │ │ │ "duplic": [25, 28, 39, 55], │ │ │ │ │ "durant": [35, 55], │ │ │ │ │ "dure": [3, 6, 7, 8, 9, 10, 11, 12, 13, 22, 24, 30, 31, 33, 41, 42, 47, 55], │ │ │ │ │ "dussin": 55, │ │ │ │ │ "dwesl": 55, │ │ │ │ │ "dynam": [49, 52, 55], │ │ │ │ │ "d\u00edez": 55, │ │ │ │ │ + "d\u0117": 52, │ │ │ │ │ "e": [1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 19, 20, 22, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55], │ │ │ │ │ "e74c3c": 49, │ │ │ │ │ "each": [3, 8, 11, 12, 16, 19, 21, 24, 27, 30, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 49, 50, 51, 52, 53, 55], │ │ │ │ │ "eager": [24, 38, 55], │ │ │ │ │ "eagerli": [38, 55], │ │ │ │ │ "eagerly_compute_group": 55, │ │ │ │ │ "earli": 38, │ │ │ │ │ @@ -5976,15 +5976,15 @@ │ │ │ │ │ "flavor": 3, │ │ │ │ │ "fleischmann": 55, │ │ │ │ │ "fletcher32": 46, │ │ │ │ │ "flexibl": [8, 16, 30, 31, 40, 41, 44, 45, 46, 49, 55], │ │ │ │ │ "flip": 55, │ │ │ │ │ "float": [8, 16, 26, 32, 36, 37, 38, 41, 46, 51, 55], │ │ │ │ │ "float16": [52, 55], │ │ │ │ │ - "float32": [3, 46, 55], │ │ │ │ │ + "float32": [3, 46, 52, 55], │ │ │ │ │ "float64": [8, 14, 16, 19, 25, 27, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 55], │ │ │ │ │ "float6412": 14, │ │ │ │ │ "float64nan": 14, │ │ │ │ │ "float_to_top": 55, │ │ │ │ │ "floor": [22, 32, 53, 54, 55], │ │ │ │ │ "florian": 55, │ │ │ │ │ "flow": [21, 39, 55], │ │ │ │ │ @@ -7429,14 +7429,15 @@ │ │ │ │ │ "huzii": 55, │ │ │ │ │ "hvplot": [5, 49], │ │ │ │ │ "hydrodynam": [7, 55], │ │ │ │ │ "hypercub": 55, │ │ │ │ │ "hypothesi": [3, 5, 18, 55], │ │ │ │ │ "hyrax": 46, │ │ │ │ │ "h\u00e4fner": 55, │ │ │ │ │ + "h\u00ef\u00e8\u0137\u0113": 52, │ │ │ │ │ "h\u00f6chenberg": 55, │ │ │ │ │ "h\u00f6rsch": 55, │ │ │ │ │ "h\u00f8xbro": 55, │ │ │ │ │ "i": [1, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55], │ │ │ │ │ "ia": [14, 39, 44], │ │ │ │ │ "ian": 55, │ │ │ │ │ "ical": 4, │ │ │ │ │ @@ -7554,21 +7555,21 @@ │ │ │ │ │ "instanti": [27, 55], │ │ │ │ │ "instead": [3, 6, 8, 12, 19, 20, 24, 29, 30, 31, 32, 34, 36, 37, 38, 39, 40, 41, 42, 44, 46, 48, 49, 51, 52, 55], │ │ │ │ │ "institut": 35, │ │ │ │ │ "instruct": [3, 46, 55], │ │ │ │ │ "instrument": 39, │ │ │ │ │ "insuffici": 37, │ │ │ │ │ "int": [24, 33, 37, 51, 52, 55], │ │ │ │ │ - "int16": [3, 46], │ │ │ │ │ + "int16": [3, 46, 52], │ │ │ │ │ "int32": [3, 55], │ │ │ │ │ "int64": [3, 14, 19, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 53, 54, 55], │ │ │ │ │ "int641": 14, │ │ │ │ │ "int64_max": 32, │ │ │ │ │ "int64_min": 32, │ │ │ │ │ - "int8": [3, 52], │ │ │ │ │ + "int8": 3, │ │ │ │ │ "intact": 55, │ │ │ │ │ "intarr": 37, │ │ │ │ │ "integ": [19, 20, 24, 27, 30, 32, 37, 39, 44, 46, 52, 55], │ │ │ │ │ "integr": [5, 16, 18, 20, 27, 34, 37, 38, 40, 46, 49, 51, 53, 55], │ │ │ │ │ "intend": [3, 19, 25, 29, 30, 39, 42, 55], │ │ │ │ │ "intens": 46, │ │ │ │ │ "intent": [26, 40, 42], │ │ │ │ │ @@ -7651,15 +7652,15 @@ │ │ │ │ │ "iter_cont": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "itertool": [27, 54], │ │ │ │ │ "its": [3, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 19, 20, 27, 30, 33, 34, 37, 39, 41, 42, 44, 46, 48, 50, 51, 53, 55], │ │ │ │ │ "itself": [3, 18, 19, 20, 24, 28, 30, 37, 39, 44, 46, 48, 55], │ │ │ │ │ "iv": 42, │ │ │ │ │ "ix": 44, │ │ │ │ │ "ix_": 44, │ │ │ │ │ - "j": [16, 24, 40, 42, 44, 52, 55], │ │ │ │ │ + "j": [16, 24, 40, 42, 44, 55], │ │ │ │ │ "jack": 55, │ │ │ │ │ "jacob": 55, │ │ │ │ │ "jaeschk": 55, │ │ │ │ │ "jahren": 55, │ │ │ │ │ "jame": 55, │ │ │ │ │ "jan": [53, 54], │ │ │ │ │ "jansen": 55, │ │ │ │ │ @@ -7718,14 +7719,15 @@ │ │ │ │ │ "junip": 55, │ │ │ │ │ "jupyt": 55, │ │ │ │ │ "jupyterbook": 46, │ │ │ │ │ "just": [3, 7, 11, 19, 20, 24, 25, 28, 30, 34, 39, 40, 42, 44, 46, 49, 50, 51, 52, 54, 55], │ │ │ │ │ "justu": 55, │ │ │ │ │ "jwen": 55, │ │ │ │ │ "j\u00f6rdene": 55, │ │ │ │ │ + "j\u0121\u0159\u0167\u016d": 52, │ │ │ │ │ "k": [3, 7, 13, 20, 24, 28, 45, 55], │ │ │ │ │ "kai": 55, │ │ │ │ │ "kanma": 55, │ │ │ │ │ "karasiak": 55, │ │ │ │ │ "karel": 55, │ │ │ │ │ "karl": 55, │ │ │ │ │ "katelyn": 55, │ │ │ │ │ @@ -8533,15 +8535,15 @@ │ │ │ │ │ "overwhelm": 21, │ │ │ │ │ "overwrit": [6, 7, 8, 9, 10, 11, 12, 13, 24, 30, 33, 36, 46, 55], │ │ │ │ │ "overwrite_encoded_chunk": 55, │ │ │ │ │ "overwritten": [46, 55], │ │ │ │ │ "owen": 55, │ │ │ │ │ "owenlittlejohn": 55, │ │ │ │ │ "own": [3, 16, 26, 27, 39, 42, 46, 48, 51, 55], │ │ │ │ │ - "p": [13, 16, 32, 42, 46, 49, 52, 55], │ │ │ │ │ + "p": [13, 16, 32, 42, 46, 49, 55], │ │ │ │ │ "p0": 55, │ │ │ │ │ "pack": [46, 55], │ │ │ │ │ "packag": [3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 24, 27, 29, 30, 32, 33, 34, 38, 40, 41, 42, 46, 50, 52, 53, 55], │ │ │ │ │ "pad": [25, 37, 44, 50, 53, 55], │ │ │ │ │ "pad_inch": 6, │ │ │ │ │ "pagani": 55, │ │ │ │ │ "page": [0, 1, 24, 25, 26, 29, 30, 31, 32, 40, 42, 50, 55], │ │ │ │ │ @@ -9643,14 +9645,15 @@ │ │ │ │ │ "quickbird": 5, │ │ │ │ │ "quicker": 46, │ │ │ │ │ "quickli": [16, 17, 38, 42, 52, 53], │ │ │ │ │ "quickstart": 34, │ │ │ │ │ "quit": [3, 46, 52, 55], │ │ │ │ │ "quiver": 55, │ │ │ │ │ "quoc": 55, │ │ │ │ │ + "q\u0101\u017e": 52, │ │ │ │ │ "r": [6, 7, 8, 9, 10, 11, 12, 13, 26, 30, 32, 33, 37, 38, 39, 46, 55], │ │ │ │ │ "rabbit": 42, │ │ │ │ │ "race": 55, │ │ │ │ │ "rachel": 55, │ │ │ │ │ "radar": 5, │ │ │ │ │ "rafael": 55, │ │ │ │ │ "rag": 44, │ │ │ │ │ @@ -9935,16 +9938,17 @@ │ │ │ │ │ "runner": 55, │ │ │ │ │ "runtim": [24, 55], │ │ │ │ │ "runtimewarn": [46, 55], │ │ │ │ │ "russel": 55, │ │ │ │ │ "russotto": 55, │ │ │ │ │ "rutger": 55, │ │ │ │ │ "ryan": [12, 35, 55], │ │ │ │ │ + "r\u0115": 52, │ │ │ │ │ "s1": [46, 55], │ │ │ │ │ - "s2": [40, 52], │ │ │ │ │ + "s2": 40, │ │ │ │ │ "s3": [6, 46, 55], │ │ │ │ │ "s_da": 40, │ │ │ │ │ "s_rho": 7, │ │ │ │ │ "sa": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "saboo": 55, │ │ │ │ │ "safe": [6, 7, 8, 9, 10, 11, 12, 13, 27, 30, 32, 33, 45, 46, 55], │ │ │ │ │ "safe_chunk": 55, │ │ │ │ │ @@ -10728,16 +10732,16 @@ │ │ │ │ │ "typecast": 55, │ │ │ │ │ "typeerror": [27, 46, 55], │ │ │ │ │ "typehint": 55, │ │ │ │ │ "typic": [3, 7, 14, 16, 30, 34, 38, 46, 51], │ │ │ │ │ "typing_extens": 55, │ │ │ │ │ "typo": [3, 23, 55], │ │ │ │ │ "tyre": 55, │ │ │ │ │ - "u": [3, 8, 12, 19, 21, 24, 26, 31, 32, 33, 34, 42, 44, 45, 46, 49, 50, 53, 54, 55], │ │ │ │ │ - "u000e8": 52, │ │ │ │ │ + "t\u00be\u0105": 52, │ │ │ │ │ + "u": [3, 8, 12, 19, 21, 24, 26, 31, 32, 33, 34, 42, 44, 45, 46, 49, 50, 52, 53, 54, 55], │ │ │ │ │ "u1": [19, 36, 37, 39, 41, 44, 45, 46, 48, 50, 55], │ │ │ │ │ "u2": [14, 37, 39, 44], │ │ │ │ │ "u3": [53, 54, 55], │ │ │ │ │ "u4": 55, │ │ │ │ │ "u5": [19, 49], │ │ │ │ │ "u6": [39, 42], │ │ │ │ │ "u7": [37, 39], │ │ │ │ │ @@ -10863,14 +10867,15 @@ │ │ │ │ │ "usr": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33], │ │ │ │ │ "usual": [3, 16, 20, 27, 37, 38, 41, 44, 46, 50, 51, 55], │ │ │ │ │ "utf": 46, │ │ │ │ │ "util": [3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 20, 30, 33, 34, 46, 55], │ │ │ │ │ "utilis": 53, │ │ │ │ │ "uw": 35, │ │ │ │ │ "uxarrai": 26, │ │ │ │ │ + "u\u01039c": 52, │ │ │ │ │ "v": [3, 8, 13, 16, 18, 28, 39, 42, 49, 50, 51], │ │ │ │ │ "v0": [16, 39, 44, 50], │ │ │ │ │ "v1": [6, 7, 8, 9, 10, 11, 12, 13, 30, 33, 37, 49, 55], │ │ │ │ │ "v2": 55, │ │ │ │ │ "v2022": 28, │ │ │ │ │ "v3": [46, 55], │ │ │ │ │ "vacant": 36, │ │ │ │ │ @@ -11073,23 +11078,22 @@ │ │ │ │ │ "write_empty_chunk": 55, │ │ │ │ │ "write_inherited_coord": 55, │ │ │ │ │ "written": [3, 18, 24, 29, 37, 38, 39, 46, 52, 55], │ │ │ │ │ "wrong": [3, 32, 55], │ │ │ │ │ "wrongli": 55, │ │ │ │ │ "wrote": 36, │ │ │ │ │ "www": [7, 18], │ │ │ │ │ + "w\u00fb\u011d\u00bet": 52, │ │ │ │ │ "x": [3, 5, 7, 8, 12, 13, 14, 18, 19, 20, 24, 25, 27, 28, 30, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 48, 50, 51, 52, 54, 55], │ │ │ │ │ "x0pahjgysxk": 18, │ │ │ │ │ "x1": 36, │ │ │ │ │ - "x10": 52, │ │ │ │ │ "x2": [36, 40], │ │ │ │ │ "x27": 14, │ │ │ │ │ "x64": 55, │ │ │ │ │ - "x8dvb": 52, │ │ │ │ │ - "x8e": 52, │ │ │ │ │ + "x93o\u00aa": 52, │ │ │ │ │ "x_and_i": 37, │ │ │ │ │ "x_bin": 41, │ │ │ │ │ "x_bin_label": 41, │ │ │ │ │ "x_chunk": 24, │ │ │ │ │ "x_coars": 50, │ │ │ │ │ "x_fine": 50, │ │ │ │ │ "x_matrix_rank": 37, │ │ │ │ │ @@ -11108,15 +11112,14 @@ │ │ │ │ │ "xbatcher": 5, │ │ │ │ │ "xbpch": 5, │ │ │ │ │ "xc": [12, 37, 46], │ │ │ │ │ "xc0": 37, │ │ │ │ │ "xcdat": [5, 55], │ │ │ │ │ "xclim": 5, │ │ │ │ │ "xd": 38, │ │ │ │ │ - "xd0": 52, │ │ │ │ │ "xdev": 35, │ │ │ │ │ "xdist": [3, 18, 55], │ │ │ │ │ "xenomorph": 42, │ │ │ │ │ "xeof": 5, │ │ │ │ │ "xesmf": [5, 12], │ │ │ │ │ "xfail": [3, 55], │ │ │ │ │ "xframe": 5, │ │ │ │ │ @@ -11147,14 +11150,15 @@ │ │ │ │ │ "xtick": [49, 55], │ │ │ │ │ "xtrude": 5, │ │ │ │ │ "xx": 37, │ │ │ │ │ "xxxx": 3, │ │ │ │ │ "xy_index": 28, │ │ │ │ │ "xyz": 39, │ │ │ │ │ "xyzpi": 5, │ │ │ │ │ + "x\u0127": 52, │ │ │ │ │ "y": [7, 11, 12, 18, 19, 20, 24, 25, 28, 32, 36, 37, 38, 39, 41, 42, 44, 45, 46, 48, 50, 51, 52, 54, 55], │ │ │ │ │ "y_coars": 50, │ │ │ │ │ "y_fine": 50, │ │ │ │ │ "y_rank": 38, │ │ │ │ │ "y_win": 37, │ │ │ │ │ "yai": 8, │ │ │ │ │ "yalpha": 37, │ │ │ │ │ @@ -11188,14 +11192,15 @@ │ │ │ │ │ "ytick": [49, 55], │ │ │ │ │ "yuan": 55, │ │ │ │ │ "yunu": 55, │ │ │ │ │ "yve": 55, │ │ │ │ │ "yvonn": 55, │ │ │ │ │ "yyyi": [54, 55], │ │ │ │ │ "yyyymmddhhmmss": 54, │ │ │ │ │ + "y\u0155\u013ep": 52, │ │ │ │ │ "z": [7, 18, 19, 24, 25, 37, 39, 44, 45, 46, 49, 50, 52, 55], │ │ │ │ │ "z1": 37, │ │ │ │ │ "z2": 37, │ │ │ │ │ "z3": 37, │ │ │ │ │ "z_0": 7, │ │ │ │ │ "z_rho": 7, │ │ │ │ │ "zac": 55, │ │ │ │ │ @@ -11224,31 +11229,65 @@ │ │ │ │ │ "zo_rho": 7, │ │ │ │ │ "zonal": [5, 38, 49], │ │ │ │ │ "zone": 32, │ │ │ │ │ "zoom": 4, │ │ │ │ │ "zstd": 46, │ │ │ │ │ "zuckerberg": 55, │ │ │ │ │ "z\u00fchlke": 55, │ │ │ │ │ - "\u00b2\u00ec\u013c\u00eb\u0140": 52, │ │ │ │ │ - "\u00ba": 52, │ │ │ │ │ - "\u00bc": 52, │ │ │ │ │ - "\u00e2": 52, │ │ │ │ │ - "\u00eex\u017e": 52, │ │ │ │ │ - "\u00f43": 52, │ │ │ │ │ - "\u00f5\u017c": 52, │ │ │ │ │ - "\u00f6\u012dxd": 52, │ │ │ │ │ - "\u0119": 52, │ │ │ │ │ - "\u011b\u017e\u00eb": 52, │ │ │ │ │ - "\u0129\u0161\u00e9\u0175v": 52, │ │ │ │ │ - "\u0163n\u017c\u00ef\u017c": 52, │ │ │ │ │ - "\u0165\u017e\u0173\u0115\u011d": 52, │ │ │ │ │ - "\u017eilv\u00ff": 52, │ │ │ │ │ - "\u017e\u00e3\u0119\u0169": 52, │ │ │ │ │ - "\u017e\u0169\u00ec": 52, │ │ │ │ │ - "\u017e\u017c": 52 │ │ │ │ │ + "\u00b9\u0153\u011b": 52, │ │ │ │ │ + "\u00dfa\u017eb\u017c": 52, │ │ │ │ │ + "\u00df\u00e3": 52, │ │ │ │ │ + "\u00e1\u00e2\u013ac\u017e": 52, │ │ │ │ │ + "\u00e1\u00fel\u00b3\u017f": 52, │ │ │ │ │ + "\u00eb": 52, │ │ │ │ │ + "\u00eb\u017c": 52, │ │ │ │ │ + "\u00ed\u017c": 52, │ │ │ │ │ + "\u00f5\u00bc": 52, │ │ │ │ │ + "\u00f6\u00f8": 52, │ │ │ │ │ + "\u00f8\u0149\u012bo\u017e": 52, │ │ │ │ │ + "\u00f9\u012f\u0137\u017e": 52, │ │ │ │ │ + "\u00fa4s\u00ec": 52, │ │ │ │ │ + "\u0103\u00edx\u00b98": 52, │ │ │ │ │ + "\u0109\u0119\u017c\u0157\u011f": 52, │ │ │ │ │ + "\u010b\u00e1\u017c\u017e\u0129": 52, │ │ │ │ │ + "\u010d": 52, │ │ │ │ │ + "\u010f\u0119": 52, │ │ │ │ │ + "\u0111\u00ba\u0157\u00fe": 52, │ │ │ │ │ + "\u0113": 52, │ │ │ │ │ + "\u01150\u00ec\u017c": 52, │ │ │ │ │ + "\u0119\u017c3\u00e5\u00e8": 52, │ │ │ │ │ + "\u0121": 52, │ │ │ │ │ + "\u0121\u00f3\u00aa\u0171\u00ef": 52, │ │ │ │ │ + "\u0121\u017e\u010d\u0138\u017e": 52, │ │ │ │ │ + "\u0127b\u011b\u017e\u0173": 52, │ │ │ │ │ + "\u012f\u0115\u00fe\u00b21": 52, │ │ │ │ │ + "\u0131\u013c": 52, │ │ │ │ │ + "\u0135\u017c": 52, │ │ │ │ │ + "\u013a": 52, │ │ │ │ │ + "\u0140": 52, │ │ │ │ │ + "\u0142": 52, │ │ │ │ │ + "\u0142\u00b3\u017c": 52, │ │ │ │ │ + "\u0148\u00be\u00f0\u017e\u00fc": 52, │ │ │ │ │ + "\u0149": 52, │ │ │ │ │ + "\u015d\u0117\u0177": 52, │ │ │ │ │ + "\u0163\u00fdc": 52, │ │ │ │ │ + "\u0165s\u012by\u0167": 52, │ │ │ │ │ + "\u0165\u00f1": 52, │ │ │ │ │ + "\u0167": 52, │ │ │ │ │ + "\u0169\u00f5": 52, │ │ │ │ │ + "\u016d": 52, │ │ │ │ │ + "\u0171\u016b\u0161e\u0151": 52, │ │ │ │ │ + "\u0171\u017c\u017c0\u017c": 52, │ │ │ │ │ + "\u017c0q\u017c\u0109": 52, │ │ │ │ │ + "\u017c4k\u017e\u017a": 52, │ │ │ │ │ + "\u017cw": 52, │ │ │ │ │ + "\u017c\u0149\u014f\u013c": 52, │ │ │ │ │ + "\u017e\u0101": 52, │ │ │ │ │ + "\u017e\u011b\u0115\u017f\u0123": 52, │ │ │ │ │ + "\u017f\u00e3\u0161yi": 52 │ │ │ │ │ }, │ │ │ │ │ "titles": ["xarray", "API reference", "<no title>", "Contributing to xarray", "Developers meeting", "Xarray related projects", "GRIB Data Example", "ROMS Ocean Model Example", "Applying unvectorized functions with apply_ufunc", "Compare weighted and unweighted mean temperature", "Blank template", "Calculating Seasonal Averages from Time Series of Monthly Means", "Working with Multidimensional Coordinates", "Visualization Gallery", "Toy weather data", "Gallery", "Frequently Asked Questions", "Getting Started", "Installation", "Quick overview", "Overview: Why xarray?", "Getting Help", "How do I \u2026", "Xarray documentation", "Alternative chunked array types", "Integrating with duck arrays", "Extending xarray using accessors", "How to add a new backend", "How to create a custom index", "Xarray Internals", "Internal Design", "Interoperability of Xarray", "Time Coding", "Zarr Encoding Specification", "Development roadmap", "Tutorials and Videos", "Combining data", "Computation", "Parallel Computing with Dask", "Data Structures", "Working with numpy-like arrays", "GroupBy: Group and Bin Data", "Hierarchical data", "User Guide", "Indexing and selecting data", "Interpolating data", "Reading and writing files", "Configuration", "Working with pandas", "Plotting", "Reshaping and reorganizing data", "Terminology", "Testing your code", "Time series data", "Weather and climate data", "What\u2019s New"], │ │ │ │ │ "titleterms": { │ │ │ │ │ "": [13, 16, 55], │ │ │ │ │ "0": 55, │ │ │ │ │ "01": 55, │ │ │ │ │ "02": 55, │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/computation.html │ │ │ │ @@ -879,15 +879,15 @@ │ │ │ │ * param (param) <U2 16B 'a' 'xc' │ │ │ │ * cov_i (cov_i) <U2 16B 'a' 'xc' │ │ │ │ * cov_j (cov_j) <U2 16B 'a' 'xc' │ │ │ │ Data variables: │ │ │ │ var2_curvefit_coefficients (x, param) float64 2kB 3.0 -5.0 3.0 ... 3.0 4.9 │ │ │ │ var2_curvefit_covariance (x, cov_i, cov_j) float64 3kB 9.286e-14 ... 1... │ │ │ │ var3_curvefit_coefficients (x, param) float64 2kB 0.9999 5.0 ... 1.0 -4.9 │ │ │ │ - var3_curvefit_covariance (x, cov_i, cov_j) float64 3kB 5.825e-11 ... 1... │ │ │ │ + var3_curvefit_covariance (x, cov_i, cov_j) float64 3kB 5.825e-11 ... 8... │ │ │ │ │ │ │ │ │ │ │ │

    We can also fit multi-dimensional functions, and even use a wrapper function to │ │ │ │ simultaneously fit a summation of several functions, such as this field containing │ │ │ │ two gaussian peaks:

    │ │ │ │
    In [102]: def gaussian_2d(coords, a, xc, yc, xalpha, yalpha):
    │ │ │ │     .....:     x, y = coords
    │ │ │ │ @@ -934,16 +934,16 @@
    │ │ │ │  <xarray.Dataset> Size: 2kB
    │ │ │ │  Dimensions:                (param: 10, cov_i: 10, cov_j: 10)
    │ │ │ │  Coordinates:
    │ │ │ │    * param                  (param) <U7 280B 'a0' 'xc0' ... 'xalpha1' 'yalpha1'
    │ │ │ │    * cov_i                  (cov_i) <U7 280B 'a0' 'xc0' ... 'xalpha1' 'yalpha1'
    │ │ │ │    * cov_j                  (cov_j) <U7 280B 'a0' 'xc0' ... 'xalpha1' 'yalpha1'
    │ │ │ │  Data variables:
    │ │ │ │ -    curvefit_coefficients  (param) float64 80B 3.0 1.004 1.003 ... 1.007 1.008
    │ │ │ │ -    curvefit_covariance    (cov_i, cov_j) float64 800B 3.362e-05 ... 2.125e-05
    │ │ │ │ +    curvefit_coefficients  (param) float64 80B 1.994 -0.9986 ... 1.999 0.9986
    │ │ │ │ +    curvefit_covariance    (cov_i, cov_j) float64 800B 6.556e-05 ... 4.467e-06
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Note

    │ │ │ │

    This method replicates the behavior of scipy.optimize.curve_fit().

    │ │ │ │
    │ │ │ │
    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -721,15 +721,15 @@ │ │ │ │ │ * cov_j (cov_j) Size: 2kB │ │ │ │ │ Dimensions: (param: 10, cov_i: 10, cov_j: 10) │ │ │ │ │ Coordinates: │ │ │ │ │ * param (param) ds.pipe(func)) instead of │ │ │ │ simply calling it (e.g., func(ds)). This allows you to write pipelines for │ │ │ │ transforming your data (using “method chaining”) instead of writing hard to │ │ │ │ follow nested function calls:

    │ │ │ │
    # these lines are equivalent, but with pipe we can make the logic flow
    │ │ │ │  # entirely from left to right
    │ │ │ │  In [64]: plt.plot((2 * ds.temperature.sel(loc=0)).mean("instrument"))
    │ │ │ │ -Out[64]: [<matplotlib.lines.Line2D at 0x7f5fd3fd6490>]
    │ │ │ │ +Out[64]: [<matplotlib.lines.Line2D at 0x7f34b88ca490>]
    │ │ │ │  
    │ │ │ │  In [65]: (ds.temperature.sel(loc=0).pipe(lambda x: 2 * x).mean("instrument").pipe(plt.plot))
    │ │ │ │ -Out[65]: [<matplotlib.lines.Line2D at 0x7f5fd3fd6210>]
    │ │ │ │ +Out[65]: [<matplotlib.lines.Line2D at 0x7f34b88ca210>]
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    Both pipe and assign replicate the pandas methods of the same names │ │ │ │ (DataFrame.pipe and │ │ │ │ DataFrame.assign).

    │ │ │ │

    With xarray, there is no performance penalty for creating new datasets, even if │ │ │ │ variables are lazily loaded from a file on disk. Creating new objects instead │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -585,19 +585,19 @@ │ │ │ │ │ There is also the pipe() method that allows you to use a method call with an │ │ │ │ │ external function (e.g., ds.pipe(func)) instead of simply calling it (e.g., │ │ │ │ │ func(ds)). This allows you to write pipelines for transforming your data (using │ │ │ │ │ “method chaining”) instead of writing hard to follow nested function calls: │ │ │ │ │ # these lines are equivalent, but with pipe we can make the logic flow │ │ │ │ │ # entirely from left to right │ │ │ │ │ In [64]: plt.plot((2 * ds.temperature.sel(loc=0)).mean("instrument")) │ │ │ │ │ -Out[64]: [] │ │ │ │ │ +Out[64]: [] │ │ │ │ │ │ │ │ │ │ In [65]: (ds.temperature.sel(loc=0).pipe(lambda x: 2 * x).mean │ │ │ │ │ ("instrument").pipe(plt.plot)) │ │ │ │ │ -Out[65]: [] │ │ │ │ │ +Out[65]: [] │ │ │ │ │ Both pipe and assign replicate the pandas methods of the same names │ │ │ │ │ (_D_a_t_a_F_r_a_m_e_._p_i_p_e and _D_a_t_a_F_r_a_m_e_._a_s_s_i_g_n). │ │ │ │ │ With xarray, there is no performance penalty for creating new datasets, even if │ │ │ │ │ variables are lazily loaded from a file on disk. Creating new objects instead │ │ │ │ │ of mutating existing objects often results in easier to understand code, so we │ │ │ │ │ encourage using this approach. │ │ │ │ │ ******** RReennaammiinngg vvaarriiaabblleess_?¶ ******** │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/hierarchical-data.html │ │ │ │ @@ -982,15 +982,15 @@ │ │ │ │

    If you were a previous user of the prototype xarray-contrib/datatree package, this is different from what you’re used to! │ │ │ │ In that package the data model was that the data stored in each node actually was completely unrelated. The data model is now slightly stricter. │ │ │ │ This allows us to provide features like Coordinate Inheritance.

    │ │ │ │ │ │ │ │

    To demonstrate, let’s first generate some example datasets which are not aligned with one another:

    │ │ │ │
    # (drop the attributes just to make the printed representation shorter)
    │ │ │ │  In [89]: ds = xr.tutorial.open_dataset("air_temperature").drop_attrs()
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd2b2da90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b8315a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  In [90]: ds_daily = ds.resample(time="D").mean("time")
    │ │ │ │  KeyError: "No variable named 'time'. Variables on the dataset include ['foo', 'x', 'letters']"
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  In [91]: ds_weekly = ds.resample(time="W").mean("time")
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -870,15 +870,15 @@
    │ │ │ │ │  To demonstrate, let’s first generate some example datasets which are not
    │ │ │ │ │  aligned with one another:
    │ │ │ │ │  # (drop the attributes just to make the printed representation shorter)
    │ │ │ │ │  In [89]: ds = xr.tutorial.open_dataset("air_temperature").drop_attrs()
    │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
    │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
    │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │ +0x7f34b8315a90>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │  in name resolution)"))
    │ │ │ │ │  
    │ │ │ │ │  
    │ │ │ │ │  In [90]: ds_daily = ds.resample(time="D").mean("time")
    │ │ │ │ │  KeyError: "No variable named 'time'. Variables on the dataset include ['foo',
    │ │ │ │ │  'x', 'letters']"
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/indexing.html
    │ │ │ │ @@ -653,15 +653,15 @@
    │ │ │ │  to a collection specified weather station latitudes and longitudes.
    │ │ │ │  To trigger vectorized indexing behavior
    │ │ │ │  you will need to provide the selection dimensions with a new
    │ │ │ │  shared output dimension name. In the example below, the selections
    │ │ │ │  of the closest latitude and longitude are renamed to an output
    │ │ │ │  dimension named “points”:

    │ │ │ │
    In [52]: ds = xr.tutorial.open_dataset("air_temperature")
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd2b2e350>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b8316350>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  # Define target latitude and longitude (where weather stations might be)
    │ │ │ │  In [53]: target_lon = xr.DataArray([200, 201, 202, 205], dims="points")
    │ │ │ │  
    │ │ │ │  In [54]: target_lat = xr.DataArray([31, 41, 42, 42], dims="points")
    │ │ │ │  
    │ │ │ │ @@ -697,15 +697,15 @@
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Assigning values with indexing

    │ │ │ │

    To select and assign values to a portion of a DataArray() you │ │ │ │ can use indexing with .loc :

    │ │ │ │
    In [57]: ds = xr.tutorial.open_dataset("air_temperature")
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd2b2c690>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b8314550>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  # add an empty 2D dataarray
    │ │ │ │  In [58]: ds["empty"] = xr.full_like(ds.air.mean("time"), fill_value=0)
    │ │ │ │  AttributeError: 'Dataset' object has no attribute 'air'
    │ │ │ │  
    │ │ │ │  
    │ │ │ │ @@ -869,15 +869,15 @@
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    You can also assign values to all variables of a Dataset at once:

    │ │ │ │
    In [83]: ds_org = xr.tutorial.open_dataset("eraint_uvz").isel(
    │ │ │ │     ....:     latitude=slice(56, 59), longitude=slice(255, 258), level=0
    │ │ │ │     ....: )
    │ │ │ │     ....: 
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/eraint_uvz.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd2b2d950>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/eraint_uvz.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34b8315950>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  # set all values to 0
    │ │ │ │  In [84]: ds = xr.zeros_like(ds_org)
    │ │ │ │  NameError: name 'ds_org' is not defined
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -476,15 +476,15 @@
    │ │ │ │ │  with a new shared output dimension name. In the example below, the selections
    │ │ │ │ │  of the closest latitude and longitude are renamed to an output dimension named
    │ │ │ │ │  “points”:
    │ │ │ │ │  In [52]: ds = xr.tutorial.open_dataset("air_temperature")
    │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
    │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
    │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │ +0x7f34b8316350>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │  in name resolution)"))
    │ │ │ │ │  
    │ │ │ │ │  
    │ │ │ │ │  # Define target latitude and longitude (where weather stations might be)
    │ │ │ │ │  In [53]: target_lon = xr.DataArray([200, 201, 202, 205], dims="points")
    │ │ │ │ │  
    │ │ │ │ │  In [54]: target_lat = xr.DataArray([31, 41, 42, 42], dims="points")
    │ │ │ │ │ @@ -516,15 +516,15 @@
    │ │ │ │ │  ********** AAssssiiggnniinngg vvaalluueess wwiitthh iinnddeexxiinngg_?¶ **********
    │ │ │ │ │  To select and assign values to a portion of a DataArray() you can use indexing
    │ │ │ │ │  with .loc :
    │ │ │ │ │  In [57]: ds = xr.tutorial.open_dataset("air_temperature")
    │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
    │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
    │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │ +0x7f34b8314550>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │  in name resolution)"))
    │ │ │ │ │  
    │ │ │ │ │  
    │ │ │ │ │  # add an empty 2D dataarray
    │ │ │ │ │  In [58]: ds["empty"] = xr.full_like(ds.air.mean("time"), fill_value=0)
    │ │ │ │ │  AttributeError: 'Dataset' object has no attribute 'air'
    │ │ │ │ │  
    │ │ │ │ │ @@ -678,15 +678,15 @@
    │ │ │ │ │  In [83]: ds_org = xr.tutorial.open_dataset("eraint_uvz").isel(
    │ │ │ │ │     ....:     latitude=slice(56, 59), longitude=slice(255, 258), level=0
    │ │ │ │ │     ....: )
    │ │ │ │ │     ....:
    │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
    │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/eraint_uvz.nc (Caused by
    │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │ +0x7f34b8315950>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │  in name resolution)"))
    │ │ │ │ │  
    │ │ │ │ │  
    │ │ │ │ │  # set all values to 0
    │ │ │ │ │  In [84]: ds = xr.zeros_like(ds_org)
    │ │ │ │ │  NameError: name 'ds_org' is not defined
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/interpolation.html
    │ │ │ │ @@ -237,24 +237,24 @@
    │ │ │ │     ....:     np.sin(np.linspace(0, 2 * np.pi, 10)),
    │ │ │ │     ....:     dims="x",
    │ │ │ │     ....:     coords={"x": np.linspace(0, 1, 10)},
    │ │ │ │     ....: )
    │ │ │ │     ....: 
    │ │ │ │  
    │ │ │ │  In [17]: da.plot.line("o", label="original")
    │ │ │ │ -Out[17]: [<matplotlib.lines.Line2D at 0x7f60069fde50>]
    │ │ │ │ +Out[17]: [<matplotlib.lines.Line2D at 0x7f34c1c22350>]
    │ │ │ │  
    │ │ │ │  In [18]: da.interp(x=np.linspace(0, 1, 100)).plot.line(label="linear (default)")
    │ │ │ │ -Out[18]: [<matplotlib.lines.Line2D at 0x7f60069fdbd0>]
    │ │ │ │ +Out[18]: [<matplotlib.lines.Line2D at 0x7f34e3691450>]
    │ │ │ │  
    │ │ │ │  In [19]: da.interp(x=np.linspace(0, 1, 100), method="cubic").plot.line(label="cubic")
    │ │ │ │ -Out[19]: [<matplotlib.lines.Line2D at 0x7f60069fda90>]
    │ │ │ │ +Out[19]: [<matplotlib.lines.Line2D at 0x7f34e36916d0>]
    │ │ │ │  
    │ │ │ │  In [20]: plt.legend()
    │ │ │ │ -Out[20]: <matplotlib.legend.Legend at 0x7f5fed18fa10>
    │ │ │ │ +Out[20]: <matplotlib.legend.Legend at 0x7f34c1c14050>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/interpolation_sample1.png │ │ │ │ │ │ │ │

    Additional keyword arguments can be passed to scipy’s functions.

    │ │ │ │
    # fill 0 for the outside of the original coordinates.
    │ │ │ │  In [21]: da.interp(x=np.linspace(-0.5, 1.5, 10), kwargs={"fill_value": 0.0})
    │ │ │ │ @@ -439,15 +439,15 @@
    │ │ │ │  see Missing values.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    Example

    │ │ │ │

    Let’s see how interp() works on real data.

    │ │ │ │
    # Raw data
    │ │ │ │  In [44]: ds = xr.tutorial.open_dataset("air_temperature").isel(time=0)
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f60069ff9d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34c1c239d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  In [45]: fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    │ │ │ │  
    │ │ │ │  In [46]: ds.air.plot(ax=axes[0])
    │ │ │ │  AttributeError: 'Dataset' object has no attribute 'air'
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -153,26 +153,26 @@
    │ │ │ │ │     ....:     np.sin(np.linspace(0, 2 * np.pi, 10)),
    │ │ │ │ │     ....:     dims="x",
    │ │ │ │ │     ....:     coords={"x": np.linspace(0, 1, 10)},
    │ │ │ │ │     ....: )
    │ │ │ │ │     ....:
    │ │ │ │ │  
    │ │ │ │ │  In [17]: da.plot.line("o", label="original")
    │ │ │ │ │ -Out[17]: []
    │ │ │ │ │ +Out[17]: []
    │ │ │ │ │  
    │ │ │ │ │  In [18]: da.interp(x=np.linspace(0, 1, 100)).plot.line(label="linear
    │ │ │ │ │  (default)")
    │ │ │ │ │ -Out[18]: []
    │ │ │ │ │ +Out[18]: []
    │ │ │ │ │  
    │ │ │ │ │  In [19]: da.interp(x=np.linspace(0, 1, 100), method="cubic").plot.line
    │ │ │ │ │  (label="cubic")
    │ │ │ │ │ -Out[19]: []
    │ │ │ │ │ +Out[19]: []
    │ │ │ │ │  
    │ │ │ │ │  In [20]: plt.legend()
    │ │ │ │ │ -Out[20]: 
    │ │ │ │ │ +Out[20]: 
    │ │ │ │ │  _[_._._/___i_m_a_g_e_s_/_i_n_t_e_r_p_o_l_a_t_i_o_n___s_a_m_p_l_e_1_._p_n_g_]
    │ │ │ │ │  Additional keyword arguments can be passed to scipy’s functions.
    │ │ │ │ │  # fill 0 for the outside of the original coordinates.
    │ │ │ │ │  In [21]: da.interp(x=np.linspace(-0.5, 1.5, 10), kwargs={"fill_value": 0.0})
    │ │ │ │ │  Out[21]:
    │ │ │ │ │   Size: 80B
    │ │ │ │ │  array([ 0.   ,  0.   ,  0.   ,  0.814,  0.604, -0.604, -0.814,  0.   ,  0.   ,
    │ │ │ │ │ @@ -338,15 +338,15 @@
    │ │ │ │ │  ********** EExxaammppllee_?¶ **********
    │ │ │ │ │  Let’s see how interp() works on real data.
    │ │ │ │ │  # Raw data
    │ │ │ │ │  In [44]: ds = xr.tutorial.open_dataset("air_temperature").isel(time=0)
    │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
    │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by
    │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │ +0x7f34c1c239d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
    │ │ │ │ │  in name resolution)"))
    │ │ │ │ │  
    │ │ │ │ │  
    │ │ │ │ │  In [45]: fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
    │ │ │ │ │  
    │ │ │ │ │  In [46]: ds.air.plot(ax=axes[0])
    │ │ │ │ │  AttributeError: 'Dataset' object has no attribute 'air'
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/io.html
    │ │ │ │ @@ -630,15 +630,15 @@
    │ │ │ │     ....:         "y": pd.date_range("2000-01-01", periods=5),
    │ │ │ │     ....:         "z": ("x", list("abcd")),
    │ │ │ │     ....:     },
    │ │ │ │     ....: )
    │ │ │ │     ....: 
    │ │ │ │  
    │ │ │ │  In [13]: ds.to_zarr("path/to/directory.zarr")
    │ │ │ │ -Out[13]: <xarray.backends.zarr.ZarrStore at 0x7f5fd3018b80>
    │ │ │ │ +Out[13]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a0b80>
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    (The suffix .zarr is optional–just a reminder that a zarr store lives │ │ │ │ there.) If the directory does not exist, it will be created. If a zarr │ │ │ │ store is already present at that path, an error will be raised, preventing it │ │ │ │ from being overwritten. To override this behavior and overwrite an existing │ │ │ │ store, add mode='w' when invoking to_zarr().

    │ │ │ │ @@ -658,19 +658,19 @@ │ │ │ │

    To read back a zarr dataset that has been created this way, we use the │ │ │ │ open_zarr() method:

    │ │ │ │
    In [14]: ds_zarr = xr.open_zarr("path/to/directory.zarr")
    │ │ │ │  
    │ │ │ │  In [15]: ds_zarr
    │ │ │ │  Out[15]: 
    │ │ │ │  <xarray.Dataset> Size: 264B
    │ │ │ │ -Dimensions:  (x: 4, y: 5)
    │ │ │ │ +Dimensions:  (y: 5, x: 4)
    │ │ │ │  Coordinates:
    │ │ │ │ -    z        (x) object 32B dask.array<chunksize=(4,), meta=np.ndarray>
    │ │ │ │    * y        (y) datetime64[ns] 40B 2000-01-01 2000-01-02 ... 2000-01-05
    │ │ │ │    * x        (x) int64 32B 10 20 30 40
    │ │ │ │ +    z        (x) object 32B dask.array<chunksize=(4,), meta=np.ndarray>
    │ │ │ │  Data variables:
    │ │ │ │      foo      (x, y) float64 160B dask.array<chunksize=(4, 5), meta=np.ndarray>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Cloud Storage Buckets

    │ │ │ │

    It is possible to read and write xarray datasets directly from / to cloud │ │ │ │ @@ -724,36 +724,36 @@ │ │ │ │ │ │ │ │ In [18]: ds = xr.Dataset({"foo": ("x", dummies)}, coords={"x": np.arange(30)}) │ │ │ │ │ │ │ │ In [19]: path = "path/to/directory.zarr" │ │ │ │ │ │ │ │ # Now we write the metadata without computing any array values │ │ │ │ In [20]: ds.to_zarr(path, compute=False) │ │ │ │ -Out[20]: Delayed('_finalize_store-621207f7-9487-48ea-a512-0a05a95bdb89') │ │ │ │ +Out[20]: Delayed('_finalize_store-4704d6e2-a6e4-4d84-bfbb-741b1ece4be8') │ │ │ │ │ │ │ │ │ │ │ │

    Now, a Zarr store with the correct variable shapes and attributes exists that │ │ │ │ can be filled out by subsequent calls to to_zarr. │ │ │ │ Setting region="auto" will open the existing store and determine the │ │ │ │ correct alignment of the new data with the existing dimensions, or as an │ │ │ │ explicit mapping from dimension names to Python slice objects indicating │ │ │ │ where the data should be written (in index space, not label space), e.g.,

    │ │ │ │
    # For convenience, we'll slice a single dataset, but in the real use-case
    │ │ │ │  # we would create them separately possibly even from separate processes.
    │ │ │ │  In [21]: ds = xr.Dataset({"foo": ("x", np.arange(30))}, coords={"x": np.arange(30)})
    │ │ │ │  
    │ │ │ │  # Any of the following region specifications are valid
    │ │ │ │  In [22]: ds.isel(x=slice(0, 10)).to_zarr(path, region="auto")
    │ │ │ │ -Out[22]: <xarray.backends.zarr.ZarrStore at 0x7f5fd3019ea0>
    │ │ │ │ +Out[22]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a1f30>
    │ │ │ │  
    │ │ │ │  In [23]: ds.isel(x=slice(10, 20)).to_zarr(path, region={"x": "auto"})
    │ │ │ │ -Out[23]: <xarray.backends.zarr.ZarrStore at 0x7f5fd3019ab0>
    │ │ │ │ +Out[23]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a1ab0>
    │ │ │ │  
    │ │ │ │  In [24]: ds.isel(x=slice(20, 30)).to_zarr(path, region={"x": slice(20, 30)})
    │ │ │ │ -Out[24]: <xarray.backends.zarr.ZarrStore at 0x7f5fd332ff40>
    │ │ │ │ +Out[24]: <xarray.backends.zarr.ZarrStore at 0x7f34ab6aff40>
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    Concurrent writes with region are safe as long as they modify distinct │ │ │ │ chunks in the underlying Zarr arrays (or use an appropriate lock).

    │ │ │ │

    As a safety check to make it harder to inadvertently override existing values, │ │ │ │ if you set region then all variables included in a Dataset must have │ │ │ │ dimensions included in region. Other variables (typically coordinates) │ │ │ │ @@ -816,28 +816,28 @@ │ │ │ │ ....: "y": [1, 2, 3, 4, 5], │ │ │ │ ....: "t": pd.date_range("2001-01-01", periods=2), │ │ │ │ ....: }, │ │ │ │ ....: ) │ │ │ │ ....: │ │ │ │ │ │ │ │ In [30]: ds1.to_zarr("path/to/directory.zarr") │ │ │ │ -Out[30]: <xarray.backends.zarr.ZarrStore at 0x7f5fd301b0a0> │ │ │ │ +Out[30]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a30a0> │ │ │ │ │ │ │ │ In [31]: ds2 = xr.Dataset( │ │ │ │ ....: {"foo": (("x", "y", "t"), np.random.rand(4, 5, 2))}, │ │ │ │ ....: coords={ │ │ │ │ ....: "x": [10, 20, 30, 40], │ │ │ │ ....: "y": [1, 2, 3, 4, 5], │ │ │ │ ....: "t": pd.date_range("2001-01-03", periods=2), │ │ │ │ ....: }, │ │ │ │ ....: ) │ │ │ │ ....: │ │ │ │ │ │ │ │ In [32]: ds2.to_zarr("path/to/directory.zarr", append_dim="t") │ │ │ │ -Out[32]: <xarray.backends.zarr.ZarrStore at 0x7f5fd301af80> │ │ │ │ +Out[32]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a31c0> │ │ │ │ │ │ │ │ │ │ │ │

    │ │ │ │
    │ │ │ │

    Specifying chunks in a zarr store

    │ │ │ │

    Chunk sizes may be specified in one of three ways when writing to a zarr store:

    │ │ │ │
      │ │ │ │ @@ -861,15 +861,15 @@ │ │ │ │ positional ordering of the dimensions in each array. Watch out for arrays with │ │ │ │ differently-ordered dimensions within a single Dataset.

      │ │ │ │ │ │ │ │

      For example, let’s say we’re working with a dataset with dimensions │ │ │ │ ('time', 'x', 'y'), a variable Tair which is chunked in x and y, │ │ │ │ and two multi-dimensional coordinates xc and yc:

      │ │ │ │
      In [33]: ds = xr.tutorial.open_dataset("rasm")
      │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd3116850>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34ab49a850>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [34]: ds["Tair"] = ds["Tair"].chunk({"x": 100, "y": 100})
      │ │ │ │  KeyError: "No variable named 'Tair'. Variables on the dataset include ['foo', 'x']"
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [35]: ds
      │ │ │ │ @@ -882,15 +882,15 @@
      │ │ │ │      foo      (x) int64 240B 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 27 28 29
      │ │ │ │  
      │ │ │ │
      │ │ │ │

      These multi-dimensional coordinates are only two-dimensional and take up very little │ │ │ │ space on disk or in memory, yet when writing to disk the default zarr behavior is to │ │ │ │ split them into chunks:

      │ │ │ │
      In [36]: ds.to_zarr("path/to/directory.zarr", mode="w")
      │ │ │ │ -Out[36]: <xarray.backends.zarr.ZarrStore at 0x7f5fd301b490>
      │ │ │ │ +Out[36]: <xarray.backends.zarr.ZarrStore at 0x7f34ab3a3490>
      │ │ │ │  
      │ │ │ │  In [37]: ! ls -R path/to/directory.zarr
      │ │ │ │  path/to/directory.zarr:
      │ │ │ │  foo  x	zarr.json
      │ │ │ │  
      │ │ │ │  path/to/directory.zarr/foo:
      │ │ │ │  c  zarr.json
      │ │ │ │ @@ -1069,15 +1069,15 @@
      │ │ │ │  

      Ncdata

      │ │ │ │

      Ncdata provides more sophisticated means of transferring data, including entire │ │ │ │ datasets. It uses the file saving and loading functions in both projects to provide a │ │ │ │ more “correct” translation between them, but still with very low overhead and not │ │ │ │ using actual disk files.

      │ │ │ │

      For example:

      │ │ │ │
      In [48]: ds = xr.tutorial.open_dataset("air_temperature_gradient")
      │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature_gradient.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f5fd31179d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature_gradient.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34ab49b9d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [49]: cubes = ncdata.iris_xarray.cubes_from_xarray(ds)
      │ │ │ │  NameError: name 'ncdata' is not defined
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [50]: print(cubes)
      │ │ │ │ ├── html2text {}
      │ │ │ │ │ @@ -481,15 +481,15 @@
      │ │ │ │ │     ....:         "y": pd.date_range("2000-01-01", periods=5),
      │ │ │ │ │     ....:         "z": ("x", list("abcd")),
      │ │ │ │ │     ....:     },
      │ │ │ │ │     ....: )
      │ │ │ │ │     ....:
      │ │ │ │ │  
      │ │ │ │ │  In [13]: ds.to_zarr("path/to/directory.zarr")
      │ │ │ │ │ -Out[13]: 
      │ │ │ │ │ +Out[13]: 
      │ │ │ │ │  (The suffix .zarr is optional–just a reminder that a zarr store lives there.)
      │ │ │ │ │  If the directory does not exist, it will be created. If a zarr store is already
      │ │ │ │ │  present at that path, an error will be raised, preventing it from being
      │ │ │ │ │  overwritten. To override this behavior and overwrite an existing store, add
      │ │ │ │ │  mode='w' when invoking to_zarr().
      │ │ │ │ │  DataArrays can also be saved to disk using the DataArray.to_zarr() method, and
      │ │ │ │ │  loaded from disk using the open_dataarray() function with engine='zarr'.
      │ │ │ │ │ @@ -505,19 +505,19 @@
      │ │ │ │ │  To read back a zarr dataset that has been created this way, we use the
      │ │ │ │ │  open_zarr() method:
      │ │ │ │ │  In [14]: ds_zarr = xr.open_zarr("path/to/directory.zarr")
      │ │ │ │ │  
      │ │ │ │ │  In [15]: ds_zarr
      │ │ │ │ │  Out[15]:
      │ │ │ │ │   Size: 264B
      │ │ │ │ │ -Dimensions:  (x: 4, y: 5)
      │ │ │ │ │ +Dimensions:  (y: 5, x: 4)
      │ │ │ │ │  Coordinates:
      │ │ │ │ │ -    z        (x) object 32B dask.array
      │ │ │ │ │    * y        (y) datetime64[ns] 40B 2000-01-01 2000-01-02 ... 2000-01-05
      │ │ │ │ │    * x        (x) int64 32B 10 20 30 40
      │ │ │ │ │ +    z        (x) object 32B dask.array
      │ │ │ │ │  Data variables:
      │ │ │ │ │      foo      (x, y) float64 160B dask.array
      │ │ │ │ │  ******** CClloouudd SSttoorraaggee BBuucckkeettss_?¶ ********
      │ │ │ │ │  It is possible to read and write xarray datasets directly from / to cloud
      │ │ │ │ │  storage buckets using zarr. This example uses the _g_c_s_f_s package to provide an
      │ │ │ │ │  interface to _G_o_o_g_l_e_ _C_l_o_u_d_ _S_t_o_r_a_g_e.
      │ │ │ │ │  General _f_s_s_p_e_c URLs, those that begin with s3:// or gcs:// for example, are
      │ │ │ │ │ @@ -562,35 +562,35 @@
      │ │ │ │ │  
      │ │ │ │ │  In [18]: ds = xr.Dataset({"foo": ("x", dummies)}, coords={"x": np.arange(30)})
      │ │ │ │ │  
      │ │ │ │ │  In [19]: path = "path/to/directory.zarr"
      │ │ │ │ │  
      │ │ │ │ │  # Now we write the metadata without computing any array values
      │ │ │ │ │  In [20]: ds.to_zarr(path, compute=False)
      │ │ │ │ │ -Out[20]: Delayed('_finalize_store-621207f7-9487-48ea-a512-0a05a95bdb89')
      │ │ │ │ │ +Out[20]: Delayed('_finalize_store-4704d6e2-a6e4-4d84-bfbb-741b1ece4be8')
      │ │ │ │ │  Now, a Zarr store with the correct variable shapes and attributes exists that
      │ │ │ │ │  can be filled out by subsequent calls to to_zarr. Setting region="auto" will
      │ │ │ │ │  open the existing store and determine the correct alignment of the new data
      │ │ │ │ │  with the existing dimensions, or as an explicit mapping from dimension names to
      │ │ │ │ │  Python slice objects indicating where the data should be written (in index
      │ │ │ │ │  space, not label space), e.g.,
      │ │ │ │ │  # For convenience, we'll slice a single dataset, but in the real use-case
      │ │ │ │ │  # we would create them separately possibly even from separate processes.
      │ │ │ │ │  In [21]: ds = xr.Dataset({"foo": ("x", np.arange(30))}, coords={"x": np.arange
      │ │ │ │ │  (30)})
      │ │ │ │ │  
      │ │ │ │ │  # Any of the following region specifications are valid
      │ │ │ │ │  In [22]: ds.isel(x=slice(0, 10)).to_zarr(path, region="auto")
      │ │ │ │ │ -Out[22]: 
      │ │ │ │ │ +Out[22]: 
      │ │ │ │ │  
      │ │ │ │ │  In [23]: ds.isel(x=slice(10, 20)).to_zarr(path, region={"x": "auto"})
      │ │ │ │ │ -Out[23]: 
      │ │ │ │ │ +Out[23]: 
      │ │ │ │ │  
      │ │ │ │ │  In [24]: ds.isel(x=slice(20, 30)).to_zarr(path, region={"x": slice(20, 30)})
      │ │ │ │ │ -Out[24]: 
      │ │ │ │ │ +Out[24]: 
      │ │ │ │ │  Concurrent writes with region are safe as long as they modify distinct chunks
      │ │ │ │ │  in the underlying Zarr arrays (or use an appropriate lock).
      │ │ │ │ │  As a safety check to make it harder to inadvertently override existing values,
      │ │ │ │ │  if you set region then aallll variables included in a Dataset must have dimensions
      │ │ │ │ │  included in region. Other variables (typically coordinates) need to be
      │ │ │ │ │  explicitly dropped and/or written in a separate calls to to_zarr with mode='a'.
      │ │ │ │ │  ******** ZZaarrrr CCoommpprreessssoorrss aanndd FFiilltteerrss_?¶ ********
      │ │ │ │ │ @@ -636,28 +636,28 @@
      │ │ │ │ │     ....:         "y": [1, 2, 3, 4, 5],
      │ │ │ │ │     ....:         "t": pd.date_range("2001-01-01", periods=2),
      │ │ │ │ │     ....:     },
      │ │ │ │ │     ....: )
      │ │ │ │ │     ....:
      │ │ │ │ │  
      │ │ │ │ │  In [30]: ds1.to_zarr("path/to/directory.zarr")
      │ │ │ │ │ -Out[30]: 
      │ │ │ │ │ +Out[30]: 
      │ │ │ │ │  
      │ │ │ │ │  In [31]: ds2 = xr.Dataset(
      │ │ │ │ │     ....:     {"foo": (("x", "y", "t"), np.random.rand(4, 5, 2))},
      │ │ │ │ │     ....:     coords={
      │ │ │ │ │     ....:         "x": [10, 20, 30, 40],
      │ │ │ │ │     ....:         "y": [1, 2, 3, 4, 5],
      │ │ │ │ │     ....:         "t": pd.date_range("2001-01-03", periods=2),
      │ │ │ │ │     ....:     },
      │ │ │ │ │     ....: )
      │ │ │ │ │     ....:
      │ │ │ │ │  
      │ │ │ │ │  In [32]: ds2.to_zarr("path/to/directory.zarr", append_dim="t")
      │ │ │ │ │ -Out[32]: 
      │ │ │ │ │ +Out[32]: 
      │ │ │ │ │  ******** SSppeecciiffyyiinngg cchhuunnkkss iinn aa zzaarrrr ssttoorree_?¶ ********
      │ │ │ │ │  Chunk sizes may be specified in one of three ways when writing to a zarr store:
      │ │ │ │ │     1. Manual chunk sizing through the use of the encoding argument in
      │ │ │ │ │        Dataset.to_zarr():
      │ │ │ │ │     2. Automatic chunking based on chunks in dask arrays
      │ │ │ │ │     3. Default chunk behavior determined by the zarr library
      │ │ │ │ │  The resulting chunks will be determined based on the order of the above list;
      │ │ │ │ │ @@ -678,15 +678,15 @@
      │ │ │ │ │  For example, let’s say we’re working with a dataset with dimensions ('time',
      │ │ │ │ │  'x', 'y'), a variable Tair which is chunked in x and y, and two multi-
      │ │ │ │ │  dimensional coordinates xc and yc:
      │ │ │ │ │  In [33]: ds = xr.tutorial.open_dataset("rasm")
      │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
      │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/rasm.nc (Caused by
      │ │ │ │ │  NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
      │ │ │ │ │ +0x7f34ab49a850>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
      │ │ │ │ │  in name resolution)"))
      │ │ │ │ │  
      │ │ │ │ │  
      │ │ │ │ │  In [34]: ds["Tair"] = ds["Tair"].chunk({"x": 100, "y": 100})
      │ │ │ │ │  KeyError: "No variable named 'Tair'. Variables on the dataset include ['foo',
      │ │ │ │ │  'x']"
      │ │ │ │ │  
      │ │ │ │ │ @@ -699,15 +699,15 @@
      │ │ │ │ │    * x        (x) int64 240B 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 27 28 29
      │ │ │ │ │  Data variables:
      │ │ │ │ │      foo      (x) int64 240B 0 1 2 3 4 5 6 7 8 9 ... 21 22 23 24 25 26 27 28 29
      │ │ │ │ │  These multi-dimensional coordinates are only two-dimensional and take up very
      │ │ │ │ │  little space on disk or in memory, yet when writing to disk the default zarr
      │ │ │ │ │  behavior is to split them into chunks:
      │ │ │ │ │  In [36]: ds.to_zarr("path/to/directory.zarr", mode="w")
      │ │ │ │ │ -Out[36]: 
      │ │ │ │ │ +Out[36]: 
      │ │ │ │ │  
      │ │ │ │ │  In [37]: ! ls -R path/to/directory.zarr
      │ │ │ │ │  path/to/directory.zarr:
      │ │ │ │ │  foo  x	zarr.json
      │ │ │ │ │  
      │ │ │ │ │  path/to/directory.zarr/foo:
      │ │ │ │ │  c  zarr.json
      │ │ │ │ │ @@ -862,15 +862,15 @@
      │ │ │ │ │  provide a more “correct” translation between them, but still with very low
      │ │ │ │ │  overhead and not using actual disk files.
      │ │ │ │ │  For example:
      │ │ │ │ │  In [48]: ds = xr.tutorial.open_dataset("air_temperature_gradient")
      │ │ │ │ │  ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries
      │ │ │ │ │  exceeded with url: /pydata/xarray-data/raw/master/air_temperature_gradient.nc
      │ │ │ │ │  (Caused by NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure
      │ │ │ │ │ +0x7f34ab49b9d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure
      │ │ │ │ │  in name resolution)"))
      │ │ │ │ │  
      │ │ │ │ │  
      │ │ │ │ │  In [49]: cubes = ncdata.iris_xarray.cubes_from_xarray(ds)
      │ │ │ │ │  NameError: name 'ncdata' is not defined
      │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/plotting.html
      │ │ │ │ @@ -100,15 +100,15 @@
      │ │ │ │  In [3]: import matplotlib.pyplot as plt
      │ │ │ │  
      │ │ │ │  In [4]: import xarray as xr
      │ │ │ │  
      │ │ │ │
      │ │ │ │

      For these examples we’ll use the North American air temperature dataset.

      │ │ │ │
      In [5]: airtemps = xr.tutorial.open_dataset("air_temperature")
      │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f60265c3110>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34f8113110>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [6]: airtemps
      │ │ │ │  NameError: name 'airtemps' is not defined
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  # Convert to celsius
      │ │ │ │ @@ -445,15 +445,15 @@
      │ │ │ │  
      │ │ │ │  # Apply a nonlinear transformation to one of the coords
      │ │ │ │  In [50]: b.coords["lat"] = np.log(b.coords["lat"])
      │ │ │ │  KeyError: 'lat'
      │ │ │ │  
      │ │ │ │  
      │ │ │ │  In [51]: b.plot()
      │ │ │ │ -Out[51]: [<matplotlib.lines.Line2D at 0x7f6025e1ee90>]
      │ │ │ │ +Out[51]: [<matplotlib.lines.Line2D at 0x7f34f7b0ae90>]
      │ │ │ │  
      │ │ │ │
      │ │ │ │ ../_images/plotting_nonuniform_coords.png │ │ │ │ │ │ │ │
    │ │ │ │
    │ │ │ │

    Other types of plot

    │ │ │ │ @@ -857,117 +857,117 @@ │ │ │ │ * y (y) float64 88B 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 │ │ │ │ * z (z) int64 32B 0 1 2 3 │ │ │ │ * w (w) <U5 80B 'one' 'two' 'three' 'five' │ │ │ │ Attributes: │ │ │ │ units: Aunits │ │ │ │ │ │ │ │ In [99]: ds.A.plot.scatter(x="y") │ │ │ │ -Out[99]: <matplotlib.collections.PathCollection at 0x7f602628bb60> │ │ │ │ +Out[99]: <matplotlib.collections.PathCollection at 0x7f34f81f3b60> │ │ │ │ │ │ │ │ │ │ │ │ ../_images/da_A_y.png │ │ │ │

    Same plot can be displayed using the dataset:

    │ │ │ │
    In [100]: ds.plot.scatter(x="y", y="A")
    │ │ │ │ -Out[100]: <matplotlib.collections.PathCollection at 0x7f6025ce4910>
    │ │ │ │ +Out[100]: <matplotlib.collections.PathCollection at 0x7f34f79d8910>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_A_y.png │ │ │ │

    Now suppose we want to scatter the A DataArray against the B DataArray

    │ │ │ │
    In [101]: ds.plot.scatter(x="A", y="B")
    │ │ │ │ -Out[101]: <matplotlib.collections.PathCollection at 0x7f6025e0bc50>
    │ │ │ │ +Out[101]: <matplotlib.collections.PathCollection at 0x7f34f7af7c50>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_simple_scatter.png │ │ │ │

    The hue kwarg lets you vary the color by variable value

    │ │ │ │
    In [102]: ds.plot.scatter(x="A", y="B", hue="w")
    │ │ │ │ -Out[102]: <matplotlib.collections.PathCollection at 0x7f6025ce4f50>
    │ │ │ │ +Out[102]: <matplotlib.collections.PathCollection at 0x7f34f79d8f50>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_hue_scatter.png │ │ │ │

    You can force a legend instead of a colorbar by setting add_legend=True, add_colorbar=False.

    │ │ │ │
    In [103]: ds.plot.scatter(x="A", y="B", hue="w", add_legend=True, add_colorbar=False)
    │ │ │ │ -Out[103]: <matplotlib.collections.PathCollection at 0x7f6006c99e50>
    │ │ │ │ +Out[103]: <matplotlib.collections.PathCollection at 0x7f34c1c23b10>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_discrete_legend_hue_scatter.png │ │ │ │
    In [104]: ds.plot.scatter(x="A", y="B", hue="w", add_legend=False, add_colorbar=True)
    │ │ │ │ -Out[104]: <matplotlib.collections.PathCollection at 0x7f5fd2b2ead0>
    │ │ │ │ +Out[104]: <matplotlib.collections.PathCollection at 0x7f34c19b5810>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_discrete_colorbar_hue_scatter.png │ │ │ │

    The markersize kwarg lets you vary the point’s size by variable value. │ │ │ │ You can additionally pass size_norm to control how the variable’s values are mapped to point sizes.

    │ │ │ │
    In [105]: ds.plot.scatter(x="A", y="B", hue="y", markersize="z")
    │ │ │ │ -Out[105]: <matplotlib.collections.PathCollection at 0x7f6006c9a490>
    │ │ │ │ +Out[105]: <matplotlib.collections.PathCollection at 0x7f34c1c23610>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_hue_size_scatter.png │ │ │ │

    The z kwarg lets you plot the data along the z-axis as well.

    │ │ │ │
    In [106]: ds.plot.scatter(x="A", y="B", z="z", hue="y", markersize="x")
    │ │ │ │ -Out[106]: <mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7f6025c134d0>
    │ │ │ │ +Out[106]: <mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7f34f78e0410>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_hue_size_scatter_z.png │ │ │ │

    Faceting is also possible

    │ │ │ │
    In [107]: ds.plot.scatter(x="A", y="B", hue="y", markersize="x", row="x", col="w")
    │ │ │ │ -Out[107]: <xarray.plot.facetgrid.FacetGrid at 0x7f5fd32e9010>
    │ │ │ │ +Out[107]: <xarray.plot.facetgrid.FacetGrid at 0x7f34ab85d010>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_facet_scatter.png │ │ │ │

    And adding the z-axis

    │ │ │ │
    In [108]: ds.plot.scatter(x="A", y="B", z="z", hue="y", markersize="x", row="x", col="w")
    │ │ │ │ -Out[108]: <xarray.plot.facetgrid.FacetGrid at 0x7f602565e5d0>
    │ │ │ │ +Out[108]: <xarray.plot.facetgrid.FacetGrid at 0x7f34f714a5d0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_facet_scatter_z.png │ │ │ │

    For more advanced scatter plots, we recommend converting the relevant data variables │ │ │ │ to a pandas DataFrame and using the extensive plotting capabilities of seaborn.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    Quiver

    │ │ │ │

    Visualizing vector fields is supported with quiver plots:

    │ │ │ │
    In [109]: ds.isel(w=1, z=1).plot.quiver(x="x", y="y", u="A", v="B")
    │ │ │ │ -Out[109]: <matplotlib.quiver.Quiver at 0x7f5fd2c10590>
    │ │ │ │ +Out[109]: <matplotlib.quiver.Quiver at 0x7f34b83f0590>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_simple_quiver.png │ │ │ │

    where u and v denote the x and y direction components of the arrow vectors. Again, faceting is also possible:

    │ │ │ │
    In [110]: ds.plot.quiver(x="x", y="y", u="A", v="B", col="w", row="z", scale=4)
    │ │ │ │ -Out[110]: <xarray.plot.facetgrid.FacetGrid at 0x7f6025496d50>
    │ │ │ │ +Out[110]: <xarray.plot.facetgrid.FacetGrid at 0x7f34f6f84b90>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_facet_quiver.png │ │ │ │

    scale is required for faceted quiver plots. │ │ │ │ The scale determines the number of data units per arrow length unit, i.e. a smaller scale parameter makes the arrow longer.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    Streamplot

    │ │ │ │

    Visualizing vector fields is also supported with streamline plots:

    │ │ │ │
    In [111]: ds.isel(w=1, z=1).plot.streamplot(x="x", y="y", u="A", v="B")
    │ │ │ │ -Out[111]: <matplotlib.collections.LineCollection at 0x7f6025680b90>
    │ │ │ │ +Out[111]: <matplotlib.collections.LineCollection at 0x7f34f717a0d0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_simple_streamplot.png │ │ │ │

    where u and v denote the x and y direction components of the vectors tangent to the streamlines. │ │ │ │ Again, faceting is also possible:

    │ │ │ │
    In [112]: ds.plot.streamplot(x="x", y="y", u="A", v="B", col="w", row="z")
    │ │ │ │ -Out[112]: <xarray.plot.facetgrid.FacetGrid at 0x7f5fd3fca190>
    │ │ │ │ +Out[112]: <xarray.plot.facetgrid.FacetGrid at 0x7f34b88a2190>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/ds_facet_streamplot.png │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │

    Maps

    │ │ │ │

    To follow this section you’ll need to have Cartopy installed and working.

    │ │ │ │

    This script will plot the air temperature on a map.

    │ │ │ │
    In [113]: import cartopy.crs as ccrs
    │ │ │ │  
    │ │ │ │  In [114]: air = xr.tutorial.open_dataset("air_temperature").air
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f602541d1d0>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34f6514550>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  In [115]: p = air.isel(time=0).plot(
    │ │ │ │     .....:     subplot_kws=dict(projection=ccrs.Orthographic(-80, 35), facecolor="gray"),
    │ │ │ │     .....:     transform=ccrs.PlateCarree(),
    │ │ │ │     .....: )
    │ │ │ │     .....: 
    │ │ │ │ @@ -1024,24 +1024,24 @@
    │ │ │ │  
    In [121]: import xarray.plot as xplt
    │ │ │ │  
    │ │ │ │  In [122]: da = xr.DataArray(range(5))
    │ │ │ │  
    │ │ │ │  In [123]: fig, axs = plt.subplots(ncols=2, nrows=2)
    │ │ │ │  
    │ │ │ │  In [124]: da.plot(ax=axs[0, 0])
    │ │ │ │ -Out[124]: [<matplotlib.lines.Line2D at 0x7f60248e1950>]
    │ │ │ │ +Out[124]: [<matplotlib.lines.Line2D at 0x7f34f6436850>]
    │ │ │ │  
    │ │ │ │  In [125]: da.plot.line(ax=axs[0, 1])
    │ │ │ │ -Out[125]: [<matplotlib.lines.Line2D at 0x7f60248e1a90>]
    │ │ │ │ +Out[125]: [<matplotlib.lines.Line2D at 0x7f34f6436990>]
    │ │ │ │  
    │ │ │ │  In [126]: xplt.plot(da, ax=axs[1, 0])
    │ │ │ │ -Out[126]: [<matplotlib.lines.Line2D at 0x7f60248e1bd0>]
    │ │ │ │ +Out[126]: [<matplotlib.lines.Line2D at 0x7f34f6436ad0>]
    │ │ │ │  
    │ │ │ │  In [127]: xplt.line(da, ax=axs[1, 1])
    │ │ │ │ -Out[127]: [<matplotlib.lines.Line2D at 0x7f60248e1d10>]
    │ │ │ │ +Out[127]: [<matplotlib.lines.Line2D at 0x7f34f6435f90>]
    │ │ │ │  
    │ │ │ │  In [128]: plt.tight_layout()
    │ │ │ │  
    │ │ │ │  In [129]: plt.draw()
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/plotting_ways_to_use.png │ │ │ │ @@ -1091,15 +1091,15 @@ │ │ │ │
    │ │ │ │

    The plot will produce an image corresponding to the values of the array. │ │ │ │ Hence the top left pixel will be a different color than the others. │ │ │ │ Before reading on, you may want to look at the coordinates and │ │ │ │ think carefully about what the limits, labels, and orientation for │ │ │ │ each of the axes should be.

    │ │ │ │
    In [134]: a.plot()
    │ │ │ │ -Out[134]: <matplotlib.collections.QuadMesh at 0x7f6024e5a710>
    │ │ │ │ +Out[134]: <matplotlib.collections.QuadMesh at 0x7f34f631d810>
    │ │ │ │  
    │ │ │ │
    │ │ │ │
    ../_images/plotting_example_2d_simple.png │ │ │ │ │ │ │ │

    It may seem strange that │ │ │ │ the values on the y axis are decreasing with -0.5 on the top. This is because │ │ │ │ the pixels are centered over their coordinates, and the │ │ │ │ @@ -1122,57 +1122,57 @@ │ │ │ │ .....: np.arange(20).reshape(4, 5), │ │ │ │ .....: dims=["y", "x"], │ │ │ │ .....: coords={"lat": (("y", "x"), lat), "lon": (("y", "x"), lon)}, │ │ │ │ .....: ) │ │ │ │ .....: │ │ │ │ │ │ │ │ In [139]: da.plot.pcolormesh(x="lon", y="lat") │ │ │ │ -Out[139]: <matplotlib.collections.QuadMesh at 0x7f6024653890> │ │ │ │ +Out[139]: <matplotlib.collections.QuadMesh at 0x7f34f613a0d0> │ │ │ │

    │ │ │ │ │ │ │ │ ../_images/plotting_example_2d_irreg.png │ │ │ │ │ │ │ │

    Note that in this case, xarray still follows the pixel centered convention. │ │ │ │ This might be undesirable in some cases, for example when your data is defined │ │ │ │ on a polar projection (GH781). This is why the default is to not follow │ │ │ │ this convention when plotting on a map:

    │ │ │ │
    In [140]: import cartopy.crs as ccrs
    │ │ │ │  
    │ │ │ │  In [141]: ax = plt.subplot(projection=ccrs.PlateCarree())
    │ │ │ │  
    │ │ │ │  In [142]: da.plot.pcolormesh(x="lon", y="lat", ax=ax)
    │ │ │ │ -Out[142]: <cartopy.mpl.geocollection.GeoQuadMesh at 0x7f6024636350>
    │ │ │ │ +Out[142]: <cartopy.mpl.geocollection.GeoQuadMesh at 0x7f34f65d2350>
    │ │ │ │  
    │ │ │ │  In [143]: ax.scatter(lon, lat, transform=ccrs.PlateCarree())
    │ │ │ │ -Out[143]: <matplotlib.collections.PathCollection at 0x7f60248e3ed0>
    │ │ │ │ +Out[143]: <matplotlib.collections.PathCollection at 0x7f34f66b9d10>
    │ │ │ │  
    │ │ │ │  In [144]: ax.coastlines()
    │ │ │ │ -Out[144]: <cartopy.mpl.feature_artist.FeatureArtist at 0x7f5fd2c138c0>
    │ │ │ │ +Out[144]: <cartopy.mpl.feature_artist.FeatureArtist at 0x7f34b83f38c0>
    │ │ │ │  
    │ │ │ │  In [145]: ax.gridlines(draw_labels=True)
    │ │ │ │ -Out[145]: <cartopy.mpl.gridliner.Gridliner at 0x7f6006beaba0>
    │ │ │ │ +Out[145]: <cartopy.mpl.gridliner.Gridliner at 0x7f34b83f06e0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/plotting_example_2d_irreg_map.png │ │ │ │ │ │ │ │

    You can however decide to infer the cell boundaries and use the │ │ │ │ infer_intervals keyword:

    │ │ │ │
    In [146]: ax = plt.subplot(projection=ccrs.PlateCarree())
    │ │ │ │  
    │ │ │ │  In [147]: da.plot.pcolormesh(x="lon", y="lat", ax=ax, infer_intervals=True)
    │ │ │ │ -Out[147]: <cartopy.mpl.geocollection.GeoQuadMesh at 0x7f60259251d0>
    │ │ │ │ +Out[147]: <cartopy.mpl.geocollection.GeoQuadMesh at 0x7f34f6f5f9d0>
    │ │ │ │  
    │ │ │ │  In [148]: ax.scatter(lon, lat, transform=ccrs.PlateCarree())
    │ │ │ │ -Out[148]: <matplotlib.collections.PathCollection at 0x7f60245b79d0>
    │ │ │ │ +Out[148]: <matplotlib.collections.PathCollection at 0x7f34f62a6710>
    │ │ │ │  
    │ │ │ │  In [149]: ax.coastlines()
    │ │ │ │ -Out[149]: <cartopy.mpl.feature_artist.FeatureArtist at 0x7f60245b47d0>
    │ │ │ │ +Out[149]: <cartopy.mpl.feature_artist.FeatureArtist at 0x7f34f62a65d0>
    │ │ │ │  
    │ │ │ │  In [150]: ax.gridlines(draw_labels=True)
    │ │ │ │ -Out[150]: <cartopy.mpl.gridliner.Gridliner at 0x7f60245b4690>
    │ │ │ │ +Out[150]: <cartopy.mpl.gridliner.Gridliner at 0x7f34f62a6490>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _build/html/_static/plotting_example_2d_irreg_map_infer.png │ │ │ │ │ │ │ │
    │ │ │ │

    Note

    │ │ │ │

    The data model of xarray does not support datasets with cell boundaries │ │ │ │ @@ -1180,26 +1180,26 @@ │ │ │ │ outside the xarray framework.

    │ │ │ │
    │ │ │ │

    One can also make line plots with multidimensional coordinates. In this case, hue must be a dimension name, not a coordinate name.

    │ │ │ │
    In [151]: f, ax = plt.subplots(2, 1)
    │ │ │ │  
    │ │ │ │  In [152]: da.plot.line(x="lon", hue="y", ax=ax[0])
    │ │ │ │  Out[152]: 
    │ │ │ │ -[<matplotlib.lines.Line2D at 0x7f6024786990>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6024786fd0>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6024786e90>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6024786d50>]
    │ │ │ │ +[<matplotlib.lines.Line2D at 0x7f34f6273c50>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f6273b10>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f62739d0>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f6271310>]
    │ │ │ │  
    │ │ │ │  In [153]: da.plot.line(x="lon", hue="x", ax=ax[1])
    │ │ │ │  Out[153]: 
    │ │ │ │ -[<matplotlib.lines.Line2D at 0x7f6025390e10>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6025390cd0>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6025390b90>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6025390a50>,
    │ │ │ │ - <matplotlib.lines.Line2D at 0x7f6025391090>]
    │ │ │ │ +[<matplotlib.lines.Line2D at 0x7f34f6273390>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f6273250>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f62707d0>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f6270690>,
    │ │ │ │ + <matplotlib.lines.Line2D at 0x7f34f6270550>]
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/plotting_example_2d_hue_xy.png │ │ │ │
    │ │ │ │
    │ │ │ │
    │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -32,15 +32,15 @@ │ │ │ │ │ │ │ │ │ │ In [4]: import xarray as xr │ │ │ │ │ For these examples we’ll use the North American air temperature dataset. │ │ │ │ │ In [5]: airtemps = xr.tutorial.open_dataset("air_temperature") │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34f8113110>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ In [6]: airtemps │ │ │ │ │ NameError: name 'airtemps' is not defined │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -294,15 +294,15 @@ │ │ │ │ │ │ │ │ │ │ # Apply a nonlinear transformation to one of the coords │ │ │ │ │ In [50]: b.coords["lat"] = np.log(b.coords["lat"]) │ │ │ │ │ KeyError: 'lat' │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ In [51]: b.plot() │ │ │ │ │ -Out[51]: [] │ │ │ │ │ +Out[51]: [] │ │ │ │ │ _[_._._/___i_m_a_g_e_s_/_p_l_o_t_t_i_n_g___n_o_n_u_n_i_f_o_r_m___c_o_o_r_d_s_._p_n_g_] │ │ │ │ │ ****** OOtthheerr ttyyppeess ooff pplloott_?¶ ****** │ │ │ │ │ There are several other options for plotting 2D data. │ │ │ │ │ Contour plot using DataArray.plot.contour() │ │ │ │ │ In [52]: air2d.plot.contour() │ │ │ │ │ NameError: name 'air2d' is not defined │ │ │ │ │ _[_._._/___i_m_a_g_e_s_/_p_l_o_t_t_i_n_g___c_o_n_t_o_u_r_._p_n_g_] │ │ │ │ │ @@ -615,94 +615,94 @@ │ │ │ │ │ * y (y) float64 88B 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 │ │ │ │ │ * z (z) int64 32B 0 1 2 3 │ │ │ │ │ * w (w) │ │ │ │ │ +Out[99]: │ │ │ │ │ [../_images/da_A_y.png] │ │ │ │ │ Same plot can be displayed using the dataset: │ │ │ │ │ In [100]: ds.plot.scatter(x="y", y="A") │ │ │ │ │ -Out[100]: │ │ │ │ │ +Out[100]: │ │ │ │ │ [../_images/ds_A_y.png] │ │ │ │ │ Now suppose we want to scatter the A DataArray against the B DataArray │ │ │ │ │ In [101]: ds.plot.scatter(x="A", y="B") │ │ │ │ │ -Out[101]: │ │ │ │ │ +Out[101]: │ │ │ │ │ [../_images/ds_simple_scatter.png] │ │ │ │ │ The hue kwarg lets you vary the color by variable value │ │ │ │ │ In [102]: ds.plot.scatter(x="A", y="B", hue="w") │ │ │ │ │ -Out[102]: │ │ │ │ │ +Out[102]: │ │ │ │ │ [../_images/ds_hue_scatter.png] │ │ │ │ │ You can force a legend instead of a colorbar by setting add_legend=True, │ │ │ │ │ add_colorbar=False. │ │ │ │ │ In [103]: ds.plot.scatter(x="A", y="B", hue="w", add_legend=True, │ │ │ │ │ add_colorbar=False) │ │ │ │ │ -Out[103]: │ │ │ │ │ +Out[103]: │ │ │ │ │ [../_images/ds_discrete_legend_hue_scatter.png] │ │ │ │ │ In [104]: ds.plot.scatter(x="A", y="B", hue="w", add_legend=False, │ │ │ │ │ add_colorbar=True) │ │ │ │ │ -Out[104]: │ │ │ │ │ +Out[104]: │ │ │ │ │ [../_images/ds_discrete_colorbar_hue_scatter.png] │ │ │ │ │ The markersize kwarg lets you vary the point’s size by variable value. You can │ │ │ │ │ additionally pass size_norm to control how the variable’s values are mapped to │ │ │ │ │ point sizes. │ │ │ │ │ In [105]: ds.plot.scatter(x="A", y="B", hue="y", markersize="z") │ │ │ │ │ -Out[105]: │ │ │ │ │ +Out[105]: │ │ │ │ │ [../_images/ds_hue_size_scatter.png] │ │ │ │ │ The z kwarg lets you plot the data along the z-axis as well. │ │ │ │ │ In [106]: ds.plot.scatter(x="A", y="B", z="z", hue="y", markersize="x") │ │ │ │ │ -Out[106]: │ │ │ │ │ +Out[106]: │ │ │ │ │ [../_images/ds_hue_size_scatter_z.png] │ │ │ │ │ Faceting is also possible │ │ │ │ │ In [107]: ds.plot.scatter(x="A", y="B", hue="y", markersize="x", row="x", │ │ │ │ │ col="w") │ │ │ │ │ -Out[107]: │ │ │ │ │ +Out[107]: │ │ │ │ │ [../_images/ds_facet_scatter.png] │ │ │ │ │ And adding the z-axis │ │ │ │ │ In [108]: ds.plot.scatter(x="A", y="B", z="z", hue="y", markersize="x", │ │ │ │ │ row="x", col="w") │ │ │ │ │ -Out[108]: │ │ │ │ │ +Out[108]: │ │ │ │ │ [../_images/ds_facet_scatter_z.png] │ │ │ │ │ For more advanced scatter plots, we recommend converting the relevant data │ │ │ │ │ variables to a pandas DataFrame and using the extensive plotting capabilities │ │ │ │ │ of seaborn. │ │ │ │ │ ******** QQuuiivveerr_?¶ ******** │ │ │ │ │ Visualizing vector fields is supported with quiver plots: │ │ │ │ │ In [109]: ds.isel(w=1, z=1).plot.quiver(x="x", y="y", u="A", v="B") │ │ │ │ │ -Out[109]: │ │ │ │ │ +Out[109]: │ │ │ │ │ [../_images/ds_simple_quiver.png] │ │ │ │ │ where u and v denote the x and y direction components of the arrow vectors. │ │ │ │ │ Again, faceting is also possible: │ │ │ │ │ In [110]: ds.plot.quiver(x="x", y="y", u="A", v="B", col="w", row="z", scale=4) │ │ │ │ │ -Out[110]: │ │ │ │ │ +Out[110]: │ │ │ │ │ [../_images/ds_facet_quiver.png] │ │ │ │ │ scale is required for faceted quiver plots. The scale determines the number of │ │ │ │ │ data units per arrow length unit, i.e. a smaller scale parameter makes the │ │ │ │ │ arrow longer. │ │ │ │ │ ******** SSttrreeaammpplloott_?¶ ******** │ │ │ │ │ Visualizing vector fields is also supported with streamline plots: │ │ │ │ │ In [111]: ds.isel(w=1, z=1).plot.streamplot(x="x", y="y", u="A", v="B") │ │ │ │ │ -Out[111]: │ │ │ │ │ +Out[111]: │ │ │ │ │ [../_images/ds_simple_streamplot.png] │ │ │ │ │ where u and v denote the x and y direction components of the vectors tangent to │ │ │ │ │ the streamlines. Again, faceting is also possible: │ │ │ │ │ In [112]: ds.plot.streamplot(x="x", y="y", u="A", v="B", col="w", row="z") │ │ │ │ │ -Out[112]: │ │ │ │ │ +Out[112]: │ │ │ │ │ [../_images/ds_facet_streamplot.png] │ │ │ │ │ ********** MMaappss_?¶ ********** │ │ │ │ │ To follow this section you’ll need to have Cartopy installed and working. │ │ │ │ │ This script will plot the air temperature on a map. │ │ │ │ │ In [113]: import cartopy.crs as ccrs │ │ │ │ │ │ │ │ │ │ In [114]: air = xr.tutorial.open_dataset("air_temperature").air │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34f6514550>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ In [115]: p = air.isel(time=0).plot( │ │ │ │ │ .....: subplot_kws=dict(projection=ccrs.Orthographic(-80, 35), │ │ │ │ │ facecolor="gray"), │ │ │ │ │ .....: transform=ccrs.PlateCarree(), │ │ │ │ │ @@ -749,24 +749,24 @@ │ │ │ │ │ In [121]: import xarray.plot as xplt │ │ │ │ │ │ │ │ │ │ In [122]: da = xr.DataArray(range(5)) │ │ │ │ │ │ │ │ │ │ In [123]: fig, axs = plt.subplots(ncols=2, nrows=2) │ │ │ │ │ │ │ │ │ │ In [124]: da.plot(ax=axs[0, 0]) │ │ │ │ │ -Out[124]: [] │ │ │ │ │ +Out[124]: [] │ │ │ │ │ │ │ │ │ │ In [125]: da.plot.line(ax=axs[0, 1]) │ │ │ │ │ -Out[125]: [] │ │ │ │ │ +Out[125]: [] │ │ │ │ │ │ │ │ │ │ In [126]: xplt.plot(da, ax=axs[1, 0]) │ │ │ │ │ -Out[126]: [] │ │ │ │ │ +Out[126]: [] │ │ │ │ │ │ │ │ │ │ In [127]: xplt.line(da, ax=axs[1, 1]) │ │ │ │ │ -Out[127]: [] │ │ │ │ │ +Out[127]: [] │ │ │ │ │ │ │ │ │ │ In [128]: plt.tight_layout() │ │ │ │ │ │ │ │ │ │ In [129]: plt.draw() │ │ │ │ │ _[_._._/___i_m_a_g_e_s_/_p_l_o_t_t_i_n_g___w_a_y_s___t_o___u_s_e_._p_n_g_] │ │ │ │ │ Here the output is the same. Since the data is 1 dimensional the line plot was │ │ │ │ │ used. │ │ │ │ │ @@ -797,15 +797,15 @@ │ │ │ │ │ [0., 0., 0.]], shape=(4, 3)) │ │ │ │ │ Dimensions without coordinates: y, x │ │ │ │ │ The plot will produce an image corresponding to the values of the array. Hence │ │ │ │ │ the top left pixel will be a different color than the others. Before reading │ │ │ │ │ on, you may want to look at the coordinates and think carefully about what the │ │ │ │ │ limits, labels, and orientation for each of the axes should be. │ │ │ │ │ In [134]: a.plot() │ │ │ │ │ -Out[134]: │ │ │ │ │ +Out[134]: │ │ │ │ │ _[_._._/___i_m_a_g_e_s_/_p_l_o_t_t_i_n_g___e_x_a_m_p_l_e___2_d___s_i_m_p_l_e_._p_n_g_] │ │ │ │ │ It may seem strange that the values on the y axis are decreasing with -0.5 on │ │ │ │ │ the top. This is because the pixels are centered over their coordinates, and │ │ │ │ │ the axis labels and ranges correspond to the values of the coordinates. │ │ │ │ │ ******** MMuullttiiddiimmeennssiioonnaall ccoooorrddiinnaatteess_?¶ ******** │ │ │ │ │ See also: _W_o_r_k_i_n_g_ _w_i_t_h_ _M_u_l_t_i_d_i_m_e_n_s_i_o_n_a_l_ _C_o_o_r_d_i_n_a_t_e_s. │ │ │ │ │ You can plot irregular grids defined by multidimensional coordinates with │ │ │ │ │ @@ -822,74 +822,74 @@ │ │ │ │ │ .....: np.arange(20).reshape(4, 5), │ │ │ │ │ .....: dims=["y", "x"], │ │ │ │ │ .....: coords={"lat": (("y", "x"), lat), "lon": (("y", "x"), lon)}, │ │ │ │ │ .....: ) │ │ │ │ │ .....: │ │ │ │ │ │ │ │ │ │ In [139]: da.plot.pcolormesh(x="lon", y="lat") │ │ │ │ │ -Out[139]: │ │ │ │ │ +Out[139]: │ │ │ │ │ _[_._._/___i_m_a_g_e_s_/_p_l_o_t_t_i_n_g___e_x_a_m_p_l_e___2_d___i_r_r_e_g_._p_n_g_] │ │ │ │ │ Note that in this case, xarray still follows the pixel centered convention. │ │ │ │ │ This might be undesirable in some cases, for example when your data is defined │ │ │ │ │ on a polar projection (_G_H_7_8_1). This is why the default is to not follow this │ │ │ │ │ convention when plotting on a map: │ │ │ │ │ In [140]: import cartopy.crs as ccrs │ │ │ │ │ │ │ │ │ │ In [141]: ax = plt.subplot(projection=ccrs.PlateCarree()) │ │ │ │ │ │ │ │ │ │ In [142]: da.plot.pcolormesh(x="lon", y="lat", ax=ax) │ │ │ │ │ -Out[142]: │ │ │ │ │ +Out[142]: │ │ │ │ │ │ │ │ │ │ In [143]: ax.scatter(lon, lat, transform=ccrs.PlateCarree()) │ │ │ │ │ -Out[143]: │ │ │ │ │ +Out[143]: │ │ │ │ │ │ │ │ │ │ In [144]: ax.coastlines() │ │ │ │ │ -Out[144]: │ │ │ │ │ +Out[144]: │ │ │ │ │ │ │ │ │ │ In [145]: ax.gridlines(draw_labels=True) │ │ │ │ │ -Out[145]: │ │ │ │ │ +Out[145]: │ │ │ │ │ _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_p_l_o_t_t_i_n_g___e_x_a_m_p_l_e___2_d___i_r_r_e_g___m_a_p_._p_n_g_] │ │ │ │ │ You can however decide to infer the cell boundaries and use the infer_intervals │ │ │ │ │ keyword: │ │ │ │ │ In [146]: ax = plt.subplot(projection=ccrs.PlateCarree()) │ │ │ │ │ │ │ │ │ │ In [147]: da.plot.pcolormesh(x="lon", y="lat", ax=ax, infer_intervals=True) │ │ │ │ │ -Out[147]: │ │ │ │ │ +Out[147]: │ │ │ │ │ │ │ │ │ │ In [148]: ax.scatter(lon, lat, transform=ccrs.PlateCarree()) │ │ │ │ │ -Out[148]: │ │ │ │ │ +Out[148]: │ │ │ │ │ │ │ │ │ │ In [149]: ax.coastlines() │ │ │ │ │ -Out[149]: │ │ │ │ │ +Out[149]: │ │ │ │ │ │ │ │ │ │ In [150]: ax.gridlines(draw_labels=True) │ │ │ │ │ -Out[150]: │ │ │ │ │ +Out[150]: │ │ │ │ │ _[___b_u_i_l_d_/_h_t_m_l_/___s_t_a_t_i_c_/_p_l_o_t_t_i_n_g___e_x_a_m_p_l_e___2_d___i_r_r_e_g___m_a_p___i_n_f_e_r_._p_n_g_] │ │ │ │ │ Note │ │ │ │ │ The data model of xarray does not support datasets with _c_e_l_l_ _b_o_u_n_d_a_r_i_e_s yet. If │ │ │ │ │ you want to use these coordinates, you’ll have to make the plots outside the │ │ │ │ │ xarray framework. │ │ │ │ │ One can also make line plots with multidimensional coordinates. In this case, │ │ │ │ │ hue must be a dimension name, not a coordinate name. │ │ │ │ │ In [151]: f, ax = plt.subplots(2, 1) │ │ │ │ │ │ │ │ │ │ In [152]: da.plot.line(x="lon", hue="y", ax=ax[0]) │ │ │ │ │ Out[152]: │ │ │ │ │ -[, │ │ │ │ │ - , │ │ │ │ │ - , │ │ │ │ │ - ] │ │ │ │ │ +[, │ │ │ │ │ + , │ │ │ │ │ + , │ │ │ │ │ + ] │ │ │ │ │ │ │ │ │ │ In [153]: da.plot.line(x="lon", hue="x", ax=ax[1]) │ │ │ │ │ Out[153]: │ │ │ │ │ -[, │ │ │ │ │ - , │ │ │ │ │ - , │ │ │ │ │ - , │ │ │ │ │ - ] │ │ │ │ │ +[, │ │ │ │ │ + , │ │ │ │ │ + , │ │ │ │ │ + , │ │ │ │ │ + ] │ │ │ │ │ [../_images/plotting_example_2d_hue_xy.png] │ │ │ │ │ _[_L_o_g_o_ _o_f_ _x_a_r_r_a_y_] │ │ │ │ │ ************ _xx_aa_rr_rr_aa_yy ************ │ │ │ │ │ ******** NNaavviiggaattiioonn ******** │ │ │ │ │ For users │ │ │ │ │ * _G_e_t_t_i_n_g_ _S_t_a_r_t_e_d │ │ │ │ │ * _U_s_e_r_ _G_u_i_d_e │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/reshaping.html │ │ │ │ @@ -554,15 +554,15 @@ │ │ │ │
    │ │ │ │

    Reshaping via coarsen

    │ │ │ │

    Whilst coarsen is normally used for reducing your data’s resolution by applying a reduction function │ │ │ │ (see the page on computation), │ │ │ │ it can also be used to reorganise your data without applying a computation via construct().

    │ │ │ │

    Taking our example tutorial air temperature dataset over the Northern US

    │ │ │ │
    In [56]: air = xr.tutorial.open_dataset("air_temperature")["air"]
    │ │ │ │ -ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f6024785450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │ +ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f34f6fa5450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure in name resolution)"))
    │ │ │ │  
    │ │ │ │  
    │ │ │ │  In [57]: air.isel(time=0).plot(x="lon", y="lat")
    │ │ │ │  NameError: name 'air' is not defined
    │ │ │ │  
    │ │ │ │
    │ │ │ │ ../_images/pre_coarsening.png │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -442,15 +442,15 @@ │ │ │ │ │ a reduction function (see the _p_a_g_e_ _o_n_ _c_o_m_p_u_t_a_t_i_o_n), it can also be used to │ │ │ │ │ reorganise your data without applying a computation via construct(). │ │ │ │ │ Taking our example tutorial air temperature dataset over the Northern US │ │ │ │ │ In [56]: air = xr.tutorial.open_dataset("air_temperature")["air"] │ │ │ │ │ ConnectionError: HTTPSConnectionPool(host='github.com', port=443): Max retries │ │ │ │ │ exceeded with url: /pydata/xarray-data/raw/master/air_temperature.nc (Caused by │ │ │ │ │ NameResolutionError(": Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ +0x7f34f6fa5450>: Failed to resolve 'github.com' ([Errno -3] Temporary failure │ │ │ │ │ in name resolution)")) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ In [57]: air.isel(time=0).plot(x="lon", y="lat") │ │ │ │ │ NameError: name 'air' is not defined │ │ │ │ │ [../_images/pre_coarsening.png] │ │ │ │ │ we can split this up into sub-regions of size (9, 18) points using construct(): │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/user-guide/testing.html │ │ │ │ @@ -84,70 +84,50 @@ │ │ │ │

    Generating Examples

    │ │ │ │

    To see an example of what each of these strategies might produce, you can call one followed by the .example() method, │ │ │ │ which is a general hypothesis method valid for all strategies.

    │ │ │ │
    In [2]: import xarray.testing.strategies as xrst
    │ │ │ │  
    │ │ │ │  In [3]: xrst.variables().example()
    │ │ │ │  Out[3]: 
    │ │ │ │ -<xarray.Variable (öĭxd: 6, ¼: 6, Ę: 4)> Size: 2kB
    │ │ │ │ -array([[[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j, -8.777e+015+3.836e-257j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          2.000e+000+1.500e+000j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [-1.000e-005-6.505e+016j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j]],
    │ │ │ │ -
    │ │ │ │ -       [[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  1.175e-038+1.175e-038j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j, -1.798e+308       +nanj,
    │ │ │ │ -...
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 1.401e-045+5.960e-008j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j]],
    │ │ │ │ -
    │ │ │ │ -       [[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,         inf+1.000e-005j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          5.636e+016+2.225e-311j],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j, -9.007e+015+4.941e-324j,  7.104e+016+3.333e-001j,
    │ │ │ │ -         -1.900e+000       +nanj],
    │ │ │ │ -        [ 7.104e+016+3.333e-001j,  2.000e+000-1.175e-038j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ -        [ 2.225e-313-1.000e+000j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,
    │ │ │ │ -          7.104e+016+3.333e-001j]]], shape=(6, 6, 4))
    │ │ │ │ +<xarray.Variable (ØʼnīOŽ: 3, Ŧ: 5)> Size: 60B
    │ │ │ │ +array([[-4.063e+16,  1.100e+00, -4.063e+16,       -inf, -4.063e+16],
    │ │ │ │ +       [-4.063e+16,  5.000e-01,  2.866e+16, -4.063e+16, -4.063e+16],
    │ │ │ │ +       [       nan,  5.000e-01, -1.100e+00,  6.104e-05,        nan]], shape=(3, 5), dtype=float32)
    │ │ │ │  Attributes:
    │ │ │ │ -    :         {'ĨšéŵV': 'ťžųĕĝ', 'žũì': array([b'\x8dvB\x8e\x10', b'p\xd0\x8e...
    │ │ │ │ -    Â:        {'žż': False}
    │ │ │ │ -    ÕŻ:       {}
    │ │ │ │ +    ŀ:        False
    │ │ │ │ +    ċÁżŽĩ:    None
    │ │ │ │ +    RĔ:       ĠžČĸŽ
    │ │ │ │ +    JĠřŧŬ:    None
    │ │ │ │ +    HÏÈķē:    True
    │ │ │ │ +    ú4sÌ:     None
    │ │ │ │ +    :         True
    │ │ │ │ +    űżŻ0Ż:    ['NaT' 'NaT']
    │ │ │ │ +    Ň¾ÐžÜ:    ['-290308-12-21T19:59:05.224327'                           'NaT']
    │ │ │ │ +    ł³ż:      None
    │ │ │ │ +    ęż3Åè:    None
    │ │ │ │  
    │ │ │ │  In [4]: xrst.variables().example()
    │ │ │ │  Out[4]: 
    │ │ │ │ -<xarray.Variable (0: 1)> Size: 8B
    │ │ │ │ -array([0.+0.j], dtype=complex64)
    │ │ │ │ +<xarray.Variable (ż4kŽź: 4, ťñ: 1, a: 4)> Size: 16B
    │ │ │ │ +array([[[249, 249, 249, 211]],
    │ │ │ │ +
    │ │ │ │ +       [[249, 157, 249,  42]],
    │ │ │ │ +
    │ │ │ │ +       [[249,  48, 249, 249]],
    │ │ │ │ +
    │ │ │ │ +       [[ 14, 249, 249,  57]]], shape=(4, 1, 4), dtype=uint8)
    │ │ │ │ +Attributes:
    │ │ │ │ +    ßÃ:       {'ĈĘŻŖğ': 'Č', 'ż0qżĉ': 'wûĝ¾t'}
    │ │ │ │ +    ł:        {'ſÚYi': False, 'Ŭ': False, '': False, 'Uă9C': True}
    │ │ │ │ +    ĦběŽŲ:    {'': 'ÖØ'}
    │ │ │ │  
    │ │ │ │  In [5]: xrst.variables().example()
    │ │ │ │  Out[5]: 
    │ │ │ │ -<xarray.Variable (0: 1)> Size: 2B
    │ │ │ │ -array([0.], dtype=float16)
    │ │ │ │ +<xarray.Variable (u: 1, żW: 1, ĐºŖÞ: 3)> Size: 6B
    │ │ │ │ +array([[[-19885,  -3992,   1903]]], dtype=int16)
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    You can see that calling .example() multiple times will generate different examples, giving you an idea of the wide │ │ │ │ range of data that the xarray strategies can generate.

    │ │ │ │

    In your tests however you should not use .example() - instead you should parameterize your tests with the │ │ │ │ hypothesis.given() decorator:

    │ │ │ │
    In [6]: from hypothesis import given
    │ │ │ │ @@ -165,99 +145,122 @@
    │ │ │ │  

    Xarray’s strategies can accept other strategies as arguments, allowing you to customise the contents of the generated │ │ │ │ examples.

    │ │ │ │
    # generate a Variable containing an array with a complex number dtype, but all other details still arbitrary
    │ │ │ │  In [8]: from hypothesis.extra.numpy import complex_number_dtypes
    │ │ │ │  
    │ │ │ │  In [9]: xrst.variables(dtype=complex_number_dtypes()).example()
    │ │ │ │  Out[9]: 
    │ │ │ │ -<xarray.Variable (º: 6)> Size: 96B
    │ │ │ │ -array([       nan       +infj,        nan-2.225e-311j, -4.698e+16       +nanj,
    │ │ │ │ -       -1.401e-45+5.000e-001j, -1.000e+07-1.411e+041j,        nan       +infj], dtype='>c16')
    │ │ │ │ +<xarray.Variable (Dė: 3, Ëż: 6, ţÝC: 1)> Size: 144B
    │ │ │ │ +array([[[nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j]],
    │ │ │ │ +
    │ │ │ │ +       [[nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j]],
    │ │ │ │ +
    │ │ │ │ +       [[nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ +        [nan-1.e-45j]]], shape=(3, 6, 1), dtype=complex64)
    │ │ │ │  Attributes:
    │ │ │ │ -    ĚžË:      [[                 'NaT']\n ['-8944590791784654066']]
    │ │ │ │ +    :         {'ùįķŽ': 't¾Ą', 'Ŭ': '', 'Ġ': 'ŀ', 'ē': None, 'ŽĀ': array(['Õ¼'...
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    This also works with custom strategies, or strategies defined in other packages. │ │ │ │ For example you could imagine creating a chunks strategy to specify particular chunking patterns for a dask-backed array.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    Fixing Arguments

    │ │ │ │

    If you want to fix one aspect of the data structure, whilst allowing variation in the generated examples │ │ │ │ over all other aspects, then use hypothesis.strategies.just().

    │ │ │ │
    In [10]: import hypothesis.strategies as st
    │ │ │ │  
    │ │ │ │  # Generates only variable objects with dimensions ["x", "y"]
    │ │ │ │  In [11]: xrst.variables(dims=st.just(["x", "y"])).example()
    │ │ │ │  Out[11]: 
    │ │ │ │ -<xarray.Variable (x: 5, y: 6)> Size: 30B
    │ │ │ │ -array([[73, 73, 73, 73, 73, 73],
    │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ -       [73, 73, 73, 73, 73, 73]], shape=(5, 6), dtype=int8)
    │ │ │ │ +<xarray.Variable (x: 1, y: 1)> Size: 1B
    │ │ │ │ +array([[0]], dtype=uint8)
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    (This is technically another example of chaining strategies - hypothesis.strategies.just() is simply a │ │ │ │ special strategy that just contains a single example.)

    │ │ │ │

    To fix the length of dimensions you can instead pass dims as a mapping of dimension names to lengths │ │ │ │ (i.e. following xarray objects’ .sizes() property), e.g.

    │ │ │ │
    # Generates only variables with dimensions ["x", "y"], of lengths 2 & 3 respectively
    │ │ │ │  In [12]: xrst.variables(dims=st.just({"x": 2, "y": 3})).example()
    │ │ │ │  Out[12]: 
    │ │ │ │  <xarray.Variable (x: 2, y: 3)> Size: 48B
    │ │ │ │ -array([[        inf, -1.113e-308,  1.450e+177],
    │ │ │ │ -       [-1.000e-005,  1.450e+177,  1.450e+177]])
    │ │ │ │ +array([[ 2.698e-048, -2.494e+112, -5.000e-001],
    │ │ │ │ +       [        nan, -2.908e+016,         nan]])
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    You can also use this to specify that you want examples which are missing some part of the data structure, for instance

    │ │ │ │
    # Generates a Variable with no attributes
    │ │ │ │  In [13]: xrst.variables(attrs=st.just({})).example()
    │ │ │ │  Out[13]: 
    │ │ │ │ -<xarray.Variable (0: 1)> Size: 1B
    │ │ │ │ -array([0], dtype=int8)
    │ │ │ │ +<xarray.Variable (Żʼnŏļ: 6, ʼn: 3)> Size: 144B
    │ │ │ │ +array([[-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110]], shape=(6, 3))
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    Through a combination of chaining strategies and fixing arguments, you can specify quite complicated requirements on the │ │ │ │ objects your chained strategy will generate.

    │ │ │ │
    In [14]: fixed_x_variable_y_maybe_z = st.fixed_dictionaries(
    │ │ │ │     ....:     {"x": st.just(2), "y": st.integers(3, 4)}, optional={"z": st.just(2)}
    │ │ │ │     ....: )
    │ │ │ │     ....: 
    │ │ │ │  
    │ │ │ │  In [15]: fixed_x_variable_y_maybe_z.example()
    │ │ │ │ -Out[15]: {'x': 2, 'y': 3}
    │ │ │ │ +Out[15]: {'x': 2, 'y': 3, 'z': 2}
    │ │ │ │  
    │ │ │ │  In [16]: special_variables = xrst.variables(dims=fixed_x_variable_y_maybe_z)
    │ │ │ │  
    │ │ │ │  In [17]: special_variables.example()
    │ │ │ │  Out[17]: 
    │ │ │ │ -<xarray.Variable (x: 2, y: 3, z: 2)> Size: 96B
    │ │ │ │ -array([[[-9223372033033758968, -9223372036854775652],
    │ │ │ │ -        [-9223372036854720928, -9223372032873389537],
    │ │ │ │ -        [-9223372036854722103, -9223372036854713855]],
    │ │ │ │ -
    │ │ │ │ -       [[-4294587694564654719, -9223372036854775622],
    │ │ │ │ -        [-9223372036854719962, -9223372036854775751],
    │ │ │ │ -        [-9223372033033758968, -9223372036854711788]]], shape=(2, 3, 2))
    │ │ │ │ +<xarray.Variable (x: 2, y: 3, z: 2)> Size: 192B
    │ │ │ │ +array([[[        inf-2.150e+016j,  2.225e-309       +nanj],
    │ │ │ │ +        [-1.100e+000+1.000e+007j,  2.000e+000+6.538e+016j],
    │ │ │ │ +        [ 3.403e+038-2.225e-311j,  3.706e+016+2.225e-308j]],
    │ │ │ │ +
    │ │ │ │ +       [[-1.798e+308+1.192e-007j,        -inf+4.941e-324j],
    │ │ │ │ +        [-4.941e-324-1.798e+308j,         inf+4.520e+016j],
    │ │ │ │ +        [ 2.000e+000       -infj,        -inf+4.941e-324j]]], shape=(2, 3, 2))
    │ │ │ │  Attributes:
    │ │ │ │ -    ÎXŽ:      {'ŽIlVŸ': array([b''], dtype='|S2'), 'ţNŻÏŻ': array(['Ô3\U000e8...
    │ │ │ │ -    ŽÃęũ:     {}
    │ │ │ │ +    :         {'': 'ďę', '7Ůŝijŕ': '¹œĚ', 'Ăíx¹8': 'ŜĖŷ', 'ĮĔÞ²1': array([[b'\...
    │ │ │ │ +    ũÕ:       {}
    │ │ │ │  
    │ │ │ │  In [18]: special_variables.example()
    │ │ │ │  Out[18]: 
    │ │ │ │ -<xarray.Variable (x: 2, y: 3, z: 2)> Size: 12B
    │ │ │ │ -array([[[ 85,  85],
    │ │ │ │ -        [ 87,  85],
    │ │ │ │ -        [ 85,  85]],
    │ │ │ │ -
    │ │ │ │ -       [[ 85, 234],
    │ │ │ │ -        [ 85,  85],
    │ │ │ │ -        [ 85,  85]]], shape=(2, 3, 2), dtype=uint8)
    │ │ │ │ +<xarray.Variable (x: 2, y: 4, z: 2)> Size: 128B
    │ │ │ │ +array([[[ 8490804751958207686, -9223372036854775761],
    │ │ │ │ +        [-9223372036854775796, -9223372034140457165],
    │ │ │ │ +        [ 7913443996966715943, -9223372036854729269],
    │ │ │ │ +        [-8905666620511135429, -9223372036854766538]],
    │ │ │ │ +
    │ │ │ │ +       [[-9223372036854773748, -9223372036854763508],
    │ │ │ │ +        [-9223372036854761679, -9223372036854767732],
    │ │ │ │ +        [-9223372036854775666, -9223372036854772832],
    │ │ │ │ +        [-9223372036854724926, -9223372036803285069]]], shape=(2, 4, 2))
    │ │ │ │  Attributes:
    │ │ │ │ -    ²ìĻëĿ:    False
    │ │ │ │ +    Xħ:       {'ĺ': False, '': None, 'ıļ': None, 'Ťsīyŧ': False}
    │ │ │ │ +    :         {'yŔĽP': 'Íż', 'áâĺCŽ': array([['', 'Ë\x93oª}9DÖ²'],\n       ['...
    │ │ │ │ +    ÁþL³ſ:    {'ŽĚĕſģ': '', 'Qāž': None, '': False, 'ĴŻ': True}
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    Here we have used one of hypothesis’ built-in strategies hypothesis.strategies.fixed_dictionaries() to create a │ │ │ │ strategy which generates mappings of dimension names to lengths (i.e. the size of the xarray object we want). │ │ │ │ This particular strategy will always generate an x dimension of length 2, and a y dimension of │ │ │ │ length either 3 or 4, and will sometimes also generate a z dimension of length 2. │ │ │ │ By feeding this strategy for dictionaries into the dims argument of xarray’s variables() strategy, │ │ │ │ @@ -358,43 +361,85 @@ │ │ │ │ ....: array_strategy_fn=xps.arrays, │ │ │ │ ....: dtype=xps.scalar_dtypes(), │ │ │ │ ....: ) │ │ │ │ ....: │ │ │ │ │ │ │ │ In [32]: xp_variables.example() │ │ │ │ Out[32]: │ │ │ │ -<xarray.Variable (0: 1)> Size: 1B │ │ │ │ -array([False]) │ │ │ │ +<xarray.Variable (ßAŽbŻ: 6, ĕ0ÌŻ: 6, ġóªŰÏ: 1)> Size: 36B │ │ │ │ +array([[[140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [138]], │ │ │ │ + │ │ │ │ + [[140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [ 37], │ │ │ │ + [140]], │ │ │ │ + │ │ │ │ + [[140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140]], │ │ │ │ +... │ │ │ │ + [[140], │ │ │ │ + [140], │ │ │ │ + [ 74], │ │ │ │ + [169], │ │ │ │ + [140], │ │ │ │ + [140]], │ │ │ │ + │ │ │ │ + [[140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [140]], │ │ │ │ + │ │ │ │ + [[140], │ │ │ │ + [140], │ │ │ │ + [140], │ │ │ │ + [ 60], │ │ │ │ + [140], │ │ │ │ + [213]]], shape=(6, 6, 1), dtype=uint8) │ │ │ │ +Attributes: │ │ │ │ + ŰūŠeŐ: True │ │ │ │ │ │ │ │ │ │ │ │

    Another array API-compliant duck array library would replace the import, e.g. import cupy as cp instead.

    │ │ │ │
    │ │ │ │
    │ │ │ │

    Testing over Subsets of Dimensions

    │ │ │ │

    A common task when testing xarray user code is checking that your function works for all valid input dimensions. │ │ │ │ We can chain strategies to achieve this, for which the helper strategy unique_subset_of() │ │ │ │ is useful.

    │ │ │ │

    It works for lists of dimension names

    │ │ │ │
    In [33]: dims = ["x", "y", "z"]
    │ │ │ │  
    │ │ │ │  In [34]: xrst.unique_subset_of(dims).example()
    │ │ │ │ -Out[34]: ['x', 'z', 'y']
    │ │ │ │ +Out[34]: []
    │ │ │ │  
    │ │ │ │  In [35]: xrst.unique_subset_of(dims).example()
    │ │ │ │  Out[35]: ['y']
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    as well as for mappings of dimension names to sizes

    │ │ │ │
    In [36]: dim_sizes = {"x": 2, "y": 3, "z": 4}
    │ │ │ │  
    │ │ │ │  In [37]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ -Out[37]: {'z': 4, 'y': 3, 'x': 2}
    │ │ │ │ +Out[37]: {'y': 3, 'z': 4, 'x': 2}
    │ │ │ │  
    │ │ │ │  In [38]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ -Out[38]: {'x': 2}
    │ │ │ │ +Out[38]: {'x': 2, 'y': 3, 'z': 4}
    │ │ │ │  
    │ │ │ │
    │ │ │ │

    This is useful because operations like reductions can be performed over any subset of the xarray object’s dimensions. │ │ │ │ For example we can write a pytest test that tests that a reduction gives the expected result when applying that reduction │ │ │ │ along any possible valid subset of the Variable’s dimensions.

    │ │ │ │
    import numpy.testing as npt
    │ │ │ │ ├── html2text {}
    │ │ │ │ │ @@ -28,90 +28,51 @@
    │ │ │ │ │  To see an example of what each of these strategies might produce, you can call
    │ │ │ │ │  one followed by the .example() method, which is a general hypothesis method
    │ │ │ │ │  valid for all strategies.
    │ │ │ │ │  In [2]: import xarray.testing.strategies as xrst
    │ │ │ │ │  
    │ │ │ │ │  In [3]: xrst.variables().example()
    │ │ │ │ │  Out[3]:
    │ │ │ │ │ - Size: 2kB
    │ │ │ │ │ -array([[[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j, -8.777e+015+3.836e-257j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          2.000e+000+1.500e+000j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [-1.000e-005-6.505e+016j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  1.175e-038+1.175e-038j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j, -1.798e+308
    │ │ │ │ │ -+nanj,
    │ │ │ │ │ -...
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 1.401e-045+5.960e-008j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,         inf+1.000e-005j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          5.636e+016+2.225e-311j],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j, -9.007e+015+4.941e-324j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -         -1.900e+000       +nanj],
    │ │ │ │ │ -        [ 7.104e+016+3.333e-001j,  2.000e+000-1.175e-038j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j],
    │ │ │ │ │ -        [ 2.225e-313-1.000e+000j,  7.104e+016+3.333e-001j,  7.104e+016+3.333e-
    │ │ │ │ │ -001j,
    │ │ │ │ │ -          7.104e+016+3.333e-001j]]], shape=(6, 6, 4))
    │ │ │ │ │ + Size: 60B
    │ │ │ │ │ +array([[-4.063e+16,  1.100e+00, -4.063e+16,       -inf, -4.063e+16],
    │ │ │ │ │ +       [-4.063e+16,  5.000e-01,  2.866e+16, -4.063e+16, -4.063e+16],
    │ │ │ │ │ +       [       nan,  5.000e-01, -1.100e+00,  6.104e-05,        nan]], shape=(3,
    │ │ │ │ │ +5), dtype=float32)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    :         {'ĨšéŵV': 'ťžųĕĝ', 'žũì': array([b'\x8dvB\x8e\x10',
    │ │ │ │ │ -b'p\xd0\x8e...
    │ │ │ │ │ -    Â:        {'žż': False}
    │ │ │ │ │ -    ÕŻ:       {}
    │ │ │ │ │ +    ŀ:        False
    │ │ │ │ │ +    ċÁżŽĩ:    None
    │ │ │ │ │ +    RĔ:       ĠžČĸŽ
    │ │ │ │ │ +    JĠřŧŬ:    None
    │ │ │ │ │ +    HÏÈķē:    True
    │ │ │ │ │ +    ú4sÌ:     None
    │ │ │ │ │ +    :         True
    │ │ │ │ │ +    űżŻ0Ż:    ['NaT' 'NaT']
    │ │ │ │ │ +    Ň¾ÐžÜ:    ['-290308-12-21T19:59:05.224327'                           'NaT']
    │ │ │ │ │ +    ł³ż:      None
    │ │ │ │ │ +    ęż3Åè:    None
    │ │ │ │ │  
    │ │ │ │ │  In [4]: xrst.variables().example()
    │ │ │ │ │  Out[4]:
    │ │ │ │ │ - Size: 8B
    │ │ │ │ │ -array([0.+0.j], dtype=complex64)
    │ │ │ │ │ + Size: 16B
    │ │ │ │ │ +array([[[249, 249, 249, 211]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[249, 157, 249,  42]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[249,  48, 249, 249]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[ 14, 249, 249,  57]]], shape=(4, 1, 4), dtype=uint8)
    │ │ │ │ │ +Attributes:
    │ │ │ │ │ +    ßÃ:       {'ĈĘŻŖğ': 'Č', 'ż0qżĉ': 'wûĝ¾t'}
    │ │ │ │ │ +    ł:        {'ſÚYi': False, 'Ŭ': False, '': False, 'Uă9C': True}
    │ │ │ │ │ +    ĦběŽŲ:    {'': 'ÖØ'}
    │ │ │ │ │  
    │ │ │ │ │  In [5]: xrst.variables().example()
    │ │ │ │ │  Out[5]:
    │ │ │ │ │ - Size: 2B
    │ │ │ │ │ -array([0.], dtype=float16)
    │ │ │ │ │ + Size: 6B
    │ │ │ │ │ +array([[[-19885,  -3992,   1903]]], dtype=int16)
    │ │ │ │ │  You can see that calling .example() multiple times will generate different
    │ │ │ │ │  examples, giving you an idea of the wide range of data that the xarray
    │ │ │ │ │  strategies can generate.
    │ │ │ │ │  In your tests however you should not use .example() - instead you should
    │ │ │ │ │  parameterize your tests with the hypothesis.given() decorator:
    │ │ │ │ │  In [6]: from hypothesis import given
    │ │ │ │ │  In [7]: @given(xrst.variables())
    │ │ │ │ │ @@ -123,99 +84,124 @@
    │ │ │ │ │  customise the contents of the generated examples.
    │ │ │ │ │  # generate a Variable containing an array with a complex number dtype, but all
    │ │ │ │ │  other details still arbitrary
    │ │ │ │ │  In [8]: from hypothesis.extra.numpy import complex_number_dtypes
    │ │ │ │ │  
    │ │ │ │ │  In [9]: xrst.variables(dtype=complex_number_dtypes()).example()
    │ │ │ │ │  Out[9]:
    │ │ │ │ │ - Size: 96B
    │ │ │ │ │ -array([       nan       +infj,        nan-2.225e-311j, -4.698e+16       +nanj,
    │ │ │ │ │ -       -1.401e-45+5.000e-001j, -1.000e+07-1.411e+041j,        nan       +infj],
    │ │ │ │ │ -dtype='>c16')
    │ │ │ │ │ + Size: 144B
    │ │ │ │ │ +array([[[nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j],
    │ │ │ │ │ +        [nan-1.e-45j]]], shape=(3, 6, 1), dtype=complex64)
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    ĚžË:      [[                 'NaT']\n ['-8944590791784654066']]
    │ │ │ │ │ +    :         {'ùįķŽ': 't¾Ą', 'Ŭ': '', 'Ġ': 'ŀ', 'ē': None, 'ŽĀ': array(
    │ │ │ │ │ +['Õ¼'...
    │ │ │ │ │  This also works with custom strategies, or strategies defined in other
    │ │ │ │ │  packages. For example you could imagine creating a chunks strategy to specify
    │ │ │ │ │  particular chunking patterns for a dask-backed array.
    │ │ │ │ │  ******** FFiixxiinngg AArrgguummeennttss_?¶ ********
    │ │ │ │ │  If you want to fix one aspect of the data structure, whilst allowing variation
    │ │ │ │ │  in the generated examples over all other aspects, then use
    │ │ │ │ │  hypothesis.strategies.just().
    │ │ │ │ │  In [10]: import hypothesis.strategies as st
    │ │ │ │ │  
    │ │ │ │ │  # Generates only variable objects with dimensions ["x", "y"]
    │ │ │ │ │  In [11]: xrst.variables(dims=st.just(["x", "y"])).example()
    │ │ │ │ │  Out[11]:
    │ │ │ │ │ - Size: 30B
    │ │ │ │ │ -array([[73, 73, 73, 73, 73, 73],
    │ │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ │ -       [73, 73, 73, 73, 73, 73],
    │ │ │ │ │ -       [73, 73, 73, 73, 73, 73]], shape=(5, 6), dtype=int8)
    │ │ │ │ │ + Size: 1B
    │ │ │ │ │ +array([[0]], dtype=uint8)
    │ │ │ │ │  (This is technically another example of chaining strategies -
    │ │ │ │ │  hypothesis.strategies.just() is simply a special strategy that just contains a
    │ │ │ │ │  single example.)
    │ │ │ │ │  To fix the length of dimensions you can instead pass dims as a mapping of
    │ │ │ │ │  dimension names to lengths (i.e. following xarray objects’ .sizes() property),
    │ │ │ │ │  e.g.
    │ │ │ │ │  # Generates only variables with dimensions ["x", "y"], of lengths 2 & 3
    │ │ │ │ │  respectively
    │ │ │ │ │  In [12]: xrst.variables(dims=st.just({"x": 2, "y": 3})).example()
    │ │ │ │ │  Out[12]:
    │ │ │ │ │   Size: 48B
    │ │ │ │ │ -array([[        inf, -1.113e-308,  1.450e+177],
    │ │ │ │ │ -       [-1.000e-005,  1.450e+177,  1.450e+177]])
    │ │ │ │ │ +array([[ 2.698e-048, -2.494e+112, -5.000e-001],
    │ │ │ │ │ +       [        nan, -2.908e+016,         nan]])
    │ │ │ │ │  You can also use this to specify that you want examples which are missing some
    │ │ │ │ │  part of the data structure, for instance
    │ │ │ │ │  # Generates a Variable with no attributes
    │ │ │ │ │  In [13]: xrst.variables(attrs=st.just({})).example()
    │ │ │ │ │  Out[13]:
    │ │ │ │ │ - Size: 1B
    │ │ │ │ │ -array([0], dtype=int8)
    │ │ │ │ │ + Size: 144B
    │ │ │ │ │ +array([[-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110],
    │ │ │ │ │ +       [-9223372036854760110, -9223372036854760110, -9223372036854760110]],
    │ │ │ │ │ +shape=(6, 3))
    │ │ │ │ │  Through a combination of chaining strategies and fixing arguments, you can
    │ │ │ │ │  specify quite complicated requirements on the objects your chained strategy
    │ │ │ │ │  will generate.
    │ │ │ │ │  In [14]: fixed_x_variable_y_maybe_z = st.fixed_dictionaries(
    │ │ │ │ │     ....:     {"x": st.just(2), "y": st.integers(3, 4)}, optional={"z": st.just
    │ │ │ │ │  (2)}
    │ │ │ │ │     ....: )
    │ │ │ │ │     ....:
    │ │ │ │ │  
    │ │ │ │ │  In [15]: fixed_x_variable_y_maybe_z.example()
    │ │ │ │ │ -Out[15]: {'x': 2, 'y': 3}
    │ │ │ │ │ +Out[15]: {'x': 2, 'y': 3, 'z': 2}
    │ │ │ │ │  
    │ │ │ │ │  In [16]: special_variables = xrst.variables(dims=fixed_x_variable_y_maybe_z)
    │ │ │ │ │  
    │ │ │ │ │  In [17]: special_variables.example()
    │ │ │ │ │  Out[17]:
    │ │ │ │ │ - Size: 96B
    │ │ │ │ │ -array([[[-9223372033033758968, -9223372036854775652],
    │ │ │ │ │ -        [-9223372036854720928, -9223372032873389537],
    │ │ │ │ │ -        [-9223372036854722103, -9223372036854713855]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[-4294587694564654719, -9223372036854775622],
    │ │ │ │ │ -        [-9223372036854719962, -9223372036854775751],
    │ │ │ │ │ -        [-9223372033033758968, -9223372036854711788]]], shape=(2, 3, 2))
    │ │ │ │ │ + Size: 192B
    │ │ │ │ │ +array([[[        inf-2.150e+016j,  2.225e-309       +nanj],
    │ │ │ │ │ +        [-1.100e+000+1.000e+007j,  2.000e+000+6.538e+016j],
    │ │ │ │ │ +        [ 3.403e+038-2.225e-311j,  3.706e+016+2.225e-308j]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[-1.798e+308+1.192e-007j,        -inf+4.941e-324j],
    │ │ │ │ │ +        [-4.941e-324-1.798e+308j,         inf+4.520e+016j],
    │ │ │ │ │ +        [ 2.000e+000       -infj,        -inf+4.941e-324j]]], shape=(2, 3, 2))
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    ÎXŽ:      {'ŽIlVŸ': array([b''], dtype='|S2'), 'ţNŻÏŻ': array(
    │ │ │ │ │ -['Ô3\U000e8...
    │ │ │ │ │ -    ŽÃęũ:     {}
    │ │ │ │ │ +    :         {'': 'ďę', '7Ůŝijŕ': '¹œĚ', 'Ăíx¹8': 'ŜĖŷ', 'ĮĔÞ²1': array([
    │ │ │ │ │ +[b'\...
    │ │ │ │ │ +    ũÕ:       {}
    │ │ │ │ │  
    │ │ │ │ │  In [18]: special_variables.example()
    │ │ │ │ │  Out[18]:
    │ │ │ │ │ - Size: 12B
    │ │ │ │ │ -array([[[ 85,  85],
    │ │ │ │ │ -        [ 87,  85],
    │ │ │ │ │ -        [ 85,  85]],
    │ │ │ │ │ -
    │ │ │ │ │ -       [[ 85, 234],
    │ │ │ │ │ -        [ 85,  85],
    │ │ │ │ │ -        [ 85,  85]]], shape=(2, 3, 2), dtype=uint8)
    │ │ │ │ │ + Size: 128B
    │ │ │ │ │ +array([[[ 8490804751958207686, -9223372036854775761],
    │ │ │ │ │ +        [-9223372036854775796, -9223372034140457165],
    │ │ │ │ │ +        [ 7913443996966715943, -9223372036854729269],
    │ │ │ │ │ +        [-8905666620511135429, -9223372036854766538]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[-9223372036854773748, -9223372036854763508],
    │ │ │ │ │ +        [-9223372036854761679, -9223372036854767732],
    │ │ │ │ │ +        [-9223372036854775666, -9223372036854772832],
    │ │ │ │ │ +        [-9223372036854724926, -9223372036803285069]]], shape=(2, 4, 2))
    │ │ │ │ │  Attributes:
    │ │ │ │ │ -    ²ìĻëĿ:    False
    │ │ │ │ │ +    Xħ:       {'ĺ': False, '': None, 'ıļ': None, 'Ťsīyŧ': False}
    │ │ │ │ │ +    :         {'yŔĽP': 'Íż', 'áâĺCŽ': array([['', 'Ë\x93oª}9DÖ²'],\n
    │ │ │ │ │ +['...
    │ │ │ │ │ +    ÁþL³ſ:    {'ŽĚĕſģ': '', 'Qāž': None, '': False, 'ĴŻ': True}
    │ │ │ │ │  Here we have used one of hypothesis’ built-in strategies
    │ │ │ │ │  hypothesis.strategies.fixed_dictionaries() to create a strategy which generates
    │ │ │ │ │  mappings of dimension names to lengths (i.e. the size of the xarray object we
    │ │ │ │ │  want). This particular strategy will always generate an x dimension of length
    │ │ │ │ │  2, and a y dimension of length either 3 or 4, and will sometimes also generate
    │ │ │ │ │  a z dimension of length 2. By feeding this strategy for dictionaries into the
    │ │ │ │ │  dims argument of xarray’s variables() strategy, we can generate arbitrary
    │ │ │ │ │ @@ -309,38 +295,80 @@
    │ │ │ │ │     ....:     array_strategy_fn=xps.arrays,
    │ │ │ │ │     ....:     dtype=xps.scalar_dtypes(),
    │ │ │ │ │     ....: )
    │ │ │ │ │     ....:
    │ │ │ │ │  
    │ │ │ │ │  In [32]: xp_variables.example()
    │ │ │ │ │  Out[32]:
    │ │ │ │ │ - Size: 1B
    │ │ │ │ │ -array([False])
    │ │ │ │ │ + Size: 36B
    │ │ │ │ │ +array([[[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [138]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [ 37],
    │ │ │ │ │ +        [140]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140]],
    │ │ │ │ │ +...
    │ │ │ │ │ +       [[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [ 74],
    │ │ │ │ │ +        [169],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140]],
    │ │ │ │ │ +
    │ │ │ │ │ +       [[140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [ 60],
    │ │ │ │ │ +        [140],
    │ │ │ │ │ +        [213]]], shape=(6, 6, 1), dtype=uint8)
    │ │ │ │ │ +Attributes:
    │ │ │ │ │ +    ŰūŠeŐ:    True
    │ │ │ │ │  Another array API-compliant duck array library would replace the import, e.g.
    │ │ │ │ │  import cupy as cp instead.
    │ │ │ │ │  ******** TTeessttiinngg oovveerr SSuubbsseettss ooff DDiimmeennssiioonnss_?¶ ********
    │ │ │ │ │  A common task when testing xarray user code is checking that your function
    │ │ │ │ │  works for all valid input dimensions. We can chain strategies to achieve this,
    │ │ │ │ │  for which the helper strategy unique_subset_of() is useful.
    │ │ │ │ │  It works for lists of dimension names
    │ │ │ │ │  In [33]: dims = ["x", "y", "z"]
    │ │ │ │ │  
    │ │ │ │ │  In [34]: xrst.unique_subset_of(dims).example()
    │ │ │ │ │ -Out[34]: ['x', 'z', 'y']
    │ │ │ │ │ +Out[34]: []
    │ │ │ │ │  
    │ │ │ │ │  In [35]: xrst.unique_subset_of(dims).example()
    │ │ │ │ │  Out[35]: ['y']
    │ │ │ │ │  as well as for mappings of dimension names to sizes
    │ │ │ │ │  In [36]: dim_sizes = {"x": 2, "y": 3, "z": 4}
    │ │ │ │ │  
    │ │ │ │ │  In [37]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ │ -Out[37]: {'z': 4, 'y': 3, 'x': 2}
    │ │ │ │ │ +Out[37]: {'y': 3, 'z': 4, 'x': 2}
    │ │ │ │ │  
    │ │ │ │ │  In [38]: xrst.unique_subset_of(dim_sizes).example()
    │ │ │ │ │ -Out[38]: {'x': 2}
    │ │ │ │ │ +Out[38]: {'x': 2, 'y': 3, 'z': 4}
    │ │ │ │ │  This is useful because operations like reductions can be performed over any
    │ │ │ │ │  subset of the xarray object’s dimensions. For example we can write a pytest
    │ │ │ │ │  test that tests that a reduction gives the expected result when applying that
    │ │ │ │ │  reduction along any possible valid subset of the Variable’s dimensions.
    │ │ │ │ │  import numpy.testing as npt
    │ │ │ ├── ./usr/share/doc/python-xarray-doc/html/whats-new.html
    │ │ │ │ @@ -8155,15 +8155,15 @@
    │ │ │ │  
  • New xray.Dataset.where method for masking xray objects according │ │ │ │ to some criteria. This works particularly well with multi-dimensional data:

    │ │ │ │
    In [45]: ds = xray.Dataset(coords={"x": range(100), "y": range(100)})
    │ │ │ │  
    │ │ │ │  In [46]: ds["distance"] = np.sqrt(ds.x**2 + ds.y**2)
    │ │ │ │  
    │ │ │ │  In [47]: ds.distance.where(ds.distance < 100).plot()
    │ │ │ │ -Out[47]: <matplotlib.collections.QuadMesh at 0x7f6025e1c2d0>
    │ │ │ │ +Out[47]: <matplotlib.collections.QuadMesh at 0x7f34ab66b4d0>
    │ │ │ │  
    │ │ │ │
    │ │ │ │ _images/where_example.png │ │ │ │ │ │ │ │
  • │ │ │ │
  • Added new methods xray.DataArray.diff and xray.Dataset.diff │ │ │ │ for finite difference calculations along a given axis.

  • │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -5262,15 +5262,15 @@ │ │ │ │ │ * New xray.Dataset.where method for masking xray objects according to some │ │ │ │ │ criteria. This works particularly well with multi-dimensional data: │ │ │ │ │ In [45]: ds = xray.Dataset(coords={"x": range(100), "y": range(100)}) │ │ │ │ │ │ │ │ │ │ In [46]: ds["distance"] = np.sqrt(ds.x**2 + ds.y**2) │ │ │ │ │ │ │ │ │ │ In [47]: ds.distance.where(ds.distance < 100).plot() │ │ │ │ │ - Out[47]: │ │ │ │ │ + Out[47]: │ │ │ │ │ _[___i_m_a_g_e_s_/_w_h_e_r_e___e_x_a_m_p_l_e_._p_n_g_] │ │ │ │ │ * Added new methods xray.DataArray.diff and xray.Dataset.diff for finite │ │ │ │ │ difference calculations along a given axis. │ │ │ │ │ * New xray.DataArray.to_masked_array convenience method for returning a │ │ │ │ │ numpy.ma.MaskedArray. │ │ │ │ │ In [48]: da = xray.DataArray(np.random.random_sample(size=(5, 4)))